recoilmeblog

@recoilmeblog Нравится 0
Это ваш канал? Подтвердите владение для дополнительных возможностей

Мой личный блог о стартапах, телеграм и не только.
Сделан на @blogfatherbot
Телеграм: @recoilme
Гео и язык канала
Россия, Русский


Гео канала
Россия
Язык канала
Русский
Категория
Бизнес и стартапы
Добавлен в индекс
19.11.2017 13:12
реклама
TGAlertsBot
Мониторинг упоминаний ключевых слов в каналах и чатах.
Telegram Analytics
Подписывайся, чтобы быть в курсе новостей TGStat.
SearcheeBot
Ваш гид в мире Telegram-каналов
105
подписчиков
~0
охват 1 публикации
~11
дневной охват
N/A
постов в день
N/A
ERR %
0.05
индекс цитирования
Репосты и упоминания канала
3 упоминаний канала
1 упоминаний публикаций
5 репостов
BotShare
BotShare
место того кота
Узко-компьютерное
memefeed🔥
Каналы, которые цитирует @recoilmeblog
Хемингуэй позвонит
Продюсер брендов
Медиаборщ!
crazydoge
Comics news
crazydoge
Артемий Лебедев
crazydoge
Последние публикации
Удалённые
С упоминаниями
Репосты
recoilmeblog 4 Jun, 11:13
https://github.com/zserge/nanonn

Нано нейросеть на 5 языках. Каждая имплементация занимает от 100 до 200 строк кода, тем не менее это полноценная нейросеть. Пример распознования цифр - в комплекте - https://zserge.com/nanonn/js/mnist.html

Если всегда хотели заглянуть под капот нейросетей, но боялись охуеть - то этот проект для вас)
recoilmeblog 14 Feb, 14:04
recoilmeblog 10 Feb, 11:51
recoilmeblog 4 Feb, 13:18
Интересное на гитхаб

Коллекция минималистичных заточенных на скорость/память утилит под веб, от сервера до парсеров/логов Похоже чувак пишет свой уютненький гоу (~10 звезд): https://github.com/aerogo

Интересный язык от автора этих утилит (30 звезд, сравните с V, например, у которого звезд тысячи, а упр памятью типа нет совсем) https://github.com/akyoto/q

Протокол + библиотека для микровервисов, от чувака из Figma (там просто много клевых пацанов вокает, 900 старс) https://github.com/rsms/gotalk

Битторрент клиент, интересна не столько реализация, сколько описание процесса создания https://blog.jse.li/posts/torrent/

Рекомендации UBCF/IBCF (звезд - 1) https://github.com/timdrijvers/recommendation

Протокол, да Вы его знаете, но он классный и мне нравятся идеи в нем, например типы str8, str16, bin32 и тп https://github.com/msgpack/msgpack

Еще один протокол, которые мне понравился: https://docs.nats.io/nats-protocol/nats-protocol - вообще nats - это разухабистая pub/sub система c failover, я не пробовал но уверен что любое решение будет эффективней любимой всеми кафки
Читать полностью
recoilmeblog 24 Jan, 13:00
Про все остальное читайте здесь)
https://habr.com/ru/company/mailru/blog/369471/
recoilmeblog 24 Jan, 11:25
Рекомендательные алгоритмы на примере диалогов с Винни-Пухом, продолжение

Мапка характеристик - в вектора и сравниваем. Ну типа чиселки пермножаются друг с другом, берутся корни там, считаются какие то площади/гипотенузы - это не важно. Чиселки немножко ебутся друг с другом - и на выходе - получается чиселка. Чем она больше - тем больше вектор а похож на вектор б, понятна? Я просто показываю что внутри - всратая арифметика. Эта - называется cosine similarity. Ну типа молоток, которым забивают гвозди. Есть другой молоток - мера похожести Жаккара. Или молот - наивный Баес. Но внутри - всратая арифметика. Важна не арифметика - а понимание принципов.

Олл хайль гари потер

Помните мы говорили о том, что все любят гарри потера? Это проблема - так как его все любят - он будет всем рекомендоваться, но все его уже смотрели. Почему это хуево. Помните самый первый пример с кубиком и шаром и яблоком? Все эти три тела - твердые. Характеристика твердости не влияет на меру похожести, так как встречается везде как и гарри потер. Ну или по другому, когда вы в магазине на весах картоху взвешиваете, там под цифрой один - всегда бананы, ибо все любят бананы. И если вы ищете что покупают с водочкой, чтобы этот товар рядом положить - с водочкой берут бананы. Ну потому что их всегда берут. Так вот, чтобы рекомендовать пиздечивские вещи, а не говно типа бананов, нам надо вес часто встречающихся характеристик - применьшить. Другими словами - написать напротив гарри потера не адин, а 0.1 . Эта кстати на первый взгляд всратая идея - позволила выиграть миллион долларов в нетфликс прайз одному чуваку когда то. Для этого надо посчитать частотность характеристики и взять обратную от частоты характеристику. Ну типа чем чаще - тем меньше влияние. Это еще одна встратая формула TF/IDF Примерно так:
func tfidf(termFreq, docTerms, termDocs, N int) float64 {
tf := float64(termFreq) / float64(docTerms)
idf := math.Log(float64(1+N) / (1 + float64(termDocs)))
return tf * idf
}
termFreq - как часто встречается docTerms - в скольки документах. Опять всратая арифметика.

матрицы

Ну, ок рекомендации есть сравнение по характеристикам, но кубики любой дебил сравнит, а как сравнить например текст или картинку? Что насчет более сложных штук?

Надо просто привести их к матрице. Например есть два текста:

текст1: папа олень
текст2: мама олень

Характеристика этого текста - слова - папа, мама, олень. Рисуем такую же табличку, по столбика слова, по строчкам номера текстов. Делаем tf/idf - чтобы понизить значение предлогов и считаем косинусную похожесть. Те все сводится к веторам, матрицам и арифметике. Так в чем же сложность? Во первых - матрица получается ебически большой. Во вторых - сравнение каждой строчки с каждой - это цикл циклов (вложенный цикл) Чтобы упростить - матрицы упрощают, ну, типа декомпозируют. Есть например алгоритм svd - он раскладывает одну большую матрицу на несколько маленьких. Ну или есть так называемые разряженные матрицы (sparse/density) это когда данные хранятся некими триплетами и получается компактнее. Ну вобщем, проблема рекомендательных систем не столько в сложности алгоритмов, сколько в сложности их расчетов на больших данных.

Что дальше?

Мы в нашей матрице фильмов писали - фильм / юзер/ нравится или неизвестно. Потом добавляли нормирование по частоте и там была уже какая то чиселки типа нецелая. Но вообще там могла быть например оценка, типа 5 звездочек. Которая умножается на частотность. Ну то есть, можно потихоньку усложнять матрицу как в глубину (точностями оценки характеристик). А можно и в ширину. Например можно добавить в колоночки пол юзера, возраст, наличие высшего образования. СоцДем так называемый. Звучит как бред, но мужикам не интересен контент каким кремом мазать сиськи после операции по увеличению груди. Это типа фичи - которые могут повысить точность при недостаточности оценок, выявив похожие штуки. Например, есть ли у юзера колонка Алекса от амазон - тоже может быть фичей в том списке.

Ну, пока хватит
Читать полностью
recoilmeblog 24 Jan, 11:20
Рекомендательные алгоритмы на примере диалогов с Винни-Пухом

Рекомендательные системы, нейросети, машинленинг, искусственный интеллект - хрень окутанная туманом терминов, которая воспринимаются как нечто сложное. Когда датасайнтист описывает их - это напоминает хреновый почерк врача - нихрена непонятно, то ли цианид принять то ли аспирин. На самом деле это всратая арифметика. Пойдем от простого к сложному.

Поиск похожих штук

Возьмем ребенка. Дадим ему кубик-рубика, бильярдный шар и яблоко. И скажем - найди на чё похоже яблоко. Если он вам бильярдный шар - поздравляем, у вас растет датасайнтист! Разложим на множитили эту задачу, чтоб повторить его успех. У каждой штуки - есть характеристика. Я говорю штука, но имею ввиду любую хрень. Например человек - это тоже штука с характеристиками. И у каждой характеристики есть чиселка. Вернемся к яблокам. Яблока - твердое, яблоко - круглое. Шар твердый и круглый, а квадрат - квадратный, ну вы понели. Читобе понять что на что похоже - надо описать это что то набором характеристик и сравнить.

Продолжаем повышать планку

Такс, теперь найдем какой фильм вам понравится. Вы юзер1 - вам нравится хоббит туда обратно и гарри потер, например. Всем нравится гарри потер, но мы вернемся к этой проблеме позже. Читобе понять какой фильм тебе, юзер1 - понравится - надо найти похожих на тебя юзеров. Ну те юзер это штука из примера выше, а что ему нравится (какие фильмы) - это характеристики штуки из примера выше. Эта хрень в целом - называется датасет) Запишем его в удобном для лупоглазанья виде (csv):
_ Гарри_Поттер ХоббитНжд ХоббитПуст. ХроникиНарн. Сердце_дракона
a, 1, 1, 1, 0, 0
b, 1, 1, 1, 0, 0
c, 1, 0, 0, 1, 0
d, 1, 0, 1, 0, 0
e, 1, 1, 0, 0, 1
a, b, c - это юзеры. Теперь - вы тот ребенок. Я говорю - найди юзера похожего на «a». Внимательно смотрим на строчечки - и ищем похожие.

a и b - адинаковы - бинго, но это не даст нам рекомендаций. d - похож на a но там дырка в хоббите нежданное путешествие. Остается e. Помимо гарри потера и хоббита e нравится Сердце дракона. Юзеру а стоит посмотреть сердце дракона. Поздравлямба - мы узнали алгоримт «лупоглазим глазками». В датасаенс он называется User-Based Collaborative Filtering (UB-CF), ищем похожего юзера. Теперь смотрите по вертикали, на столбики. Видите что столбик Хоббит нежданное путешествие похож Хоббит пустошь смауга, визуально? Это называется Item-Based Collaborative Filtering (IB-CF), похожие итемы. Но на самом деле всё сводится к поиску похожих штук. То столбиков, то строчечек. Просто сперва надо выписать в табличку, которая называется матрица - блаблабла.

А - Арифметика

Строчечки, столбики - называюи вектор. Это немного путает, ну типа слово сложное. Но на самом деле, это просто массив чиселок. Итак, для того чтоб найти что строчечка a похожа на строчечку e - нам надо сравнить два вектора (звучит ебловато, понимаю). Для сравнения векторов - применяется формула косинусной похожести. Сейчас будет код:

//Cosine return cosine similarity
func Cosine(a, b map[string]float64) (sim float64) {
vec1, vec2 := vector(a, b)

var product, squareSumA, squareSumB float64

for i, v := range vec1 {

product += v * vec2[i]
squareSumA += v * v
squareSumB += vec2[i] * vec2[i]
}

if squareSumA == 0 || squareSumB == 0 {
return 0
}

return product / (math.Sqrt(squareSumA) * math.Sqrt(squareSumB))
}
Читать полностью
recoilmeblog 9 Jan, 13:45
Что не так со статистикой: https://medium.com/@sergey_57776/300-%D0%BB%D0%B5%D1%82-%D0%B2-%D0%B8%D1%81%D0%BA%D0%B0%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8-80d15ea8c6b5

Много интересных выводов можно сделать из вышеозначенной статьи. Начиная от стратегий инвестирования, до интерпретации результатов а/б тестов и стОит ли играть в казино
recoilmeblog 31 Dec 2019, 21:27
recoilmeblog 27 Dec 2019, 11:25
Attached file
recoilmeblog 27 Dec 2019, 09:44
Ребята, Питон сейчас в тренде. Все нейросети пишут на питоне. Питон на хайпе, ребята. И если вы не хотите оказаться на обочине жизни, подписывайтесь на канал: Что в Питоне сделано правильно: @whatsrightinpython
recoilmeblog 27 Dec 2019, 09:00
recoilmeblog 26 Dec 2019, 15:18
О! это реакт в пару сотен строк - https://github.com/zserge/o
Здесь подробнее: https://zserge.com/posts/worst-react-ever/
У него кстати много интересных проектов - https://github.com/zserge
recoilmeblog 25 Dec 2019, 12:32
Не прошедшие в шотлист домены, вдруг кому то понравится
Опрос
  • nukeapp
  • cryptorasta
  • relaxmidweek
  • subslice
  • roboticinstructions
  • cryptovegetable
  • wexactly
  • h0x0
  • unocappucino
  • biomads
17 голосов
recoilmeblog 25 Dec 2019, 12:23
Хочу купить домен (под что пока не знаю, нужно чтото универсальное) Помогите определиться с выбором, пожалуйста)
Опрос
  • sosmio
  • bibibob
  • ezwtf
  • mindcats
  • btwblog
  • www4me
  • io111
  • alphapollo
  • modernhere
  • about400
25 голосов
recoilmeblog 23 Dec 2019, 10:41
https://gioui.org/ - практически готовый флаттер на гоу. Полгода -год - и будет готов полностью. Простую ленту/блог/почтовый клиент или браузер - можно начинать делать уже сейчас. Прекрасное качество рендеренига. Отличная производительность. Тьфу/тьфу чтоб не сглазить. Неужели я смогу сказать «пока» яве?
recoilmeblog 19 Dec 2019, 19:01
Тайные виды на гору Фудзи - Пелевина, крайне занимателен. Ключевые слова: стартап, олигарх, шлюшона, буддизм и феминизм. Интересно было бы взвесить по TF/IDF важность тегов но кому это надо? Слушается легко и интересно. Особенно понравилось про буддизм, я в нем не разбираюсь и возможно по этому было особенно интересно, хотя наверняка бОльшая часть и выдумка.

https://github.com/recoilme/proxyhouse - прокси сервер, который разгрузит ваш кликхаус. Миллионы реквестов/мин - изи. Больше не пуляли - ибо канун нового года и все ссут сложить все яйца в мою новую корзину( Из особенностей, крайне устойчив к ошибкам. Написан, правда, на скорую руку ибо «припекло»

https://github.com/faiface/gui - библиотеки для рисования ГУИ на гоу - как единороги. Все в них верят но никто пока не катался. Эта, выглядит рассово верным решением, но по сути лишь каркас для разработки. Но выглядит прочной.
Читать полностью
recoilmeblog 18 Dec 2019, 15:15
Классная статья как писать удобные API на go: https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
recoilmeblog 13 Dec 2019, 10:49
Привет мир!

Пишу этот пост на сапоге убитого товарища, прямо с Data Clustering Contest (https://contest.com/data-clustering)

Эта битва датасайнтистов, пожалуй, более увлекательна чем финал игры престолов скажу я вам. Но это не точно, тк игру престолов я не смотрел. Итак, мы сечас на этапе сражения алгоритмов. Я один из тех кто пришел на перестрелку с ножом) Писал на чистом гоу, без библиотек. Красавчег!

Многие приехали на танках (тензорфлоу/нейросети и иже с ними)
С другой стороны «импорт пандас» датасаентологи, с автоматами и пулеметами

Ну что я вам могу сказать, среднее время жизни танка в современном бою - несколько минут.
Большинство заклинило еще на подъезде к месту сражения: https://entry1182-dcround1.usercontent.dev/

Следом слегли пулеметчики:
https://entry1235-dcround1.usercontent.dev/
https://entry1236-dcround1.usercontent.dev/
https://entry1208-dcround1.usercontent.dev/
https://entry1206-dcround1.usercontent.dev/

Процентов наверное 50 - не уложились в таймаут, отведенный на расчет. Хотя он, более чем лояльный (минута на 1000 документов) Ну и походу на поле остались в основном рукопашники) Сишники, гоферы, растовчане? и прочяя нечисть.

Ну толковые питонисты возможно тоже проползли, там не видно на чем работающие решения. Вобщем кайф, отличный финал года
Читать полностью
recoilmeblog 15 Nov 2019, 12:44
Ненаписанный языг программирования "Превед!".

Концепция строк.

Во всех существующих ЯП я испытываю проблему с "прожорливостью" строк, во всех, кроме си. Там их тупо нет. Но возникает попоболь манипулирования с массивами чаров. Строка - это всегда структура, как правило с массивом букв и длинной строки. Структуры аллоцируются в куче, порождая громадный своп в процессе их эксплуатации и часто являются самым узким местом как по потреблению памяти, так и по производительности, будучи помещенными в бесконечный цикл, чтения из сокета, например. Также, операции взаимодействия с библиотеками написанными на си - порождают операции копирования из структур в массив и обратно, зачастую сводя на нет преимущество библиотеки на си. Например в гоу, я просто вынужден их (строк) избегать, для избегания проблемы аллокаций и GC. В паскале подошли к проблеме радикально, зарезервировав первый байт под длину строки, но ограничив максимальный размер строки 255 байтами. Я думаю истина может быть посередине. При операциях с числами, практика резервирования типов в зависимости от размерности числа - общераспространенна и никого не смущает. В большинстве языков мы имеем int8, int16..int64 - и это правильно, так как на миллионных картеджах каждый байт превращается в гигабайт. Суть моей идеи состоит в следующем:

- Мы храним информацию о размере строки - непосредственно в массиве char
- Мы сохраняем нулевой байт в конце строки, для избежания memcopy при передаче в си и обратно
- Таким образом мы существенно экономим память, за счет отказа от структур и имеем все преимущества структур

Как это реализовано. Строки бывают следующих типов string8, string16, string32 и string.
string - является 64 битной строкой, и для 64 битов мы опускаем разрядность ( по аналогии можно поступить с int)
Допустим я хочу записать строку 'hello', в типе данных string8 она будет закодирована как в паскале:
5hello\0
где: 5 - длина строки, uint8, это первый байт (8 бит), затем строка и нултерминейтед байт, чтобы при передачи в си - можно было передать адрес не нулевого, а первого чара, без дополнительных конвертаций.

В случае 64 битной строки - у нас будет зарезервировано 8 байт под размерность.

Аллоцировать же память я предлагаю степенями двойки, следующая степень двойки, в которую поместится этот массив. Те при аллокации массива под строку hello в string8 - нам необходимо аллоцировать 5+2= 7, 2^3=8
Почему мы выравниваем память? Захваченную память по мере высвобождения проще переиспользовать, если она выровнена по степеням. Допустим я захожу создать строку pole - если память от hello уже высвобождена - я могу зареюзать любой слот подходящего размера (8байт) в данном случае. Не рвя память на "куски/фрагменты". Ну и хранить размер деаллоцированный области можно компактно в одном байте(размер - 2^256).
Читать полностью