Ничем не примечательный ЖЖ
[Most Recent Entries]
[Calendar View]
[Friends]
Below are the 20 most recent journal entries recorded in
gds' LiveJournal:
[ << Previous 20 ]
| Sunday, July 5th, 2009 | | 12:03 pm |
fido, текущий взгляд
цитата из разговора посредством IM (ник собеседника заменил, так как не знаю, как он отреагиюрует на постинг) (11:48:13) n: меня ща беспокоит, почему ффиде нифига нет почты.. сломалось чё, или ет? (11:49:31) gdsfh: неужели наконец вся пидошка сломалась? вот щасте будет! (11:51:55) n: кому щастье? (11:52:50) gdsfh: людям щасте будет. забудут это как страшный сон. (11:53:26) n: кого забудут, бинкд или гойдед? (11:59:22) gdsfh: бинкд мало привязан к пидошным стандартам. адресация, резолвинг, спец.обработка pkt и аттачей, и вроде как всё. гойдед -- забыть надо. вместе с кучей ебанутых форматов -- msg, pkt, squish, jam и так далее. как я помню, не-ебанутых там действительно мало. соответственно, забыть нахуй тоссеры, линкеры баз, пуржеры. но это с технической точки зрения. главное же, что надо забыть, предварительно надругавшись над, это ебанутая иерархия, свинское поведение (следующее из духа фидо и иерархии), эти смешные "модераториалы" (блять, арифметика звёздочек! ебануться можно!), пидорасов-клоунов и клоунов-пидарасов, скачущих по всей пидошке, фимозников, фидарасов, ебанашек с ЧСВ овер 9000, модерашек с синдромом вахтёра, и прочих достойных личностей. НАТЕ НАТЕ НАТЕ11111 // с уважением, 2:469/105. | | Monday, June 29th, 2009 | | 10:37 pm |
gobby
На данный момент единственная польза от icfpc'09, в котором я не участвовал, состоит в том, что узнал о существовании софтины gobby -- редактор, позволяющий совместно редактировать текстовые файлы, по tcp/ip, в реалтайме. Кроссплатформенный, выделение цветами кто-что редактировал, есть выделенный сервер (sobby), есть встроенный чат. Мне давно такой штуки не хватало. Может кому-нибудь тоже вдруг. Единственное, что ниасиливаю -- их концепцию файлов. Всякими autosave-{interval,file,directory} не получилось нарулить простую и тупую модель, в которой был бы сервер, хранящий файлы и директории, и была бы возможность работать с файлами, имея централизованную рабочую копию файла на выделенном сервере. Пока же получилось только так: инициатор сессии берёт свою копию файла, создаёт сессию редактирования этого файла, и уже всё работает дальше относительно его рабочей копии, что кажется не слишком удобным. | | Wednesday, June 24th, 2009 | | 8:40 pm |
misc
Сделал бастурму по технологии d_sanin, описанной тут, с подробностями и картинками. Первые, самые мелкие кусочки уже готовы, сейчас попробовал один. Понял ошибки, понял методы улучшения, но, в целом, получается весьма приятное вяленое мясо. Есть две основные проблемы при изготовлении: 1. специя "чаман" (также известная под кучей других названий) не везде продаётся. Мне повезло, у нас на базаре есть. И продаёт её грамотный чел в шаблоноразрывающей майке "Microsoft Sales Manager", 2. свежая говядина, нужный кусок. То, что у автора называется "щуп", у нас ищется как "мясо с внутренней части бедра". Однако и из другого мяса тоже ок. Смысл -- чтобы было меньше прожилок и подобного. У меня вроде даже из шейки, не помню точно. Остальное не проблема совершенно. Справится даже самый блоггер. А я тем временем зомышляю. На icfpc команду собирать не думаю, так как я с тех пор не стал сколько-нибудь заметно лучше хоть в каком-нибудь плане, а условия тут ещё более жёсткие. Разве что чисто для себя порешаю, если будет иметь смысл. Из программирования -- пытаюсь понять на практике, до какого уровня применимы окамловские функторы. Типизация у них, конечно, интереснее, чем у обычных значений, но и ограничения: всё, что входит-выходит в-из функтор(а), может оказаться не first-class value, то есть, и не значением вообще. А, например, модулем, как любезно подсказывает К.О. Бинарные билды overbld -- это, конечно, круто, но надо бы и публичный репозиторий с исходниками поднять. В идеале -- с публичным push. Из vcs я уважаю mercurial и недолюбливаю git, однако у людей свои предпочтения. Если брать "и нашим, и вашим", то нужен какой-нибудь софт для того, чтобы иметь репозиторий (или два) с доступом как по протоколу mercurial, так и по протоколу git. Но разница между ними слишком большая, поэтому, предполагаю, технологически проще было бы сделать два репозитория и грамотную синхронизацию между ними. Фактически, от репозиториев, хранящихся где-то на сервере, требуются только функции clone, pull, push: создать копию репозитория, стянуть чужие изменения в локальную копию, засунуть свои изменения в удалённый репозиторий. А между двумя репозиториями -- two-phase commit protocol, или же тупые блокировки, что непринципиально. | | Sunday, June 21st, 2009 | | 12:38 pm |
Вчера отдыхали в лесу у реки. У рыбака выменяли мелкую рыбёшку (\approx 15см), и мне доставило некое удовольствие своими руками её убить, распотрошить и тут же зажарить. Пожалуй, эта рыбка посредством моих рук прошла самое быстрое преобразование из живого существа в еду, которое я видел в своей жизни. Пишите хороший код, а плохой код не пишите. Вместо написания плохого кода лучше отдыхайте на природе, в хорошей компании и с жареным мясом. | | Friday, June 19th, 2009 | | 12:23 am |
OVerbld
Как обычно. Те, кому я говорил про OVerbld, мало понимали смысл, а тем, кто мог бы понять, я не говорил из-за неуместности и вообще скуки всего этого унылого процесса. keywords: ocaml windows mingw x86 x86_32 binary distribution repository В целом, я сделал систему сборки окамла и библиотек (весьма общую, не ограничивающуюся окамлом), работающую не только под юниксами, где всё тривиально, но и под виндами (конкретнее, из cygwin/mingw/msvc в качестве основы выбрал mingw как наиболее расово-верную платформу; msvc тоже нужен и скорее всего будет, а cygwin сделать вообще легко). В планах — расширение набора библиотек и прочие нехитрые радости жизни. Однако, оказалось, исходники — это мало кому нужно, и сейчас в моде бинарные билды. "Да хуйня вопрос!", — сказал я, и надрочил бинарных билдов под винду. Ну реально не жалко, и самому полезно. Всё это дело я решил обозначить урлом http://overbld.tk/, однако, из-за неведомой ёбаной хуйни данная ссылка открывается не всегда, поэтому и доступность повышу, и заодно пропеарю моего хостера, который помог как минимум мне, как максимум кому-либо из вас: http://overbld.abcname.net/Акута матана. И вообще, уважайте матан. | | Wednesday, May 27th, 2009 | | 1:53 pm |
| | Thursday, May 14th, 2009 | | 3:39 pm |
safe bash coding guidelines Заметки о безопасном программировании на bash / Safe bash coding guidelines
У меня была и есть необходимость писать некоторый код на bash.
Как выяснилось, не всё так плохо: в отличие от sh, bash кое-где
стремится сделать шелл-программирование более безопасным.
Однако, шелл — он и в африке шелл: нетипизированное интерпретируемое
тормозное неконсистентное говно, однако незаменимое в некоторых
случаях.
Я использовал не слишком много возможностей баша, и не старался
попробовать всё. Мне в первую очередь нужно было, чтобы как можно
меньше времени и сил уходило на отладку, я хотел минимизировать ущерб
от багов своего кода, и мне очень нужна кроссплатформенность.
Всё, о чём я пишу в этой статье, хорошо работает на современных
линуксах, на бсд и даже под виндой (mingw/msys).
У меня по условиям задачи есть баш. Ни на какие другие шеллы
я не рассчитываю. Соответственно, всё нижеследующее касается
только баша.
( Read more... )
exit 0
Как видите, геморроя в баше много. Не используйте его там, где он не нужен.
К счастью, он редко когда нужен, и редко когда нельзя обойтись бинарником,
написанным на нормальном языке программирования.
Ну и да, пишите хороший код, а на баше не пишите.
Пост будет обновляться по мере получения информации по данному вопросу.
Редакция будет рада обратной связи, замечаниям,
дополнениям, критике и прочей фигне.
Редакция вообще очень рада бывает иногда.
| | Thursday, May 7th, 2009 | | 10:31 am |
on-disk datastructure для мозга
В последний год кое-как занимаюсь гидропоникой. Ничего криминального не выращиваю, чисто как proof of concept. Так же, как несколько лет назад выращивал грибы из спор. И так же, как с грибами, сталкиваюсь с неприятным свойством информации: взаимосвязи между понятиями в пределах одной области очень тесные, и любая попытка разложить их линейно, в виде последовательного текста (книги, статьи) требует, чтобы в мозгу читателя создалась чёткая картина. Чтобы были на отдельных полочках все понятия, чтобы были чётко очерчены взаимосвязи между ними. Разумеется, процесс этот не быстр. Я читал несколько относительно серьёзных книг (одна обычно в файле "HowToHydroponics.pdf", вторая — старая и классическая Зальцера, и ещё какие-то помельче), кучу статей по разным аспектам гидропоники, и только таким образом хоть какая-то картина сложилась. А эти книги — это не научные статьи с требованиями о лаконичности изложения материала. Немалая часть текста там — реклама гидропоники, её отличия от возни с землёй, разрушение стереотипов. Вещи правильные, но на десятой статье немного надоедают. Кроме того, часты случаи предоставления ненужной информации — той, которая в реальной жизни не пригодится. А теперь вот мне нужно передать полученную информацию моему реаллайф-другу, в жыжыцэ неизвестному как walrus_bta, который, с одной стороны, насмотрелся на всякие баночки с водичкой и кустиками, а с другой стороны, имеет доступ к хорошей рассаде, например, помидоров. Когда стал вопрос о пересадке растения из земли на гидру, я уже был озадачен. Накидал ссылок на несколько статей, но ни одна из них полностью не описывала все грабли, на которые можно наткнуться в процессе. Нужна какая-либо форма передачи информации, которая была бы приемлема для лёгкого всасывания мозгом. Проводя параллели с программированием, хочется сделать структуру данных, по которой удобно ходить, если она расположена на внешнем хранилище данных, без требования о десериализации её во внутренний формат мозга. Простой пример: одно из центральных понятий гидропоники, "питательный раствор". Должны быть связи с другими понятиями: с водой (какая/как), с химическим составом, с концентрацией (а она, в свою очередь, с вопросами о том, какие проблемы будут, если её сделать больше или меньше нормальной). Химический состав должен быть связан с готовыми минеральными удобрениями, с классическими "самодельными" минеральными смесями, с вопросами о допустимости органики в растворе, тут же связь с водой (а именно, необходимость коррекции состава в зависимости от жёсткости воды). Должен быть описан процесс "приготовление раствора по <какой-либо схеме>". Как видите, внутренних связей очень много, в линейное представление уложить непросто. Формат вики (и гипертекста в общем понимании) — близко, но недостаточно: гемор с ручным проставлением ссылок, да и неудобно будет всё это структурировать. Формат mindmap'ов — ближе, но все софтины, которые я видел, казались какими-то неудобными, закрытыми (closed source), без возможности удобного "экспорта" для публикации в инете (что и понятно — кому свой mindmap захочется публиковать), да и не совсем хорошо там структурировать подобную информацию. Если у кого-нибудь будут идеи — абсолютно любые! — по озвученным тут проблемам, буду рад обсудить. Задача передачи информации встаёт часто, и выращивание грибов, выращивание растений — это не только два случая, когда это нужно. upd1 Стоит ли пытаться визуализировать понятия и связи между ними посредством графа на плоскости? Плюсы: становится обозрима вся структура, навигация упрощается до безобразия. Минусы: гемор, не всё можно красиво уложить на плоскость, автогенерация графа вызовет изменение местоположения отдельных частей, что не будет стыковаться с картиной, которую запомнил отдел мозга, отвечающий за "пространственную память" и прочую гоеметрию. | | Thursday, April 23rd, 2009 | | 12:20 am |
autoconf
Жизнь дала трещину :) ./configure без аргументов в качестве префикса использует, допустим, /usr/local. (а ведь ещё можно указать --prefix=/usr или что-то ещё). А под mingw окамлу и прочему софту нужны пути в виде "drive:/path" — с явным указанием диска. Можно было бы до создания myconfig из myconfig.in (т.е. до "AC_OUTPUT(myconfig)") в configure.in написать код для mingw, что-то типа my_prefix=`cd ${prefix} && pwd -W` # pwd -W даёт путь вида "drive:/path" AC_SUBST(my_prefix)
, но проблема в том, что до AC_SUBST переменная prefix может иметь значение, например, "NONE". Миленько, cd ${prefix} не выполнится. Причина "NONE" понятна: значения, не определённые configure-скриптом, должны получить разумные значения по умолчанию. Они получают значения по умолчанию в тот момент, когда configure-скрипт уже точно ничего не сможет переопределить: в самый последний момент, при AC_OUTPUT, и значения по умолчанию могут быть взяты из ${prefix}/etc/config.site (хост-специфичные значения). В рантайме, во время выполнения шелл-скрипта myconfig, очень вероятно, что будет совершенно другая environment, в том числе, может использоваться другая инсталляция mingw/msys, поэтому абсолютные пути надо прописать при ./configure. В качестве тупого варианта — генерить не myconfig, а generate-myconfig.sh.in, в котором указать prefix=`cd "@prefix@" && pwd -W` echo "prefix=\"${prefix}\"" >> myconfig
, и который запускать сразу из ./configure. Элегантность потрясающая. Есть идеи лучше? | | Saturday, April 18th, 2009 | | 1:55 pm |
autoconf
Хоть вы меня за яйца подвесьте, но я не считаю autoconf уродливым. Это же шелл-скрипт. Он таким и должен быть. Особенно учитывая, какие к нему предъявляются требования (а именно: работать всегда и везде, где есть unix-style командный интерпретатор, и не просить ничего кроме него для своей работы). Да, я только про autoconf, остальными autotools я не пользовался. (хотя shtool мне понадобится, наверное. automake и libtool -- точно нет.) Кстати, если бы в баше было получше с квотингом (или если бы я сел и осмыслил, каково точное положение с квотингом в баше), HOFs точно реализовал бы. Там даже что-то вроде лиспа получилось бы. Конечно, производительность была бы удрочающая -- часто дёргал бы башевский eval (который не дешёвый), и частенько рожал бы subshell, что тоже дорогая штука. Поэтому более правильным было бы компилировать какой-нибудь простенький dsl в bash-скрипт. Хотя бы лямбда-исчисление со статической типизацией, простейшими статическими типами и mutable values. Но пока писать на баше проще, чем изображать dsl -> bash транслятор. | | Friday, April 17th, 2009 | | 9:21 pm |
netcat (dumb) for windows
I wrote a software with base functions of netcat (very dumb, really) for windows, to use it in my OVerbld project. I can't imagine a future of OVerbld, but netcat/win can be useful alone. netcat_dumb is able either to send stdin to host_{addr,ip}:port, or to listen port and write received data to stdout. I wrote in in cpp + C. I like the dirty cpp macros, yeah! Binary mode for STD* file descriptors works ok on windows, it compiles under mingw, freebsd and generally under almost any unix (with includes/libraries fixing, maybe). I host it here: netcat_dumb-0.1.tar.bz2. Host may be down sometimes (0.1% avg downtime). Write me (jabber/mail/lj) if you need this software but the host is down. | | Tuesday, April 7th, 2009 | | 6:00 pm |
кошко
У одной из кошек, когда она хочет жрать, есть дебильная привычка: залезть на подоконник (с ногами!) и начать щипать листья растений, стоящих там. Конечно, меня это раздражает, я обращаю на это внимание, кошке этого достаточно. Но недавно я решил устроить маленькую подлость. Проверил, что кошки не любят зелёный лук. А от белого так вообще ШОКЕ ШОКЕ. Засадил нехилую гидропонную бадью с луком, и сам ел его, и ждал. И сегодня это случилось. Прилёг на диван после трудовых будней, кошки хотят жрать, а жрат у них только через час по графику. Одна залезает на подоконник и начинает щипать лук. Отщипнула, съела, пару раз повторила. И так жалостливо смотрит на меня. Типа "хозяин, давай мясо по-хорошему, противно же". Сдаётся мне, что она нашару говна нажралась. "Нет, всё-таки природу я люблю". | | Sunday, April 5th, 2009 | | 12:44 pm |
Sapka contest. Это — НЕ отзыв о контесте. Что бы там ни думали благородные доны. ( Read more... ) | | Friday, March 6th, 2009 | | 11:13 am |
Sapka
Sapka contest — http://stanfy.com.ua/contest/Говорят, будет интересно. В стиле ICFP. У меня не факт, что всегда будет время в течение недели проведения, и есть ещё два человека с такими же disabilities. Зарегистрировал команду номер 163. Основной язык — угадайте. Предварительная коммуникация — в нашем гламурном чятике ocaml@conference.jabber.ru. | | Thursday, March 5th, 2009 | | 2:36 pm |
bash
изначально писал в жаббер кое-кому, но опубликую здесь. Сейчас применил интересный приём в баше. paralleling is easy!111 Нужно мне посчитать дайджесты файлов, чтобы их вместе с файлами послать. (секурити, ёпт) Можно так (пишу на псевдокоде и опускаю требуемый квотинг; думаю, будет понятно): for F in files; D=$(get_digest $F); send $D $F; done;
а можно так: function get_digests () { for F in files; do get_digest $F; done; }
function send_digested () { for F in files; do read D; send $D $F; done; }
get_digests | send_digested
Весь прикол -- в параллельности. В первом случае дайджест считается, ждём результата, результат берётся в D, файл и дайджест посылаются по сети, затем переходим к следующему файлу. Во втором случае get_digests считает все дайджесты по порядку, пишет их в stdout, а send_digested кушает их из своего stdin'а по мере необходимости. В результате получаем, что все * дайджесты уже посчитаны во время посылки первых файлов, и общее время поддержания сессии сокращается. Да, и укрепляюсь в идее написания "safe bash scripting guide". Ибо на баше кодить — удовольствия мало, так хоть проблем чтобы поменьше было, и то хорошо. _____________________ * — наёбка. | | Wednesday, February 11th, 2009 | | 6:25 pm |
Все знают утилиту less. (а кто не знает — тому будет неинтересно.) Если ей в stdin срать текстом, она будет его отображать на экране. Проблема в том, что иногда хочется запустить какую-нибудь компиляцию, результаты которой постранично листать. С помощью less это не получится: если некоторое время не листать, то буфер заполнится быстро (там 4kb, что ли, обычно; не суть важно), и компиляция уснёт, ожидая, что кто-нибудь прочитает её stdout. Можно в less нажимать pagedown, но надо нажимать после каждой страницы, что обычно геморно. Можно нажать End и затем Home -- сначала получим весь результат, а потом только сможем начать его просматривать, что не кошерно (хочется следить за процессом, не дожидаясь его окончания). В man less ничего про подобное не написано, да и не только для less нужна подобная штука. Интересно, есть ли утилиты, жадные до stdin'а, и отдающие результат чтения в stdout по мере возможности? Или может написать подобную штуку? | | Saturday, January 31st, 2009 | | 12:26 pm |
По поводу моего выпадения из жабберов всяких — вывел правило. СНАЧАЛА — читать /usr/ports/UPDATING, ПОТОМ — делать portupgrade -a. Из полезного навернулись pidgin, mplayer и vlc. Ничего важного не требует жаббера сейчас, поэтому подожду, пока оно дообновится. Заодно появилась куча времени, которое тратилось на IM прямо и косвенно. Воспользовался сэкономленным временем и продвигаю свой проектик OVerbld (о нём как-нибудь потом расскажу; кстати, название проекта должно чётко вызывать две ассоциации — "есть контакт"?). Ещё никогда не писал столько на bash + sed + рядомлежащих утилитах. Может потом как-нибудь созрею на статейку типа "safe bash coding". Далее, после обсуждения в окамловском чятике у меня появились идеи, как под mingw и msvc завести ocamlnet, так же как и некоторый другой софт, написанный под юниксы изначально. Я нашёл этому поистине чудесный метод, но посты жажи слишком узки для него. Кроме "sick my duck" подумалось "you cook socks". Хоть пришло в голову само, urban dictionary это уже знает. | | Tuesday, January 20th, 2009 | | 9:20 pm |
bash/msys/wine/bsd
Никогда не мог подумать, что это может случиться. Сейчас меня расстраивает нежелание wine под bsd эмулировать bash, скомпилированный под win32 и входящий в msys. И bsd, и wine старые, но — сам факт каков! | | Monday, December 22nd, 2008 | | 6:52 pm |
Пытался автоматизировать скачивание одной штуки с закрытого форума. wget url -- forbidden. Ну, думаю, user-agent проверяет. Взял какой-то юзерагент из интернетов, подсунул, не помогло. Думаю, может левый юзерагент, надо в реальности посмотреть, какой шлётся. Расчехлил tcpdump, посмотрел и переписал юзерагента. Снова forbidden. Посмотрел ещё в запрос от браузера, увидел "кукисы"™. Почитал документацию, решил подсунуть их -- на всякий случай, вдруг в этом дело. Не помогло. Долго чесал репу. Хотел весь запрос запихать в wget. А потом решил проверить, какой заголовок отсылает wget. Делаю tcpdump -s 0 -X -v dst somehost... Смотрю -- ничего не отсылает, а forbidden каким-то хреном получает. Оказалось, в окружении стояло http_proxy, оставшееся со старой сетевой конфигурации, и прокси запрещал доступ, тогда как в браузере стояло "прямое соединение к интернет". Ситуация называется "горечко от умишка". | | Wednesday, December 17th, 2008 | | 3:07 pm |
Господа, я решил признаться в собственной ментальной импотенции. Несмотря на то, что задача из предыдущего поста решается просто, хотя бы даже индукцией по AST, состоящему из значений, более общая задачка, которую я решил поковырять, строго, в coq, не решается. Я хотел доказать, что для любой операции "@", про которую известно _только_ такое: a@b = b@a, a@(b@c) = (a@b)@c, верно утверждение, что выражение a@b@c@...@z зависит только от значений входящих в него переменных, и не зависит от расстановки скобок в выражении. В терминах Coq я бы сформулировал это через multiset'ы: если multiset'ы, состоящие из значений переменных, равны, то равны и значения любых выражений, составленных из этих переменных. Но не так-то просто это доказать, как оказалось. Даже с помощью могучего beroal, рассказавшего мне про Coq очень много интересного, у меня не получилось доказать всё строго, в Coq. А пишу я всё это только потому, что вопрос надо закрыть, каменты раскрыть, непричастных наказать, виновных наградить, детям цветы, бабам мороженое. Иногда были вещи, о чём написать (буквально насрать на ваши мониторы посредством вашей же уютненкой жежешечной фиенд-ленты), но это было неприемлемо из-за такого висящего вопроса. Теперь же — берегитесь. |
[ << Previous 20 ]
|