А вот в Хаскеле partial application убогий:

f x y z = x + y * z;

а хочешь частично применить только x и z — и болт: изгаляйся. f1 x z y = f x y z; q = f 10 3; q 2

В kdb+ веселуха,

f:{[x;y;z]x+y*z} — определение ф-ии
var1:f[10;;3] — частичное применение, параметры разделяются ";".
(Ну а если последние параметры надо оставить висяком, то и точки с запятыми тоже не нужны).
var1[1] — дает 13
var1[2] — дает 16

короче, пока я не узнал, все ломал голову, где же функция flip.

А вот на тебе, на лопате, не подавись!

Короче, решил я запилить проксю для телеги.
Долго извращался с dante, запихнул его в контейнер, но потом понял, что это говно, и мне захотелось авторизации юзеров по таблице в mariadb. Ну вот такой вот я извращенец.

Именно socks прокси, не mtproto.

В итоге пишу щас его руками на Go.

Я ж это, таки ушел с Хрома нафиг. После стольких лет. Для совместимости какой-нибудь он конечно остался, но не запущен основное время. Он овальный, он тормозит, мои глаза с табами, и еще там прыгает строка ввода адреса жеж.

И тут занесло меня на Ars-Technica, а там значит статья как раз об этом. Это оказывается хрому было 10 лет ( arstechnica.com ). Чуваки постят аналогичный дизайн фирефокса столько-то лет назад и говорят, что это был грандиозный факап, что это было золотое время для форков, которые были квадратные и без всей этой розовой фигни, и фирефокс вернул взад, а гугл вот поднял гиблое знамя. Настолько обильно поливают хром гамном в камментах, что мне становится ясно, что с хромом это все неспроста случилось!

Погуглил я, значит, google chrome blog, а там ( blog.google ) вся такая радостная статья ни о чем: мы вам сделали хорошо таким образом и эдаким.

И приписочка: Ellie Powers — Chrome Product Management Desktop Lead.

Тут-то картинка у меня и сложилась. Баба. Наверняка феминистка, и туда по квоте попала.

Как в воду глядел. Посмотрите в эти глаза ( twitter.com ). Пишет сама о себе "жруха", на фотке фигурирует с мороженым. Боди позитив. И еще пишет, что раньше работала с Google Play / Android. Вот оно почему тормозное такое.

Читаем твитер ленту: Проводы самой главной начальницы пепсиколы (широкая темная женщина в годах). Следом: День Ады Lovelace, первой женщины программистки. Следующий пост: equity, diversity, inclusion. Далее: Women in Product breakthrough conference. После этого — ретвит другой хромовской начальницы ( twitter.com ), которая прямо о себе тоже пишет: "люблю пожрать" (клуб у них?), и в ленте которой та же тема собственно: нобелевские лауреаты (большой негр и женщина с искаженными чертами) которые выбороли первое место за их kampf (успешно хоть?) с сексуальным насилием как оружием войны. Еще пост о том, как гугловский инженер (баба?) борется с собственной дочерью, которая ей заявила, что инженеры — это мальчики, пропагандой гендерного равенства. Довольно, идем назад к Элли. У Элли следом Гугл Прайд (радужный логотип), ути пуси. Далее ряд обычных постов. Наверное ремиссия была.

Типичная операция внедрения: включите нас в свою жизнь (inclusion), мы рептилоидши (diversity). Мы любим ваши мороженки. Мы должны научить наших девок программировать, потому что когда вы все умрете в одну ночь, мы должны уметь как-то поддержать инфраструктуру, даром что ли века прогресса, да и просто, вдруг рванет что-то. Давайте мы вами порулим. Мы любим кругленькое, а вы? Нет? Ну потерпите, постепенно привыкните, вам с этим жить. Пока живете.

Они живут! ( смотреть imdb.com )

Вот у меня есть функция, параметризуемая каким-то n, в ней есть цикл по n, и массив внутре есть.
я хочу наделать шаблонов(templates), для n от единицы до пяти, чтобы во время template instantiation это n становилось compile-time константой, а для остальных n пусть будет generic функция, в которой n будет переменной. А функцию я буду вызывать из switch/case соответственно разные специализации шаблона.

С шаблонами в принципе я уже тут кой-чо накидал, но все примеры нахожу только такие, что для специализаций по конкретному числу (от 1 до 5) тут можно написать везде свою реализацию, а для неспециализированной версии (остальных N) еще одну реализацию. Для меня же главное, чтобы КОД ФУНКЦИИ РЕЮЗАЛСЯ для специализированной и неспециализированной версии, то есть в одном случае n будет параметром шаблона, в другом параметром функции.

Может кто-то решал такую задачу, или есть идеи? Понимаю, что прямых путей нет, и еще, что все можно сделать препроцессором, но все-таки неохота препроцессором.

Бля. Наболело. Сел фиксить казалось бы маленький бажок в приложении, и ничто не предвещало беды.
Баг был связан с тем, что вместо списка ещё не закончившихся событий пользователю показывались все события — и будущие и прошлые.

Ну казалось бы, что может быть проще — возьми и отфильтруй по endTime > now.
Но это был только вход в кроличью нору.

У каждого события есть начало и конец.
У системы есть свой часовой пояс (который можно произвольно менять), отличный от часового пояса юзера.
Ну отлично, где тут проблема? Нормальные люди хранят в таких случаях отдельно часовой пояс, отдельно абстрактное время. В виде строки, не важно.

Но нет же, наши дорогие заказчики изобрели свой формат времени. Я его назвал pseudoUTC, почему псевдо — читайте дальше.
Начало события они хранят так:

startDate = toPseudoUtc(SYS_TZ, beginningOfDay(SYS_TZ, absStartTime))
То есть мы сначала вычисляем начало дня в таймзоне системы, затем (НАБЕРИТЕ ВОЗДУХА!) переводим получившийся таймштамп в такой таймштамп, который будучи сформированным в UTC, давал бы строку абстрактного начала дня. "2018-09-28 00:00:00". Но храним не строку, а именно этот абсолютно фейковый, бесполезный и сбивающий с толка таймштамп!
Но это не всё, часы с минутами же отброшены, поэтому они хранят отдельно минуты с начала дня.
startMinutes = бла бла бла, вычисляем разницу в минутах

C endDate всё ещё интереснее. Они переводят тоже в такой тупорылый таймштамп, но только считают конец дня! То есть, условно таймштамп, который при рендеринге в строку в часовом поясе UTC дал бы "2018-09-28 23:59:59". Но (НАБЕРИТЕ ВОЗДУХА ЕЩЁ БОЛЬШЕ!!!) endMinutes они вычисляют... с НАЧАЛА ДНЯ!

Можно выдыхать.

Это пиздец, блядь.

Ну короче, проебался я полдня с их таймзонами и перевёл на клиенте обе псевдодаты в абсолютные таймштампы, которые можно тупо сравнивать с now(). Но еботни столько, что пиздец просто, нигде ж ни документации, нихуя.

А если бы хранили время в виде строки (или хотя бы хуй уже с ним, не хранили, но просто отдавали бы его клиенту в виде строки, всё равно ж оно абстрактное), то не было бы таких проблем.

Зашел на github, а мне говорят: пароль твой числится среди сломанных, которые гуляют по сети, ты б поменял его.

На гитхабе у меня древний простой пароль, сто лет ему в обед.

А я на гитлаб недавно переехал с приватным барахлом с битбакета. Думаю, поставлю как на гитлабе, он средней крутизны.

Забиваю новый пароль, который точно только мой и использую я его только на гитлабе. А мне и говорят "твой новый пароль тоже в плохой базе, или используется где-то еще".

И тут как-то стало мне не очень уютно. Гитлаб не ломали недавно? Поменял там пароль тоже. Шоделоц?

Не векторизует гцц мои лупы, штук 5 разных, все не векторизует, пишет страшные логи.
Скачал интеловский конпелятор, ICC, тот тоже не векторизует, но логи пишет уже понятнее чуток, но все равно не могу понять почему нет.

for(int i=0; i<limit; i++, hs++,ls++,dda++) {
*dda=hm[*hs]*lo+((*ls)-slo);
}

вероятно просто не мой ворклоад? (avx512 enabled если шо). Ну и вероятно я просто не понимаю, ну и фиг с ним.

Фабула такая: в 2038 году люди делают человекоподобных роботов (андроидов) с очень неплохим ИИ и пользуются ими ну как рабами примерно (или домашней утварью): прислуга, игрушки, секс, солдаты, грязная работа, программисты на JS.tonsky.livejournal.com

Люблю когда в современном софте проскакивают фразочки типа "email was sent to an address stored on file".

(пояснение: on file хранили, например, во время оно в коболе данные, на файловой системе: субд там на файлах, оттуда термин)

что, тонский написал что всё тормозит и глючит. Это тот же самый тонский который раньше топил за динамическую типизацию и джаваскрипт всем и пусть никто не уйдёт обиженный, или какой-то другой?

В общем, прошёл собеседование на должность техлида в одну безумно крутую компанию.

Но когда понял, что там придётся ВПАХИВАТЬ, РАБОТАТЬ, а не просиживать штаны, прокрастинировать и заниматься левыми проектами на положении капризного гения-любимчика, то понял кое-что.

Я болен несколькими болезнями сразу, мне предстоит лечиться месяц или около того, и переходить в другой проект, чтобы тут же пойти на затяжной больничный — это непорядочно.

Уж лучше тут, пользуясь добротой моего аутстаффного начальства, вытворять что угодно, чем ощущать чувство вины перед незнакомыми мне людьми, за то, что я такой, какой я есть.

О, clippy в стабильный компилятор завезли: blog.rust-lang.org
"cargo clippy

Speaking of warnings, you can now check out a preview of cargo clippy through Rustup. Clippy is a large number of additional warnings that you can run against your Rust code.

For example:

let mut lock_guard = mutex.lock();

std::mem::drop(&lock_guard)

operation_that_requires_mutex_to_be_unlocked();

This code is syntactically correct, but may have a deadlock! You see, we dropped a reference to lock_guard, not the guard itself. Dropping a reference is a no-op, and so this is almost certainly a bug.

We can get the preview of Clippy from Rustup:

$ rustup component add clippy-preview

and then run it:

$ cargo clippy
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing.
--> src\main.rs:5:5
|
5 | std::mem::drop(&lock_guard);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[deny(drop_ref)] on by default
note: argument has type &std::result::Result<std::sync::MutexGuard<'_, i32>, std::sync::PoisonError<std::sync::MutexGuard<'_, i32>>>
--> src\main.rs:5:20
|
5 | std::mem::drop(&lock_guard);
| ^^^^^^^^^^^
= help: for further information visit rust-lang-nursery.github.io

As you can see from that help message, you can view all of the lints that clippy offers on the web.

Please note that this is a preview; clippy has not yet reached 1.0. As such, its lints may change. We’ll release a clippy component once it has stabilized; please give the preview a try and let us know how it goes."

из плюсов sololearn вот читаешь новую тему, вроде все понятно, а следом идет небольшое задание — скобки расставить или ключевые слова. И если где-то в тексте протупишь момент, то задание не сделаешь и к следующему этапу не перейдешь. Очень четко закрепляется материал.
Тыкаю уже объекты и методы js.

Вот смотрите лоботрясы и маловеры, что я писал 3 года назад:

#2809899

Так это я, как оказалось, про Flutter писал: тогда его еще не было. И натянули они его не на android.ui а прямо на opengl, чтобы байткода не было даже и близко, типа как codenameone сделали. Остальное совпало вообще совсем.

Вот эти люди со светлыми лицами хотят быть хозяевами дискурса, мля.

pbs.twimg.com

GraphQL сделает с REST то, что JSON сделал с XML.

Это просто потрясающе!

Они хотят сказать, что ихний json что-то сделал с нашим XML. Да этот json появился, потому что в языке javascript (во время оно) не били по рукам за eval(), и тогда какой-то главный сумасшедший задумался, а чем это хуже, чем XMLDocumentBuilder.parse(), и человечество свернуло в гнилой закоулок, где с этим json до сих пор мучается, не в силах бросить каку.

Вот они, эти люди со светлыми лицами, смотрите на них.

Откровение: то, что тормозит на чтении 100000 мелких файлов на ext4 даже когда они все в буферах закешированы, тормозит так же точно и на рамдиске, если эти файлы туда засунуть. Директории в процессе не сканируются еслишо, прямо опен делается внутре.

cpu sys 12%, user 5% например (одно ядро)

С какого это бодуна?