← All posts tagged дом

Kim
политота juickppl Вот @Muu снова попробовал подумать. В этот раз о терроризме (популярная тема) и снова получил 0% попадания в реальность.

"Давайте раздавать гражданам огнестрельное оружие!" — ага-ага, и смертники-шахиды перестанут совершать теракты, потому что будут бояться погибнуть от пули вооруженного гражданина, да-да.
Вот так @Muu смеется над государственной политикой Израиля. В государстве где терракты происходят каждый день именно наличие оружия "у своих" позволяет уменьшить количество жертв. Террористы выходят с ножами и получают пули в лоб забрав одну-две жизни вместо десяти-двадцати.

Корень этого заблуждения силовика-государственника кроется в том, что он понимает только один вид террактов: Бомба. Против бомб вооружение населения бесполезно, но против вооруженных атак население с доступом к оружию защищаться уже может.

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

В общем, все что остается антигосударственникам-либертианцам-анархистам, это призывать смириться со взрывами и жертвами. Ну надо потерпеть, ага. Народца еще много в стране, а Швабодка — она одна!
И промазав по всем двум надуманным пунктам @Muu решает промазать ещё и по третьему. Он пытается отказать людям в долгосрочной профилактике террактов (пропаганде свободы личности, которая начинает ценится выше интересов террористической организации), ради краткосрочных профитов, наличие которых он даже не может аргументировать.
Kim
ЖЖ вело купил пару конденсаторов на 50 вольт/10000 микрофарад, несколько диодных мостов, пару стабилизаторов напряжения с пятивольтовым выходом. Разобрал старый принтер — извлёк пару электромоторчиков (нет, там не шаговый двигатель) осталось найти колесо и можно сварить динамомашину на велосипед. Проблема только одна: как же на это корпус собрать
Kim
ЖЖ BL русский Достала меня неспособность грамотно выражаться. Постоянно в речи, особенно в письменной, вылезают косяки с пунктуацией и неразбираемыми сложноподчинёнными предложениями. Я сам с трудом восстанавливаю что имел ввиду, когда писал.
Kim
Juick life BL жуйц, а тебе знакомо чувство, когда собеседник вроде бы согласен с каждым твоим доводом, но результат вызывает у него острое неприятие и ему приходится долго подбирать логическую аргументацию, где ты не прав. Оно мне нравится.
Kim
вело bike Екатеринбург Вот это единственная Екатеринбургская велодорожка. Идёт по куску леса между новым микрорайоном и городом, то есть находится в жопе города и особого смысла не имеет. На этой велодорожке есть все радости городского велосипедиста: Канавы с тракторами, высокие поребрики и гуляющие пенсионеры (последних в середине буднего дня почти не было, а кто был — в кадр не попали).

Радуйтесь, сограждане, теперь у нас настоящий европейский город с велодорожкой.

Kim
GNU fsf license На сайте проекта GNU опубликовали рекомендации по выбору лицензии gnu.org

В кратце в зависимости от условий рекомендуют Apache 2.0 и LGPL/AGPL/GPL наиболее свежих версий для различного софта, в зависимости от пары условий. FDL для документации, CC0 для небольших примеров кода (которые по сути тоже документация). Данные[1] рекомендуют лицензировать под той же лицензией, что и код. Если это не возможно, или данные не предназначенны для работы с конкретным кодом, то GNU советует выбирать подходящую лицензию из gnu.org среди которых отдельно рекомендуется брать CC BY-SA

---
[1] All other works for practical use that you might include with software. This includes icons and other functional or useful graphics, fonts, and geographic data. These recommendations do not concern artistic works that have an aesthetic (rather than functional or educational) purpose.
Kim
interface обзор Raskin Джеф Раскин в своей книге "The Humane Interface: New Directions for Designing Interactive Systems" описал как надо строить интерфейсы. В первых трёх главах были введены основные принципы на которых должен строиться интерфейс, в четвёртой главе рассказано о том, что эффективность интерфейса можно оценивать численными методами. В оставшейся части книги Раскин рассказал про то, как по его мнению должен выглядеть адекватный интерфейс.

В качестве основных принципов отмечены:
1. Отсутствие модальности. При использовании какого-либо жеста (хоткея, пункта в меню под номером N) пользователь должен всегда получать один результат.
2. Монотонность. Для каждого действия должен существовать только один жест.
4. Акцент на формирование привычек. Главное чтобы пользователь мог сформировать привычки и выполнять действия не глядя.
3. Видимость. Всё что программа может сделать должно быть так или иначе видимо.
5. Человек может уделять внимание только одной задаче. Всплывающие сообщения на краю экрана или даже запросы подтверждения скорее всего будут не замечены.
В этом наборе единственное сомнительное правило это видимость, поскольку, как только привычки сформировались, она становится не нужна. Все остальные требования подтверждены рядом ссылок на исследования и опытом большинства пользователей.

Несмотря на то, что это замечательные принципы автор не может им следовать до конца. Так с первых страниц описания своего интерфейса он предлагает разрешить выделение и запуск команд не только с клавиатуры, но и при помощи графического устройства ввода (ГУВ), что является явным нарушением требования монотонности. Также он предлагает вместо одного выделения использовать стек выделений и позволить командам использовать произвольное число последних выделений как аргументы, что нарушает принцип видимости, поскольку глядя на название команды сложно определить сколько она требует аргументов. Кроме того автор, видимо никогда не использовавший Windows-клавиатуры, предлагает решить проблему apple-клавиатур на которых для удаления символов существует только backspace, введением режимов для курсора ввода текста (если его перемещали, то backspace работает как delete. После набора одного символа снова работает как backspace) и нарушением первого правила, вместо простого добавление клавиши Delete на клавиатуру. Также автор явно забывается и пытается перенести элементы интерфейса из Canon Cat (http://ru.wikipedia.org/wiki/Canon_Cat по описанию Раскина очень интересная машина) в zoomable user interface. Так в Canon Cat отказались от использования иерархической файловой системы. Вместо этого все документы были соединены в один длинный текст, содержащий символы разрыв документа, обозначающие начало и конец отдельных документов. В ZUI такой подход выглядит более чем странно уже потому, что при нём теряются плюсы от способностей человека к пространственной навигации. Описание ZUI в этой книге — это первое место, где действительно необходимо ГУВ. Использование ГУВ в остальных описанных в книге случаях противоречило требованию монотонности и, при применении GOMS анализа, давало как минимум не лучшие результаты. Но так как автор не заметил этой проблемы (или решил не описывать подробно по той причине, что он не знает как добиться видимости без ГУВ) нет ни одного слово про mouse-less ZUI. Так что вопрос их эффективности придётся решать читателю. Чтоб не быть голословным вот common-lisp.net реализация такого клавиатурного интерфейса и видео common-lisp.net с примером его использования.

Таким образом в книге стоит читать только первые четыре главы. Весь остальной текст, зачастую, не соответствует собственным принципам автора. Но при этом я таки вынес оттуда пару полезных ссылок на другие труды. Из того, чем хочется поделиться, это Psychology of computer programming за авторством Weinberg G.M.
Kim
garbage_collection Существует в общепринятых практиках ряд решений, которые меня в корне не устраивают. Одно из таких решений — использование сборщиков мусора, которые добавляют недетерминированные задержки в программу. В качестве альтернативы активно используется два подхода: Не собирать мусор и использовать сборщик мусора подсчитывающий количество ссылок. Проблемы этих подходов неоднократно описаны и сами подходы много раз раскритикованы.
Очевидным выходом из положения была бы разработка сборщиков мусора времени компиляции лишенных недостатков метода подсчёта ссылок (проблема: они очевидным образом не могут быть применены в большинстве языков), но работ в эту тему удивительно мало. Из того что можно посмотреть за вечер только mercury.cs.mu.oz.au
Kim
unix-way Путь юникс, то есть рекомендации по проектированию систем от Кернигана и Пайка, а не Великое Учение По Постороению Безупречных Систем, имеет ряд общеизвестных проблем. Самая банальная из них заключается в том, что UNIX-way не признает существования сложных задач. Согласно советам по дизайну программ [ werc.homelinux.net ] каждую сложную задачу можно разделить на несколько простых и решать их по отдельности. К сожалению это не так. Простые задачи покрывают сложную не полностью, и всё равно требуются тысячи строк кода при отходе от стандартного шаблона использования. В качестве иллюстрации напишу про ситуацию с текстовыми потоками:

Если мы хотим соединить две программы в одну, то всё здорово:
$ cat a b c | gzip -c >data.gz
Если мы хотим при этом параллельно делать ещё какую-то вещь с выводом первой команды, то мы можем написать
$ cat a b c | tee >(gzip -c >data.gz) | grep WARNING
либо
$ cat a b c >/tmp/temp.data ; gzip -c /tmp/temp.data >data.gz & grep WARNING /tmp/temp.data ; wait $! ; rm /tmp/temp.data
несмотря на то что задача фактически не изменилась нам потребовалось, в первом варианте, переписать шелл добавив в него конструкцию >(shell command), кроме того потребовалась реализация программы tee, которая имеет один вход и много выходов. Второй вариант ещё более ужасен: потребовалось создание временного файла который занимает место на диске, потребовалась реализация асинхронного вызова и примитива wait, потребовался код для удаления временного файла. Скажу сразу: первый вариант больше соответствует идеям указанной выше статьи по дизайну програм. Казалось бы это уже конец. Но нам может захотеться вставить разную обработку перед вводом. Тогда придётся писать:
$ cat a <(grep USEFULL b) c | gzip -c >data.gz
либо
$ mkfifo /tmp/b.fifo ; grep USEFULL b >/tmp/b.fifo & cat a /tmp/b.fifo c | gzip -c >data.gz ; rm /tmp/b.fifo
что снова требует добавления ряда конструкций.

В bash указанные задачи решены добавлением тех самых >(...) и <(...), но легко придумать задачи где этих методов соединения текстовых потоков недостаточно и придётся создавать всё более страшные конструкции (скорее всего похожие на вторые варианты решений указанные выше) до тех пор, пока вся система не рухнет под своим весом. С другой стороны если сразу решать задачу как сложную и реализовать систему для произвольного соединения текстовых потоков, то в сумме решение получится проще, компактнее и полнее чем объединение "маленьких утилит решающих свои задачи".