В старые добрые времена, я каждый день заходил на Хабр, пока ехал на работу, набирал несколько десятков интересных статей и даже не успевал за день их все прочитать. Сейчас же, заходя на Хабр, я за несколько минут пролистываю ленту, отсеивая нейрослоп и.. почти ничего не остаётся. А что остаётся - в итоге тоже оказывается нейрослопом. Последней каплей стал вчерашний случай, когда, увидел в ленте новую статью про мой фреймворк. Воодушевлённый, я пошёл её читать, ведь у нас нейрослоп не в почёте. Я ещё никогда так не ошибался...
Хватит это терпеть! Большая часть статей - это просто мусор, где ни "автор", ни нейросеть, ничего не понимает в предмете. "Автору" даже не хватает мозгов, чтобы понять, что нагенеренное нейроболваном - это полная чушь, хотя казалось бы, достаточно всего-лишь уметь логически мыслить...
Саморегуляция Хабра тут без нашей помощи не вывозит. Поэтому нам надо взять инициативу нас себя:
Видим нейрослоп статью - ставим минус и ей, и её автору. Даже если кажется, что в этой мутной воде что-то есть. Это что-то скорее всего либо банально, либо попросту лживо.
Даже если автор признался, что использовал нейросеть "лишь для улучшения стиля и орфографии" - это не даёт индульгенцию. Это совсем не забота о читателе, ибо наткнувшись на очередной бессмысленный оборот, ему прихоится ломать голову то ли там есть какой-то глубокий неочевидный смысл, то ли это очередная нейрогалюцинация.
Если есть сомнения нейрослоп это, или автор начитался нейрослопа, и стал писать как нейронка, на всякий случай лучше тоже минусануть. Тяжёлые времена требуют суровых мер.
Dcnfk yt c njq yjub& Yt ,tlf! :vb СфзыДщсл и не придётся перепечатывать текст заново.
Ставим AutoHotKey - фреймворк для клавиатурных утилит. Потом пишем скрипт ruen.ahk:
#Requires AutoHotkey v2.0
#SingleInstance Force
; пробегаемся по всем клавишам, удаляем одинаковые в разных раскладках, экраниуем через `
en := "QWERTYUIOP{}|ASDFGHJKL:`"ZXCVBNM<>?~@#$^&qwertyuiop[]asdfghjkl;'zxcvbnm,./``"
ru := "ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё`"№;:?йцукенгшщзхъфывапролджэячсмитьбю.ё"
; собираем карты переключения в обе стороны
en2ru := Map()
for ch in StrSplit(en)
en2ru[ ch ] := SubStr( ru, A_Index, 1 )
ru2en := Map()
for ch in StrSplit(ru)
ru2en[ ch ] := SubStr( en, A_Index, 1 )
; общий код для всех хоткеев
Correct() {
backup := ClipboardAll() ; сохраняем буфер, потом восстановим
A_Clipboard := "" ; чистим буфер
Send "#{Space}^c" ; Жмём Win+Space и Ctrl+C
ClipWait 0.5 ; дожидаемся копирования в буфер
if A_Clipboard { ; буфер не пустой
result := ""
mode := "en" ; по дефолту переводим в английский
Loop Parse A_Clipboard { ; для каждого символа из буфера
; ищем варианты переключений для текущего симовола
ru := en2ru.Get( A_LoopField, "" )
en := ru2en.Get( A_LoopField, "" )
if en && ru { ; возможны оба варианта - выбираем прошлый
result .= mode = "en" ? en : ru
} else if en {
result .= en
mode := "en"
} else if ru {
result .= ru
mode := "ru"
} else { ; оставляем как есть
result .= A_LoopField
}
}
A_Clipboard := result ; пишем в буфер
Send "^v" ; жмём Ctrl+V
Sleep 100 ; ждём пока данные заберут
}
A_Clipboard := backup ; восстанавливаем буфер
}
; CapsLock - хоткей коррекци выделения
CapsLock:: {
Correct()
}
; Shift + CapsLock - хоткей коррекции последнего слова
+CapsLock:: {
Send "^+{Left}" ; Жмём Ctrl+Shift+Left
Correct()
}
; Ctrl + CapsLock - хоткей коррекции до конца строки
^CapsLock:: {
Send "+{End}" ; Жмём Shift+End
Correct()
}
; Ctrl + Shift + CapsLock - хоткей коррекции с начала строки
^+CapsLock:: {
Send "+{Home}" ; Жмём Shift+Home
Correct()
}
Даблкликаем по нему, и получаем:
переключение раскладки выделенного текста по CapsLock
последнего слова - по Shift + CapsLock
до конца строки - по Ctrl + CapsLock
от начала строки - по Ctrl + Shift + CapsLock
При желании его можно скомпилировать в exe-шник. Интерфейс самого AHK так и сделан.
Из уникальных фичей: переключает одновременно и раскладку введённого текста, и текущую раскладку клавиатуры.
Известные альтернативы:
Punto Switcher - 100 метровый звездолёт против 12 у AHK. Автопереключение часто не к месту, а горячую клавишу Break пойди найти на ноуте. Про интеграцию вашего буфра обмена с сервисами Яндекса я даже не заикаюсь.
Caramba Switcher - 60 метров и никаких настроек. Переключения по шифту - тот ещё глюкодром, с которым борятся через самообучение.
Каждый раз, когда я обнаруживаю, что присланное мне письмо, код или статья сгенерированы нейросетью, меня охватывает глубокое чувство разочарования. Настолько сильное, что я не могу уже дальше это читать, а к автору сего поделия появляется чувство неимоверной брезгливости.
И дело даже не столько в том, что он экономит своё время на написание полотна текста или кода за счёт моего времени чтения и выискивания смысла в мутной воде переполненной неуместными формулировками, странными приседаниями и лютыми галлюцинациями, сколько в том, что он на полном серьёзе считает, что я настолько тупой, чтобы этого не заметить.
И нет, не буду я кочегарить нейросеть, чтобы она резюмировала сей опус. Долбитесь в этот испорченный телефон как-нибудь сами, а мне лучше дайте оригинальный промпт. Даже если он полон очепяток и косноязычия — его я пойму гораздо лучше любой нейросети, и гораздо быстрее, чем продукт её жизнедеятельности.
Нейросетевая аугментация мозга не просто экономит время — это не калькулятор и не автомобиль. Она лишает вас когнитивного развития — умения понимать смысл чужих слов, корректно рассуждать о них, и ясно излагать свои мысли. Мышца, которую не напрягаешь, быстро атрофируется. И если быть худым может и красиво, то с глупым иметь дел не хочется совсем. А хочется только плюнуть в карму и пойти дальше.
Уже в эту пятницу вечером, 10 октября, в Питере, в в ITentika, сообщество Гипер Дев соберётся для обмена опытом разработки на отечественном фреймворке мирового уровня $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 (разве что, если руки заточены под обнимашки).