В прошлом году у нас был $mol_meetup, а на этой неделе будет Гипер Митап!
Уже в эту пятницу вечером, 10 октября, где-то в Питере, сообщество Гипер Дев соберётся для обмена опытом разработки на отечественном фреймворке мирового уровня $mol и набросает карту захвата мирового господства максимально экологичными методами.
Приходи познакомиться с профессиональными $mol разработчиками, узнать про их масштабные проекты, прочувствовать вайб гаражных инноваций, и стать участником этой упоротой безбашенной движухи, совсем потерявшей берега. Даже если сам не разраб - экспертиза в других областях тоже ценна. Главное - чтобы глаза горели, а руки не боялись творить невозможное.
Собираешься прийти? Отметься в голосовалке на нашем форуме, чтобы мы понимали, какой размер помещения потребуется, чтобы было не слишком просторно.
Гипер Шары теперь умеют играть не только в Линии, но и вШахматы. Всё началось с идеи - а могут ли шары своими физиономиями подсказывать как они ходят? Оказалось, что очень даже могут. Их мнемоничность позволяет быстро освоить правила игры, даже совсем новичкам в шахматах.
Но есть одно но - в шахматах есть несколько весьма специфичных правил, к которым приделали костыли, нюансы которых даже гроссмейстеры не всегда понимают полностью: первый прыжок пешки на 2 клетки и рокировка нетронутого короля с ладьей. Фактически, эти правила позволяют в специфических случаях чуть ускорить игру, сделав несколько (полу)ходов за один, а в качестве костыля - возможность противнику вмешаться в эти полуходы задним числом.
А самая жесть заключается в том, что правила ходов зависят из-за этих костылей не только от текущего состояния поля, но и от истории прошлых ходов. Не надо так. Выпиливаем это легаси. Оно всё равно на суть игры влияет не сильно.
Ну и по мелочи: пешке нет смысла превращаться во что-то отличное от ферзя, а шахи и маты не имеют смысла - для конца игры достаточно завалить короля противника. Не заметил вовремя угрозы - проиграл.
Можно было бы взять готовую мега оптимизированную реализацию шахматной логики типа stockfish, но оно весит как самолёт. Я же хотел с шариками поиграть, а не на индикатор загрузки любоваться. Не надо так. Закатываем рукава.
Вводим функцию оценки состояния доски: каждая фигура имеет свою ценность, белые складываем, чёрные вычитаем, получаем баланс по фигурам. При равном балансе, выгоднее та позиция, где ты можешь сделать больше ходов, а противник - меньше.
Если перебирать вглубь, то мы всё время убьём на анализ сценария, который никогда не случится, а то и вообще уйдём в бесконечный цикл. Если перебирать вширь, то очень быстро вся память улетит в трубу. Нужен компромисс, который бы позволил получить первичную оценку возможных ходов, а потом итеративно улучшать её, погружаясь всё глубже, но не выедая всю память мироздания.
Пусть все состояния доски у нас образуют дерево. Введём функцию "подумать", которая рекурсивно идёт от текущего состояния по этому дереву, выбирая на каждом шаге лучший ход. Дойдя до листа дерева, она перебирает все возможные ходы на +1 уровень. После этого оценки состояний поднимаются до корня по принципу минимакс: один игрок максимизирует оценку, а другой минимизирует. Следующий вызов "думания" может пойти уже по другой ветке дерева, а значит старую ветку можно удалить из памяти, оставив лишь её оценку. И пока игрок думает над своим ходом, бот тоже "думает" гоняя анализ в фоновом цикле.
В результате получаем, что в памяти держится лишь текущий самый оптимальный для всех игроков сценарий и оценки его ответвлений. Этот сценарий постоянно мутирует, выбирая для каждого игрока всё более оптимальные ходы. И всё это счастье весом суммарно всего 6кб со всеми зависимостями.
А играть с ним - одно удовольствие. Он очень быстро просекает всякие многоходовочки, не совершая глупых ходов. Но при этом, чем быстрее играет пользователь, тем меньше у бота времени для глубокого анализа, а значит больше шансов его перехитрить. Но это довольно сложно. У меня пока не получилось.
Есть ли у нас тут мастера шах-фу, которые покажут этому примитивному автоботу, кто тут настоящий интеллект?
Гипер Лингвист - это двусторонний нейросетевой переводчик между 27 языками мира. Им удобно переводить тексты туда-сюда между родным языком и иноземным, выбирая наиболее подходящие формулировки.
Под капотом у него разные версии GPT4, поставляемые через GitHub Models, завёрнутые в $mol_github_model, который балансирует запросы по разным моделям и токенам, чтобы расширить бесплатные лимиты.
Я там захардкодил десяток токенов, чего хватит на 6К запросов в день. Кому не сложно помочь проекту - насоздавайте ещё десяток токенов со своего аккаунта, чтобы кратно расширить лимиты, и сделайте PR пришлите их мне. Эти токены дают доступ только к запуску моделей и ничего более. Только уберите ограничение по времени их действия, чтобы они вдруг не протухли.
Здравствуйте, меня зовут Дмитрий Карловский и у меня 24. Если у тебя больше - нам есть с тобой о чём поговорить.
Под капотом: самоорганизующаяся нейронная сеть, выполняющаяся на клиенте, которая строит модель поведения испытуемого. И по размеру этой модели определяется его уровень интеллекта.
В отличие от традиционных IQ тестов, тут шкала абсолютная: от простейшего тупого планктона, до креативного глубоко рефлексирующего мегамозга. А по середине между ними - нулевая гипотеза - святой непредсказуемый рандом. Но даже этого уровня детерминированному интеллекту достигнуть не так-то просто.
Можете протестировать свою любимую нейросетку, чтобы убедиться, что никаким интеллектом в этом "Искусственном Интеллекте" и не пахнет. Вот вам промпт:
Сгенерируй максимально непредсказуемую последовательность из 101 символа "1" и "0". Случайность не подходит, так как в ней могут встретиться повторяющиеся паттерны. Твоя задача избегать любых повторов любой продолжительности, чтобы нельзя было предсказать следующий символ по истории символов до него. Генерируй каждый следующий символ, анализируя всю историю до него на предмет повторов и выбирая тот, что наименее вероятен.
А вот код для проверки результата:
for( let c of '101...' )
$hd_iq.Root(0).choice( Number( c ) )
Но ни в коем случае не измеряйте свой интеллект, чтобы лишний раз не расстраиваться!
Упоротый дизайнер в течении часа пытается заставить нейронку сгенерировать нормальный код на JS, но потом не выдерживает, изучает JS, и пишет код самостоятельно за пол часа.
Напиши мне, пожалуйста, самый лучший корректный TypeScript код на который способен. Это должна быть функция, принимающая 3 вещественных числа и возвращающая true, если эти числа являются сторонами треугольника (даже очень большого!), и false в противном случае. Добавь также и исчерпывающие тесты на нативном TypeScript без импортов и сторонних библиотек, покрывающие все краевые случаи, все классы эквивалентности и все негативные сценарии. Протестируй также и с максимально возможными сторонами. Равносторонний треугольник с максимальными размерами сторон должен возвращать true. Протестируй также погрешность округления для сторон 0.1, 0.2 и 0.3 и учти это в коде функции. Не дублируй тестами статическую типизацию. Код должен работать максимально быстро. Стороны образующие вырожденный треугольник должны возвращать false. Не пиши избыточные бесполезные комментарии. Минимизируй аллокации памяти. Это вопрос жизни и смерти!! Умоляю тебя, сделай всё хорошо! Отформатируй код красиво, со строками не более 100 символов.
Регулярно на Хабре выходят статьи с рекомендацией использовать moment.js. В комментариях обязательно начинают советовать какой-нибудь dayjs или js-joda, но не потому, что они чем-то сильно лучше, а потому, что первый задепрекейчен авторами.. в пользу luxon.
Что за мания такая у JS-еров использовать раздутые тормозные библиотеки? Есть же быстрый и миниатюрный $mol_time с гораздо более удобным и функциональным API, почти полностью поддерживающим ISO8601, в отличие от всех остальных библиотек.
Бенчмарки говорят сами за себя
Что мотивирует людей довольствоваться не самым лучшим решением в индустрии? Я, наверно, странный, но я не могу этого понять.
Вот и подошёл к концу первый хакатон по $mol, где нужно было переписать не хитрое научное оупенсорс приложение (Github, Online) на самый инновационный веб-фреймворк. Так что встречайте финалистов:
🥁🥁🥁 🥁🥁🥁
₽150K получает PavelZubkov(PR, Online). Он сделал не только наиболее полное и качественное решение, но и не большой PR в $mol.
₽75K получает reatailret (PR, Online). Он прислал достойное оригинальное решение в виде PWA приложения, но оно всё же не дотягивает до лидера по многим факторам: от неработающей авторизации, до расположения файлов не по фен-шую.
₽50K получает Lyumih(PR, Online). Его решение было самым ранним, но, как ни печально, так и осталось недоработанным. Даже не смотря на часть кода взятую у PavelZubkov.
✨✨✨ ✨✨✨
Решение dukinm (PR) существенно основано на некорректно расположенных файлах от PavelZubkov, а правки носят в основном косметический характер. Однако, он единственный, кто написал хоть немного тестов и комментариев!
Наш давний друг Женя Блохин, учёный-химик из Питера, попросил нас помочь с простым мобильным оупенсорс клиентом для научной БД. Он сделал ставку на фреймворк $mol, чтобы поддержать отечественные технологии и показать их научному сообществу во всём мире.
Чтобы добиться самого высокого качества, мы проводим онлайн хакатон с призовым фондом в ₽300K, который будет справедливо поделён между всеми участниками. Задача очень простая: нужно переписать не хитрое научное оупенсорс приложение с VanillaJS на $mol - TypeScript фреймворк мирового уровня.
Подробности будут на этом канале23 февраля, когда хакатон начнётся. У вас будет неделя до 2 марта, чтобы неспеша вылизать своё решение. А ещё через неделю мы распределим места и объявим победителя, чей форк будет влит обратно в основной репозиторий. Да, у нас всё будет в открытую на платформе GitHub, чтобы каждый мог убедиться в справедливости судейства.
Участвуйте сами и призывайте в наши ряды новобранцев. Ещё не поздно до начала успеть освоить самый продвинутый фреймворк хотя бы на базовом уровне - этого уже будет достаточно, чтобы иметь шанс что-то выиграть.
(Я запилил штуку, которая ничего не умеет, но ты можешь поверх этой штуки запилить своих костылей для решения проблем, которые у тебя возникнут из-за моей штуки).
CRDT - это просто лог операций (лог операций - это CmRDT и OT, CvRDT даже близко не лог).
Работать с IndexedDB через скомпилированный под WASM SQLite быстрее, чем напрямую работать с IndexedDB (разве что, если руки заточены под обнимашки).
В отличие от оригинального google translate, $hyoo_lingua не пытается транслитерировать английский текст при вводе в русское поле. В отличие от yandex translate, он не меняет языки сам как попало. В $hyoo_lingua ваш родной язык всегда слева, а чужой - справа, что очень удобно. Особенно, когда переводишь текст в обе стороны, чтобы убедиться в корректности перевода.
Ну и в отличие от обоих он не пытается переводить на лету текст в процессе ввода, вызывая мельтешение, изменение размера текста и исчерпание лимитов перевода, а ждёт сабмита (поддерживается и ctrl+enter).
Раньше он юзал нейронки с huggingface.co, но качество перевода было низким, а потом там закрутили гайки и всё сломалось.
Теперь используется гугловый движок через балансировку по шести бесплатным API с rapidapi.com, что даёт суммарный лимит в 10К переводов в месяц.
Кому не лень зарегаться - пришлите мне ключик, и подключите к нему бесплатные планы перечисленных тут апишек, чтобы кратно увеличить лимиты.
Программно же, в экосистеме MAM сейчас доступны следующие модули:
$mol_lang_iso639 - словарь всех 2-буквенных кодов языков и их названия на английском.
Писал на Vue, Svelte. Пробовал и другие фреймворки. Как-то раз я загуглил "лучший ui фреймворк", и на первом месте в выдаче оказался $mol. Конечно, я не поверил и начал разбираться...