to post messages and comments.

А где у нас сейчас модно хранить большие жирные логи с полными или частичными кусками запросов в сервисы и всем таким? Плюс нужен удобный способ поиска по разным параметрам, таким как uuid запроса, уровень ошибки, и прочее. В идеале, чтобы запись в логе была JSON документом.

Интересная история о фрилансе и Upwor.
В общем, после месяца подобных поисков со мной таки связались с апворка, правда был это какой-то индус из поддержки, который захотел со мной видеочата, дабы убедиться, что я не бот (ну а хуле, спамит везде свою заявку, а ее все в рот ебали), задал он охуеннейший вопрос «какие ты знаешь CMSки» и на мой чистосердечный ответ «да в душе ниибу, ты читал мои скиллы?» вежливо попрощался, правда фриз с аккаунта таки сняли. Еще через неделю подобных заявок, фриз таки вернули, а я решил, что это — охуенный повод забить на эту помойку и вернуться в спокойненькое уютное кресло в офисе с бесплатными печеньками. Такая вот история.
ebanoe.it

Жалобы задротов на «не таких HRш» — просто смешны, такой проблемы нет ни в одной другой сфере. Нормальному человеку и в голову не придет, что есть вообще хедхантеры, которые готовы каждый день слать в Линкедин предложения о работе. Это фантастика. Это счастье. Но задротишки так зажрались, что уже и не ценят такой благодати, наперебой строча на Ебаное гневные отзывы по поводу очередной HRши, допустившей опечатку и даже пытаясь записывать диалоги на аудио.
ebanoe.it

А и в самом деле.

Читаю комментарии к статье «Пора убить C#» habrahabr.ru
Вэбщик (автор статьи) напирает на то что используя HTML, CSS, JavaScript можно быстро делать свистоперделки и приводит в качестве примера снимок екрана со свистопердящим календариком, потом пишет «Не знаком с GTK, но это вроде как тот же Canvas, где все рисуется на низком уровне. Как сделать hover и Tooltip Над элементом, опять куча математики с масок?». Тупая гнида. Чтобы такое говно не вылазило нужно в ВУЗах будущих программистов помимо математики задрачивать всевозможными сиплюсплюсами и qt`ями чтобы хотя бы представление имели безжалостно отчисляя всех неосиляторов, но у меня чувстов что в ВУЗах сейчас всех кормлят вэбом.

Qt проект, билд под андроед.
Используются SDK/NDK, Qt libraries, JDK/Gradle. Компилится 1 файл, линкуется, запускается gradle+android build, сканируются QML зависимости, что-то еще докапывается, снова gradle, получается ADB, деплоится через USB. Все hot (в кешах), несколько запусков. Userspace filesystems отсутствуют. Фоновые процессы минимальны (chrome/dropbox итд остановлены)

Linux + ZFS (все на ZFS) — 32 секунды
Mac OS + ZFS (все на ZFS, openzfs) — 41 секунда
Mac OS + HFS+ (все на HFS+) — 39 секунд
Mac OS + HFS+ (все на HFS+) + переключиться с закладочки с билд логом, минимизировать Qt Creator и не отсвечивать — 34 секунды.
Линукс ext4 с минимизацией отрисовки не пробовал.

Такие дела. Тест делался по мотивам тормозов макси в отрисовке ейного ГУЯ, для сравнения прочих перфомансов.

Книга «Язык программирования C#. Классика Computers Science.» 4-е изд. (Хейлсберг А., Торгерсен М., Вилтамут С., Голд П.) выглядит довольно странно и местами пугающе. На 48 странице задвигают за параметры–типы которые не совсем понятно для чего нужны и куда это прикладывать.
Определение класса может включать ряд параметров-типов. Для этого за именем класса указывают квадратные скобки, в которых содержится список имен параметров-типов. Параметры-типы затем могут использоваться в теле класса для определений элементов класса. В следующем примере параметрами-типами класса Pair являются TFirst и TSecond.
public class Pair<TFirst, TSecond>
{
public TFirst First;
public TSecond Second;
}
Класс, который объявлен с параметрами-типами, называется обобщенным (родовым, параметризованным) классом. Структура, интерфейс и делегат также могут быть обобщенными.
За оператор continue поясняют на 422 странице. Попалось на глаза вот такое:

Если для двух любых ссылочных-типов А и В существует неявное (раздел 6.1.6) или явное (раздел 6.2.4) ссылочное преобразование из А к В, то такое же ссылочное преобразование существует из массива типа A[R] к массиву типа B[R], где R — любой спецификатор-размерности (одинаковый для обоих массивов). Это отношение известно как ковариантность массива. Ковариантность массива, в частности, означает что значение массива типа A[R] может быть ссылкой на экземпляр массива типа B[R], при условии что существует неявное ссылочное преобразование из В к А.

Непонятно назначение модификатора readonly в C#. Написано что «readonly защищает место хранения поля от изменений, которые могли бы быть внесены помимо конструктора класса, но не защищает хранимое там значение.» и получается что переопределять нельзя, но можно изменять само зачение. Далее пример:
>public static readonly StringBuilder FirstBorn = new StringBuilder("Joe"); И написано что «Прямое изменение FirstBorn (вне конструктора) приводит к ошибке компиляции», но «Однако можно достичь нужного результата, модифицируя экземпляр StringBuilder»
>Names.FirstBorn.Remove(0,6).Append("Biff");

Буду и сюда постить "хорошие статьи/книги" по понедельникам.

При программировании в языках с неизменяемыми структурами данных, часто применяются методы работающие со структурой в-целом. Такие техники позволяют писать программу, как объединение более простых подпрограмм. Однако этот подход может ухудшать производительность, т.к. заставяет создавать огромные структуры данных, для решения это проблемы используется оптимизации deforestation (и fusion), основанная на правилах перезаписи выражений. При этой оптимизации удаляются промежуточные структуры и при компиляции код обрабатывающий сложную структуру превращается в настолько же эффективный, как код написанный на С, но при этом более поддерживаемый. В диссертации Дункана Котса рассматриваются различные такие правила (со ссылками на статьи о них), а так же дается доказательство корректности, и минимальные требования к языку, в котором эффективно принимать данные правила.

D. Coutts, “Stream Fusion: Practical shortcut fusion for coinductive sequence types,” 2010.

Когда исследуешь багу в OpenJDK, перекомпиляешь по 5 минут, пробуешь разные версии NSTimer, и она то не компилится, то в рантайме нет такой сигнатуры, потому что она, блин только в 10.12, то другой тоже нет, а в мануале твои глаза перепутали макос с tvos справа где написана совместимость, то в недокументированной (уже) версии JNFRunLoop нету addTimer, потому что оказывается она не NSRunLoop, то таймер создался с runloop по умолчанию, но не вертится.. И тогда ты забиваешь на гейские поделки и пишешь простое и ламповое: "pthread_create(...."

Хочу хранить список разно структурированных документов (разные документы могут иметь разную структуру) в некотором текстовом формате так, чтобы это можно было потом редактировать руками и хранить в гите, а главное — мержить. Каждый документ должен храниться как минимум в своей строчке, либо в нескольких строках, чтобы можно было мержить изменения в одних и тех же документах, сделанные в базе в разное время. Какие у нас есть варианты? pretty-printed JSON, YAML ... что ещё? Желательно, чтобы была библиотека работы с этим в Haskell.

Если в Dart разделить целое на целое, получается double:

10/2 -> 5.0

Оператор целочисленного деления выглядит так:

10 ~/ 2

Неявного приведения int к double в дарте нет. Надо везде писать i.toDouble()

А еще во Flutter если ты хочешь нарисовать текст на канвасе, то ОБЯЗАТЕЛЬНЫМ параметром является RTL (left to right или right to left — для арабов и евреев). Я вижу в этом атаку на идею о естественном превосходстве белой расы. Все началось кстати еще с UTF-8.

Щупаю язык Dart в целях как оно там Flutter все дела кросплатформенность, ко-ко-ко (2 платформы, ндя).

Dart как жаба совсем. После Kotlin-а ощущается мною как шаг назад. В отличие от жабы Async/await — есть! Всякие изоляты и мультитредовость еще не щупал. switch/case от С++ целиком 8)

Идейный плагин как-то фурычит, терпимо. Стандартную библиотеку не проиндексировал, найти наследников от Widget не смог. В evaluate/modify автокомплит работает только по полям, а по пропертям не может. Написал switch(), а он мне его возьми и подкрась моментом —
требует чтобы все кейсы из енума там прописал. Не отстал, пока не написал. Короче, проблемы первого мира у меня.

Релоад работает. Жосткий релоад тоже работает.

Я хочу написать десктопно-планшетную приблуду. Пробовал на гейбуке разные эмуляторы, уже упоминал. Остановился на Bluestacks — самый быстрый и приятный (родной SDK эмулятор тормозит 3 кадра в секунду). Минус Bluestacks — говно мамонта, даже настроек нету, HiRes не поддерживает. Афтары пишут: сорян, гейбук не в приоритете, венда наш фронтир. Зато честно. В отличие от также шустрого Andy (в нем Android 4.4) флуттер на Bluestacks поднялся и взлетел без проблем.

Жалко нету нативного десктопного таргета, но с методологией разработки (релоады) на девайсе/эмуляторе это менее важно.

Буду продолжать информировать.

Искал быстрый эмулятор андроеда под macos, нашел Andy, официальный сайт, все дела. Эмулятор вроде хороший, отзывчивость на высоте, по сравнению со стандартным эмулятором (который типа тоже типа быстрый с ускорителями, но видно, что ему тяжело, а Andy гораздо отзывчивее, технология там хитрая внутре)

Вот только Flutter под ним не запускается, не может инициализировать графику. Но Andy может эмулировать несколько чипсетов, но, скотина, под маком не имеет гуя для настроек, а по коммандлайну я еще не нашел док, а встроенный хелп об етом не пишет.

Самое позорное, что этот бесплатный софт абсолютно молча без опций и всяких opt-out принес с собой какое-то shitware, которое, выждав часик, сообщило мне, что рекомендует мне просканировать собою компьютер. Теперь в чек-листе чем Macos хуже Линукса можно смело ставить эту галочку.

Блин, парился через teamviewer заокеан, там xcode, а к xcode подключен iphone, а в iphone торчит t-mobile, а на iphone наш Qt application, который не коннектиццо к серверу в упор.

А в qt creator видно что приходит ошибка NetworkError, логи не пишет, а кто отправляет и почему — непонятно, а отладчик не ставит брякпойнты в сорцах Qt, а приходит qt сигнал — и понятно, что никаких тебе стектрейсов. Плакал, пока не запустил НЕ через отладчик Qt Creator, а прямо в xcode, там брякпойнты ставит.

Написал ему bsd socket-ное: sock = socket(); sockaddr = getaddrinfo("33.44.55.66"); connect(sock, sockaddr) — коннектиццо, а через QTcpSocket — network error.

Долго ли коротко, дошел по приборам до побайтового сравнения addrinfo, и оказалось, что getaddrinfo("33.44.55.66") работает нормально и возвращает addrinfo_t с address_family af_inet6, потому что t-mobile не дает ipv4 совсем, а Qt видит этот ip и (справедливо?) думает что я хочу ipv4 (там намудрено внутре Qt, кароч).

Все это через тормозное teamviewer, думал я сдохну. (А когда заметил в конце, что сигнал приходил не асинхронный, а таки синхронный, снова плакал, но недолго).

Короче, пишешь ты такой на андроеде media player. Взял в руки С, взял OpenSL ES, который на С написан, и там они размахивают тем, что тред у них, в котором ты кормишь данными звуковуху, работает в реалтайм приоритете.

Значит, написал ты код, у него 1% cpu time, музыка сладчайшая льется, а потом нажимаешь home, прога уходит в background, и звук начинает рваться.

И через некоторое время ты перетаскиваешь код в android service (который отдельно от гуя работает) и там тебе дают больше ресурсов, и не замедляют проц, когда ты уходишь в фон. И видишь ты, что твои наиболее жручие рутины в сервисах работают в фоне наконец-то за нормальное время а не тормозят в 10 раз как если как раньше в процессе гуя.

Но звук все равно рвется. Тогда ты начинаешь кормить звуковуху кусками не по 10 мсек, а по 500. Шоб значит, цыкл не тормозил. И с ужасом наблюдаешь, что реалтаймовый OpenSL ES пока играет эти 500 мсек ВНУТРИ СЕБЯ — прерывается 5 раз и хрипит.

Вот дела, и ты трахаешься день, чтобы что-то понять. Перечитаны форумы и гугл группы. Буфера увеличены в количестве и уменьшены. Приоритеты выставлены и снова сняты. Записи в буфер кратные и нечетные пробованы. Даже компилил с оптимизацией и без.

Оказывается, что если ты инициализировал плеер не с частотой 48000 а с 44100, то такая жопа. А 48000 надо узнавать только из жабового вызова, который вернет нативную частоту всей колымаги. В старых устройствах оно вообще ничего не возвращает, и надо пользовать 44100, в новых 48000 вот.

Мне в общем норм по-всякому, но надо ж об этом где-то писать покрупнее, шоле.

Сколько я времени потратил на неправильно написанные JNI названия функций на C стороне! Мама! Просто дофига. Программа на андроеде крешится в рантайме оттого что не находит ф-ю.

А петонисты и пхп-шники, а еще жабоскриптеры живут в этом и для них норм. Кошмар.