четверг, 6 сентября 2012 г.

Знакомство с Ruby. Первые впечатления

В последнее время в различных публикациях (обычно в Интернете) всё чаще стали мелькать названия языков программирования типа Haskell, Lua, Python, Erlang, Ruby и пр. Естественно мне захотелось посмотреть в каком направлении идёт развитие, и что ожидает программирование в ближайшем будущем.

Я остановился на Ruby. Выбор был сделан достаточно случайно, основываясь на характеристике из Википедии. Цитирую:

…динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по особенностям синтаксиса к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и CLU.

Привлекло, что это язык, ориентированный на ООП, близок к Perl (который я неплохо знаю), а также, что он «некоторыми чертами» пересекается с тем же Питоном. И вообще, судя по статье, очень интересный язык.

Установочный пакет (Ruby ver. 1.9.3 под Windows) был взят с официального сайта Ruby, а в качестве основного путеводителя я выбрал книгу Д.Флэнаган, Ю.Мацумото «Язык программирования Ruby», поскольку лучше, чем автор, про язык всё равно никто не расскажет. Установка прошла без проблем, и я начал осваивать новый для себя язык.

Самое первое впечатление (или ожидание?) от языка, что это Perl с нормально организованным ООП: т.е. с системой классов, наследованием, инкапсуляцией и пр. Отсутствие нормального ООП мне всегда досаждало в Perl. Однако в последствии оказалось, что Ruby – это скорее нечто среднее между Perl и JavaScript с примесью ООП в духе C++. Что вроде бы и неплохо.

Второе ожидание было навеяно цитатой из письма Мацумото (из статьи в Википедии): «Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть)». Из этого я сделал вывод, что Ruby по сравнению с Perl, должен быть логически более стройным и более строгим. Пока это ожидание, мягко говоря, не оправдалось.

У меня сложилось впечатление, что Ruby не проектировался, как например Pascal или Modula. За основу был явно взят Perl, а потом разработка языка шла примерно так: это мне не нравится – выкинем, а вот такая штука мне нравится – вставим. Т.е. в итоге получился некий салат из различных концепций и возможностей, в котором «привкус игрушечного языка» чувствуется гораздо сильнее, чем в Perl.

Что мне сильно не понравилось в Ruby:
  • Отсутствие логической стройности синтаксиса. Синтаксис C, C++, Pascal – логичен, Ruby – нет. Один неправильно поставленный пробел изменяет семантику выражения – это нормально? Одну и ту же семантическую конструкцию можно написать несколькими разными способами.
  • Следствием предыдущего пункта является сложность языка. (Хотя одной из отправных точек при создании Ruby была именно простота языка.) Даже если взять вышеупомянутую книгу «Язык программирования Ruby», в ней 492 страницы. Обычно книги «Язык программирования <название_языка>» (книги начального уровня, т.е. описание языка) имеют 300, плюс минус 50 страниц среднего формата, включая оглавление, предметный указатель и описание грамматики языка в РБНФ. На моей памяти только два языка имели более объёмные описания: Ada и Prolog.
  • Избыточное количество методов для встроенных классов. Например, зачем классу Integer нужно иметь три различных итератора upto, downto и times, да еще и step, унаследованный от Numeric?
  • «Опасность» языка или, лучше сказать, незащищённость от ошибок. Про Perl кто-то из корифеев сказал, что только сумасшедший будет писать на Perl без прагмы strict и ключа –w в командной строке интерпретатора. Видимо на Ruby пишут исключительно сумасшедшие.

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

вторник, 13 декабря 2011 г.

Прогресс... мля...

На одном гигабайте мозгов уже ни хера не работает (((

пятница, 10 июня 2011 г.

Autodesk Design Review 2012

Потребовалась мне смотрелка для файлов DWF. Причем даже не мне, а надо было отдать заказчику, что бы он мог посмотреть материалы, которые для него были подготовлены. Естественно полез в и-нет, дабы скачать сей ридер. Сайт Autodesk'а принял меня с распростертыми объятьями: "как раз у нас есть то, что тебе нужно!". И объем файла порадовал: 700 с чем-то килобайт. Отлично! Качаю. Запускаю инсталлятор. Оно лезет в и-нет за "redistributable C++" и еще за чем-то... Целая очередь. М-да... А если и-нета нет? С Адобовским PDF-ридером все как-то по-проще.

Но даже и при наличии и-нета у инсталлятора что-то там не сложилось то ли с прокси-сервером, то ли еще с чем-то, то ли объем для скачки слишком большой оказался... В общем прогресс-бар застыл где-то в районе 1%. По прошествии минут пяти процесс инсталляции пришлось принудительно завершить.

Но, думаю, не сошелся же свет клином на Autodesk? Видимо есть и независимые ридеры. После двух часов поисков в Google выяснилось, что все не так радужно. Огромное количество различных ссылок с различных же сайтов в итоге вели на сайт Autodesk'а, где я уже побывал. Однако мне таки удалось нарыть два freeware ридера для DWF от независимых производителей. К сожалению оба они выдали ошибку при попытке открыть мой файл DWF. Что-то типа "file not valid". Ну и в trash вас!

В итоге я опять вернулся на сайт Autodesk. После очень тщательного копания на сайте мне удалось обнаружить не-интернет версию дистрибутива. Скромного объема: 662 мегабайта. Делать нечего - скачал. Оказалось, что это самораспаковывающийся архив. Дистрибутив в распакованном виде занял 1.45 Гб.

При инсталляции мне было объявлено, что смотрелка DWF займет у меня на диске всего 180 Мб (это без просмотра DWG/DXF, для них надо еще 600 Мб).

Правда после всех этих приключений я увидел содержимое DWF во вполне приличном качестве. В итоге заказчику пришлось отдавать два CD: мегабайт 200 "по делу" и диск с Autodesk Design Review 2012.

Вот такой чудесный продукт от Autodesk.

понедельник, 3 января 2011 г.

Кое-что из твиков Windows 7

Папка гаджетов

Гаджеты в Windows 7 расположены в папке C:\Program Files\Windows Sidebar\Gadgets и в папке C:\Program Files\Windows Sidebar\Shared Gadgets.

Дополнительные темы и обои для рабочего стола

Дополнительные темы и обои для рабстола находятся в скрытой папке - C:\Windows\Globalization\MCT

Взято отсюда

Как поменять экран приветствия в Windows 7?

Данная возможность была разработана для OEM-производителей, но воспользоваться ей могут все пользователи.

1. Необходимо проверить включена ли данная опция или нет. Для этого необходимо зайти в реестр, в раздел HKLM\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background

и проверить наличие параметра OEMBackground, если данного параметра нет, то надо создать DWORD (32 бита) с именем OEMBackground и присвоить значение 1, этим мы включим возможность изменения рисунка.

2. Далее как вы это сделаете, перейдите в папку C:\Windows\System32\oobe\info\backgrounds, возможно папка backgrounds может отсутствовать, тогда просто ее необходимо создать.

В эту папку скопируйте нужную Вам картинку и назовите её backgroundDefault.jpg

Обратите внимание, что файлы должны быть jpg-типа и быть меньше 256КБ.

Если фон загрузить нельзя (например, он слишком большой, или имеет неверное отношение ширины к высоте и т.п.), то загружается рисунок из библиотеки imagesres.dll.

Взято отсюда.

Установка общего принтера, подключенного к компьютеру под Windows XP


Оказывается, нужно при установке ОБЩЕГО принтера, находящегося подключенным на другом компе, выбрать установку ЛОКАЛЬНОГО принтера, но в качестве порта выбрать Local Port, в следующем окошке (где название порта) в качестве имени указать сетевой адрес компа, к которому он подключен и имя принтера в сети (как его определяет сам Windows 7 Ultimate x64) в следующем виде:

\\IP-адрес компа\имя принтера в сети.

В моем случае это было так:

\\192.168.1.5\epsonal-lpt

где 192.168.... - явно заданный адрес компа в моей сетке

epsonal-lpt - название принтера в сетке(как его определяет Win7 при попытке автоматической установки сетевого принтера).

Взято отсюда.

Как показала практика, вместо явного IP-адреса можно использовать символическое имя компьютера. Т.е \\MyComp\epsonal-lpt.

Автозагрузка программ


При каждой перезагрузке Windows NT приложение может запускаться из следующих мест:

1. Из папки Автозагрузка (Startup) для текущего пользователя и всей группы пользователей.

2. Из реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows

3. Из строк run и load файла %systemroot%\win.ini


Продолжение следует...

понедельник, 4 октября 2010 г.

Administrative share в Windows 7

Потребовалось потратить половину дня что бы найти разрешение административной шары в Windows 7 (оно же применимо и к Vista).

Hive: HKEY_LOCAL_MACHINE
Key: Software\Microsoft\Windows\CurrentVersion\Policies\System
Name: LocalAccountTokenFilterPolicy
Data Type: REG_DWORD
Value: 1


Взято отсюда: http://en.wikipedia.org/wiki/Administrative_share

четверг, 22 июля 2010 г.

Официальный учебный курс Autodesk

Читаю "Autodesk Official Training Courseware (AOTC). MAXScript Essentials". Дошел до 37 страницы из 234. Общее впечатление: написано дебилом для дебилов.

Вот, например, читаю про условные операторы: "The words if and then must appear in the conditional statement. If you forget to include them. MAXScript will return an error.". Оказывается слова if и then должны появиться в условном операторе! А если вы забудете их указать, то MAXScript выдаст ошибку. Как там говорится на сетевом новоязе?.. Убейсибяапстену! Так, кажется?..

Очень много повторов. Такое впечатление, что автор(ы) объясняет материал умственно неполноценным.

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

И еще, через 2-3 абзаца тот же бред в объеме примерно 50%... так сказать, для закрепления пройденного...

Стиль изложения мутный. Именно "мутный". (Сравниваю с учебниками по другим языкам программирования. Конечно с хорошими.) Четкие, ясные концепции, в стремлении изложить "по понятнее", "на пальцах", становятся трудноуловимыми и слабопонимаемыми. Но в сочетании с "объяснением для дебилов", создается ощущение: "так надо, Вася!".

В общем, Autodesk с его AOTC сильно упал в моих глазах...

вторник, 18 мая 2010 г.

FreeBSD... часть 2

Неделю спустя мне таки удалось поставить FreeBSD. Причем получилось это как-то достаточно случайно. Я уже в общем-то забил на эту идею, тем более что на DVD-диске уже был заготовлен дистрибутив Linux Ubuntu последней версии. На свободный раздел диска я поставил свежую версию WinXP (рекомендуют сначала поставить Винду, а потом уже ставить Линукс). И уже потянулся за дистрибутивом Убунты, но взгляд наткнулся на дистрибутив Фри... И я решил, для очистки совести вставить в дисковод именно этот диск. И... о чудо!.. оно опознало мое железо! Даже CD-привод оказался на месте.

Где порылась собака - я так и не понял. То ли Винда перенастроила каким-то образом железо (PnP и проч. фишки), то ли каким-то образом на работу железа повлияла переборка компа с чисткой от пыли, то ли Фря просто почувствовала, что ей каюк - сие мне не ведомо. Но FreeBSD соизволила установиться.

Немного поковырявшись с командной строкой я выяснил неприятную вещь: юниксовых команд я не знаю. Хорошо, но есть же man'ы! Мануалы поразили меня обилием информации. Но найти в этом море информации что-то конкретное оказалось не так-то просто. Особенно, если не знаешь что именно искать. Например, мне надо скопировать файл. Обычно эта команда называется "copy"... но это обычно... Это во-первых. Во-вторых, когда все-таки добираешься до нужной команды, man выдает 10 экранов информации с описанием полусотни ключей. И из всего этого нужно найти те два ключа, которые мне сейчас необходимы.

Это все мне живо напомнило времена четверьвековой давности, когда работа с командной строки была единственным и естественным способом общения с компьютером. Только за прошедшие 25 лет количество ключей команд увеличивалось на два в год.

С другой стороны, это не было для меня неожиданностью - я знал на что иду, устанавливая FreeBSD. Но все-таки Винда приучила меня к сервису. После отдыха в 4-5-звездочных отелях на берегу моря с доступом к холодному пиву в любое время суток, ехать отдыхать "дикарем" в Крым с палаткой и закопченным котелком уже как-то не тянет. (Хотя и там, и там есть свои плюсы и минусы). Но ведь юниксы-линуксы тоже имеют свою графическую оболочку. Пробуем запустить...

Для начала выяснилось, что для графического интерфейса нужно на диске уже не 150-200 мегабайт, а 4 гигабайта. Это уже стало попахивать Виндой. Ну да ладно, 4 гига - тоже не проблема. Надо - так надо... Решил поставить x11, gnome2 и kde4. На сколько я понял, x11 - это, так сказать, база, а gnome и kde - надстройка (прям по Марксу). Какой из оконных менеджеров предпочесть - "с лету" не понял - значит надо попробовать оба. Тем более, что в репозитарии какие-то программы помечены вроде только под gnome, а какие-то только под kde. Что бы установить всю эту музыку, инсталятор пыхтел часа два (это из бинарников, безо всякой компиляции из исходников!). Потом, естественно, пришлось кое-что поднастроить ручками в конфигах.

Наконец таки запустил kde. Инициализация графического интерфейса происходила мучительно долго. Windows 3.11 на i486 с 8 метрами памяти грузилась быстрее. Впечатление от GUI двойственное. С одной стороны красиво, и даже где-то удобнее, чем в Windows (от '95 до W7). С другой стороны, все очень неторопливо и... не знаю даже как сказать... Сложилось впечатление, что GUI делалось командой студентов-энтузиастов в свободное время между пивом, девочками и сессией. Сочетание интересных идей с непрофессионализмом. Продукт, сделанный "на коленках".

Но почему так медленно ворочается GUI? Может надо поставить видеодрайвер "от производителя"? Quake и Unreal на этом железе достаточно шустро работают. Да и Винда - тоже крутится с нормальной скоростью. Good!.. Лезем на NVidia и тащим последнюю версию дров для моей "архивной" видеокарточки.

Тут я опять нарвался на своем незнании юниксовых команд. Драйвер был упакован в "tar.gz". Gz я поборол быстро. А вот с "tar" - застрял. Man выдал море информации и единственно нужный ключик просто в ней затерялся. А без него tar все пытался открыть какое-то устройство, которого у меня не было (накопитель на магнитной ленте, как выяснилось). Через пару дней решение проблемы у меня было даже в двух вариантах: во-первых, я нашел в и-нете нужную комбинацию ключей для tar'а, а во-вторых, оказалось, что tar.gz можно распаковать из файлового менеджера kde безо всякого tar'а (и gzip'а).

Но здесь я получил еще один сюрприз. Работа команды make install clear завершилась, едва успев начаться. Компилятор выдал сообщение, что драйвер не поддерживает FreeBSD версии 8.0. Ы-ы-ы-ы!...

Продолжение, видимо, следует....

PS. Я не преследую цель "опустить" Юникс и возвеличить Виндовс. Просто впечатления человека, много лет проработавшего с компьютерами и никогда не имевшего дело с Юниксом.

PPS. Пусть никого не удивляет, что на решение какой-то проблемы у меня уходило несколько дней. С Фрей я ковыряюсь в свободное время, а его, к сожалению, не так много. Поэтому паузы между "подходами" бывают и по нескольку дней.

PPPS. Кстати, я опять забыл команду, с помощью которой монтируется CD-диск ((