🌴 Pattern Matching.
Знаете, вот эта штука с увеличенной скоростью паттерн матчинга становится для меня еще более загадочной.
Я только что прогнал оба варианта кода через Sharplab.io чтобы посмотреть какой шарповый код сгенерирует компилятор и знаете что, вот так он выглядит:
Вот так:
В целом ничего не поменялось, ну кроме разве что копирование переменной для тред-сейфности добавилось, ну и привидение к типу object. Наверное в этом и кроется вся загадка.🦆
#бенчмарки
Знаете, вот эта штука с увеличенной скоростью паттерн матчинга становится для меня еще более загадочной.
Я только что прогнал оба варианта кода через Sharplab.io чтобы посмотреть какой шарповый код сгенерирует компилятор и знаете что, вот так он выглядит:
Вот так:
public bool PatternMatchingExpressionScenario()
{
PersonRecord personRecord = person;
return (object)personRecord != null && personRecord.Name != null && personRecord.Age < 9;
}В целом ничего не поменялось, ну кроме разве что копирование переменной для тред-сейфности добавилось, ну и привидение к типу object. Наверное в этом и кроется вся загадка.
#бенчмарки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤓1
🌴 Pattern Matching 2: Паттерн-матчинг и тайны перфоманса.
Так, вроде докопался до сути. Если просто прикопать персону
То ничего не изменится. Но если добавить каст к объекту, то производительность выправится
🅰️А если долго смореть IL код, то (IL код начнет смотреть в ответ ) можно увидеть, что вот такой вариант, приведением к объекту приводит к тому, что объект person кладется на стек всего один раз, а в случае с отсутствием такого каста, при каждой проверке условия объект будет класться на стек заново. То есть в первом случае его положат на стек аж три раза, а во втором случае всего один.
Дело раскрыто, ducktective Димас удоляется на выходные.🦆
P.S.: И, да, какой же топовый инструмент sharplab.io! Без него в таком душном деле, как без рук. Всем советую.
#бенчмарки
Так, вроде докопался до сути. Если просто прикопать персону
var personCopy = person; [Benchmark]
public bool SimpleCodeScenario()
{
var personCopy = person;
return personCopy != null && personCopy.Name != null && personCopy.Age < 9;
}То ничего не изменится. Но если добавить каст к объекту, то производительность выправится
[Benchmark]
public bool SimpleCodeScenarioWithCast()
{
var personCopy = person;
return (object)personCopy != null && personCopy.Name != null && personCopy.Age < 9;
}🅰️А если долго смореть IL код, то (
Дело раскрыто, ducktective Димас удоляется на выходные.
P.S.: И, да, какой же топовый инструмент sharplab.io! Без него в таком душном деле, как без рук. Всем советую.
#бенчмарки
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉2👍1🤩1🌚1
Короче, у меня есть охуенная новость, которую я не могу сдержать.
Там всё как два пальца, но есть нюанс – примеры кода либо на ноде либо на питоне. Для бывалых не проблема, но для шарповых любителей – как минмум неудобство.
🅰️ Но не спешите прокрастинировать! Короче, сели вчера с Саней Коноваловым и в четыре руки запилили пример для оного туториала на шарпе! https://github.com/Undermove/openai-quickstart-csharp
Теперь ничто не остановит вас от изучения ChatGPT Api. Отмазок больше нет!
PS Есть одно маленькое но. Для взаимодействия с API используется бибилиотечка https://github.com/OkGoDoIt/OpenAI-API-dotnet которая пока что не поддерживает модель gpt3.5-turbo, но скоро её добавят – это дело одного вечера на самом деле и если не терпится, то можете форкнуться и добавить сами. ПР на добавление там уже висит и думаю, что на следующей неделе уже дойдет до релиза.
PPS Ну и втрепите звезду что ли моему репозиторчику, а мне будет притяно
PPPS Распространите 🗣
#openai #chatgpt
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2🤩1
Короче, я очень часто имею свое мнение, а посему дохера спорю. И в спорах я чаще всего остаюсь при своем мнении.
Весь последний год я потратил на то, чтобы научиться продвигать свои решения даже там, где меня
Сегодня прочитал историю чувака по имени Нараян Писапати, который в Индии в городе Хайдарабаде обнаружил, что уровень грунтовых вод стал охуеть как снижаться.
Дело было в том, что фермеры, которые всю жизнь выращивали просо, вдруг стали выращивать рис. Оно и понятно, ибо рис стоил в 60 раз дороже, а государство щедро субсидировало электричество для юных натуралистов.
Будучи экологом, Нараян забил тревогу, но окружающие забили на Нараяна. Он попытался продвигать свои доклады через политиков, но это тоже не возымело успеха.
И вот тут Нараян показал, что не лыком шит! Вместо того, чтобы обвинить весь мир в непонимании, он подумал, а что если каким-то образом поднять спрос на просо?
В итоге он убил целый выводок зайцев одним выстрелом: придумал одноразовые приборы из просо. И пластиковое загрязнение снизил и грунтовые воды вернул на место и деньжат подзаработал.
Короче, хочу мыслить, как Нараян!
История взята из статьи: "Воплощение прорывных идей" Сирил Буке, Жан-Луи Барсу, Майкл Вейд.
#harvardbusinessreview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2🤔2
Блин, простите, сейчас будет несмешная штука, но я не могу её не запостить.
Если у вас у программистов есть Дональд Кнут, то почему нет Дональда Пряника? И, если такие здоровенные книги пишет Дональд Кнут, то какие тогда книги мог бы писать Дональд Пряник?
Простите еще раз. 🍪
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚5🦄2
Не знаю как вы, а я обожаю кофе. Злоупотребляю эспрессо, варю колд-брю, чтобы штырило и прошу бариста намутить мне самую горькую кофеиновую таблетку.
Всю свою жизнь я думал, что эспрессо это самый лютый способ заварки, но челики с канала Russian Barista тут сделали фееричный видос, в котором прогнали разные способы заварки через лабораторию и посмотрели что к чему.
🅰️ В общем, я сделал для вас таблицу, чтобы вы не тратили времени на просмотр видоса. На первом месте кофеиновый король – гейзерная кофеварка
1️⃣ Гейзерная кофеварка 15,34 мг кофеина на 100 г кофе (почему-то в этом пункте измерение ведется не так как в остальных, да к тому же в видосе это значение меняется на граммы, короче, намудрил монтажер что-то)
2️⃣ Американо полным проливом 11,07 мг на 1 грамм зерна
3️⃣ Суперавтоматическая кофемашина 10,56 на 1 г зерна (они тестили в какой-то рожковой типа такой)
4️⃣ Лунго примерно как суперавтоматическая кофемашина (авторы не показали результат, видимо его сожрала реклама)
5️⃣ Фильтр-кофе 9,68 мг на 1 г зерна
6️⃣ Аэропресс 9,21 мг на 1 г зерна
7️⃣ Колд-брю 8,31 на 1 г зерна
8️⃣ Френч-пресс 7,48 мг на 1 г зерна
9️⃣ Эспрессо 7,33 мг на 1 г зерна
🔟 Ристретто 6,34 мг на 1 г зерна
По факту, эспрессо – это безалкогольное пиво от мира кофе. Значит не такой уж я и кофеман! Офигенно!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7😈1
🐑 Читшиты для прометеуса и не только.
Намедни впиливали с Саней Коноваловым метрики для Тралебота в графане и, пока копались, нашли неплохой чит-шит для запросов в Prometheus.
Читшит годный, покрывает много базовых метрик (да что уж там, покрывает больше, чем мне нужно!).
🅰️ Я попользовался, пошел ставить звезду на гитхабе и увидел, что там так-то много еще годных читшитов. Там есть и по докеру и по куберу и по MySQL. Короче, довольно много быстрых и полезных подсказок. Горячо рекомендую.
Кстати, если сравнивать с самыми зазвездившимися репозиториями по топику cheetsheets, то этот мне зашел больше всех прям. Может просто по оформлению лёг как раз на мои потребности.
Абсолютно без стыда и зазрения совести шарахнул репозиторию звезду🙂 (если вам понравится, то тоже не стесняйтесь сыпать звездами) , занес в закладочки.
#инструменты
Намедни впиливали с Саней Коноваловым метрики для Тралебота в графане и, пока копались, нашли неплохой чит-шит для запросов в Prometheus.
Читшит годный, покрывает много базовых метрик (да что уж там, покрывает больше, чем мне нужно!).
🅰️ Я попользовался, пошел ставить звезду на гитхабе и увидел, что там так-то много еще годных читшитов. Там есть и по докеру и по куберу и по MySQL. Короче, довольно много быстрых и полезных подсказок. Горячо рекомендую.
Кстати, если сравнивать с самыми зазвездившимися репозиториями по топику cheetsheets, то этот мне зашел больше всех прям. Может просто по оформлению лёг как раз на мои потребности.
Абсолютно без стыда и зазрения совести шарахнул репозиторию звезду
#инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🤩1
Делаю для тралебота небольшую систему достижений.
Пытаюсь найти, какие вообще примеры систем достижений уже существуют.
Иииииии…
Там есть кусок, от которого я аж привзвизгнул, как адский подсвинок:
The foundation for our data collection was over 1000 hours of participant observations of playing 9 games that have achievements in the Steam platform (www.steamcommunity.com), which facilitates the use of achievements for some 100 games at the time of writing.
То есть звучит так, что чуваки играли исключительно беспрестрасно и в научных целях. Мучались, бедолаги, но продолжали наблюдать, как кто-то получает ачивки.
Итого: Может показаться, что это бесполезная работа. Чисто, чтоб зачёт поставили. Но для меня как минимум было полезно для ознакомления с базовыми понятиями системы достижений: Trigger, Multiplier, Conditions, Rewards и так далее. Какие-то были очевидными, какие-то не очень. Но в любом случае, круто!
На картинке, схема из второй работы, где архитектура ачивок расписана подробнее.
#systemdesign
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🏆3❤🔥1
Короче, тут пошла такая пьянка, что все пишут и говорят про то, что ChatGPT может. И порой люди дают этой штуке бОльший кредит доверия, чем она заслуживает.
Поэтому я тут напишу о том, чего эта штука не может, почему так происходит и напишу, какие есть пути решения этих проблем (если это конечно вообще проблемы).
🐺 Если вы хотите разобраться в том, как работает ChatGPT и не боитесь математики, то у Стивена Вольфарама вышла большая статья о том, как работает ChatGPT.
Для тех же кто боится математики, я в серии мини-постов расскажу обо всём на пальцах, но буду ссылаться на статью Стивена Вольфрама.
☎️ Итак, начнем с того, что эта штука не может выдать вам список телефонов всех страховых компаний Батуми.
Для этого просто зададим этот вопрос в ChatGPT дважды.
В первом запросе компания GPI Holding имеет один адрес и номер телефона, а во втором она уже переехала в новое здание и сменила номер. То же самое произошло с компанией Aldagi BCI. Если вы погенерируете ещё немного, то она будет каждый раз генерировать всё новые и новые значения. В целом похожие друг на друга, но часто с небольшими отличиями.
Наверняка у вас возникнет возражение "Сеть обучена на данных до 2021 года", и вы правы, но ключевое слово здесь "обучена", а не "знает".
И это не баг, а фича и она кроется в самом названии проекта: Generative Pretrained Model (или как мы привыкли GPT).
То есть сеть может хорошо ГЕНЕРИРОВАТЬ, как могли бы выглядеть названия и телефоны страховых компаний в Батуми, но она не идет в какую-то невероятную базу внутри своих 100 гигабайт и не ищет там данные. Как же она делает это я напишу в следующих постах.
#chatgpt
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡3🌚1
Это изображение первого сервера, на котором запускался ChatGPT. И я не шучу! На Nokia 3310 был настоящий прародитель сегодняшнего хайпоносца, а именно движок текстовых подсказок Т9.
В чём суть T9?
Мы берем три буквы, к примеру "стр"
У нас есть словарь из слов, начинающихся на эти три буквы:
Страх
Страница
Страна
Строка
Стритбол
Телефон пытался предложить продолжение слова, которое набирает пользователь и продолжить его автоматически чтобы сократить время ввода.
❓Как телефону догадаться, какое слово пользователь хочет ввести? Есть несколько способов.
Один из таких – взять языковой корпус и вычислить частоту употребляемости каждого из слов и выбирать самое употребляемое. Я тут сам выставил частоту употребляемости чисто для иллюстрации, но, думаю, суть вы уловили:
Страх 60%
Страница 70%
Страна 50%
Строка 55%
Стритбол 10%
Получается, что слово страница самое употребимое, мы его и предлагаем. Но что если пользователь баскетболист? Не всё время же подставлять ему строку, если он постоянно зовёт друзей играть в стритбол? (хотя Т9 этим грешил, чем нагенерил кучу мемов в моей жизни)
Мы можем запоминать выбор пользователя и вносить поправки в нашу таблицу. Скажем, накидывать по 20% после каждого введенного стритбола от пользователя. И со временем у стритбол у нас поднимется с колен до вершин списка.
Так вот. Что мы тут имеем? Мы имеем небольшую модель, в которой есть 6 слов и 1 нейрон, который мы постепенно тренируем выдавать нам слово Стритбол.
🅰️ Вот эти процентики напротив каждого слова, это по сути коэффициенты. Коэффициенты это и есть то из чего состоит модель в своей сути. То есть, когда мы говорим, что ChatGPT весит 100 Гб и содержит 175 миллиардов записей, это значит, что это текстовый файл в котором записано 175 миллиардов вот таких вот процентиков:
Страх 60%
Страница 70%
Страна 50%
Строка 55%
Стритбол 10%
Естественно не всё так просто. В следующей части я попытаюсь на пальцах объяснить, как это улучшить так, чтобы можно было генерить целые тексты, пусть и бессвязные, но похожие на правду.
#chatgpt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1😍1
У меня есть небольшой триггер, который помогает мне понять, что я глобально устаю, а как следствие начинаю выгорать.
Этот перерыв дает очень хороший эффект – позволяет скипнуть все тревоги, которые успели скопиться за день и начали отвлекать от задачи. Ну и бодрит лучше чем кофе, из-за того что солнечный свет (пусть даже и за облаками) предназначен для того чтобы бодрить.
После этого перерыва работа делается объективно быстрее (коммиты появляются чаще). Заподлянка в том, что субъективно кажется, что ничего особо не меняется. "Ну пришла какая-то мысль в голову сразу, как сел за клавиатуру, а не через три часа, ну и что тут такого? Просто сегодня я в форме." – кажется мне.
Несмотря на то что я понимаю пользу, такой перерыв бывает очень и очень сложно сделать, ибо прям перед ним появляется ощущение "вот сейчас еще одину строчку поправлю и пойду". А там, глядишь и весь час на перерыв бездарно проЙОбан в попытке выдавить из себя коммит по капле.
🅰️ И вот мой триггер: если я начинаю пропускать свои перерывы, значит я глобально так заебался. Потому что уже не вижу очевидного – если сейчас сделаю перерыв, то выдавлю из себя коммит быстрее, чем если перерыв не сделаю.
Это как в эксперименте с детьми и конфетами. Одну сейчас, или две через час? Чем сильнее ты устаешь глобально, тем сложнее врубить рациональность, и проще поддаться на искушение сделать еще одну мааааааленькую правочку, чтоб тест позеленить.
В общем, поделился с вами триггером, вдруг и вам поможет. Успех, конечно не гарантирован, но мало ли!
#опыт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤2
ChatGPT развивается так быстро, что пока я писал эту статью про то, чего он не может, чуваки из OpenAI как раз выкатили штуку, которая как раз закроет эту немогучесть. И эта штука, это зарелизившиеся намедни плагины.
Хотел завершить цикл статьёй про то, что можно сделать, чтобы номера телефонов страховых компаний всё же были актуальны. То есть как делать факт-чекинг в справочниках, и подклеивать в сгенерированный ответ актуальные данные.
Думал рассказать, как это можно сделать кустарно, но вот теперь это стало прям встроенной фичей.
Короче. Я всё равно доведу цикл до конца, и просто дорасскажу, как работают такие штуки в своём базовом принципе, который вряд ли поменяется от модели к модели.
#chatgpt
Please open Telegram to view this post
VIEW IN TELEGRAM
Openai
ChatGPT plugins
We’ve implemented initial support for plugins in ChatGPT. Plugins are tools designed specifically for language models with safety as a core principle, and help ChatGPT access up-to-date information, run computations, or use third-party services.
👏1🤩1
Просто хочу, чтобы это было лентой,а не какой-то ссылкой на пост. Но если вдруг кому удобнее в формате поста, то я вот тут в телеграфе затащил.
Но там нет таких охуенных анимированных смайликов, а без них как бы никак!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Сегодня попытаюсь объяснить, что такое нейрон.
По своей сути это маленькая настолка с набором правил. На входе мы даем набор цифр. Обрабатываем их по правилам этой настолки, а на выходе мы получаем то, чему эти цифры соответствуют.
Давайте рассмотрим, как же работает простейший нейрон.
Допустим, мы хотим натренировать нейрон отличать жуков и гусениц. Как это сделать? Оцифруем тварей – будем отличать по длине и ширине! Гусеницы обычно длинные и узкие, а жуки обычно примерно толстые и не очень длинные (
Допустим у нас есть такой датасет:
Длина Ширина
Жук: 1 3
Гусеница: 3 1
Вынесем наш датасет на график:
Please open Telegram to view this post
VIEW IN TELEGRAM
Чтобы отделить жука от гусеницы, мы можем провести линию между ними. Всё что будет выше этой линии, будет гусеницей, а всё что ниже – жуком.
Перекладывая язык математики. Вместо слова длина я тут напишу Y а вместо слова ширина я напишу X:
Мы проводим линию:
y = k*x + b
Если мы хотим провести линию ровно посередине, то k = 1, b = 0:
y = x
Перекладывая язык математики. Вместо слова длина я тут напишу Y а вместо слова ширина я напишу X:
Мы проводим линию:
y = k*x + b
Если мы хотим провести линию ровно посередине, то k = 1, b = 0:
y = x
Ну и соответственно правила нашей настолки:
1) Если точка лежит ниже линии (ширина больше длины): x > y, то это жук
2) Если точка лежит выше линии: (ширина меньше длины): x < y, то это гусеница
🅰️ Итого у нас получился простой нейрон. Мы можем прогнать через него почти любые сочетания длины и ширины и получить ответ жук это или гусеница!
К примеру: длина (Y) 100 ширина (Х): 5
Засовываем в нашу настолку:
5 > 100? Нет – значит это не жук.
5 < 100? Да – значит это гусеница.
Настолка выдает ответ:
Ответ – это гусеница!🐛
Отлично у нас получился жукогусеничный нейрон! Но вот обучили мы его немного читерно👎 .
Точнее мы его вообще не обучали. Мы просто на глаз провели линию. А как эту же линию вычислить математически? Вот чуть дальше разберу и этот момент.
ЗЫ: Когда-то мне помогла книга Тарика Рашида "Создаём нейронную сеть". В ней максимально плавно рассказывается о том, как всё работает на базовом уровне. Книга из 264 страниц с картинками, как я люблю. Читается быстро, но лучше чтобы под рукой был комп, чтобы все примеры из книги можно было самому накодить. Этот пример взят из неё.
#chatgpt
1) Если точка лежит ниже линии (ширина больше длины): x > y, то это жук
2) Если точка лежит выше линии: (ширина меньше длины): x < y, то это гусеница
🅰️ Итого у нас получился простой нейрон. Мы можем прогнать через него почти любые сочетания длины и ширины и получить ответ жук это или гусеница!
К примеру: длина (Y) 100 ширина (Х): 5
Засовываем в нашу настолку:
5 > 100? Нет – значит это не жук.
5 < 100? Да – значит это гусеница.
Настолка выдает ответ:
Ответ – это гусеница!
Отлично у нас получился жукогусеничный нейрон! Но вот обучили мы его немного читерно
Точнее мы его вообще не обучали. Мы просто на глаз провели линию. А как эту же линию вычислить математически? Вот чуть дальше разберу и этот момент.
ЗЫ: Когда-то мне помогла книга Тарика Рашида "Создаём нейронную сеть". В ней максимально плавно рассказывается о том, как всё работает на базовом уровне. Книга из 264 страниц с картинками, как я люблю. Читается быстро, но лучше чтобы под рукой был комп, чтобы все примеры из книги можно было самому накодить. Этот пример взят из неё.
#chatgpt
Please open Telegram to view this post
VIEW IN TELEGRAM
OZON
Создаем нейронную сеть | Рашид Тарик купить на OZON по низкой цене (636944683)
Создаем нейронную сеть | Рашид Тарик – покупайте на OZON по выгодным ценам! Быстрая и бесплатная доставка, большой ассортимент, бонусы, рассрочка и кэшбэк. Распродажи, скидки и акции. Реальные отзывы покупателей. (636944683)
👍2🔥2❤🔥1
Короче, я всю жизнь бездумно вызывал ToList(). ХЗ почему. Наверное потому что когда-то один раз так сделал и дальше пошло по накатанной.
Но тут великолепный Арсений Кравченко :nice обратил луч внимания на то, что кажется надо бы об этом подумать. И я подумал, что действительно, а есть ли разница?
Воспользовался темплейтом для бенчамарков:
using System.Collections.Generic;
using System.Linq;
using BenchmarkDotNet.Attributes;
namespace ToListToArrayBenchmark;
[MemoryDiagnoser]
public class Benchmarks
{
[Benchmark]
public void Scenario1()
{
var array = GenerateInts().ToArray();
}
[Benchmark]
public void Scenario2()
{
var list = GenerateInts().ToList();
}
private static IEnumerable<int> GenerateInts()
{
for (var i = 0; i < 100; i++)
{
yield return i;
}
}
}
Получил результат:
По скорости:
Mean Scenario1: 801.7 ns
Mean Scenario2: 750.1 ns
По памяти:
Allocated Scenario1: 1.16 KB
Allocated Scenario2: 1.19 KB
🅰️
UPD: Великолепный Арсений в комментариях отметил, что всё не так эквипенисуально! Есть особенности связанные с тем, как растёт лист. Короче, я переобуваюсь и начинаю юзать ToArray и ToList более осмысленно!
#бенчмарки
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
C# Short Posts 🔞
Начни бенчмаркать уже сегодня!
У вас есть уникальная возможность обвинить меня в пиздобольстве!
Постом выше я писал, что вы можете сэкономить до 40% на сериализации. И кажется, что под таким постом нужны пруфы, Билли! Нам нужны пруфы!
Так вот, получите…
У вас есть уникальная возможность обвинить меня в пиздобольстве!
Постом выше я писал, что вы можете сэкономить до 40% на сериализации. И кажется, что под таким постом нужны пруфы, Билли! Нам нужны пруфы!
Так вот, получите…
👍5🔥1