`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Остап Ибрагимович был прав во всём

Есть такая страна - Словения.
Населения в ней ощутимо меньше, чем в Киеве.
2 миллиона человек.

Страна эта 150-я в мире по территории, 145-я - по населению и 63-я - по ВНП.
А ВНП на душу населения у Словении ощутимо выше чем у нас и у, например, России.
$27300 (в 2007 году) против российских $15681 (в 2008 г.) и уж вовсе потешных наших $7532 (все цифры - по данным МВФ).

Как страна Словения существует всего совсем ничего - c 1991 года.

Независимость страной была получена в результате 10-дневной войны, в которой потери Словении составили всего 9 человек военнослужащих и 10 - мирного населения.
Противостоящая югославская армия потеряла 45 человек военных, 31 танк, 22 бронемашины, 172 прочих транспортных средства, 6 летательных аппаратов, 4693 военнослужащих были взяты в плен.

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

Так вот.

В этой самой стране Словении есть такой парень - Дамиан Лампрет 1977 года рождения.
У него есть сайт.
И не один.
Где Лампрет рассказывает такие вещи:

  • прирабатывал по будущей специальности, пока учился, участвовал в научной студенческой жизни Словении;
  • всего год поработал на электронную компанию, этого хватило для того, чтобы решиться создать что-то своё;
  • попробовал выстроить отношения с культовой Zilog, но, увы - компания, работающая в режиме выживания, не смогла ему ничего интересного предложить;
  • создал популярное сообщество разработчиков аппаратных средств с открытыми спецификациями (open hardware) - OpenCores;
  • разработал архитектуру и пригодную к синтезу модель микропроцессора OpenRISC;
  • организовал коллективную разработку новой архитектуры, адаптацию open source ПО для работы с ней - компиляторов, ОС Linux, etc;
  • нашёл инвестора;
  • создал первую словенскую полупроводниковую fabless-компанию Beyond Semiconductor, которая:
  1. провела ребрендинг OpenRISC, создала модельный ряд процессоров и контроллеров на основе этой архитектуры;
  2. убедительно доказала, что разработки компании ничуть не хуже суперпопулярных аналогов от ARM, а в чём-то и превосходят их;
  3. нашла заказчиков на неё, причём каких заказчиков;
  4. продолжает успешно работать и в условиях кризиса, причём, в отличие, например, от наших тяжело пострадавших компаний, не потеряла 90% "всего" и, напротив, более чем неплохо себя чувствует.

О Дамиане Лампрете даже пишут здоровенную статью в словенском журнале Playboy, например. Причём пишут не тогда, когда он стал "большим боссом", а тогда, когда он был просто увлечённым парнем и профессионалом в проектировании чипов и HDL. Это невероятно, но факт - у них, в Словении этой, похоже, и Playboy какой-то другой.

Короче.
Остап Ибрагимович был прав во всём:

никакой Словении нет, Земля имеет форму чемодана, а волны Атлантического океана разбиваются о скалистые берега Шепетовки.

Потому что так проще жить.

ЗЫ

Все совпадения тегов с темой этой записи случайны.

ЗЫЗЫ

Жаль, что нет тега "ивент-менджмент".

Ого, что DARPA опять затевает, ого-го

Когда DARPA (Defense Advanced Research Projects Agency) что-то затевает, из этого может получиться что-то много большее, чем очередная сугубо военная разработка.
Впрочем, после операционных систем разделения времени (которыми мы все пользуемся сейчас), Internet и мультимедиа, об этом можно и не говорить.

А теперь посмотрим на контракты, заключённые DARPA к 3 августа сего года.

(На самом деле хорошо бы внимательно посмотреть вообще на возможность такую информацию видеть - кто из Минобороны кому что заказал на какую сумму. В то время, как у нас любой младенец знает, что военные бюджеты нужно сначала засекретить, а потом распилить... Да уж. Дикари.)

Так вот, в разделе "Сухопутные войска" (Army) объявлен одобренный 27 июля 16-миллионный контракт с IBM.
По программе SyNAPSE.
У которой, к слову, есть свой сайт.
Решительно невозможно понять этих американских мальчишей-кибальчишей и их Военную Тайну.
Но дело не в том.

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

На самом деле, если появится искусственая нейросистема, масштабируемая до возможностей природных аналогов (а именно это - ещё одна из целей проекта SyNAPSE), то, само собой, распознаванием образов её возможности не ограничатся.

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

И, насколько я себе понимаю, если IBM это удастся...

А если разом и конячку, и трепетную лань, а?

Фанаты Opera, ау?
Теперь я с вами.

Не скажу, что это получилось по-end-юзверьски.
Местами это получилось даже по-зверски.
Но ведь получилось.
И ещё как получилось.

Итак, в чём заключалась суть моих непростых отношений с браузером Opera?
Всё было просто.
Суть заключалась в том, что в этих ваших интернетах никакой стабильности нет, и никаких других интернетов у вас для нас нет.
Потому я люблю понравившиеся фрагменты страниц, всякие клаптычки, хранить у себя ув шухлядке, хихи.
В качестве которой использовал OneNote, а сейчас использую Evernote.
Так вот мне эти клаптычки интересны именно с разметкой.
Особенно мне интересны ссылки и изображения.
Я хочу, чтобы фрагмент вот этой страницы сохранился у меня с объявленными её авторами ссылками и с картинками, потому что они крысивые:

А если разом и конячку, и трепетную лань, а?

Увы, Opera мне не позволяет этого.
Дизайн браузера таков, что "добраться" можно только до очищенного от разметки plain-текста.
А разве наш это метод - в 2009 году копировать кусок текста и потом вручную восстанавливать каждую ссылку, вставлять картинки и восстанавливать выравнивания абзацев?
Нет, это не наш метод.
Но.
Opera очень непрожорливая.
Реально.
И шустрая.
И более чем рабочая.

Есть, конечно, в немодифицированной Opera возможность открыть текущую страницу в другом браузере.
Например, в эксплорере.
И это уже хорошо - можно понравившуюся страницу действительно открыть, скопировать что нужно и вставить в Evernote.
Но, если пользоваться предоставленными по умолчанию возможностями, получается дико неудобно и неэстетично: надо тырцать правой кнопкой мышки в страницу, вызывая контекстное меню, выбирать в нём "Open with" (я не воспринимаю русификации интерфейсов программ, ибо русификации очень часто ещё более кособоки, чем сами программы), выбирать из подменю "Internet Explorer" и потом с нарастающей ненавистью смотреть как появляется увешанное совершенно ненужными в этом случае бренчалками и свистелками окно эксплорера. С нарастающей ненавистью потому, что всякое ненужное режет глаз.
Но.
Это уже путь.
К чему-то более разумному.

Первое, что надо сделать на этом пути, - освободить Explorer от лишней "обвески".
Хочется, чтобы это было подчёркнуто функциональное для задачи выделения фрагмента страницы и нажатия заветной журналистской комбинации "Ctrl V" окно без единого интерфейсного элемента, кроме, естественно, "бегунков" прокрутки.

Ну что же.
Начинаем отсечение лишнего.
Запускаем Explorer (речь идёт об IE8), открываем Internet Options, в табе General тырцаем в кнопочку Settings раздела Tabs:

 

А если разом и конячку, и трепетную лань, а?

И выключаем табы (снимаем птичку с Enable Tabbed Browser), они для нашей задачи не нужны:

А если разом и конячку, и трепетную лань, а?

Ещё не очень хорошо, но уже лучше.
Дальше открываем меню Manage Addons.
И отключаем всю дребедень (я оставляю только Evernote).
Она совершенно не будет нужна для выполнения той утилитарной роли, которую IE8 будет выполнять в паре с Opera.

Дальше тырцаем правой кнопкой мышки в область меню эксплорера и отключаем все "бары", какие видим.

На этом в случае IE8 очевидные действия заканчиваются и его можно закрыть.
Потому что панели его меню с адресной строкой и Favorites средствами пользовательского интерфейса отключить никак нельзя :-(

Но зато (за что, кстати?) у нас есть шаловливые руки, редактор реестра, любопытство и поисковые машины.

Короче, запускаем regedit и обречённо бредём по реестру вот сюда:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer

Чтобы увидеть, что ключ этот уныло пуст.

Создадим в нём новый ключ - Toolbars.
А в Toolbars - ещё один ключ, Restrictions.

Теперь переходим сюда:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Toolbars\Restrictions

И создаём здесь два DWORD-значения с именами NoCommandBar и NoNavBar.
И устанавливаем оба этих значения в "1".

 

А если разом и конячку, и трепетную лань, а?

Закрываем regedit и запускаем эксплорер.
О!
Именно то, что надо.
То есть, ничего, кроме пустого окна.
И оно - само совершенство, Малевич был бы доволен:

 

А если разом и конячку, и трепетную лань, а?

Теперь, когда эксплореру отвинтили лишнее, дело за малым.
Запускаем Opera.
Используя шорткат "Alt + P" вызываем меню Preferences, в нём выбираем Shortcuts и Keyboard Setup, жмём Edit.

В появившемся окне раскрываем категорию Application, жмём кнопку New и регистрируем новое клавиатурное сочетание (мне нравится alt z, потому что редко занято и удобно под левой рукой).
Действием этого сочетания будет следующее:
Execute program, "iexplore", "%u"

А если разом и конячку, и трепетную лань, а?

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

Вот так.

А тег сегодняшнего дня - "кризис в IT". 

Это так мило - печально бродить по дебрям реестра. И плакать.

So emo.

Это случилось

Пока все бегут в одну сторону, я побрёл в другую.
А именно, - с нескрываемым наслаждением сменил Firefox на IE8 + плагин IE7 Pro.
Случилось это со мной не спонтанно.
И никакой "идеологии" в этом нет.

Недавно стал замечать, что к вечеру моя домашняя машинка (для меня она вполне - Core2Duo E8200, 3 GB памяти, уж и не помню какой точно Radeon, но когда я пытался поиграть в третий Fallout, всё более чем шустренько бегало, вот только к выходу из подземелья мне эта виртуальщина надоела) становится какой-то неповоротливой и тупой. А как-то и вовсе несколько ресурсоёмких программ отказались грузиться с жалобным стоном о нехватке ресурсов.

Эээ? Ресурсов? При трёх гигах памяти? И старой доброй Windows XP SP3? Эээ?

Bсё оказалось просто.
И прискорбно.
Firefox.
При запуске он, конечно, такой милый, просто пупуся - памяти ест всего ничего.

Это случилось

Но.

Если вы работаете с какими-то большими приложениями, а браузер у вас постоянно"болтается" в фоновом режиме с кучей открытых табов (для справочной информации, общения и т.п.), то при таком стиле работы через пяток часов оказывается, что Firefox "раздувается" до каких-то совсем уж дурацких размеров и, что самое неприятное - закрывай хоть все табы, оставив всего один, размер отъедаемой памяти сильно не уменьшится.

Это случилось

Эээ?
Это не наш метод, вот что я хочу сказать.

Поиски альтернативы прошли без мучений.
Потому что выбирать фактически не из чего.

Opera до сих пор не умеет копировать в буфер обмена фрагмент страницы с разметкой и изображениями, а я использую браузер не только для того, чтобы рассматривать страницы, но и постепенно веду свою коллекцию всякого-разного интересного, фрагментов всяких (кстати, Evernote оказался очень пристойной штукой). Так что Opera - не для меня.
Chrome?
Не знаю.
Две попытки "подружиться" с ним ни к чему хорошему не привели.
Хроменький Chrome.
Не прижился даже как акселератор используемых сервисов от Google.
Так что остался только IE8.

И хочу сказать вот что: IE8 - хороший, годный браузер.
Работает шустро.
Память не жрёт.
При закрытии табов память освобождает.
При моём стиле использования браузера - это самое главное.
А все мои потребности в плагинах, как внезапно выяснилось, удовлетворяют IE7 Pro и любимый Cooliris.

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

Во-первых, .NET-фенечка - регулятор звука 3RVX, к которой я уже привык, была заменена на не такую "крысивую", но шуструю и непрожорливую Volumouse от NirSoft (ещё одну утилитку которых, nircmd, я просто обожаю). Volumouse ещё и весьма функциональная.

Во-вторых, Java RSS ридер RssOwl был заменен на Feedreader3, который сразу попал в короткий список замечательных программ (в нём ещё дивный PDF-ридер PDF-XCHANGE VIEWER и FastStone Image Viewer, вот бы все программы были такого класса, мечты-мечты).

Это я к тому, что совершенно незачем бежать куда все.
Там не обязательно так уж хорошо.

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

Революционный функционал

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

Первый - роскошный инструмент, столярный деревянный молоток "киянка".
Второй - байковые портянки.

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

Пожалуйста, никогда не употребляйте слово "функционал", если вы не математик!
И особенно пожалуйста, - никогда не употребляйте его во всяких чудовищных сравнительных степенях!

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

Это ещё не всё.

Есть ещё слово "революционный".
От которого тошнит, потому что его лепят ко всему, чему только возможно.
Революционная перфорация туалетной бумаги!
Революционная технология twitter!
Революционное предложение - купи одну фигню по цене четырёх и получи ещё одну фигню в подарок!

Но и это ещё не всё.
Есть ещё и "революционный функционал".
Это как раз тот случай, когда киянка - нежность.

Посему насчёт "революционного функционала".
В последнее время мы были свидетелями нескольких революционных функционалов.

Wolfram|Alpha
.
Это была истерика.
Революционный функционал Q&A-сервисов стал трендом (ооо, тренд!, трееееенд!, где моя киянка?)
И что?
Нет, реально - что?
Реально - пшик.
На все вопросы, ответы на которые меня реально интересуют, "альфа" не выдаёт ничего вразумительного, а обычный поиск хотя бы даёт возможность отыскать что-то, позволяющее  самостоятельно найти ответ.
Что, ради чудовищных банальностей городить "ещё один искусственный интеллект"?
И разве это мне одному так?

Opera Unite.
Интрига и революционность.
Персональный web-сервер а также браузер + централизованный сервис.
Это, безусловно, интересно. И, возможно, для ряда задач и определённого круга пользователей - очень даже полезно.
Но это было возможно с тех пор, как любой желающий мог:

  • развернуть на своей машине свой web- и ftp-сервер,
  • на какой-нибудь персональной страничке поместить свой текущий ip-адрес.

Ну и вот сервис есть, клиент - тоже есть, но где же революция в Сети? A propos, время выхода Opera Unite - уже кризисное. И знаете, что заметно по резко возросшему количеству "рррреволюционностей"? А заметно резкое снижение качества текстов. Не следствие ли это сокращений, снижений зарплат, изменений политик, нервозности уцелевшего персонала и крайне низкой квалификации свеженанятого на уже кризисных условиях? И не подводят ли эти потешные восторги вендоров, особенно в кризисное время, когда подавляющему большинству потребителей технологий вовсе не до революционных функционалов? И вообще не до жиру, быть бы...

Twitter
ip-sms.
всё, что можно сказать об этом "революционном функционале", давно сказал Евгений Шестаков:
"Дятел оборудован клювом. Клюв у дятла казенный. Он долбит. Если дятел не долбит, то он спит либо умер. Hе долбить дятел не может. Потому что клюв всегда перевешивает. Когда дятел долбит, то в лесу раздается. Если громко - то, значит, дятел хороший. Если негромко - плохой, негодный дятел."

Скажите, а если уменьшить или увеличить длину сообщения, это тоже будет "революционно"?

Короче.
Коллеги.
И им сочувствующие.
А также от них пострадавшие.

Пожалуйста!
Никогда
Не
Используйте
Слова
"ФУНКЦИОНАЛ"
и
"РЕВОЛЮЦИОННЫЙ"

в IT-контексте.

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

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

А революция - это когда толпа, а также когда убивать и грабить.

а то такой тренд расширения функционала получается, что o_O

Полезные и странная

К набору Марка Руссиновича Sysinternals Suite, который я лично отношу к категории "обязательных программ первой установки" (т.е. тех, которые ставятся на "свежую" машину)  добавилась одна крохотная утилитка.

Поразительно, что её функциональность реализована только сейчас, а не ещё во времена Windows 2000.
Собственно говоря, её названия вполне достаточно для описания - svchost viewer.
Но всё же.
Утилита позволяет выяснить, что именно в системе формируют процессы svchost.exe  (svchost, хост-процесс для задач, реализованных динамически загружаемыми библиотеками).

В корпоративных ОС семейства Windows (например, Windows XP Professional) можно получить такую информацию с помощью входящей в поставку ОС утилиты командной строки tasklist с соответствующими параметрами:

tasklist /SVC /FI "IMAGENAME eq svchost.exe"

(что здесь к чему, расписывать не буду, tasklist /? даёт исчерпывающую информацию).

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

Полезные и странная

must have утилита, сразу копировать в c:\Program Files\SysInternals\

Еще одна мелочь - 3RVX.
Управление громкостью колёсиком мыши при заданной нажатой клавише (я задаю win).
Собственно говоря, это всё, что утилита может делать.
Ну разве что для неё есть разные "шкурки".

Полезные и странная

Идея взята из MacOS X.
Актуальная версия 2.5 реализована с использованием .NET, но автор взялся переписать утилиту полностью на "родном" Win32 API уровне для снижения ресурсоёмкости (честно говоря, на настольном компьютере я её не замечаю, но вот для пользователей нетбуков это будет действительно нелишним, даже если учесть тот факт, что неактивированная утилита ровным счётом ничего не делает).

Ну и очень странная программа - PaperBack.
Программа как бы позволяет делать печатные резервные копии критически важных файлов.
На страницу A4 она "утрамбовывает" до 500 килобайт с помощью 600 dpi принтера.
Потом страницу можно отсканировать и файл восстановить.
В 500 килобайт можно упаковать немало.
И если бы я делал бумажный журнал для программистов, я бы его делал всего на одной странице именно с помощью PaperBack.
Качественно упакованный LaTeX-файл "распечатывается".
И страница распространяется.
Да, читатель должен отсканировать её, прогнать через PaperBack, распаковать полученный файл, оттранслировать  его в dvi, преобразовать dvi, например, в pdf, и только потом уже читать.
Сложно.
Но изысканно эстетично и даже эклектично.
Настоящий программистский журнал таким и должен быть.
Особенно в вебдванольные времена.

А всё же Дейкстра - голова, ему палец в рот не клади

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

Увы, но в "программной инженерии", похоже, ничего подобного нет. По крайней мере если судить по массовой реакции программистов "новой волны" на всякие внезапные для них откровения. Например, Эдгара Дейкстру так часто принято обвинять в смешном "волюнтаризме" и незнании реалий практики программирования, что некоторым приходится не столько заступаться за Дейкстру, сколько пытаться обращать внимание на правила обычной инженерии.

Эдгар Дейкстра - из времён структурного программирования (которые, кстати, в самых массовых вычислительных системах - встраиваемых, - до сих пор не закончились, и структурное программирование не собирается сдавать своих позиций). Соответственно, его взгляды и суждения, вырванные из контекста, в программировании требуют пояснений (в инженерии не требуют, потому что в ней принято изучать контекст).

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

На самом же деле Дейкстра был против использования break из-за сопровождающего этот оператор снижения "понимаемости" кода и пригодности к его неавтоматизированной верификации "в голове".

Структурированную программу - продукт структурного программирования, - можно представить некоторой последовательностью фрагментов, каждый из который де-факто что-то "передаёт" на вход последующего. Внутри фрагментов могут быть упрятаны разные конструкции, которых, по сути, не так уж и много (для любопытных - ключевые слова "диаграммы Насси-Шнейдермана").

Представим себе некоторый фрагмент кода:

while ( q ) do Body

И представим себе, что есть некоторый инвариант (выражение, связывающее значения разных переменных) p, для которого доподлинно известно, что р остаётся истинным при правильной работе кода фрагмента. Что означает - если фрагмент кода "отработал" правильно, после выполнения цикла инвариант p должен быть истинным, а условие q - ложным. В этом случае мы можем считать тело цикла Body атомарной конструкцией.

А теперь представим себе, что мы можем прервать выполнение цикла оператором break. Можем теперь мы считать Body атомарной? Конечно, нет. Нам придётся "влезать" в детали реализации тела цикла. Соответственно, снижать уровень абстрактности кода, повышать сложность его понимания и, как следствие, - или снижать его надёжность при фиксированных затратах на его производство, или повышать затраты.

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

К сожалению, об анализе программ на основе инвариантов после структурного программирования как-то совсем немного говорили. Хотя и в объектно-ориентированном программировании от структурного никуда не деться - внутри методов классов, по крайней мере, ООП не предлагает ничего существенно нового. Да и не может предложить в рамках императивной модели.

Логика и терминальные системы

Терминальные системы - штука интересная во многих смыслах.

Во-первых, интересна история развития терминалов и идей, на основе которых они создаются. Во-вторых, интересны (хоть и достаточно очевидны) области применимости терминальных систем.

Первые терминалы были по сути интерпретаторами некоторого простого командного языка. Целевой машиной для этого языка была как бы каретка (курсор), "ползающая" по полю из клеток размером 80*24 (или другому, не важно). С помощью языка можно было приказать каретке напечатать в клетке символ, стереть его, командовать перемещениями каретки в абсолютной системе координат (по всему полю) и относительной (например, относительно текущего положения каретки). Ну и всякое еще.

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

Затем - X-терминалы. Уровень протокола, на основании которого строилось общение хоста и терминала, стал еще выше.

И...

И все.
Точка реализации "в железе" интерпретатора, исполняющего X-протокол на целевой машине растрового графического дисплея, стала точкой перегиба.

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

Вот здесь уже можно задать вопрос - почему разработчики отказались от повышения интеллекта терминала (усложнения понимаемого им языка) и пошли по пути принципиального упрощения?
Однозначно верного ответа быть не может, но соображения кое-какие есть.
Во-первых, вполне возможно, что так поступить - правильно. Потому что начиная с какого-то уровня сложности протокола передача обновленных кусочков буфера кадра может оказаться более эффективной.
Во-вторых, - потому что невозможно создать единственный графический API на все случаи жизни и отобразить его вызовы на единственно верный язык и протокол общения хоста и графического терминала.
В-третьих, - потому что рост сложности языка и протокола приводит к росту сложности реализаций, а она - к снижению безопасности. Знаменитые эксплойты X Window надолго остались в памяти.
Можно придумать ещё несколько пунктов.

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

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

Кстати, алфавитно-цифровые терминалы никуда не делись.
И производятся.
Причём, что самое интересное - в том числе и компанией, купившей в своё время у почившей DEC... терминальный бизнес.
Такой вот парадокс - DEC уже давно нет, а в свое время (в 1995 г.) прикупившая кусочек гиганта SunRiver Data Systems переименовалась и живёт и здравствует до сих пор.

LOL memory

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

Little Old Ladies Memory. Вязаная маленькими старушками как носки,  память.  Долговременная память для бортового вычислителя проекта Apollo.

У BBC очень хорошая (как обычно) статья о проекте Apollo, достойная прочтения.

Еще одна тематическая статья - на linux.com.

А это - Дон Айлз (Don Eyles):

LOL memory

В годы проекта Apollo - только выпустившийся из университета патлатый битник. Сразу ставший разработчиком ПО для Apollo. Теперь он - именитый профессиональный фотограф и человек искусства, но хорошо помнит о делах давно забытых дней.

Вот из-за таких, как Айлз я никогда не посмотрю фильм "Стиляги". Неинтересно, LOL.

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

всячина: С++, лицензии

В Visual Studio 2010 будет новый компилятор С++, поддерживающий ряд конструкций С+0X. Самая интересная, пожалуй, - лямбда-функции и выражения. Синтаксис описания лямбда-функции вполне вменяемый:

 

всячина С++, лицензии

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

Синяя часть, (char cc), в общем случае (тип имя, тип имя, ...), - список параметров лямбда-функции.

Красная, ->char, в общем случае ->тип или просто ->, оператор объявления лямбда-функции и тип возвращаемого ею значения (тип может быть опущен).

В фигурных скобках, обозначенное фиолетовым, { return cc+0x20; } - собственно тело функции.

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

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

Ещё для С++ нашёлся весьма симпатичный встраиваемый скриптовый язык - ChaiScript. Чтобы не городить свой. Правда, у него зачем-то странный символ, похожий на ночной горшок.

 

всячина С++, лицензии

Но не этим он симпатичен. Язык маленький и простой, синтаксически "привычный", с зачатками функционального, что главное - в отличие от прочих встраиваемых языков он создавался специально для C++, поэтому не требует никаких дополнительных штуковин, типа межъязыковых "обёрток" интерфейсов и программ для их генерации. API минимальный, для полноценной работы достаточно меньше 10 вызовов.

Функциональные "штучки" в нём понятны из примера, показывающего, что функции - полноценные анонимные объекты первого класса.:

var add2 = fun(x, y) { x + y }
var add1 = fun(x, f) { f(3,x) }
print( add2(3, 4) )
print( add1(2, add2) )

Реализация небольшая, использует библиотеку Boost.
Использовать очень просто, несмотря на зачаточную документацию.
Лицензия - BSD.

Кстати, о лицензиях. Каждый месяц в очередной крестовый поход во имя Единственно Правильной Лицензии отправляется новый крестоносец. Вот в своём блоге Zed Shaw, автор Mongrel , в очередной раз объяснился о том, почему он выбрал GPL. А в другом блоге, Objects In Motion, высказано мнение, когда хороша GPL, когда - BSD. И мнение тоже не мальчка, но мужа, как-никак,  Numpy и Scipy  - проекты известные, неигрушечные, вовсе не однодневки,  востребованные в научном сообществе и высоко котирующиеся. Так что оба мнения весьма интересны. И вот особенно интересное:

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

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT