Smalltalk по-русски
вторник, Май 31, 2005
[Dolphin] Bouncing Balls

Представляем вашему вниманию демо-ролик, демонстрирующий некоторые приемы интерактивной работы с Dolphin Smalltalk 5.0 - DolphinBouncingBalls.zip (архив около 4Mb).

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

P.S. Просмотр ролика обязателен для тех, кто хочет понять, чем разработка на Smalltalk отличается в лучшую сторону от мэйнстримовых языков. Свои отзывы оставляйте в комментариях.

понедельник, Май 30, 2005
[Seaside] Финальная версия 2.5

Опубликована финальная версия Seaside 2.5, приуроченная к выходу Squeak 3.8. Скачать полный образ можно здесь. Для VisualWorks доступна одна из последних бета-версий в Public Cincom Repository.

пятница, Май 27, 2005
[Squeak] Университетские пираты

Интересными делами занимаются студенты в University of Magdeburg и University of Applied Sciences Magdeburg-Stendal совместно с компанией Impara.

Проект Pirates длился один семестр. Его целью была разработка нестандартного физического пользовательского интерфейса для игры с множеством игроков. Есть видео, но на немецком языке.

Проект PiratesПроект Pirates в разработке
Интересно, чем в универах занимаются на пост-советском пространстве?

На сайте Impara есть некоторые подробности еще одного проекта. Проект Magrathea - разработка на основе OpenCroquet броузера Интернета будещего. Предполагается, что вместо "домашних страниц" будут существовать "домашние миры".

Проект Magrathea

Ярлыки:

[Squeak] wxSqueak 0.4

Одним из основных факторов, отпугивающим новичков от Squeak, сами новички часто называют непривычный GUI. Именно эту проблему и должнен устранить wxSqueak - интерфейс к wxWidgets (больше известный как wxWindows). Недавно как раз вышел wxWindows 0.4 основанный на Squeak 3.8 и wxWidgets 2.6.0.

На сайте доступны для загрузки версии для Win32 и OS X.

Ярлыки:

среда, Май 25, 2005
[Squeak] Вышла очередная версия - Squeak 3.8

Вышел Squeak 3.8. Дистрибутивы образов доступны по адресу: ftp://st.cs.uiuc.edu/Smalltalk/Squeak/3.8.

Напомню, что кроме образов для работы понадобятся: файл SqueakV3.sources.gz , и ВМ. Для Squeak версий 3.х подойдёт любая ВМ версии 3.х. ВМ для Win32 можно взять на squeak.sf.net, ВМ для Un*x можно взять здесь.

Из нововведений:

  • интегрированный пакет m17n (UTF-X, многобайтовые строки и пр.) от Yoshiki Ohshima;
  • прорефакторенная иерархия String;
  • интеграция поддерки комплексных чисел;
  • улучшения в поведении отладчика, инспектора;
  • условный останов через #haltIf:;
  • реимплементация механизма Allan Schiffman остановки выполнения блоков по тайм-ауту.

Ярлыки:

понедельник, Май 23, 2005
Освободите Вилли!

Появилась информация, что, возможно, вместе с полной версией Dolphin 6.0 будет выпущена бесплатная версия под названием Dolphin Community Edition.

Пока не известно будет бесплатная версия базироваться на Dolphin 5 или 6. Впрочем не известно даже будет ли бесплатный вариант вообще. Но сам факт появления подобных слухов внушает оптимизм.

Ярлыки:

Гибкость vs Корректность

В продолжение темы из предудыщего сообщения...

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

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

Исходный код в нем вводится через специализированные браузеры, которые являются медиумами между программистом и миром "живых" объектов. Не делается разделения между временем создания и временем запуска приложения. Приложение как бы работает все время. А разработчик посредством ввода исходного кода и команды Apply пробует модифицировать программу непосредственным изменением определений классов и байт-кода их методов. Естественно, если в исходном коде содержится синтаксическая ошибка, то об этом будет сообщено немедленно. То же относится к некоторым семантическим ошибкам вроде использования необъявленной переменной или класса. Но Smalltalk остается динамически-типизированным языком, поэтому ошибка "метод не найден" может быть обнаружена только при выполнении соответствующего кода. Но и здесь современная IDE приходит на помощь - она может подсказать, что метода с указанным именем в системе не существует, что предотвращает опечатки и неверное написание.

Также следует сказать, что Refactoring Browser, изначально придуманный для Smalltalk, делает изменения кода более контролируемыми и корректными. Хоть в исходном коде и не содержится описаний типов, но в некоторых случаях инструмент "догадывается" о типах исходя из контекста. Кроме того, есть возможность проводить refactoring в полуавтоматическом режиме с контролем со стороны разработчика.

Из всего этого следует, что по контролю корректности разработки Smalltalk скорее ближе к Java и C# с инструментами IDEA и ReSharper соответственно, чем к PHP, Perl, Python и Ruby. Но, в то же время, он полностью сохраняет всю свою простоту и гибкость.

воскресенье, Май 22, 2005
Запрещать или разрешать?

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

Дэвид Бак (David Buck), автор первоначальной версии POV-Ray, приводит интересное обоснование этого утверждения.

Например, рассмотрим того что даёт ООП:

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

Теперь посмотрим на ряд тенденций в майнстримовых языках:

  • статическая типизация - ограничивает способы использования кода;
  • декларации типов - требуют постоянного указания типа переменных, ограничивают возможность написания обобщенного кода настолько, что пришлось выдумать дополнительную сущность, естественно, усложняющую язык;
  • final/sealed классы - запрещают расширение классов;
  • checked exceptions - требуют постоянного указания того, какие исключения могут быть брошены, и, зачастую, даже сторонники статической типизации признают, что checked exceptions это уже перебор.
Цель использования этих принципов - минимизация ошибок, даже если ценой будет усложнение разработки.

Сегодня страх перед тем, что может написать программист побеждает возможности развития которые обычно даёт свобода. Но правильный ли это путь?

суббота, Май 21, 2005
1-е ежегодное соревнование программистов на Smalltalk: предварительные итоги

Первая фаза 1-го соревнования программистов на Smalltalk длилась 48 часов с 17 часов по московскому времени понедельника 16 мая по 17 часов среды 18 мая.

Ошибся я сразу же. Забыл о разнице между киевским и московским временем, и, в результате, ознакомился с заданием на час позже начала.

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

Прикинув сложность, я подумал, что вполне реально сделать приложение удовлетворяющее базовым требованиям за пару часов. Через три часа стало ясно, что нужно еще минимум столько же времени :), а значит лучше перенести всё на следующий день.

Ввиду лёгкости задачи и того, что осталось работы часа на два-три следующий день (вторник) прошёл даром. И только в среду я занялся второй частью задания, а именно построением веб-интерфейса. Задание я делал на VW7.3 с Seaside поверх WebToolkit и BGOK для генерации графиков. Для упрощения разворачивания решения я решил использовать версию Seaside, идущую в дистрибутиве с VW. Это было второй ошибкой, из-за которой я пробежал по всем(!) багам, как отдельно Seaside-а так и комбинации Seaside+WebToolkit, которые были пофикшены за последние пол года. Последним испытанием стала отправка результатов. После отправки парселов, я решил отправить готовый образ с загруженными парселами дабы исключить любые накладки. Запакованый архив иеет размер около 8Мб. Потратив 40 минут я понял, что ни один из трёх доступных мне SMTP серверов письмо такого объёма не пропустит.

В среду на разработку было затрачено порядка 6-7 часов. Итого около 10 часов на выполнение задания.

Признаюсь, что, не смотря на относительную простоту и даже банальность, выполнение задания оказалось довольно полезным. В очередной раз убедился, что знание английского у меня хромает; даже не представляю, как тестировать веб-приложение и вообще с TDD проблемы; знаний CSS маловато даже для того, чтобы приложение выглядело хоть чуть получше, чем "нераскрашенный" HTML; чем делать графики под VW я не знаю. В сухом остатке: не стоило считать себя слишком могучим и откладывать разработку на потом.

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

Скачайте архив с парселами. Перед загрузкой этих парселов загрузите парсел "Wave-Base", а затем пакет "SeasideForWebToolkit" версии "2.5b7.10.2" (последняя на даный момент) из публичного синкомовского репозитория. Урл для доступа к приложению: http://localhost:8008/seaside/go/surveys.

Два других доступных решения делались на других технологиях. Решение Blaine Buxton - Squeak с Seaside и PieChatMorph. Во-первых, выглядит оно не в пример красивей моего :). Во-вторых, большое покрытие тестами. В третьих, намного более полно использованы возможности Seaside. Так, там существует редактор вопросов, который, естественно, генерируется на лету. Существует возможность отображения круговых диаграм, а вот экспорт в XML вызывает исключение.

Решение Michael Lucas-Smith использует VW, собственный веб-фрейморк SimpleWeb (поверх WebToolkit), Prevayler и BGOK. Интересна история SimpleWeb. Зародился он на VAST. Так как там нет Seaside, то был создан фреймворк с API подобным Seaside, и использующим стиль передачи продолжений (CPS) для достижения того поведения, которое обеспечивает Seaside с помощью явных продолжений. Во время соревнования фреймворк был переписан(!) на VW. Помимо базовой функциональности данное приложение умеет отображать результат в виде круговой диаграммы, и имеет экспорт в XML. Приложение имеет около 90 тестов. Мои несколько тестов на этом фоне выглядят просто смешно.

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

Результаты соревнования должны быть готовы к 1-му июня. Ждём-с.

Ярлыки:

пятница, Май 20, 2005
Smalltalk & OCL (Bold for Delphi/C++): Найдите 10 отличий

Сравните язык объектных ограничений - Object Constraint Language (OCL) и работу с коллекциями в Smalltalk:

OCL:
  Company.allInstances->collect(employees->size)
Smalltalk:
  Company allInstances collect: [:each | each employees size]
OCL:
  Contact.allInstances->first
Smalltalk:
  Contact allInstances first
OCL:
  Company.allInstances->first.employees->includes(self)
Smalltalk:
  Company allInstances first employees includes: self
OCL:
  Category.allInstances->select(name = 'business')->notEmpty
Smalltalk:
  (Category allInstances select: [:each| each name = 'business']) notEmpty
OCL:
  Company.allInstances->reject(employees->size = 1)
Smalltalk:
  Company allInstances reject: [:each| each employees size = 1]
среда, Май 18, 2005
Обмен опытом

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

воскресенье, Май 15, 2005
Dolphin 6 beta

Появился первый отзыв о бете Dolphin 6.

Dolphin 6 resource browser

Количество бета-тестеров ограничено, так что ожидаем и других подробностей.

Обновление: Последним предложением я хотел сказать, что из-за ограничения участвующих в программе бета-тестирования, прийдётся ждать, пока кто-то из бета тестеров не даст более подробной информации о Dolphin 6.

среда, Май 11, 2005
История GUI и Smalltalk
В статье "A History of The GUI" есть изображение внешнего вида среды разработки Smalltalk на Xerox Alto в 70 гг.
Внешний вид среды разработки Smalltalk на Xerox Alto
Кликните по изображению, чтобы увеличить
пятница, Май 06, 2005
[Dolphin] Документация

Переведена очередная глава из документации по Dolphin Smalltalk - Забава с Объектами на игровой площадке.

Популярные статьи
:: Smalltalk?!
:: Почему Smalltalk?
:: Great Leap Forward from Java to Smalltalk

Последние сообщения
:: Smalltalk и Все-Все-Все: Белка-Рыба наносит ответн...
:: Smalltalk и Все-Все-Все
:: [Squeak] Новый сайт Squeakland
:: [Squeak] Squeak для iPhone
:: [Squeak] SqueakDBX
:: [Squeak] Monticello 2
:: [GST] GNU Smalltalk 3.0.4 release
:: MagLev - Gemstone for Ruby
:: [Squeak] JSqueak, Potato
:: [Squeak] WxSqueak 0.5

Архив
Предыдущие новости / Декабрь 2004 / Январь 2005 / Февраль 2005 / Март 2005 / Апрель 2005 / Май 2005 / Июнь 2005 / Июль 2005 / Август 2005 / Сентябрь 2005 / Октябрь 2005 / Ноябрь 2005 / Декабрь 2005 / Январь 2006 / Февраль 2006 / Март 2006 / Апрель 2006 / Май 2006 / Июнь 2006 / Июль 2006 / Сентябрь 2006 / Октябрь 2006 / Ноябрь 2006 / Декабрь 2006 / Январь 2007 / Февраль 2007 / Март 2007 / Апрель 2007 / Май 2007 / Июнь 2007 / Август 2007 / Сентябрь 2007 / Ноябрь 2007 / Январь 2008 / Март 2008 / Май 2008 / Июнь 2008 / Июль 2008 / Август 2008 / Сентябрь 2008

Atom Feed
Smalltalk по-русски


Powered by Blogger