thesz про ненормальное программирование
May. 5th, 2011 02:05 pm
http://thesz.livejournal.com/1210206.html
Хорошая, годная дискуссия. Ни одного тролля. Радует.
Дикие идеи
Feb. 12th, 2011 11:10 amНа обсуждение, ну и может единомышленники найдутся. Детализировать можно on request.
Это то, чего было бы круто реализовать, просто как концепт. Плюс известно, как именно.
- P2P инстант мессенжер (возможно, даже блог-систему). For added lulz - браузерный, секьюрный и анонимный. Должно хватить любого бесплатного хостинга или файла с локалхоста, но Chrome/Firefox экстеншены тоже пойдут, так еще лучше (ага, я нищебродствую и завидую чувакам из Diaspora, ибо лень почесаться и развести пиар-кампанию, чтобы поднять денег на дизайнеров и еще девелоперов)
- Среду разработки а-ля Pharo (self-contained environment), закриптованную и полностью полиморфную. И чтобы софт, ею созданный, тоже таковым был. Причем, при желании, мог себя разобрать в сорцы обратно (см. ниже про IDE)
- Lifelogger (программно-аппаратный “черный ящик”, который бы собирал обьективную статистику о происходящем с человеком. Кладезь для медицины и криминалистов, по-моему. Ну и как экзо-память тоже неплох.)
- Кросс-транслятор Python/C#/JS/AS/(your-language-goes-here), работающий в любых направлениях. Наверное, с достаточным маньячеством можно и функциональные языки подтянуть, будет такая себе суперкомпиляция (термин употреблен в оригинальном смысле), но с метрикой на минимизацию размера программы, а не на скорость (путем выделения рекурсий всяких и т.д.). А то жалко, столько
говнокода уже написано, а люди массово занимаются клонированием существующего на новые платформы, например. При достаточных метаданных о платформе это должно быть автоматизируемо.
А тут есть вопросы по реализации, но тоже, наверное, можно
- Графовую БД с удобным интерфейсом и построенный на ее базе PIM, который прозрачно синхронизируется между всеми устройствами юзера. Включая мобильники и блютус-гарнитуры, например.
- IDE для софта, которое бы его выращивало по семантическим спекам. Причем, позиционировать его как игрушку для выращивания тамагочиков. А потом, на наработанной базе...
- Knowledge-mining систему, которая бы занималась внешней разведкой и избавляла от необходимости читать туеву хучу мусора только ради выцепления интересных проектов
- 3D-космосим-песочницу (онлайн, тоже браузерный), без маньячного реализма, но с исследуемыми планетами, разрушаемыми и конструируемыми (игроками) кораблями\постройками
И многое, многое, другое… Надо патчить уверенность в себе и делать.
[English version, but please discuss here, not there]
между делом, ковыряя в CmapTools и Google Wave бакалаврскую, подумалось
- а ведь насколько удобнее было бы скрестить WYSIWYG редактор типа Ворда с подобным графовым представлением
- семантические связи между элементами, к которым прицеплены отформатированные куски текста и иллюстрации, видно структуру документа
- и аннотации туда же, и ссылки на соответствующие фрагменты кода аля Code Bubbles (literate programming, дадада!)
- можно и базу знаний (например, ссылки на алгоритмы, используемые в коде) туда же запихать, что явно помогло бы поддерживать систему следующим поколениям девелоперов
- а потом эта самая структура сплюскивается и форматируется в традиционную книгоподобную штуку
- и код, который компилируется. Или чертежи. И инструкции исполнителям на местах
такая организация, имхо, замечательно помогала бы работе над большими текстами. и софтом. и документацию было бы на порядок проще синхронизировать с реальной структурой программы. а, ну и еще чтобы его можно было одновременно редактировать и аннотировать всем, кто разрабатывает проект. багтрекинг тоже с виду замечательно ложится на такое.
все, казалось бы, хорошо в современном стане активистов от программирования. по одну сторону стоят различные Ruby, Python, PHP, по другую - Ocaml, Haskell, F#, теперь вот Ur/Web – казалось бы, чего можно еще желать?
и в чем, собственно, вопрос?
Но вся эта братия деликатно обходит стороной два (связанных, в общем-то) вопроса – взаимодействие с другими системами (существующими и будущими), а также эволюция и взаимодействие с прошлыми и будущими версиями себя. Их решению мешает то, что ВСЕ theorem prover`ы, contract verification тулзы, генераторы тестов и пр. предполагают, что тестируемая система замкнута. Что неверно – ведь таким образом полностью протестировать можно только ПО, которое работает исключительно с предметной областью, порожденной единожды зафиксированной формальной логикой – например, компилятор или систему решения уравнений.
Понятно, что всякие твиттеры с веселыми фермерами можно отправить на свалку истории, и никто о них толком не вспомнит впоследствии, а что делать, например, с управляющим ПО автомобилей, электростанций, поездов и прочих комплексов со сроком службы более 20-30 лет? за это время успеет несколько раз смениться железо, ОС, а в запущенных случаях – протоколы обмена информацией и форматы файлов.
у нас же не просто так образовывается куча кода, который уходит на выброс (к вопросу о bit rot, который поднимался ранее), она образуется именно из-за нерешенной проблемы совместимости в малом масштабе (языков, платформ и т.д.) и в большом масштабе (взаимодействие построенных на этой базе систем).
революционное (write-build-test-release-repeat) развитие софта во многом упрощает разработку каждой следующей версии, но оставляет нас со старыми данными, зоопарком плохо совместимых (т.к. не все апгрейдятся мгновенно, по разным причинам) систем, и риском остаться с носом для тех, кто доверил софту свои данные, в случае внезапного исчезновения вендора или угасания комьюнити (да, понятно, что опенсорс частично решает эту проблему. но какой процент не-софтописательских организаций способен самостоятельно написать, скажем, конвертор хотя бы ODF в HTML, SVG в что-нибудь еще, или перенос нетривиального обьема и структуры БД, скажем, с MySQL на постгрес, включая переписывание всего использующего эту БД софта, если такой вопрос вдруг встанет?)
совместимость с другими существующими платформами – та же проблема, только в профиль. задача слегка облегчается тем, что есть “живое” окружение, на котором можно протестировать работу системы и заложить его в требования изначально. в случае с софтом, созданным после разработки оригинальной системы, таких поблажек нет.
тонкость в том, что все современные высокопроизводительные компиляторы, что у императивных, что у функциональных языков являются частными случаями проекций Футамуры. ключевое здесь именно слово “проекция” – т.е. происходит отображение А → B, а не A ↔ B, которое приводит к потере информации о исходной системе, или, точнее, потери информации о модели, реализацией которой является система.
к этому вопросу пытаются подходить с разных сторон – динамические ЯП (Lisp, Python, IO) позволяют интроспекцию структур данных “напрямую”, JVM и CLR имеют Reflection, более-менее продвинутые модели обмена данными между системами, известные в народе как “веб-сервисы” в той или иной форме самодокументируемы, а web медленно, но уверенно завоевывает семантическая разметка (другой вопрос, что там она далеко не всем нужна, т.к. конечные авторы и потребители информации – люди, а не машины), и именно поэтому она вряд ли получит такую же популярность как, например, CSS :)
ну и где же выход?
в этом смысле мне кажется, что долгоживущее программное обеспечение будущего должно представлять из себя динамические самодокументируемые системы, которые (в сегодняшней терминологии) способны
а) быть изменяемы без привлечения сторонних инструментов (которые могут стать недоступны по тем или иным причинам)
б) после изменения спецификации (модели) самостоятельно выработать алгоритмы, сгенерировать новый исполняемый код, (а потом рассчитать и изготовить железо, хехе), соответствующим образом сконвертировать данные при изменении форматов, или же подобрать и сгенерировать функции-адаптеры, которые будут делать это по мере необходимости
в) поддерживать протоколы обмена спецификацией друг с другом, которые позволяли бы системе накапливать знания о окружающем мире, людях и других системах, вносить их в модель и (автоматически или полуавтоматически) стыковаться с ними, и соответствующим образом развивать\расширять свое внутреннее представление данных и осваивать новые протоколы взаимодействия (возможно, тоже сгенерированные автоматически под данный частный случай)
фух. введение получилось в 4 раза дольше, чем собственно мысль. зато, вроде, теперь понятно, “зачем всё это нужно”. продолжение следует… черт. пост, к которому нужно оглавление – не такой уж и хороший пост…
NOTE TO SELF: перевести на английский, а то что-то я совсем англ версию бложека забросил.
собственные мысли касательно вот зтой цитаты
проблема 1: >> очень не хочется забыть, упустить из виду, но записывать куда бы то ни было небезопасно
вообще, для такого можно завести дневник на локалхосте :) у меня для зтого есть куча текстовичков и personalbrain. но проблема действительно остается открытой.
проблема 2: некоторые вещи (главным образом те, где не существует обьективно верного решения вопроса, например, религия), хочется обсудить с конкретными людьми, но в дискуссию могут вмешиваться ярые приверженцы конкретных точек зрения и искажать ее
проблема 3 включает в себя первые две, и заключается в том, что есть идеи которые в общем-то неплохи, но настолько сильно расходятся с общепринятыми принципами, что могут пугать, отталкивать и всё такое, на подсознательном уровне, и их тоже хочется не забыть, поделиться и обсудить. чаще всего зто касается вопросов морали, зтики, отношений и всего такого.
как бы… они все решаются созданием некоего “клуба по интересам”, да вот только таких людей еще найти надо. но если найти очень похожих людей, то можно решать и первую проблему, перейдя в стиль жизни в духе «команды тачиком». или масонской ложи :)
коллективная личность, впрочем, должна как-то сосуществовать с другими одиночными и коллективными личностями, а зто уже сложнее. мозговые штурмы, взаимное доверие и синхронизация информации, увы, несовместимы с обществом, в котором присутствуют любые формы конкуренции, т.к. knowledge is power.
тут есть три варианта – сектоподобные организации, тайные сектоподобные организации и виртуальные организации. в первом случае все собираются территориально в кучу, и не скрывают зтого, во втором – собираются иногда, в третьем – живут обычной двойной :) жизнью, поддерживая контакты с другими членами группы через новомодные средства коммуникации.
ах да, и еще ведь не хочется отдаляться сильно от “дефолтного общества”, ибо асоциальным как в форме “маг в башне”, так и в форме “маги в башне” быть неприкольно. хотя бы в том смысле, что вариться в собственном соку – плохо.
зто все навеяно недавними событиями IRL и наблюдением за изменениями в обществе, отражаемыми СМИ.
а что вы имеете сказать по зтому поводу? ;-)
http://www.lovemachineinc.com/first-project-sendlove/ интересно перекликается, кстати
метаосознание
Feb. 14th, 2010 02:33 amпосле резкого отключения от входящих потоков информации и эмоций вначале наступает тишина. царствие тишины и спокойствия.
потом все вдруг взрывается красками всех цветов и видов, разнообразием движущихся форм, звуками, запахами, чувствами и ощущениями.
буря утихает, и остается лучший в мире конструктор – конструктор снов. в котором можно невозбранно плести паутину воспоминаний, переплетая ниточки судеб и узелки событий…*
игра кажется бесконечной, фрагменты движущихся картин перетекают одна в другую, подрагивая очертаниями знакомых мест, движений и смыслов. я осознаю, что кто-то хочет достучаться до меня в *том* мире. образы тускнеют, сдвигаются в сторону, уступая место брезжащим лучам света настоящего, но еще долго мерцают в глубине сознания…
* да, у меня ассоциативная память работает главным образом по осям “встретился с\знает кого-то\наступило после\наступило перед”. потому такое восприятие. your experience may vary.
** подобный сон в прошлый раз начался после того, как я во сне умер и решил не просыпаться. тогда «естественный ход событий» поломался, и я остался в конструкторе. а на сей раз я собрал ноут, и собрался уже спать дальше, но сон начался намного быстрее, чем организм погасил сенсоры и сознание…
*** метаосознание потому, что осознанные сновидения – это (в моем понимании) осознание себя во сне и контроль собой, а тут выходит сознательный контроль всего «мира» вообще.
фундаментальная проблема
Feb. 6th, 2010 04:10 am…моего программистского опыта заключается в том, что я в 80% случаев пишу сначала мини-ОС, а потом на этой ОС пишу собственно задачу, решающую требования заказчика.
Что полностью нивелирует все попытки по увеличению продуктивности собственного труда, т.к. увеличивает требуемый обьем работы раз эдак в 50.
В этом ключе я удивлен, что мне вообще удается что-то писать и (иногда) ship’ить, и (еще более иногда) ship’ить вовремя (да, и такое бывало).
UPD: Почему все это? потому что я подсознательно проецирую себя на целевую аудиторию. А вообще операционки никому, кроме меня и еще кучки таких же двинутых людей, и нахуй не нужны. Тоже лишняя сущность. Собственно, эта мысль меня и натолкнула на сии неутешительные выводы...
назрела необходимость перемен
Nov. 18th, 2009 11:20 pm1. текущие вялотекущие проекты откровенно заебали, потому что они есмь чистый саппорт и изредка подпиливание под изменение внешних условий, к тому же, на одном PHP и невменяемые заказчики, на другом - просто создается впечатление что я один кому что-то надо.
2. начинать новые мешает отсутствие среди (знакомых-у-которых-есть-свободное время), людей которых не надо пинать ногами, чтобы они что-то делали
*хотя всем все интересно, конечно же, и расспрашивать и обсуждать - сколько угодно
3. а люди со стороны обычно хотят зарплату
4. а знакомые, которые что-то реально делают, в общем-то действительно что-то делают, и отрывать их как-то не хочется
5. потому что целиком сосредоточиться на чем-то "побочном" я не могу, потому что надо, гм, на что-то жить, платить за сервера, хавчик, площадь и прочее. поэтому выходит противная демотивирующая фигня, которая влияет и на все остальное тоже.
6. из чего выплывает, что надо либо найти работу, пересекающуюся с задачами, которые я хочу решать и которые знаю как решать
7. или найти людей, которые готовы вкладывать деньги в решение этих задач, и сделать их основным занятием
8. а про себя у меня окончательно сложилось впечатление, что хотя я практически везде могу разобраться и описать, _как_ и _что_ сделать, но собственно заставить себя что-то делать ввиду перманентно висящих комплексов "надо, но бесперспективно" vs "перспективно, но на что жить сейчас?" - не могу.
9. а еще надо или обзавестись офисом, или сьехать от родителей и горячо любимой шумной семьи, потому что за исключением койкоместа никакого смысла в сидении здесь нету, работать дома можно только ночью, а работать ночью ввиду того что я не собираюсь пока бросать универ - не очень хорошо. и работать с кем-то еще надо on-site, а не удаленно.
10. а на это нужны опять же деньги и это тоже демотивирует.
здешние комменты открыл, остальное уехало в следующий пост
саморазвитие-с
Oct. 12th, 2009 12:16 am1. http://www.ai.uga.edu/mc/WriteThinkLearn.htm
там весьма умные и очевидные вещи написаны, настолько очевидные, что на них все забивают. via nponeccop, вроде.
2. http://alexeymas.livejournal.com/246813.html видео с TED про креативность и образование
3. http://tedxkyiv.com/ TEDx Kyiv 18 октября
регистрация http://spreadsheets.google.com/viewform?hl=en&formkey=dEdCLW9LSzVINEo4Y1ZKU2ViTVYtblE6MA
personalbrain vs (custom) tiddlywiki
Oct. 11th, 2009 10:10 pmpersonalbrain
+ граф – это круто, там он действительно удобный
+ типизированные ссылки
+ удобное отображение обратных ссылок
+ хоткеев много
+ аттачменты
+ раскрашивание и подписывание обьектов
- как адресная книга это неудобно
- нету таймлайна
- одна страница в вики обычно разбивается на целую тонну thoughts, мне аж страшно
- проприетарная софтина
- сложно переносить с компа на комп
tidwiki
+ компактное представление
+ автолинкинг
+ документы проще копипастить из-за автолинкинга из блокнота
+ подпиливать можно под себя
+ один файлик
- обратные ссылки неудобно отображаются
- тормозит она (правда, может и пб начнет тормозить, хз… но если б не тормозила, я б не дергался)
- эмбед картинок создает вообще какие-то нереальные тормоза, а фотки надо…
продолжение следует.
приступ чего-то
Sep. 18th, 2009 09:18 pmхочется бредить, брейнштурмить и фантазировать. а не с кем.
фантазировать. ностальгия по времени когда времени было больше и можно было выдумывать себе миры и жить в них. а вот только материализировывать их оказалось сложнее, и фантазия загублена фантазированием того-что-реально-материализировать. в детстве фантазировать было проще.
22:18 !Precursor: Ну дык я давного говорю, что надо игрушку разработать ;)
22:20 !Precursor: а с мирами они забыли про игровые вселенные, которые прорабатываются порой даже лучше, чем книжные
22:20 wzrd0: вя
22:20 wzrd0: наоборот! не надо детализировать!
22:20 !Precursor: м?
22:20 wzrd0: главное - это идея! простая и чистая, не обремененная мишурой реализации
22:23 !Precursor: ну у всего в основе лежит идея, но реализуется она в примерах
22:24 wzrd0: фотореалистичная графика и куча детализированных мелочей выливаются в тысячи человеколет работы
22:28 !Precursor: да, но если тебе подать идею "распадающийся мир после ядерной войны", то бес килотонн квестов и атмосферный скриптов ты не ощутишь мир фелаута ;)
22:33 !Precursor: ну есть ещё подход рейнджеров - пару тематичных картинок и подходящих текстов - и дальше уже каждый сам додумывает всё
22:33 wzrd0: да
22:33 wzrd0: именно!
22:33 wzrd0: вот я об этом
22:33 wzrd0: тексты рулят форева
22:33 wzrd0: хочу рендеринг-движок для текстов
22:33 wzrd0: на литературном русском языке
22:33 wzrd0: и пошаговый движок
22:34 wzrd0: с символным evaluation engine который бы решал, что именно будет, если скастовать фаербол на микроволновку
22:34 wzrd0: scribblenauts вот
22:34 wzrd0: 22 тысячи обьектов которые можно кастовать
22:34 wzrd0: это же, сцуко, мегакруто
22:35 wzrd0: я уже прошел 20 левелов
22:35 wzrd0: а их там овер 200
22:35 !Precursor: ну ты не забывай про разные восприятия - мне всёже нужна картинка как визуалу
22:35 wzrd0: и все в 16-мегабайтном бинарнике
22:35 wzrd0: да. а я хочу фантазирующую игру. которая стимулирует додумывать
22:35 wzrd0: овт
22:35 wzrd0: вот
22:38 !Precursor: не, ну на самом деле то всё, где не хватает информации, стимулирует додумывать
22:38 wzrd0: да, но оно должно интриговать и предполагать что ее там есть!
Современные, кгм, программно-аппаратные вычислительные комплексы проекты все чаще выходят за рамки одной конкретной машины и конкретного пользователя.
Приходит сеть, вынужденная многопоточность (потому что два разных компа – это, как ни крути, два разных потока), транзакции, понятие времени, понятие латенси, гонок (data races) и всякого такого.
Вроде бы, проблемы у всех одинаковые, тем не менее, вменяемых инструментов до сих пор нету.
Есть ОО дизайн, есть реляционная модель, есть всякие CASE инструменты, нынче появились также различные онтологии, микроформаты и прочие попытки распределенного хранения данных, но у них всех есть два общих недостатка:
1. Они ориентируются на формальные математические модели, и не имеют понятия “достоверности” (valid/invalid data) данных, а также “доверия” (trusted/untrusted) к данным. Отсюда семейство уязвимостей, связанных с инжектированием вредоносного кода, ошибки и вылеты при работе с внешними источниками информации (датчиками и людьми), паника при повреждении носителей информации, невозможность без предварительной очистки импортировать внешние корпуса данных (что порождает проблемы разнообразной совместимости) и т.д.
2. Нету понятия времени. Реляционная модель ломается, когда начинается эволюция, с ООБД ситуация теоретически лучше, на практике мало кто доходит до корректной эволюции данных параллельно с кодом, а случаи автоматической эволюции мне вообще неизвестны, увы.
Онтологические базы знаний еще более статичны, и призваны представлять замороженный конденсат знаний, но почти полностью непригодны для отражения динамически изменяющейся проблемы, которую, вроде бы, должны помогать решать.
Также, статичными являются любимые многими юнит тесты, которые очень помогают при проверке, “не сломали ли чего, что должно было остаться”, но требуют эволюции не меньше, чем весь остальной изменяющийся код.
Единственное место, где есть вменяемое, пускай и примитивное, понятие времени – современные графические редакторы, рассчитанные на не-программистов, с бесконечным undo\redo, а также системы контроля версий.
Очень интересно на этом фоне выглядит CouchDB, в которой, вроде бы, были учтены большинство из вышеприведенных аспектов (кроме доверия), надо будет как-то посмотреть.
А в общем – складывается впечатление, что в этой области никаких велосипедов еще пока не изобретено, и придется делать что-то своё :(
Как-то так.
сделал на досуге крохотный ивент-дривен рантайм, потом подумал “надо бы внести в мир равенство и справедливость, давайте сделаем по потоку на обьект?”
сказано-сделано, работает. правда, в голову лезут два назойливых вопроса:
- нафига это надо? :)
- как на этом правильно программировать?
после где-то двух суток размышлений внезапно попёрло и начался
( мысленный понос )Линка бесследно исчезла с http://sephiroth.it
ExpressionEvaluator_compiler.zip
UPD: поправил баг с поддержкой функций с более чем одним параметром:
ExpressionEvaluator_commafix20081211144209.rar
Найдено при помощи https://www.iterasi.net/
( бреды на питоне )