?

Log in

No account? Create an account

Entries by category: it

2016-01

чего особенного в предоплате?

интересно вот стало.

почему есть сервисы, которые берут предоплату (например, с доменами и "традиционными" хостингами много таких), и сервисы которые не берут, и пишут что legally не могут? (многие cloud storage, в частности).

в чем разница? нагуглить пока не удалось

2016-01

moves is shutting down :/

Блин блин блин! Moves ( https://moves-app.com/ ) закрывается.

Это была одна из самых важных заплаток к моей дырявой памяти :(

Какие еще есть *персональные* location/activity tracker'ы?
Обязательно API, желательно какой-то умный постпроцесс "ходил"/"ездил"/"тусил"/"спал", и нормальные ToS. Или придется теперь самому писать?

This entry was originally posted at https://wizzard.dreamwidth.org/492389.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

Как писать на C в 2018

Я тут решил для разнообразия пописать что-то низкоуровневое, но морочиться с тулчейнами не хотелось. Ну и скорость итераций я в последнее время ценю.

В общем, откладываем в сторону gcc, clang и всю эту прочую тормозную братию.

Берем TCC (Tiny C Compiler) от Fabrice Bellard, под винду это choco install tinycc, под другие ОС, наверное, где-то так же, и любой file watcher, я взял nodemon, т.к. он был под рукой уже. Делаем 2 файла:
test.cmd: 
tcc -run app.c < test_input.txt

watch.cmd:
nodemon -e * -w . --exec test.cmd

И любимый текстовый редактор, у меня и Sublime и VS открыты были, благо, в студии сейчас не нужно создавать проекты, можно просто Open Folder.

Вуаля, полсекунды после Ctrl-S, и уже можно смотреть результаты теста. Если оно упало, или если повисло - на следующем сохранении nodemon прибьет child-процессы и перезапустит заново. Большинство хедеров у tcc прямо в дистрибутиве, но в целом даже свалка из Windows SDK собирается и показывает окошко с кнопкой менее чем за секунду.

Жаль, что мне такой пайплайн не пришел в голову в свое время в универе. Прям очень удобно. Век живи, век учись.

This entry was originally posted at https://wizzard.dreamwidth.org/488771.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

про макулатуру

Самый длинный договор, который я лично подписывал, содержал 50 с чем-то страниц legalese мелким шрифтом.

Но он таки меркнет и становится бледной тенью, если посмотреть, какое количество макулатуры регламентирует деятельность банков, бирж, трейдеров и прочих участников рынка в США.

То есть, хм, сами тексты вполне себе структурированы и читабельны. Но вот их количество...
У меня пока что эстимэйт в миллионы страниц, но может быть там и больше...

Короче, очень занятная задача для information retrieval и natural language processing, да :)

This entry was originally posted at http://wizzard.dreamwidth.org/484130.html. It has comment count unavailable comments. Please comment there using OpenID.

photo25

Единственная надежная кнопка (репост)

Оригинал взят у tonsky в Единственная надежная кнопка
Одна из причин, почему смартфон — прибор для гораздо более широкой аудитории, чем традиционный ПК — надежно работающие кнопки. Что бы ни происходило, в каком бы состоянии ни находились телефон, приложение, соединение с интернетом, блютусом и USB, в одно нажатие вы всегда можете выключить телефон, и вы всегда можете «вернуться на базу» — некое хорошо знакомое стартовое состояние, домашний экран. Ключевые слова «надежно» и «в любой момент». Что бы ни происходило, как бы плохо ни было написано приложение, в какую бы непридвиденную комбинацию внешних условий оно ни попало, телефон гарантирует вам работу двух этих кнопок.

В то же время на ПК даже самая надежная кнопка, даже в идеальных тепличных условиях, нет-нет да и выдаст что-то неожиданное. Иногда запускает приложение, а иногда (как известно, в самый неподходящий момент) показывает окно с обновлениями, подсказками, скажет, что потеряло каталог, не хватает прав или еще что-то. Иногда закрывает приложение, а иногда просит сохранить файлы, согласиться с потерей табов, ответить, надо ли перезапускать при старте. _Внутри_ компьютера нет ни одной надежно работающей кнопки. Единственно надежно работающая кнопка на компьютере — это Reset. Возможно, именно сквозная ненадежность всего и вся разработала у людей страх компьютеров.

Естественно, если спросить ПК-программиста, то ничего странного в этой ситуации нет, для него это более чем нормально. Подозреваю, эта культура идет от старых представлений об искусственном интеллекте, диалоге человека и машины как равных. Предполагается, что человек спокойно сидит, сосредоточен только на диалоге и полностостью вложил все свои ресурсы на извлечение из беседы результата. Это очень удобно, потому что спокойно можно свалить на человека часть работы, а ошибки и сложности списать на его недостаточную тренированность или вовлеченность (пресловутое «юзеры тупые!»). Мы, как программисты, глубоко впитали эту модель взаимодействия, и, на мой взгляд, недостаточно часто пытаемся ее отрефлексировать.

Однако на пути превращения ПК в предмет быта, такой же, как кухонный нож, спички, телевизор, эту модель пришлось и еще много раз придется пересмотреть. Предмет быта это по определению что-то, вокруг чего не вращается жизнь, что-то, что используется в редкие моменты, строго для решения сиюминутных задач. И в этой ситуации как раз нужна надежность. Нельзя вырывать человека из его текущего контекста и создавать ему новый контекст диалога с компьютером, с какими-то компьютерными желаниями, требованиями и жаждой общения. Включение должно включать компьютер. Выключение — выключать. Приложение — прилагать. И никаких соплей.

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

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

Мораль очень простая: всегда ставьте человека на первое место, а компьютер на второе, третье, четвертое. Человек нажал «Выход» — надо выходить, как бы ни хотелось с ним именно в данный момент поговорить.


2016-01

Гит говно

Во, у меня есть свежее репро того, что гит говно :)

Значит, берем папку с тестами к JS транслятору (25к файлов, из них половина заигнорена), передвигаем на уровень выше, коммитим.

Mercurial: 15 секунд
Github for Windows: (гуй ушел в себя еще до нажатия "коммит", пришлось прибить)
Git консольный (msysgit, как я понимаю): уже 10 25 минут как ушел в себя и ничего не происходит. Ест 5% процессора, 92 мб RAM, и всё. Что с ним сделать?

EDIT: Мне стало интересно. Ну что, даже SVN за три минуты закоммитил такой дифф, не говоря уже о всяких Fossil, "а батарейки Дюраселл продолжают работать и работать!"

Пойду что ли Darcs скачаю, про него говорят, он медленный... :-D

EDIT2: Ура, он смог! 40 минут молчания, потом тонна сообщений "LF will be replaced by CRLF", вуаля, готово. Прогрессбар? Не, не слышали.
EDIT3: При этом git mv тех же файлов - меньше секунды. Okay.jpg

This entry was originally posted at http://wizzard.dreamwidth.org/418147.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

Про лагокомпенсацию, CRDT и эксперименты Либета

Что такое эксперимент Либета: в большинстве экспериментов у человека время принятия решения типа 0.1 сек, но EEG датчик на башке показывает, что сигнал появляется ДО того, как человек сам поймет, что он собирается сделать.

Философы-гуманитарии по этому поводу начинают бугуртировать "свободы воли нет", но это всё хуйня. Просто человек тормоз, а сознание привыкло и не замечает. В мозгах, как и в игродвижках - лагокомпенсатор и предсказатель будущего, который позволяет жить с тем фактом, что открутить полный цикл стимул-реакция слишком долго и вообще опасно для жизни.

И всякие "моторные навыки", ходьба, танцы, вождение велосипеда, автомобиля, вот это всё - это обучение лагокомпенсатора.

Так вот, есть контроллер такой, читающий ЭЭГ, OCZ NIA называется - у меня он был. Ощущение отрицательной латенси вызывает просто охуение. Я этого никогда в жизни не забуду, "аватар в игре предсказывает мои действия"

В то время я даже намерял, там чуть ли не 700 мс запаса, т.е. ты собираешься выстрелить за 700 мс до того как ты выстрелил. Очень хорошо если за 300, это считается "внезапно". Поэтому лагокомпенсаторы возможны. Но во всяких шутерах они в лучшем случае линейно экстраполируют... Ну и 50-100 мс это предел, иначе игроки не могут отличить читера от человека, у которого просто лагает.

А сегодня я увидел мультиплеерный мод для kerbal space program. Там лагокомпенсатор асинхронный, он записывает действия игроков и проигрывает тех, кто в будущем для тех, кто в прошлом, а тех кто в прошлом симулирует, как будто они ничего не делали, и при коллизиях переигрывает.

В KSP по понятным причинам по-другому нельзя, с тайм варпом и космическими скоростями-то :)

Это навело меня на мысль, что в шутерах, где ты можешь за время неопределенности выбежать, кого-то убить и забежать обратно - лагокомпенсатор не должен рендерить что у тебя фраг, или что не фраг.

Лагокомпенсатор должен рендерить оба варианта. То есть начинать виньетировать экран в стиле "мы дохнем" не тогда, когда "ой всё" - а тогда, когда пересекаются конусы неопределенности тушки игрока и очереди пуль другого игрока.

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

Да, в общем виде это AI-полная задача (надо предсказать противника, который живой человек, и данных про него в системе обьективно не хватает), но для вероятностного ее подвида весьма поможет датамайнинг по базе данных старых реплеев.

Кто еще не понял - в условиях современного интернета, его лагов и интерактивщины про это также в той или иной форме приходится думать ВСЕМ дизайнерам UI, другой вопрос, что параллелей с геймдевом они почему-то не проводят.

This entry was originally posted at http://wizzard.dreamwidth.org/416483.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

Нет слов, одни выражения

Появилось у меня давеча подозрение, что у меня малварь в сети поселилась. Ну это не то чтобы супер-неожиданно, виндовая сетка, туча машин и VM в разных локациях забриджена по L2, то-сё. Я хоть винду админить умею, но и особых иллюзий не испытываю - zero-day были, есть и будут.

Вижу лаги DNS резолва, лаги TCP коннектов - плавали, знаем. Потом и Гугл сказал, капчу свою показал. Ладно, вырубаем машины по одной, клонируем, выдерживаем три дня чтоб базы у антивируса обновились, сканируем. Нихуя. Сканил, сканил, врубал-вырубал, забил.

И вот, нашёл. Нашел случайно, игрался с nginx'ом и увидел СТРАННЫЕ запросы. С еще более странным source IP. Ну то есть нет такого IP в моей сетке!

Короче, да, есть малварь. Живёт в нескольких роутерах, куда спускаются хвосты VPN-ки. Апдейтов прошивок нет. Ну охуеть теперь, радость на новый год от Cisco и D-Link.

На секьюрити это не то чтобы повлияло, все важные места ходят в инет через отдельный VPN, но осадочек остался. Даже непонятно что делать, блин.

This entry was originally posted at http://wizzard.dreamwidth.org/411415.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

Почему release process у Git'a - говно, а Mercurial в 100 раз круче

Я давно уже обещал написать, чем Mercurial лучше Git, и наконец-то часть написал.
Продолжая дискуссию об отсутствии commit notification на Гитхабе:

sorcerer_
> Дык пул реквесты - это ишуи и есть.

Тут два нюанса:
1. Я хочу вотчить чужие репозы. Когда туда коммитит один человек - никаких PR он не делает. А когда коммитят многие - то тоже могут не делать, и убедить их изменить их воркфлоу — занятие безнадёжное, да и вообще, кхм, зачем лезть в чужой огород-то.

2. Для PR в свои репозитории: это работает, если процесс разработки централизован, девелоперы сидят в форках, а релизер - на апстриме. Это вполне понятный flow для больших проектов, где есть Core Team и контрибьюторы, но он мне не нравится, т.к.

а) нарушает идею DVCS в плане равенства контрибьюторов
б) подразумевает, что релизеров 1-2, а контрибьюторов куча. Если для корп кастомеров надо поддерживать разные веточки, то типична ситуация когда 4 человека релизят скажем 10 веток, и что тогда? что такое PR? делать 10 апстрим репозиториев и пушать M*N пул реквестов? по-моему, это абсурд.
в) аналогично, очень раздражают попытки гита отслеживать состояния апстримов, перевешивая теги (xxxxx/master и т.д.), т.к. это делает fetch не-идемпотентной операцией.

А понадобился этот костыль им вот почему:

sorcerer_
> за коммиты без пул реквестов - азаза!!

Кто ж в мастер коммитит-то? Коммитить надо в личную feature branch коммиттера, которую потом соответствующий релизер мержит в нужные release branch-и.

Ахнуда, умолчания в Git, когда предполагается rebase'ить коммиты поверх ориджина без создания явной точки мержа, собственно говоря, и провоцируют коммитить в мастер и делать точки мержей неявными. А еще это позволяет сделать orphaned коммиты и вообще по-разному изгавнять репоз, чего не может случиться в Mercurial, т.к. history is sacred.

Известный концепт "все операции в Git выражаются через rebase" - это неправильно.

Я бы даже сделал еще чуть радикальнее, чем в Mercurial сейчас, и по умолчанию при первом коммите, или коммите поверх чужого бранча требовал создавать feature бранч. Это бы позволило
а) seamlessly эволюционировать личный проект в shared
б) решило проблему "люди коммитят в мастер и разводят там гавнище"

Совокупно, релиз-процесс Mercurial, когда все форки равноправны и лейблы веток после того, как все сделали push/fetch, совпадают у всех девелоперов - существенно снижает когнитивную нагрузку и упрощает мержи/релизы. А релиз-процесс Git'a оставляет неприятный осадочек SVN/TFS, и позволяет превратить в месиво как свой репоз, так и апстрим, после чего разбираться по мэйлу/телефону "где чего зафакапилось и как исправлять" - намного сложнее.

Т.е. умолчания в Mercurial покрывают кейсы "личный проект", "b2b проект" (для корп клиентов) "bazaar проект" (децентрализованный, без явного владельца), а умолчания в Git покрывают сугубо "b2c проект" (централизованный).

Мои кейсы, соответственно, гораздо лучше подходят под меркуриал, нежели под гит.

Давайте обсудим, что ли.

This entry was originally posted at http://wizzard.dreamwidth.org/411194.html. It has comment count unavailable comments. Please comment there using OpenID.

photo25

Что делает тупой мудак, которого взяли в Oracle писать VirtualBox? Правильно, лижет себе яйца...

TLDR: Виртуалбоксу пиздец, похоже что это один из core developer'ов. Пора форкать.
Последний адекватный билд - 4.3.12.


У кого есть сертификат с правами подписи драйверов под винду?

Оригинал взят у sporaw в Что делает тупой *удак, которого взяли в Oracle писать VirtualBox? Правильно, лижет себе яйца...
[ Read this in English - Automatic translation to English: Google or Microsoft ]

Что делает тупой *удак, которого взяли в Oracle писать VirtualBox? Правильно, лижет себе яйца...

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

Что это такое? Это проверка подписи, проверка owner'а, проверка секций и проч. у маппируемых библиотек в процессы VirtualBox'а. И... отсечение (rejecting) всего того, что не подходит по принципам тупой башки, выдумавшей эту "супер-идею". Человек, который это придумал - явно плохо знаком с Windows. Не понимает, что таких библиотек - полно. Большинство из них - не подписаны. Часть из них - являются необходимыми на многих компьютерах (взаимодействие как с системным софтом, так и с аппаратным программным обеспечением, через драйвера - реализация всяких функций типа двойных скроллов, специальных hotkeys на ноутбуках и т.п.).

Но нашему супер-герою-мудаку из Oracle все равно. Анально-огородившись на форуме (там реально умные люди писали не раз, что идея - говно, реализация - еще хуже, чем сама идея), VirtualBox уже полгода семимильными шагами следует в мусор.

01 июля 2014 это мудило замержило свой говнокод в основную ветку.
Развитие этого говно-кода длится до сих пор.

Фактически это приводит:
* к немерянным тормозам при каждом запуске любой VM из-за постоянного проверки подписей/соответствия секций файлам и т.п.
* к полной несовместимости с большинством security-софта (антивирусы, сетевые экраны и проч.). * к несовместимости со многими драйверами, требующими usermode-helpers.
* к неработе с кучей софтин, которые делают инжект во все процессы.
* к BSOD'ам. Приводит к невозможности работать с VirtualBox.

Реально НИКАКОЙ защиты это не дает и при желании обходится на раз-два.

Но мудак на то и мудак, что он упертый в своей тупой идее. Раз начал делать, значит доведет свое говно-дело до конца.

Ветка по 4.3.16: https://forums.virtualbox.org/viewtopic.php?f=6&t=63556
Ветка по 4.3.18: https://forums.virtualbox.org/viewtopic.php?f=6&t=64111
Ветка по 4.3.14: https://forums.virtualbox.org/viewtopic.php?f=6&t=62615
(Эта ветка должна называться так: "*удак. Начало")

Весь говнокод сосредточен здесь:
https://www.virtualbox.org/browser/vbox/trunk/src/VBox/HostDrivers/Support/win/

Так засрать VirtualBox всего лишь одной заливкой килограммов говна, которая не имет никакого отношения к сути продукта -- это нужно очень уметь, нужно очень постараться.

Особенно смешно вот подобное говно:

{ SUPHARDNT_ADVERSARY_TRENDMICRO, L"\\SystemRoot\\System32\\drivers\\tmebc64.sys" },
{ SUPHARDNT_ADVERSARY_TRENDMICRO, L"\\SystemRoot\\System32\\drivers\\tmeevw.sys" },
{ SUPHARDNT_ADVERSARY_TRENDMICRO, L"\\SystemRoot\\System32\\drivers\\tmciesc.sys" },
+ { SUPHARDNT_ADVERSARY_TRENDMICRO_SAKFILE, L"\\SystemRoot\\System32\\drivers\\sakfile.sys" }, /* Data Loss Prevention, not officescan. */
+ { SUPHARDNT_ADVERSARY_TRENDMICRO, L"\\SystemRoot\\System32\\drivers\\sakcd.sys" }, /* Data Loss Prevention, not officescan. */
+

Тупой уебок.
Если у кого-то есть возможность - накормите его там говном, пожалуйста.
Урод, который портит нормальный проект своими тупыми идеями и не менее дерьмовыми их реализациями, должен уйти.


photo24

[must-read repost] Обманчиво простая задачка или немного про системное программирование

Если вы претендуете на то, чтобы быть называться программистом, это надо обязательно прочитать. Ну то есть много кто про это знает, но много кто, увы, нет.

Я в свое время славно походил по этим граблям, и у других их видел в количестве.

Оригинал взят у zamotivator в Обманчиво простая задачка или немного про системное программированиеВыношу из своего поста и комментариев на facebook. https://www.facebook.com/oleg.i.tsarev/posts/10202446013501463

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

Во втором случае человек, как правило, не владеет примитивами синхронизации либо IO.
В первом случае, скорей всего, у него активное ожидание или lock-free структуры данных."

"Простейшая" задача - запустить дочерний процесс, кормить его данными через stdin, получать ответы через stdout.

Пример неправильного решения и неуместного использования sleep:
p = executeChildProcess();
for(..) 
{
    p.stdin.write(данные);
    while(!p.stdout.ready())
    {
        sleep(5);
    }
    p.stdout.read(..)
    // обрабатываем данные
}

Жалобы были вида: "блочится на write" (или на read)

Вопрос: мне вот стыдно что вообще ничего не понял из комментариев, чувствую себя нормальным пыхапэшником и это ободряет, мол, не я один такой дебил

Ликбез:

Человек запускает дочерний процесс. Ок.
Пишет данные размера X в stdin (standart input) дочернего процесса. Ок.
Дальше спрашивает, нету ли чего прочитать из stdout (standart ouput) дочернего процесса. Ок.
Если ничего - ждет пять секунд, и пытается снова.
Пока что-то не появилось.
Потому читает что-то и повторяет

Казалось бы, всё нормально. Но этот код ужасен, работать нормально он не будет, и блокировка на чтении или записи это иллюстрирует. Почему так происходит?...

stdin и stdout - это пайпы. Это что-то типа сокетов, но не между хостами в сети, а между процессами в пределах одной машины.

Каждый раз, когда вы делаете write в пайп, данные копируются в его внутренний буфер ядром.
Если/Когда на другом конце пайпа другой процесс (по)пытается сделать read, ядро скопирует данные из внутреннего буфера читателю.

Данный размер внутреннего буфера ограничен настройками ядра.
Если постоянно в него писать и не читать, то при очередном write системный вызов повиснет, и будет висеть до тех пор, пока из пайпа не начнут вычитывать данные (освобождая место в буфере).

Что происходит с текущим кодом?
Его автор записывает X байт в stdin. И дальше он ждёт, что дочерний процесс их прочитает, обработает, и что-то выдаст в stdout.
Не разбираясь детально с тем, что именно пишут, и что именно делает дочерний процесс мы сильно рискуем.

С чего мы взяли, что передали дочернему процессу достаточно данных?
Он вполне может ждать "Добавки" прежде чем начнёт что-то выдавать.

Сколько "Добавки" ему нужно? Да хуй его знает. Докидываем.
В какой-то момент дочерний процесс обожрался и начать выдавать результаты.
Только мы этого не узнаем.

Дочерний процесс пишет в свой stdout данные, и в какой-то момент он заполняет буфер и повисает на write.

Исходный процесс висит на write в stdin дочернего, дочерний пытается записать в свой stdout, который никто не читает.

Два дурака.

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

Папа опрашивает его stdout в надежде получить данные. В бесконечно цикле. Но их не будет.
Потому что дочерний процесс ждёт данных

Два дурака

Собственно, возникает вопрос - "Где деньги, Зин?".
В смысле, как с этим бороться

Тут есть несколько решений.

Самое простое - сделать две нитки (thread) - первая пишет данные непрерывно, вторая непрерывно читает.
При достижении лимита буфера читателем тот будет блокироваться на write в stdin ребёнка, пока место не появится снова.
Читатель будет вычитать и обрабатывать все данные из пайпа ребёнка, как только они появляются.

Оба пайпа утилизируются, и всё работает заебись

Это решение, но не сказать, что очень хорошее. Есть немало других.

Другое решение - это неблокирующиеся чтение/запись.

write/read можно сделать неблокирующимися. При попытка чтения или записи системный вызов не повисает, а сообщает, сколько данных он смог записать.
Анализируя эту информацию, мы можем спланировать запись в stdin и чтение из stdout.

Нам наверняка понадобятся sleep, потому что дочерний процесс работает не мгновенно
Но это не идиотский sleep из исходного примера, а вполне сознательный.
Мы жертвуем latency в угоду thoughput и scheduling.

Есть и третье решение . Асинхронное чтение запись.
Мы запускаем асинхронно запись и идём заниматься своими делами.
Асинхронно запускаем чтение.
Занимаемся своими делами.

В некоторый момент мы опрашиваем состояние записи и чтения - завершились ли?
Если да - запускаем новые задачи.

Разница по сравнении с решением с нитками (threads) состоит в том, что эти нитки находятся внутри ядра, а пользовательская нитка - одна.

У этого решения свои плюсы и минусы
sleep тут тоже может быть нужен

Есть и четвёртое решение. Мультиплексированный ввод вывод.

Похож на неблокирующееся выполнение, но концептуально совсем другой.
Мы делаем чтение и запись, неблокирующиеся.
Опа пайпа суём в специальный системный вызов - select либо poll. Простите, select только для сетевых сокетов. Значит, poll. Там есть ещё ньюансы, типа создания евента, но это детали.

В тот момент, когда у нас данные записались (в буфере есть свободное место) либо прочитались (дочерний процесс что-то нам передал через пайпа и мы это прочитали), poll завершается.

Из его результаты и пары дополнительных вызовов мы узнаем, что именно завершилось и как именно.
Обрабатываем. И снова запускаем.

Нету sleep. Нету переполнений. Deadlockов.

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

А то получится как у автора кода из начала поста... write у него "виснет".




И читайте комменты у оригинала - http://zamotivator.livejournal.com/606936.html#comments

2016-01

Комьюнити, хаброта, фискальный next-gen, и местами аж до киберсина. Тезисно.

TLDR: Почему хабр скатился в говно? В какое говно скатится стэковерфлов? Может ли скатиться в говно электронное правительство? Скандалы, интриги, расследования :)

0. Любые правила (введенные технически или административно) приводят к определенному отсеву и формировании культуры сообщества.

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

1. Не-модерируемые системы (E-mail)
В организации отражают соцструктуру организации. В диком интернете - скатываются в спам.

1б. E-mail с антиспамом
В целом, то же самое.

2. Модерируемые мейллисты
Зависит от модератора (да, я кэп). Не масштабируются по очевидным причинам.
Скайпочаты и краткосрочные Фейсбук-группы имеют сходную динамику

2. FIDO и прочее
Не участвовал, не могу прокомментировать.

3. Форумы с кармой, "спасибо" и медальками*
Конечно, неправильно их все под одну гребенку, но в целом интересная среда, требующая, тем не менее, активного участия команды модераторов. Один модератор заебывается.
Если есть только карма - система склонна вырождаться. Медальки намного лучше - хоть и грубо, но отражают то, что у людей более одного "свойства".

Поскольку карму могут крутить не только модераторы, назовем это метамодерацией первого поколения.
Масштабируются довольно далеко. Вырождается, если модераторы заебываются постоянным притоком новых юзеров (Eternal September), хорошо держится, если комьюнити тематическое.

Спам обычно загоняется в тематические разделы ("купля/продажа")

4. Метамодерация второго поколения
Ключевое отличие - карма дает привилегии автоматически, а также усиливает действия (вес голоса и т.д.)
Очень хорошо выдерживают взрывной рост комьюнити. После чего вырождаются в культ "желтой прессы" (написать что-то, что хочется импульсивно оценить - Slashdot, Хабр) и взаимного облизывания (eBay)
Умеют отсеивать примитивный спам, уязвимы к спаму, маскированному вбросами.

Масштабирование, как и с форумами, улучшается тематической фрагментацией (Reddit)

5. Метамодерация третьего поколения
Ключевое отличие - действия, которые могут быть оценены, имеют более-менее обьективную структуру.
Также обычно правила написаны не с бухты-барахты, а довольно-таки точно.
Также обычно есть мета-форум с открытым обсуждением этих правил. Тоже имеются медальки.

Пример - StackOverflow. Очень хорошо масштабируется, открытый комьюнити-процесс помогает селекции более адекватных модераторов, чем в Wiki и Habrahabr, но тоже имеет свои пределы.

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

6. Неявная модерация

Сообщения (не группы) Facebook, VK, Twitter, whatever.
Черный ящик эвристик которые направлены, в основном, на подавление фишинга, вирусов и спама.
Уязвимо к скатыванию в цензурирование.

7. Я тут еще дофига всего опустил. В частности, нету Wikipedia, Wikia, Ning, LiveJournal, Diary.ru, ClosedCircles, стандалонов, Google+, Steam Trading Cards, внутричатов MMO (они еще и разные бывают). Дополнения всячески приветствуются.

8. При чем тут фискальный nextgen и киберсин?
Я утверждаю, что очень скоро вся эта карма и плюшки начнут применяться для автоматического принятия решений, вначале посредством экспертов "чего б нам такое замутить", а потом и полностью автоматически. Примерно с такими же последствиями, как сейчас применяется налоговое законодательство.

В этот прекрасный новый мир хорошо бы вьехать подготовленными. Поэтому - discuss!

--

* медальки, которые не являются символами статуса "этот персонаж крутой", а которые демонстрируют "историю" персонажа, из которой надо *самостоятельно* делать выводы.

This entry was originally posted at http://wizzard.dreamwidth.org/323879.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

Чуть-чуть еще про security современных браузеров

...и иллюзию контроля над тем, что сайт делает у вас на машине

...а также иллюзию того, что историю и куки можно чистить, а от browser fingerprinting - уйти.

Я нашел чудесный сайт, на который можно аплодить картинки (и смотреть эти картинки, естественно), при этом ни аплоад, ни даунлоад не показывается в network debugger'e :)

HTML5 рулит, да. Никаких плагинов.

Это в дополнение к antidebug tricks, которые в JS тоже возможны, да)

P.S. я сайт пока не показываю потому что ищу, можно ли этой техникой раскопать внутренний IP посетителя и/или его айпи "до VPN"

UPDATE: PoC - http://wizzard.dreamwidth.org/306493.html

This entry was originally posted at http://wizzard.dreamwidth.org/298960.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

cloudflare редкостные мудаки

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

ни капчи, ни куда писать, ничего. "Access Denied" и все. что делать, спрашивается?

protection from cloudflare - защищаем вас от посетителей, блять.

интернет стремительно скатывается в редкостное говно.

This entry was originally posted at http://wizzard.dreamwidth.org/293621.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

git vs mercurial

Накопился определенный опыт работы с одним и с другим.

В общем:
Git: it works, but you have to learn it, tune it and tweak it.

Mercurial: it just works. you can tune it if you want, but it just works.

Еще с гитом я успел повлетать в пачку неприятных моментов когда пуш/пулл тупо не проходили, или репозиторий корраптился. Хорошо, что есть reflog.

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

В гите такое же действие приходит к тому что эмм надо долго шаманить с настройками, прежде чем пройдут особо крупные коммиты. Можно? Можно. Удобно? Не очень.

Хотя "непроходимость коммитов" случалась даже на мелких репозиториях, если делать рефакторинг.

С меркуриалом "history is sacred". Кому-то это нравится, кому-то нет. Мне - нравится.

Гит, напротив, должен быть приятен тем, кто подрабатывает в министерстве правды и правит коммиты задним числом.

Итого, для себя для продакшена - меркуриал. Гит неплох, но отвлекает. Меркуриал - просто и естественно становится частью рабочего процесса.

Плюс, "windows is a first-class citizen for mercurial". Hg Workbench на первый взгляд страшен, но уже через пару дней реально удобная тулза. Тестеров и джуниоров она тоже не пугает, что немаловажно.

А, да. SVN остается для особо сикретне проектов, где важна необходимость ограничивать доступ с гранулярностью до папок и оправдан оверхед на неудобные мержи.

Как-то вот так.

This entry was originally posted at http://wizzard.dreamwidth.org/251661.html. It has comment count unavailable comments. Please comment there using OpenID.

2016-01

да что ж за засада такая-то

почти все письма от ми попадают в спам, стоит только попытаться написать людям “я хочу у вас купить то-то”.

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

засада какая-то, вообщем :/ как с этим бороться? а то телефоны не все пишут, да и не всегда удобно звонить (ночью например…)


2016-01

Как правильно готовить Visual Studio

Disclaimer: Я использую VS в основном для C# и Javascript. Да, там стоят еще плагины на PHP, Fortran, Python и F#, но использую я их намного реже.

1. Расширения

  • Hide Main Menu – скрывает панель меню, как в Explorer, до нажатия ALT. Бережем пространство на экране :)
  • Javascript Parser – показывает дерево элементов JS-файла. Правда, чего не хватает этому расширению – автоскрытия панели на других типах файлов. Впрочем, C# и JS вперемешку в одном проекте все же встречаются редко.
  • JSEnhancements – свертыватель регионов в JS и подсвечиватель парных скобок. Must have. Надо сказать, что эту фичу у VS Team просят уже несколько лет, но они упорно закрывают ее с Won’t fix. Почему – непонятно((
  • Productivity Power Tools. Тут много. Одни Quick Access и Solution Navigator с быстрым поиском чего стоят. Еще, Ctrl+Click для Go To Definition – тоже must-have вещь, которой нету в штатной поставке VS из-за патентных троллей :/
    BEWARE: текущая версия Power Toys крашится, если у вас не-английская локаль и вы пользуетесь Quick Access. Обещали пофиксить. Пофиксили.
  • VS 10x Code Map – то же самое, что и Javascript Parser, только для C# и красивее. Умеет сворачивать и разворачивать куски файла синхронно с превьюшкой. На больших файлах тормозит.

1.1. Еще стоит посмотреть на Image Insertion, Regex Editor и Tangible T4 Editor. Я их ставил, но пока не привык. Поэтому ничего не пишу %)
Color Theme Editor, XAML Intellisense Presenter, Visual Studio Tip Of The Day Start Page, VSCommands 2010 может кому приглянутся.

1.2. Нет, я не использую ReSharper. Иногда, впрочем, ставлю, окучиваю какой-нибудь очередной опенсорс проект до приятного мне вида, потом удаляю. Потому что тормозит :/

2. Сглаживание

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

3. Настройка окон (кликабельно)

image

Как-то вот так. Но это по вкусу, конечно же. Для C# место JS Parser’a занимает Code Map, остальное остается так же.
Еще я Error List и Find Results часто выношу на второй монитор.

4. Критика, пожелания, советы? :)


2016-01

Алгебра данных и исчисление мутаций (перевод)

Решил перевести для не-англоговорящих коллег найденное
простое и наглядное введение в ADT.
Комментарии и исправления приветствуются :)

Ссылка на оригинал – в конце поста.


Читать статьюCollapse )