Mark Lanegan

Далеко не все у Марка Ланегана мне нравится и мало что кажется сверхъестественно поразительным в его творчестве. Однако, общее направление, стилистика и «драйв» идеально ложатся на жизнь и характер. Есть совершенно потрясающие вещи вроде той, что приведена ниже. Поэтому и слушаю…

Share

Банкетка своими руками

Вот еще одно давно забытое хобби — делать что-нибудь из дерева своими руками. Собственно, это из детства. Отец, Евгений Федорович, хоть и имел высшее образование, но всю жизнь проработал руками. Про диплом даже в анкетах не писал. Ему нравилась его работа слесаря-инструментальщика высшего разряда, нравилось что-то придумывать и мастерить. Получалось у него здорово и дерево, и металл, и радиолюбительские конструкции, и моделизм. А я пользовался мастерской и богатым набором инструментов отца, чтобы мастерить что-то свое. К сожалению сейчас не очень много возможностей для этих занятий, но об одной поделке решил рассказать. Собственно, речь идет не просто о поделке, а о небольшом проекте.
Поставил я перед собой задачу разработать простую и технологичную схему изготовления некоторых видов мебели (банкетки, комоды, тумбы). Причем материал должен быть самый простой и доступный — строительная сосновая доска сороковка (ширина 200, толщина 40 миллиметров). Инструмент самый обычный, что найдется почти у каждого. Условия изготовления — «на коленке». И при этом хотелось иметь определенное разнообразие вариантов оформления и чтоб поставить в квартире было не противно. Что получилось — судить читателю.
Всю схему детально описывать не стану, поскольку коллегам домашним мастерам одной идеи достаточно, а фантазия у каждого своя. Просто для примера покажу, какая вышла из сосновой доски банкетка в прихожую.

Эскиз банкетки из сосновой доски

Эскиз банкетки из сосновой доски

Сначала посмотрим на эскиз. Сразу бросается в глаза отсутствие соединений типа шип-паз или других трудоемких столярных работ. Однако выглядит не слишком грубо для такого простого материала как толстая сосновая доска. Несколько пояснений к эскизу. Вариант на рисунке несколько отличается от того, что представлен на фото. Это как раз то разнообразие вариантов, о котором я писал. Мы можем сделать банкетку с полочкой (как на эскизе). Можем поставить на полочку выдвижной ящик. А можем сделать так, как на фото вверху. Там я сделал переднюю широкую часть сиденья поднимающейся на петлях. В передней паре ножек выбрал пазы в которые вставляется стандартная керамическая плитка (или керамический декор) размером 500 х 200. Плитка, играющая роль передней стенки никак не закреплена и если захочется обновить фасад, то можно в любом салоне керамики подобрать по своему вкусу новую плитку. Можно под мрамор, можно с рисунком или орнаментом. Вместо плитки очень неплохо смотрятся деревянные, бамбуковые или ротанговые сетки. А если Вы увлекаетесь выпиливанием лобзиком из фанеры или выжиганием, то вкладную переднюю панель можно сделать на свой вкус. Собственно получилась небольшая витрина-вкладыш размером 500 х 200. Если необходимо «вписать» банкетку в существующий интерьер, то достаточно в качестве вкладыша использовать фанерку обтянутую тем же материалом, что использован для оббивки стоящей рядом мягкой мебели или для портьер.

Неподвижная часть сиденья

Неподвижная часть сиденья

А теперь поговорим об изготовлении. В первую очередь нужно вырезать из стандартной сосновой доски сечением 40 х 200 необходимые заготовки. Всего их 12 штук. Поскольку ширину и высоту банкетки Вы можете варьировать на свой вкус, расход материала может быть разным. Далее для примера привожу свои размеры.
В первую очередь вырезаем сиденье. Это самая «видимая» часть банкетки и для нее нужно выбрать самый лучший участок доски. Для задней (не открывающейся) части сиденья я использовал заготовку длиной 700 миллиметров (такая ширина моей будущей банкетки). Ширина заготовки 170 мм, чуть уже самой доски (200 мм). С внешней стороны углы слегка закруглены. На чертеже я указал радиус скругления 20 мм. На самом дел все делалось «на глаз». Срезать вдоль доски лишние 30 мм совсем не обязательно. Мне показалось, что сиденье из двух досок будет чуть широковато (400 мм). Если Вас это не смущает, то можно оставить полную ширину.

Открывающаяся часть сиденья

Открывающаяся часть сиденья

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

Полка банкетки

Полка банкетки

Теперь вырезаем еще две большие детали — нижнюю и заднюю стенки полки банкетки. Они абсолютно одинаковы. Выбор материала для них не так критичен. Вполне возможно использовать участки доски с не очень красивыми сучками. Особенно для нижней части. Возможно несколько запоздало, но все же должен сказать про выбор материала. Обратите внимание на отсутствие деформаций доски. Самая неприятная — пропеллер. Доска не должна существенно закручиваться по длине.
И еще. Сосна смолистая порода дерева. Часто в ней встречаются «карманы» наполненные смолой. Иногда смола выступает вокруг сучков. Такие участки лучше не использовать. Даже удаленная во время изготовления смола может вдруг выступить на готовом изделии и испортить весь «товарный вид».

Ножки

Ножки

Переходим к ножкам. Их целых четыре штуки. Для их изготовления придется вырезать два куска по 400 мм и потом каждые перепилить вдоль. Скошенные участок на всех ножках должен быть одинаковым. Не то, чтобы это было важно для конструкции. Скорее для внешнего вида.

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

Боковины полки

Боковины полки

Теперь две боковины и два маленьких бруска для фиксации передних ножек. Брусочки должны быть сечением 40 х 40 и длиной 160 мм. Если Вы не слишком фанатично относитесь к тому, что все должно быть из дерева, две последние детали можно заменить металлическим крепежными угольниками. Они бывают различных размеров и в них уже просверлены отверстия под шурупы. Мне показалось, что прочность изделия при этом несколько пострадает и я их использовать не стал. Обратите внимание, что вырезать брусочки нужно обязательно вдоль доски, а не поперек иначе они сразу расколются при монтаже.
Теперь необходимо тщательно отшкурить все заготовки наждачной бумагой до №120 обязательно вдоль волокон. Перед этим вы можете на свой вкус снять декоративные фаски или как-то отпрофилировать изделия. Это совсем не обязательно. А вот сгладить (скруглить) все острые углы, как я уже писал, совершенно необходимо.

Можно приступать к сборке. Я проводил сборку на клее ПВА при помощи шкантов и конфирматов. Впрочем вместо конфирматов можно использовать обычные шурупы или саморезы длиной 60 мм. Собственно шканты (небольшие деревянные цилиндры) использовались для того, чтобы на лицевых поверхностях не были видны шляпки шурупов. Если Вы планируете сплошную покраску изделия, то сборку можно сильно упростить. Заглубленные шляпки шурупов перед покраской просто шпаклюются и все выглядит замечательно. Я собирался сделать лаковую отделку «под старину» и вынужден был использовать шканты.
Далее без комментариев несколько фотографий процесса сборки.

Заготовки

Заготовки

Сборка на клею со шкантами

Сборка на клею со шкантами

Крепление задних ножек конфирматами

Крепление задних ножек конфирматами

Фигурное сверло под конфирмат

Фигурное сверло под конфирмат

Пол работы не показывают?

Пол работы не показывают?

И в заключение несколько слов про отделку. Лучше всего эту часть работы доверить профессионалу. ТТ.е. просто отдать в малярный цех. Сосна очень капризный материал и добиться хорошего результата в домашних условиях совсем не просто. Наверное единственное, что можно посоветовать если нет опыта — покрытие яхтенным лаком с ультрафиолетовой защитой. Хорошо смотрится полуматовый лак. Нужно положить насколько слоев (лучше не менее трех). Очень тонких. После высыхания первого слоя пройтись мелкой шкуркой (порядка №240). Слои лака должны быть тонкими, без наплывов и обязательно выждать пока лак полностью просохнет.

ready_open

Отделка банкетки морилкой и лаком

Я использовал морилку и лак на нитрооснове поскольку нужно было получить эффект темного дерева под старину. Для этого же были использованы фигурные петли под бронзу и декоративная ручка-бляха в середине передней панели. Не могу назвать отделку идеальной, но для прихожей сойдет.
В заключение, для тех кто захочет повторить или развить проект привожу ссылку на файл в формате программы PRO100.

Желаю приятной и успешной работы с деревом!

Банкетка из сосновой доски с керамической вставкой

Банкетка из сосновой доски с керамической вставкой

Банкетка из массива сосны своими руками

Банкетка из массива сосны своими руками

Share

Учим Haskell?

Для тех, кто по причине нежного возраста не застал ML или хотя бы Miranda, спешу сообщить — Haskell их перспективный приемник. Этот язык успешно поддерживает современную тенденцию к внедрению функционального программирования в повседневную жизнь программиста.
Нам удалось найти общий язык и по субботам в Одесском национальном университете имени И.И.Мечникова Роман Чепляка ведет занятия по Haskell. Занятия проходят на первом этаже в аудитории 38 (вход через правый коридор). Приходят все желающие и не только из университета. Аудитория компьютерная, но с ноутбуком удобнее — можно продолжать работу дома. Занятия ведутся двумя потоками. Для жаворонков в 8:00 и для сов в 10:30.
Тем кто хочет присоединиться сейчас — нужно наверстать упущенное. А для этого

  • Саму The Haskell Platform (среда и компилятор) можно загрузить для популярных ОС  отсюда.

Для начинающих несколько простых ссылок на русскоязычные ресурсы

  • По этому адресу есть учебник на русском в виде сайта. Там же есть ссылки на скачивание его в pdf-формате и тексты примеров программ.
  • Удобный справочник в дополнение можно загрузить с рутрекера
  • Для любителей видеолекций рекомендую от туда же вот такой курс. Если полистать обсуждение, то можно увидеть ссылки на предшествующий курс основ логического программирования с текстами заданий.

Однако (для начинающих), позволю себе заметить — следует учиться читать на английском.
Вот очень простой учебник с простым английским Graham Hutton. Programming in Haskell. Хорошо бы читать по часу в день перед сном. К нему есть хорошие видеолекции с четким английским произношением. Если к часу чтение удастся добавить 45 минут видеолекции, то за месяц таких мучений будете гуру в английском. Если лекций не хватает — слушайте их снова. Если ничего не поняли — неважно. Слушайте и смотрите. Вникайте в примеры на доске. Переводить не нужно — только какие-то часто встречающиеся слова. Старайтесь понять суть и не обращать внимания на текст.

Успехов

Share

О вере

Сразу оговорюсь — я человек верующий. И, рискуя стать мишенью снобистских выпадов, признаюсь — православный. Как это произошло сказать трудно. В семье какой-либо агитации не велось, но иконы у бабушки были. Точно помню, что в 5 лет я был атеистом. Очень живо помню как рисовал деду Мише мелом круги на земле и со снисходительным превосходством образованного человека объяснял: «Это Земля, это Луна. А где твой Бог?» Дед не отвечал. Т.е. не занимал никакой позиции в споре. Видимо это провоцировало меня, как критически мыслящего товарища, к самостоятельному поиску контраргументов. Естественно в целях полного и окончательного разгрома любого потенциального оппонента. Оппонентов, собственно, не было. Наоборот, была установка школы, телевидения,  партии и правительства, что Бога нет.

Не знаю, что тут сыграло свою роль, возможно подростковый дух бунтарства, но точно помню, что в 9-м классе я уже твердо верил. Это была моя тайна. Не то чтобы что-то постыдное, но личное. Что не хочется показывать другим. Даже сейчас, когда свобода нравов достигла значительных успехов и «разрешили верить», мне неловко молиться на людях. Видимо, еще не настолько я их люблю, или во всяком случае не настолько доверяю.

Так вот вера. Меня всегда интересовал вопрос соотношения веры и  знания. И многие годы интерес был профессиональным в связи с практической разработкой систем искусственного интеллекта. Постепенно происходило накопление опыта разработки, обобщение и, естественно, перенос в мировоззрение. Я здесь говорю не о вере в Бога, а о вере, как о принятии за истину чего-либо, что не может быть доказано. Не может быть доказано из-за недостаточности исходных данных, из-за ограничений выбранной логической системы, из-за ограничений вычислительных ресурсов или времени в реалтайм системах.

Собственно, началось все немного раньше. С замечательной книги Д.Пойа. Математика и правдоподобные рассуждения. Боюсь, что вообще дискутировать о месте веры плодотворно можно только с людьми основательно знакомыми с этой важной для современного думающего человека книгой. Для ее чтения вполне достаточно было 8 классов средней школы и любви к разумным рассуждениям. Кроме массы полезных выводов, касающихся школьных наук и доказательных построений, чтение книги привело к четкому разграничению того, что мы знаем, и того, что мы принимаем на веру в силу ограничений (или возможностей?) принятого метода познания мира.

Во время своих начальных шагов в разработке прикладных программных систем ИИ я и не думал использовать эти знания. Я просто комбинировал готовые рецепты, придумывал свои и больше кодил, чем думал. Только через годы я в плотную познакомился с модальными логиками. В т.ч. логиками, позволяющими корректно оперировать и строить заключения с такими предикатами как «I_think(s)» и «I_belive(s)». Еще через годы пришлось вплотную изучать (и даже что-то разрабатывать) некоторые прикладные аспекты прагматики. Даже в классическом языковом понимании, прагматика выделяет части утверждения, которые показывают, как утверждение зависит от «говорящего», как говорящий относится к высказываемому.  Но в практике ИИ постоянно сталкиваешься с тем, что прагматика присутствует даже в не модальных высказываниях. Собственно вся начальная практика инженерии знаний была посвящена преодолению модальности. Т.е. «борьбе с верой» эксперта.

Оказалось, что большинство не модальных, безусловных знаний, которыми мы оперируем, относятся к формальным системам. Наличие не модальных знаний (на бытовом и естественнонаучном уровне) зависит от проработанности системы предметной онтологии.  Множество фактов, бытовых высказываний, научных законов могут быть однозначно поняты различными людьми только при условии выработки одинаковых представлений о терминах (онтологии) и принятии общих допущений (аксиомы и правила построения логических выводов). И это мы еще не касались принципиальных ограничений формальных систем, не говорили о теореме Гёделя о неполноте, об ограничениях интуитивного построения теории множеств и т.п. К чему это я веду? К тому, что нужно быть скромнее и осторожнее. Мы можем говорить только о рациональности и применимости тех или иных  наших знаний о мире, но не о их абсолютной безусловной истинности. Во всяком случае концепция «рационального поведения», «рациональных агентов» в области ИИ становится базовой, как более продуктивная. Другими словами, концепции прагматики (как субъективности), модальности (в т.ч. веры) являются принципиально неизбежной частью нашего мировоззрения, научного познания, здравого смысла и поведения.

Один из ценимых мною ученых — Рене Декарт — поставил сомнение в основу своего метода научного познания. Декарт советовал отличать принимаемые на веру положения от выводов, сделанных из этих посылок. Единственной неоспоримой посылкой он признавал наличие сомнения. В философском плане это трудно опровергнуть. А в бытовом? Два яблока + два яблока будет четыре? Конечно. Мы это знаем и пользуемся этим. Однако, следует понимать, что за этой «прикладной» арифметикой стоит в качестве обоснования арифметика формальная, «недостатки» которой математики понимают, но это не мешает ею пользоваться. И наоборот, есть сколько угодно примеров, когда для обоснования очевидных и полезных выводов приходится смириться с весьма странными посылками. Расхожий пример. Для обоснования привычной и интуитивно-понятной теории множеств приходится (по ZFC) смириться с аксиомой выбора, которую многие математики считают очевидной, но многие считают парадоксальной. Действительно, придется согласиться с парадоксом Банаха-Тарского: шар можно разбить на части из которых составляется два точно таких же шара. Да, основания математики и метаматематика  очень интересная иллюстрация к слову «очевидно».

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

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

Какое все это имеет отношение к вере в Бога с которой я начал статью? Самое прямое. Я не буду сейчас провоцировать читателя демонстрацией неявного применения концепции Бога в современных научных теориях и технологиях программирования. В плане обсуждения отношения к религии, моя задача значительно скромнее. Сказанным выше, я хочу всего лишь обосновать следующее простое утверждение:

Верят все: Религиозные люди верят,  что Бог есть. Атеисты верят, что Бога нет. Агностики верят, что они хитрее двух остальных категорий.

Т.е. с точки зрения «критики бытового материализма» отмечу, что никаких объективных причин для снобизма у атеистов нет. Их позиция отнюдь не укрепляется какими-либо научными законами или логическими построениями. Агностики, по сути мало чем отличаются от атеистов, поскольку никаких «бонусов» религиозности они не приобретают, а только меняют одну из неявных аксиом. Естественно, у воинствующих представителей бытового атеизма в такой ситуации возникает необходимость в применении PR техник. Одним из проявлений которых является порождение остроумных броских фраз и лозунгов антирелигиозного толка. Конечно же они не являются аргументами в осмысленном споре. Но они такие остроумные и такие броские, в них так приятно верить


Желающие познакомиться с точкой зрения, прямо противоположной моей, могут сделать это, например, здесь. Предваряя возможные вопросы сообщу, что с точкой зрения научного атеизма я знаком и экзамен, в свое время, сдал на «отлично». Изучение обязательного в ВУЗах СССР предмета «Основы научного атеизма», который читал нам широко эрудированный и хорошо известный в Одессе специалист, действительно помогло в моем формировании как православного человека.

Share

Учим программировать

Среды для обучения детей программированию

Сам вопрос «Стоит ли учить детей программировать?» достаточно спорный. Я не хотел бы его здесь обсуждать. Вопрос в другом. Если вы вынуждены обучать детей программировать, то на каком языке и в какой среде это делать? Делать для чего? Пока будем рассматривать преподавание программированию как самоцель. Т.е. Вы должны привлечь внимание ребенка к этому виду деятельности, заставить его сфокусироваться на ней, получать удовольствие от процесса. И только.
Дальше я рассмотрю несколько пригодных для этого сред и буду дописывать и корректировать материал по мере того, как буду находить для этого время.

 

Microsoft Game Lab Kodu

Фрагмент программы дирижабля из моей учебной Kodu-игрыhttp://fuse.microsoft.com/page/kodu

Система для создания трехмерных игр. Практически игровой движок с уже заданными физическими явлениями и возможностью управлять ими в определенных пределах. Проектирование поведения ведется в почти удобном визуальном редакторе при помощи мыши. Готовые игры легко могут быть сделаны доступными сообществу (выложены в интернет). Выкладывается игра в формате, доступном для корректировки любому загрузившему ее человеку. Т.е. Open Sourse от Microsoft? Да.
На октябрь 2012 вижу совсем немного недоделок и багов. В основном они касаются создания и корректировки путей (дорог и т.п.). Программа могла бы стать совершенной сенсацией, если бы не некоторые недоделки, специально принятые ограничения.
Набор объектов ограничен. Средств и возможностей для пополнения библиотеки нет. Открыв в системе разработку компонент, можно было бы получить совершенно взрывную волну GameDev’а. Перечислим недостатки системы, поскольку её достоинства прямо кричат о себе сами и их реально много.

  • Игра доступна только в среде Kodu. Т.е. нужен интерпретатор, внутри которого работает игра и этот интерпретатор не встраивается в браузер, а запускается отдельной программой. Действуй Kodu в технике Adobe Flash Playr, и индустрия разработки казуальных игр заполнилась бы как минимум наполовину продукцией для него. Не верите? Создание достаточно занимательной игры в этой системе отнимает у опытного человека около часа!
  • Ну и последнее. Сейчас выкладывать и загружать игр в сеть можно не «на сайт» а во внутреннюю базу. Доступ к базе осуществляется из самой среды Kodu в виде простого списка. Т.е. вы не можете зайти на страничку выложенной Вами игры, проследить за ее загрузками, выложить следующую версию, поговорить с фанатами, отследить клоны и т.п. Можно задать версию игры и посмотреть сколько раз ее загружали, но через полдня Вы уже не найдете ее в списке и не поймете куда она делась. Доработка этой функции до уровня «магазина игрушек» со страничками размещенных игр безусловно привела бы ко взрыву интереса к ней.

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

Scratch

Scratch со скриптами прыгающего мяча

http://scratch.mit.edu/

Созданная в серьезном месте (Массачусетский технологический институт) система позволяет манипулировать большой библиотекой плоских объектов-спрайтов. Часть объектов имеет прикрепленные скрипты на встроенном языке пазлов. Вообще всё программирование ведется на «языке пазлов». Т.е. операторы представляют собой кусочки пазла, которые можно соединять друг с другом для получения программы. Есть операторы цикла и условные, переменные и операции. Можно создавать и публиковать свои проеты. Проект имеет свою страничку. Известно кто создал, на каком проекте основан, какие есть продолжения (приемники), сколько загрузок, скольким понравился. Можно встраивать в вебстраничку в виде java апплета. Сделать что-либо занимательное практически нереально. Анимация строится из покадровых рисунков, называемых «костюмами». Мотивация у ребенка пропадает, когда ему становится ясно, что занимательного продукта не получить. Но на некоторое время хватает. Особенно, если воспользоваться средствами старого доброго Лого, опустить перо и строить забавные траектории.
Удается продемонстрировать элементы управляющих структур процедурных языков программирования. Имеются переменные, операции с ними (на английский манер называются операторами +, — и т.п.), сенсоры. Физики практически нет.
По сравнению с Kodu пользы больше, фана много меньше. Есть версии для трех популярных операционных систем с автоматической локализацией (в т.ч. русской и украинской).

Имеется несколько похожих проектов, которые нет смысла описывать отдельно. Например, BYOB 3.1 — Build Your Own Blocks (a/k/a SNAP!). Если Вы решили использовать Scratch, то обязательно посмотрите и их. При всей похожести, некоторые нюансы имеют принципиальное значение с точки зрения программирования и выбирать нужно лично.

StarLogo TNG

Фрагмент программы и вида исполнителя для StarLogo TNGhttp://education.mit.edu/projects/starlogo-tng

Проект из того же МИТа. В основе почти те же пазлы, что и в программе Scratch. Есть возможность использовать обычные алгоритмические конструкции типа условных операторов, можно создавать и вызывать процедуры, программировать события типа столкновений. Есть 3D. Физики нет, если не считать передвижения всегда по нормали к поверхности (так и деревья растут как колючки на ёжике). 3D исполнители воспроизводят минимальную анимацию.
Итог — методы программирования лучше всех остальных в обзоре, исполнители (управляемые программой объекты) реализованы значительно хуже Kodu, но чуть эффектней остальных 2D. Как вариант для обучения программированию при помощи мыши вполне приемлем. Если быть очень снисходительным к результату, то можно сделать что-то издалека напоминающее компьютерную игру.

Alice

Двуногие и четырехногий объекты на сценеhttp://www.alice.org/

Одна из наиболее раскрученных программ с хорошей методической поддержкой. Хотя по всем перечисленным программам можно найти литературу и для ученика, и для учителя (иногда даже на русском языке), по Алисе даже написали и защитили несколько диссертаций в области методики преподавания информатики. Тем не менее ждать чего-то  очень уж привлекательного не стоит. Доступная на сегодняшний день версия программы 3.1 не перекрывает, а скорее дополняет предыдущую версию 2. Это почти разные среды. В новой есть поддержка 3 D.  Программирование по-прежнему происходит перетаскиванием шаблонов блоков кода и заданием параметров. Правда, сами блоки текстовые, а не графические объекты-пазлы. Есть возможность переключаться со внутреннего языка системы на Java. Т.е. фрагменты перетаскиваемого кода будут теперь написаны на Java, что собственно мало что меняет в технике, но забавно. Видны конструкторы объектов, это полезно. И вообще, с точки зрения кода программа вполне подходит для освоения азов шагов недетского программирования. У объектов выделяются методы (отдельно процедуры, отдельно функции) и свойства. Некоторые объекты представлены трехмерными моделями, у которых отдельные (анатомические) части можно программировать самостоятельно. Т.е. можно поднять руку, повернуть кисть, наклонить голову и т.п. Правда действия выполняются последовательно, так что сложных движений не создать. Есть отношения между объектами. Т.е. можно «идти к…» или «идти от…», «стать перед…» и т.п.

Что все портит? Уже упомянутое отсутствие параллелизма в программировании движений и главное… Физики нет. Объекты-приведения проходят друг сквозь друга.

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

Вывод — система ближе всех, из рассмотренных выше, к «взаправдышнему» программированию, хорошие 3D модельки с анатомией и суставами, есть понятия о взаимном положении объектов в духе Терри Винограда, физики нет. Наиболее острые ощущения: 1)где физика? 2)что я такого сделал, что скрутил голову страусу?

Greenfoot

Учебный проект с листиками и Вомбетом в Greenfoothttp://www.greenfoot.org

Программирование на языке Java в текстовом режиме. Настоящая IDE со всеми базовыми функциями. Есть сцена (мир), актеры и сценарии. Прозрачная модель ООП. Даже чтобы раместить актера на сцене нужно счелкнуть правой кнопкой мыши по классу и вызвать конструктор. Появляется графический образ нового объекта, прилипает к курсору и его можно куда-нибудь положить.  По части программирования все очень разумно и корректно. С точки зрения реализации — быстрая, четкая работа, качественный интерфейс. Исполнители (актеры) — плоские картинки без анимации. После часа знакомства с программой основная ощущение — недоумение. Зачем это все сделали? Для чего? Я не могу придумать ни одного осмысленного применения этой, безусловно, качественной программе. Может планируется какое-то развитие? Нужно подождать, посмотреть.

Впрочем утверждается, что можно с помощью программы создавать игры. В качестве примера есть несколько проектов. Два из них идут вместе с учебником на сайте проекта. Сразу вспомнилась игра «Посадка на Луну» в которую я играл в 1982 году на текстовом терминале EC-1022 в диалоговой системе Focus (или Primus?). Думаю, что геймплей игр в GreenFoot запросто можно дотянуть до такого уровня.

 

BlueJ

Диаграмма классов и редактор кода в BlueJhttp://www.bluej.org

BlueJ особый продукт в этом обзоре. Здесь нет исполнителей и сцены. Есть только программирование на Java с использованием специфической IDE для начинающих. Очень интересных возможностей две. Первое — визуализация классов в виде наглядной диаграмы, чем то напоминающей об UML. Второе — возможность интерактивного создание объекты и возможность экспериментировать с ними. В принципе можно написать небольшой Java-проект. Если ребенок не собирается в дальнейшем программировать, то идеальный выбор для спартанца. В принципе этот вариант за полшага до хардкора с выбором Eclipse в качестве среды для обучения школьников программированию. Кстати, если ребенок в дальнейшеп планирует заниматься программированием, то наверное хардкорный вариант предпочтительнее — не придется переучиваться с детской IDE на взрослую.

Впечатление с точки зрения программиста очень приятное. Наверное хорошо использовать для изучения программирования старшеклассниками и первокурсниками. Минус (или плюс?) — полное отсутствие развлекательной компоненты.

 

КуМир

KyMup

http://lpm.org.ru/kumir2/

http://www.niisi.ru/kumir/

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

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

Перечислим возможности. Начну с «Черепашки» — русскоязычный лого. Не проверял сейчас, как у него со списками, но рекурсию отлично потянул (см. рис. — помнят руки:). Исполнитель робот позволяет исследовать клеточную карту, измеряет температуру и т.п. Есть еще «Кузнечик», «Чертежник» и «Водолей» для задач о переливаниях.

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

Конечно есть и большой минус. Идейно проект мало развивался последние 30 лет и ни какого ООП там нет. К сожалению, в свое время туда не очень-то влили функционального программирования. А ведь дело к тому шло — слушали Пейперта (дай ему Бог здоровья — 84 года человеку уже)! Сделай это тогда, мы сейчас были бы на самом гребне волны.

Очень жаль, что наши чиновники от образования в свое время завернули школьную информатику от алгоритмизации в сторону набора текста в MS Word’e и прочих умений писать и рисовать при помощи компьютера. Дальше должно идти 100500 страниц текста в духе «какую страну про**рали», но здесь это не к месту.

 

Прочее

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

Panther — авторы утверждают, что это улучшенная версия Scratch. Поскольку все разработчики активно что-то пишут на этом Scratch, то возможно они знают о чем говорят. Имеется возможность экспорта собранного проекта в исполняемый exe-файл.

Jeroo — плоские исполнители на плоской сцене, но их программирование можно проводить либо в стиле языка Java, либо в стиле Python. Подготавливает к ООП.

Stagecast Creator — еще одно двухмерное чудище, но на этот раз без программирования. С помощью остроумной визуальной системы просто указываешь, что будет когда ситуация из одной нарисованной станет другой нарисованной. Можно добавлять отдельные объекты со своим простым поведением.

Mama — система построена на базе уже описанной Alice. Существенных отличий за короткое время знакомства не обнаружил.

Robot Emil — трехмерный робот Эмиль передвигается при помощи простых команд «Шаг» и «Поворот». Умеет класть, убирать и трансформировать блоки различной формы, умеет их красить. Что-то в духе исполнителей КуМир из школьного учебника Кушниренко по информатике

Общие выводы

На данный момент неутешительные. Ни одна из систем не стоит потраченного времени. Конечно стоит показать Kodu как самый эффектный способ быстро создать продукт. Придется потом как-то погасить разочарование ребенка из-за невозможности какого-либо использования (отторжения) полученного продукта. И как-то погасить разочарование учителя из-за невозможности что-либо проиллюстрировать из области программирования.
Остальные продукты при богатстве идей и глубине методической проработки вряд ли стоят времени, затраченного на их освоение ребенком. Но… Если вы вынуждены преподавать ребенку программирование долго… любой из перечисленных подойдет. Легче всего осваивается Scratch. Ближе всего к программированию Alice. StarLogo похож на Scratch и, пожалуй, только дело вкуса, каким из этих двух продуктов пользоваться. Если нужно развить навыки алгоритмического мышления и азы рекурсивной обработки, то КуМир (с соответствующим учебником) еще может очень даже пригодиться.

 

P.S. Вместо послесловия

Выкладываю здесь Light Bot 2:

LightBot игра для будущих программистов

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

Попробуйте.

Чтобы начать просто нажмите мышкой на один из светящихся квадратиков доступных уровней. Когда уровень загрузится щелкните на информационном окне в центре. А дальше выбираем команду (вверху) и устанавливаем ее в программу (справа). Недоступные ячейки залиты красным. Закончив, жмем Run внизу. Впрочем, есть учебные видео

Вот такой маленький бонус.

P.P.S. Через полтора года

spartacus-421e492dbea28d8468b5af59080501e1[1]Вдруг попался забавный  ruby-warrior. Что-то вроде 2D аркады из 80-х. В этой игре необходимо писать программу на Руби, которая определяет очередной ход игрока: идти, стрелять из лука, сражаться мечом, освобождать заложника или отдыхать (восстанавливает уровень здоровья).  Делать это можно как налево так и направо. Исходной информацией для принятия решений было количество здоровья (в начале игры 20), ощущение (возвращает объект соседней клетки), зрение  (возвращает объект 3-х соседних клеток). Объект (соседней) клетки имел методы, позволяющие определить находится ли там враг, стена, заключенный, ступени к выходу на следующий уровень или бомба с часовым механизмом. За освобождение заложников и победу над врагами присуждают очки. Враги бывают нескольких видов — ближнего и дальнего боя с разными силами и дистанциями поражения.

загруженное

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

Возможно игра еще в разработке. Нужно заглянуть сюда еще как-нибудь.

Share

Защищено: Термины

Это содержимое защищено паролем. Для его просмотра введите, пожалуйста, пароль:

Share

Семиотические корни Pragmatic Web

Для непосвященного читателя будут необходимы некоторые пояснения по самому понятию семиотика. Поскольку тема весьма популярна, познакомиться с ней в сети достаточно легко. Однако советую просмотреть небольшую популярную книжку великолепного специалиста Ю.С.Степанова. Жалею, что она мне в свое время не попалась первой. Приходилось продираться через дебри. Зато уж Вы, уважаемый читатель, буквально через 15 минут будете говорить на общем со мной языке.

Схема взаимодействия понятий

На что, собственно, нам нужно обратить внимание в первую очередь? На взаимодействие между тремя основными группами понятий.

Во-первых это знаковая система, которую я обозначил на схеме «альфой«. Это любые знаки, которые будут использованы для обозначения объектов в нашей информационной системе. Это вряд ли будут буквы, скорее слова, токены, лексемы. Отношения в которые они вступают регламентируются на уровне описания синтаксиса. Т.о. синтаксис будет работать на уровне формальной грамматики языка описания. Syntactic Web — так называют сеть в которой действует обычный гипертекст с с обычными гиперсслками между документами. Т.е. когда был создан синтаксис, поддерживающий гиперссылки. Термин придуман задним числом, по-этому выглядит несколько притянутым за уши. Так собственно и есть.

Второй узел на схеме помечен словом «What?» и соответствует объектам, информация о которых кодируется при помощи знаков. Объекты могут принадлежать реальному миру, а могут быть частью какой-либо внешней по отношению к альфе формальной системы. Связь знаков и знаковых композиций с этими объектами или их отношениями устанавливает семантика.  Случай с объектами реального мира сразу выводит систему за пределы возможностей формального рассмотрения. Чтобы вернуться в область математики приходится использовать представление объектов реального мира объектами моделирующей (или дескриптивной) системы. Т.е. мы работаем не с объектом, а снова со знаком. Точнее с комплексом идентификаторов и значений атрибутов существующих снова в пределах некоторой знаковой системы. Т.о. мы получаем объект (в некотором внутреннем коде системы) и его интерпретации на одну или несколько исходных знаковых систем. Конечно, сама задача описания реальных (да и абстрактных) объектов сама по себе вряд ли разумно разрешима. На этой почве находит свое применение, например, объектно-ориентированный подход. Здесь же разворачиваются различные онтологические методологии. Исторически Semantic Web происходит от Resource Description Framework и идеи структурированного представления всей информации в сети в целях развития средств ее автоматизированной обработки. Тут самое время порекомендовать почитать стандарт  ISO 15926. Или по крайней мере полистать его второй и восьмой раздел ( ISO/TS 15926-8:2011. Industrial automation systems and integration — Integration of life-cycle data for process plants including oil and gas production facilities — Part 8: Implementation methods for the integration of distributed systems: Web Ontology Language (OWL) implementation). Однако, есть риск больше никогда не увидеть своего читателя. По этому, ограничусь рекомендацией познакомиться с Web Ontology Language и многолетней интересной работой Facebook по созданию так называемого Open Graph. И вообще, почитать про Semantic Web и обманутые ожидания.

Кстати, небольшой пример синтаксиса-семантики в рамках языка. Просто, чтобы убедиться, что мы все понимаем правильно. Знак «+»  обычно присутствует как обозначение бинарной или унарной операции. В бинарном случае необходимы два операнда слева и справа. В унарном — один справа от знака. Что это означает? В случае унарного оператора еще недавно традиционный ответ был — «знак числа». Т.е. подчеркивалось именно положительное значение величины. Такой был смысл, такая была семантика. Что теперь? Вы обратили внимание на кнопку «+1» над текстом статьи? Совсем другая семантика. Увеличение на 1 репутации статьи или автора. Вполне возможны и кнопки «+2» и даже «+100500». Но от этого второй аргумент не появится — он подразумеваемый. Т.е. семантика этой операции заключается в увеличении значения подразумеваемого аргумента на величину заданного. Даже не сложение, а «увеличение на …». С бинарным случаем тоже не все так просто. Складывать два значения приходится по различным алгоритмам — сложение целых чисел происходит совсем не так, как дробей с различными знаменателями. А семантику того, что скрывается за знаком «+» в надписях типа «Оля+Петя» я даже не рискну здесь описывать. Важно будет понять только то, что семантика вещь многоуровневая и присутствует на разных стадиях моделирования или описания системы. Но всегда по отношению к объектам, которые существуют в некоторой формальной системе.

Практически те же аспекты Semantic Web можно рассматривать в терминах моделей предметной области. Хотя это на первый взгляд более широко, чем онтологии, на практике их часто отождествляют. Т.е. модели предметных областей строятся на баз онтологий (и даже верхних онтологий) и расширяют их на мета уровне.

Переходим к третьей вершине схемы — «Who?«. Здесь появляется субъект. Т.е. я или Вы или еще кто-то, обладающий «рациональным поведением» и способностью «целеполагания». Лицо, участвующее в коммуникации или создании некоторого информационного контента имеет какую-то цель. Именно эта цель и является «Прагматикой» — меткой ребра, ведущего от узла «Who?» к «альфе«. Задачей прагматики является изучить связи, существующие между создателем/потребителем информационного ресурса и данной знаковой формой выражения информации. Т.е., мы получили грамматически точное высказывание. Поняли, что именно оно означает. Теперь осталось выяснить зачем нам это сказали. Или наоборот.  Мы умеем правильно грамматически строить высказывания. Умеем вкладывать в них смысл. Как теперь с помощью этого достичь своей цели? Pragmatic Web делает какие-то шаги в этом направлении. Собственно, первоочередность рассмотрения цели в прагматики это мой личный приоритетный интерес. «Правильный» подход рассматривает в первую очередь другое. Например, отношение автора к сообщаемому («Я надеюсь, что…», «Я уверен, что…»), наличие социальной роли (например, ученик-учитель в дистанционном образовании). Понятие о цели тоже присутствует. Например, информационная система для «понимания» сути запроса, должна знать локальные цели запрашивающего (человека или программы). Эти и многие другие аспекты очень важны для правильного понимания информации. И поскольку во главу угла ставится понимание, бывает трудно провести границу между семантикой и прагматикой. Любопытно, что при традиционном подходе вопросы достижения цели фигурируют только косвенно. Мой круг интересов к Pragmatic Web касается не столько вопросов понимания, сколько вопросов достижения цели. Т.е. человек (или агент) работает с информацией для достижения своей цели (или иерархии/множества целей). Понимает ли его взаимодействующая с ним информационная система и как именно она его понимает, в общем случае, значения не имеет. В частном случае добиться понимания может быть целью. Но только в этом частном случае.

Какие успехи в этой области? В прикладном контексте довольно много работ и постоянно действующая международная конференция  International Conference on Pragmatic Web в рамках симпозиума по RuleML от The Rule Markup Initiative. Еще в 2006 был опубликован манифест Mareike Schoop, Aldo de Moor, Jan Dietz – The Pragmatic Web: A Manifesto.— Communications of the ACM, 49; S. 75-76. К сожалению я не вижу его сейчас в открытом доступе. Интересной «направляющей» была работа  Towards a Pragmatic Web Aldo de Moor, Mary Keeler and Gary Richmond.

Большинство успешных работ предоставляют возможность организовать строго протоколированный диалог или жесткий формат предоставления специфических данных. Т.е. отвечают на вопрос — как нужно построить взаимодействие в этом конкретном случае для достижения этой конкретной цели? Для этого подхода характерно изучение конкретных типов документов, фиксация (и моделирование) коммуникационных ролей.

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

В теоретическом плане основой для развития темы Pragmatic Web, кроме различных формальных дескриптивных механизмов (частично унаследованных из Semantic Web), должна видимо стать формальная прагматика. Впервые о сколько-нибудь формальном подходе к прагматике я узнал еще в 80-х годах.  Мне кажется, что именно тогда в формальной прагматике произошел всплеск публикаций и мне попался перевод какой-то  работы лингвиста, логика и философа из MIT Роберта Столнейкера. Он писал о формальной прагматике, как об идее, которая вот только что пришла ему в голову. Ну, мне так показалось.  В общем  Правда формул в статье не было, но они светились между строк. Сейчас нашел оригинальный вариант (Robert С. Stalnaker. Pragmatics. — In: «Semantics of natural language», D. Reidel Publishing Company, Dordrecht-Holland, 1972, p, 380—397). Основная идея…

Если верить английской Википедии формальную прагматика изобрел Jürgen Habermas. Пришел он к ней из социологии, да и называл иначе — универсальной прагматикой и было все на 4 года позже работы Столнейкера. Отталкиваясь от странной идеи Холмского об врожденной универсальной грамматике, Хабермас вывел свою универсальную прагматику, манипулирующую коммуникативными компетенциями. Основная идея…

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

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

Share