26 Ноябрь 2007 г.

Live CD

Что такое Live CD? Live CD это обычный загрузочный лазерный диск с записанной на нем операционной системой, способной загрузиться с него и полноценно работать.

Сегодня после эксперементов с загрузчиком Microsoft Windows XP (пытался настроить GRUB так чтобы он умел грузить и Ubuntu и Microsoft Windows 98 и Microsoft Windows XP используя только одно меню, не проваливаясь в дополнительное виндовое загрузочное меню) я случайно его прибил. Да и черт бы с ним с загрузчиком - вместе с ним испортилась информация о партициях! А у меня на Extended партиции было несколько разделов с очень важными данными и несколькими операционными системами (Собственно XP, Ubuntu и еще один старенький Linux). Когда досовый Partition Magic вместо всей этой кучи дисков увидел только один с неопределенной файловой системой я совсем расстроился. Слава Богу у меня был Live CD c Ubuntu Linux. Собственно о нем я и хотел написать!

Откровенно говоря раньше я им не пользовался, так как у меня стоит более свежая версия Ubuntu скачанная с Интернета, но похоже пришло время и для него.

Вставляем диск в CD-ROM и перегружаем компьютер (сделав соответствующие изменения в BIOS'е если требуется). Загрузка ОС занимает немного большее время по сравнению с загрузкой с винчестера, но не намного дольше. В результате через минуту мы получаем работающую, настроенную операционную систему!

Под работающей и настроенной я имею ввиду следующее:
1) коректно работает все аппаратное обеспечение, впрочем у меня нет ничего экзотичного так что за всех не ручаюсь. Звук, видео, сетевая карточка - все просто работает. Без нажатия единой клавиши!
2) у меня дома обычный PPPoE интернет, в который я хожу через роутер. По скольку логин и пароль введены уже на роутере, то опять не нужно никаких действий - вставляем диск, и получаем полноценную работу в интернете!
3) вы получаете солидный набор предустановленного ПО: броузер, IM-клиент и даже офис (аналоги Microsoft Word, Excel, PowerPoint и Access; практически полностью совместимые с их форматом), не говоря уже о многом другом!

Утилита parted сказала что у меня вместо extended партиции одна ext3fs партиция, но маунтить её отказалась. Опять расстройство!

Пара минут гугления подсказали мне следующую утилиту: TestDisk 6.8 .

Установка под Linux проста и занимает всего пару минут, благо программа занимает совсем немного места (1.6 Mb):
wget http://www.cgsecurity.org/testdisk-6.8.linuxstatic.tar.bz2
tar xjf testdisk-6.8.linuxstatic.tar.bz2
cd testdisk-6.8/linux

А запуск программы еще проще:
./testdisk_static

Программа консольная но снабжена большим количеством подсказок, и всегда переспрашивает о могущих повлечь за собой плохие последствия действиях, так что её вполне можно назвать user friendly. Тем более что она восстановила мне таблицу партиций, а перед этим на всякий случай я с помощью неё скопировал некоторые важные данные со своего жесткого диска (с раздела NTFS между прочим!).

Мне кажеться что подобный диск полезно иметь каждому на всякий случай. Вы можете заказать его по почте совершенно бесплатно: https://shipit.ubuntu.com/ . Придется подождать около 5 недель до его прихода, но Вы можете скачать образ и записать диск самостоятельно: http://www.ubuntu.com/getubuntu/download .

Кстати это сообщение я также пишу загрузившись с Ubuntu Live CD!

5 Май 2007 г.

Почему Web?

Давайте поговорим о Web'е как альтернативе обычным приложениям и программам Windows.

Сейчас всё больше и больше программ перемещается с наших компьютеров в Интернет, все громко спорят о каком-то Web2.0, но что это даёт обычным пользователями как это влият на нас, разработчиков.

Итак, почему Web?
  1. Нет необходимости скачивать и устанавливать приложение. Процесс установки сводится к одному шагу - набору адреса в адерсную строку броезера
  2. Вы всегда используете самую последнюю версию приложения - нет необходимости в ручном обновлении
  3. Данные для Вашего приложения доступны Вам из любой точки мира. И в частности из дома, с ноутбука и с работы - я думаю большинство интересует именно это )
Я не открыл ничего нового написав эти три пункта - их Вы скорее всего найдёте в том или ином виде в любом эссе посвящённом Web2.0 . Однако это далеко не полный список! Мы вернёмся к его продолжению чуть позже, а сейчас небольшое отступление.

Я встречал много статей о том как не потерять идеи и.т.п. и сам несколько лет назад был в постоянном поиске чего-либо подобного - "вот придумать бы что-нибудь чтобы стать погаче Гейтса или перпелюнуть Гугл!".
Сейчас я считаю что это не совсем верно - у меня постоянно крутится в голове несколько идей, и я уверен что как минимум пара из них стоящие. Предлагаю Вашему вниманию одну из них - на примере неё мы сможем продолжить начатый выше список "почему Web?".

Кошелёк.ру

Стойте - не нужно бросаться переводить в транслит слово кошелёк и вбивать его в адресную строку броузера! Такого проекта ещё нет - это просто одна из моих идей.

А заключается она вот в чём - создать online сервис для ведения личной бухгалтерии. Мы не будем сейчас касаться подробностей, так как нас интересует сейчас другое - а чем такой сервис будет лучше чем аналогичные существующуе desktop приложения, а их существует достаточно много.

В голову приходит сразу несколько новых доступных возможностях online-сервиса по сравнению с обынчым приложением:
  • возможность сравнивать свои расходы с чужими (разумеется анонимно) - например можно посмотреть сколько вы тратите на рестораны/проезд/питание/... по сравнению с другими пользователями
  • возможность учавствовать в сообществе и обсуждать с другими участниками книги по данной тематике/законы/кредиты/.... Общение идёт ввиде блогов или форума
  • возвращаясь к возможности обсуждения книг - разумеется их можно сразу и приобрести
  • нахождение ваших данных в Интернете а не на локальном компьютере, также позволяет использовать различные SMS-aggregator'ы (мне очень нравится SMS Coin) - например пользователь может послать SMS с сообщением "-1500 кабак" на определённый номер и программа добавит к его расходам 1500 рублей на посещение кафе.
Я уверен что этот список можно продолжить!
Таким образом каждое Web приложение имеет свои характерные преимущества перед аналогичным тяжёлым приложением. Впрочем можно выделить ещё несколько общих для различных Web приложений преимуществ.

Дополнительные преимущества Web

Итак, можно выделить ещё два преимущества которыми обладают Web приложения по сравнению со стандартными толстыми программами:
  1. Community. Возможность пользователям Вашего приложения общаться друг с другом - например посрдеством блогов или форумов
  2. Информация. Web-приложение с одной стороны оболадает огромной статистикой по всем своим пользователям. С другой стороны такому приложению также доступна вся информация Интернета.
Недостатки Web

Стоит впрочем признать что и у Web'а есть свои недостатки.

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

Действительно, если Вы пишете Doom 3 то Web наверное пока не для Вас. Впрочем возможности для работы с 3D есть - это Java 3D и Java Applet'ы а также некоторые features Macromedia Flash.

Вообще эта тема очень широка и заслуживает отдельного внимания, так что сейчас я ограничусь только одним примером написанном на чистом JS, и соответственно работающим во всех броузерах:
http://extjs.com/deploy/ext/examples/view/chooser.html

Красиво, правда? Обратите внимание, здесь не используются DirectX и этот пример выглядит так же красиво и в FireFox'е! Так что можно сказать что сейчас вохможности по созданию насыщенного пользовательского интерфейса полностью в руках разработчика!

Другой вопрос который обычно поднимается при выборе Web'а - это надёжность и безопасность.

Ну что же - я бы ответил на такие сомнения так: "Где надёжнее хранить почту - на домашнем компьютере, вероятнее всего даже не оборудованном RAID-массивом, или на серверах Google где обеспечением надёжности занимаются десятки специалистов?" и так "Раз Вы читаете мой блог то Ваш компьютер подключен к Интернету. Вы уверены что у Вас включен Firewall? Вы ни разу не скачивали архивы, исполняемые файлы, документы Microsoft Office? Вы всё ещё считаете что Ваша информация в большей безопасности дома а не на сервере Google?". Говоря о безопасности, вернёмя к прототипу сервиса кошелёк.ру - обратите внимание что никто не заставляет пользователя идентифицировать себя; можно пользоваться сервисом анонимно и не переживать за потенцильную утечку информации.


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

4 Май 2007 г.

Каким должен быть хороший программист, кроме того что он должен быть хорошим программистом

Название этой статьи не совсем корректно и откровенно говоря я его оставил таким для красоты. Более правильно было бы её назвать как-нибудь так: "Каким должен быть хороший разработчик, кроме того что он должен быть хорошим программистом".

Здесь я привожу некоторые свои мысли относительно необходимых хорошему разработчику навыках и чертах характера.
Как Вы уже поняли по подзагаловку снизу - to be continued...

Часть 1


English

Мы живём в эпоху глобализации рынков вообще и рынка разработки ПО в частности; огромную роль в этом разумеется играют глобальные телекоммуникации и особенно Интернет. Это влияет на многое. Из-за глобализации рынка разработки ПО:
  • В США господин Йордон пишет бестселлеры о разработке ПО ("Путь Камикадзе")
  • В России программисты пишут ПО для внутреннего использования компаниями находящимися на другой стороне планеты
  • Любой хороший программист обязан знать английский язык
Итак, почему программист обязан хорошо владеть английским:
  • Документация по любым технологиям в самом большем объёме есть только на английском. Если вы не владеете языком, вы лишаете себя доступа к целому морю важнеёшей информации.
  • Англоязычные community во много раз превосходят по размеру русскоязычные. Возьмём например сообщества посвящённые Java: в рунете это прежде всего juga.ru и ещё несколько других почти "мёртвых" проектов. В англоязычной сети же таких сообществ просто масса! Сразу навскидку: theserverside.com , javalobby.org , и это лишь малая их часть. У меня есть подозрения что community с китайским основным языком ещё более многочисленные, но Вы же понимаете что для нас это не вариант :)
  • Книги. Посмотрите ассортимент профильной литературы переведённой на русский язык и доступной толькой на английском и заплачте. Впрочем после того как Вы утрёте слёзы обиды можно сравнить цены на них и заплакать ещё раз. Именно поэтому я поставил этот пункт третьим а не вторым.
  • В программировании это язык де-факто: абсолютное большинство языков использует латинские символы и англисйкие языковые конструкции в своём синтаксисе. Впрочем разумеется есть исключения - в качестве контр-примера на ум приходит прежде всего 1С. Этот пункт я думаю возражений вызывать не должен :)
Взглянем ещё раз на эти пункты - все они требуют так называемого технического английского; грубо говоря возможности без проблем читать MSDN. Это требовалось всегда и без всякой глобализации.
В нынешнее время же доброй половине разработчиков необходим ещё и свободный разговорный английский. И это нужно как раз из-за глобализации - аутсорсинга, даунсайзинга и прочих сопутствующих процессов.

И кроме того английский просто пригодится вам по жизни :)

Google

Google это большой и хороший друг всех разработчиков ПО (и не только их) - иногда меня искренне и до глубины души удивляет как люди (более того, программисты) не умеют им пользоваться!

Три основных трюка здесь вот какие:
  1. Правильно составляйте запрос - когда Вы вбиваете очередной запрос в строку просто задумайтесь буквально на секунду: "а может мне выкинуть это слово?", "а может добавить ещё вот это и сузить результаты поиска?".
  2. Если у Вас не получается получить разумные результаты поиска с первой попытки - попробуйте скорректировать свой запрос на основе полученных, возможно не совсем, но отчасти корректных результатах первой попытки. Как Вы сами понимаете итерацию иногда полезно повторить.
  3. В запрос можно добавлять специальную meta-информацию. Например если Вы хотите найти что-либо на сайте Apache Software Foundation, то просто добавьте вот такую строку к вашему запросу: "site:apache.org".
По поиску информации в Интернете даже проводятся специальные соревнования. Я думаю информацию о них Вы сможете найти самостоятельно :)

И на последок: Just Fucking Google It



Аутизм

Дорогие коллеги, мне тоже иногда приятно думать что разработка ПО это настоящее искусство и что можно подобно Сальвадору Дали быть сумасшедшим гением. Поверьте мне это не так. Программирование это на 80% промышленность и лишь на 20% искусство.

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

Честность

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

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

Этот пункт оказывается чрезвычайно важным в разработке ПО.

Нестандартные подходы - сканеры штрихкодов

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

Для удобства пользователей и избежания ошибок предполагается использовать сканеры штрихкодов установленные на терминалах на каждом их checkpoint'ов. Я, откровенно говоря, с такими устройствами раньше не работал и вчера с интересом читал про них в Интернете.

Большая часть сканеров имеет RS-232 и/или USB интерфейсы (второй как правило эмулирует первый) а также увесистое описание протокола взаимодействия.
Вполне ожидаемо, верно? Налицо абсолютно классический подход к рещению задачи связи приложения с внешним устройством по заданному протоколу: пишем или находим в Интернете какую-нибудь абстракцию к этому протоколу (COM / DLL / Java Bean / Delphi Component / whatever... ) и спокойно используем её в своём приложении.

Единственный-ли это вариант? Оказывается нет! Существует вариант возможно чуть менее изящный с точки зрения программирования (впрочем не могу сказать точно, так как не вникал досконально в детали) но зато безумно красивый. Ах, да - ещё он требует на несколько порядков меньше усилий для реализации, а ведь мы все к этому стремимся, правда?! :)

Внимание подсказка:


Ну как, догадались?!

Сканеры штрихкодов, по крайней мере многие, умеют работать как альтернативное устройство ввода - нужно только включить их поддержку в контрольной панели Microsoft Windows! И вуаля - проводим сканером по штрихкоду и получаем его в своей программе так как будто он был просто введен с клавиатуры.

Для отличия ввода инофрмации со сканера от обычной клавиатуры, к считаннуму коду опционально добавляется специальный префикс и/или суффикс.
Для достижения большей гибкости в работе можно обратиться к функции Win32 API SetWindowsHookEx и хуку WH_KEYBOARD , впрочем это уже моё не подкреплённое опытом IMHO.

Мораль: есть большая разница между изобретением велосипеда и нахождением элегантного решения для стоящей проблемы. Решения подобдные описанному делают наш мир прекраснее!!!

3 Май 2007 г.

Greetings

"Вначале было слово"

Это первый пост в блоге Bedrin on Software - Бедрин о программировании.

Не смотря на название, я абсолютно не претендую на лавры Джоэла, но постараюсь здесь излагать свои мысли связанные с разработкой ПО и с тем, как это нужно делать правильно с моей точки зрения.

Надеюсь что это будет интересно не только мне.