Skip to content

Instantly share code, notes, and snippets.

View fonov's full-sized avatar

Fonov Sergei fonov

View GitHub Profile
[
{
"name":"Lonesome Ridge Trail",
"id":1001,
"distance":4.5,
"difficulty":3,
"observations":[
{
"elevation":[
291.65263635636268,
@fonov
fonov / PhantomTypes.swift
Last active December 9, 2022 14:29
Demo of phantom types. Inspired by this article https://www.swiftbysundell.com/articles/phantom-types-in-swift/
// MARK: Phantom types
protocol Person {
var name: String { get set }
var position: String { get set }
func formatTitle() -> String
}
struct BasePerson<Character>: Person {
@fonov
fonov / api
Last active September 3, 2018 10:25
{
"contants": {
"a": 100,
"b": 200
},
"formulae": {
"formula1": "a+b"
},
"steps": [
// step 1
@fonov
fonov / gist:27f6d6c6cc332e872aaf34eb99977571
Created January 27, 2018 11:15
Пример рекламы ресторанов
Загородный ресторан %Название ресторана% – меню и цены на сайте!
20 мин. от Белгорода. Вкусные блюда и уютная атмосфера в ресторане "%Название ресторана%". Бронируйте!
Ресторан в Белгороде
Организация банкетов, свадеб и праздников в банкетном комплексе Салют!
Ресторан «%Название ресторана%» – Банкеты от 10 до 100 человек
Свадьба, корпоратив. Аренда зала бесплатно.
Ресторан в Белгороде на Конева! – «%Название ресторана%»!
adduser {name}
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
sudo npm install n -g
sudo n latest
node -v
sudo npm install pm2 -g
Формирование ссылки для авторизации
echo 'https://telegram.me/vkfollowersbot?start='.substr(sh1($_REQUEST['viewer_id'] . 'fonov'), 6).$_REQUEST['viewer_id']
Что мы делаем?
Берем vk id как СТРОКУ!!! и прибавляем к ней 'fonov'
ХЭШ от строки, первые 6 символов
И прибовляем к ней ид вк.
Ссылка Аркадия
https://telegram.me/vkfollowersbot?start=366717170147312
@fonov
fonov / gist:ddbef1f549834bf9cccdf903c0e111eb
Created December 3, 2016 21:06
MongoDB update or insert
// Это конструкция для того что бы обновить если есть, если нет то создать запись
collection.update({page: 'unicorns'}, {$inc: {hits: 1}}, {upsert: true}, (err, result) => {
});
protorunMenu(menuData, stop){
if(typeof menuData.title == 'undefined')
throw Error('titleis not set')
if(typeof menuData.menu == 'undefined')
throw Error('menu is not set')
const message = '<b>'+menuData.title+'</b>'+((typeof menuData.message == 'undefined') ? '' : '\n'+menuData.message)
var keyboard = [],
action = {}