среда, 22 декабря 2010 г.

Так ты, значит, хотел быть программистом…



BY SCOTT C. REYNOLDS

Сколько ты себя помнишь, компьютеры и электроника привлекали тебя. К моменту твоего совершеннолетия ты уже верно стоял на пути профессионального программиста. Первая интернетская золотая лихорадка была в самом разгаре, и вас, нердов, повсюду величали героями Новой Экономики на обложках журналов Fast Company и Wired, и нерды гребли деньги лопатой, делая то же, что любишь делать ты.

Ты отчислился из ПТУ и начал подыскивать работу в стартапе. Потому что бросить школу и создать Что-то Великое – об этом как раз и твердили, как заклинание, великие Стив Джобс и Билл Гейтс. Компании набирали всех, кто хоть как-то понимал булевскую логику и жаждал создавать, и отчисленники из ПТУ были не прочь делать больше, получая меньше, если к зарплате давали опционы [ право получить за символическую сумму часть акций компании-работодателя, когда и если они будут в цене на рынке ].

Так что ты получил работу на сайте электронной коммерции, продающем запчасти, которые закупал у оптовиков и поставлял заказчикам. Ты попал как раз в гущу доткомовского бума, работая на компанию, которая воплощала в себя всё, чем была та эра:

  • Найти квази-легальную нишу, которая, возможно, и не существует
  • Эксплуатировать программеров, которые хотят быть на острие прогресса
  • Доход! однако недолго (необязательный пункт)
  • Продать или как-то еще распустить контору
  • Повторять сколько хочется или пока государство тобой не заинтересуется

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

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

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

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

9:00 – 10:30 Собрание рабочей группы на предмет текущих вопросов
11:00 Полуденное собрание SCRUM
12:30 – 14:00 Собрание по поводу демонстрации продукта и его архитектуры
14:00 – 15:30 Турнир по Halo 3
16:00 – 18:00 Видео чат по Skype с индусскими коллегами из Бангалора

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

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

И вот пришел день, когда продукт официально запущен, но что-то не слышно фанфар. Никакой премии. Нет чувства удовлетворенности. Это был просто тихий запуск с одним бета-пользователем. Ты не знал чем себя занять в этот день, просто сидел и периодически запускал запрос на базу, чтобы посмотреть что они там делают. Ответ: почти ничего. А то что они делают, делают не так. Они нашли глюки! Они нашли пути чтобы обойти все твои тщательно настроенные правила и валидации. Не потому что они были крутые хакеры… они были просто тупые. Они кликали на вещи, на которые не должны были кликать. Они вводили вещи, которые не должны были вводить. Они не читали простых инструкций. Они не слушали на тренинге. Они оскорбляли лично тебя тем, что так ужасно использовали твой софт.

В поле “Введите количество анализов:” они вбили “пять анализов”

В поле “Номер страховки: ” они ввели “у него ее нет, т.к. он нелегал”

Вместо того, чтобы нажимать кнопку “Создать запись нового пациента” они меняли информацию в одной единственной записи в базе, постоянно ее сохраняя.



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

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

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

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

(оригинал www.mcsweeneys.net/links/dreamjobs/dreamjobs5.html )

Примечание: там у автора серия про разные профессии. Ну, всё везде плохо заканчивается.

Windows Server 2003 включение автоматического входа в систему

  1. меню Пуск выберите команду Выполнить.
  2. В поле Открыть введите команду Regedt32.exe и нажмите клавишу ВВОД.
  3. Найдите в реестре следующий подраздел:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
  4. Дважды щелкните параметр DefaultUserName, введите имя пользователя и нажмите кнопку ОК.
  5. Дважды щелкните параметр DefaultPassword, введите пароль и нажмите кнопку ОК.Примечание. Если параметр DefaultPassword отсутствует, создайте его. Чтобы создать параметр, выполните указанные ниже действия.

    1. В меню Правка выберите последовательно команды Создать и Строковый параметр.
    2. Введите DefaultPassword и нажмите клавишу ВВОД.
    3. Дважды щелкните параметр DefaultPassword.
    4. В окне Изменение строкового параметра введите пароль и нажмите кнопку ОК.
    Примечание. Если значение параметра DefaultPassword не задано, система автоматически изменяет значение параметра AutoAdminLogon с 1 (true) на 0 (false), тем самым отключая автоматический вход.
  6. В меню Правка выберите последовательно команды Создать и Строковый параметр.
  7. Введите AutoAdminLogon и нажмите клавишу ВВОД.
  8. Дважды щелкните параметр AutoAdminLogon.
  9. В окне Изменение строкового параметра введите значение 1 и нажмите кнопку ОК.
  10. Закройте редактор реестра.
  11. Нажмите кнопку Пуск, выберите пункт Завершение работы и введите причину в поле Примечание.
  12. Нажмите кнопку ОК, чтобы выключить компьютер.
  13. Перезагрузите компьютер. Теперь вход в систему выполняется автоматически.

Как обжать витую пару

Выкладываю самое наглядное пособие по обжиму витой пары (картинка кликабельна)

rj 45 thumb Как обжать витую пару

воскресенье, 19 декабря 2010 г.

Юмор


Жизнь программиста

(кликабельно)
Найди Админа!

(кликабельно)

Серверная

(кликабельно)

суббота, 18 декабря 2010 г.

Поднятие WiFi в консоли

 

Подготовка

Установите пакеты wpa-supplicant и wireless-tools
Например так:
$ sudo apt-get install wpasupplicant wireless-tools
Теперь убедитесь в том, что Ваше беспроводное устройство (в данном примере это «wlan0») работает и «видит» беспроводные сети. Команда
$ iwconfig
должна выдать примерно такой результат:
ubuntu@ubuntu:~$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wmaster0  no wireless extensions.

wlan0     IEEE 802.11bg  ESSID:""  
          Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated   
          Tx-Power=27 dBm   
          Retry min limit:7   RTS thr:off   Fragment thr=2352 B   
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
а доступные сети можно посмотреть командой
$ iwlist <имя интерфейса> scan
которая должна выдать примерно такой результат:
ubuntu@ubuntu:~$ iwlist wlan0 scan

wlan0     Scan completed :
          Cell 01 - Address: 00:00:00:00:00:00
                    ESSID:"ubuntuessid"
                    Mode:Master
                    Channel:8
                    Frequency:2.447 GHz (Channel 8)
                    Quality=7/100  Signal level:-99 dBm  Noise level=-104 dBm
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
                              12 Mb/s; 48 Mb/s
                    Extra:tsf=0000001d57e98bf6
                    Extra: Last beacon: 388ms ago

Настройка

Редактируем /etc/network/interfaces, например так:

$ sudo gedit /etc/network/interfaces
Удаляем (или комментируем) все упоминания нашего беспроводного интерфейса и добавляем свои:
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid <имя_точки_доступа>
wpa-ap-scan 1
wpa-proto RSN
wpa-pairwise CCMP
wpa-group CCMP
wpa-key-mgmt WPA-PSK
wpa-psk  [ВАЖНО - см. Генерация ключей]
auto wlan0
Где:

Параметр Описание
iface wlan0 inet dhcp конфигурация для DHCP (для статического IP см. пример ниже)
«iface wlan0» - Имя нашего интерфейса (wlan0, eth1, rausb0, ra0, итд.)
wpa-driver Это wpa-driver для нашей карты
('wext' - общий драйвер для linux, работающий с «ndiswrapper»). Рекомендуется оставить как есть.
Другие варианты:
hostap = Host AP driver (Intersil Prism2/2.5/3)
atmel = ATMEL AT76C5XXx (USB, PCMCIA)
wext = Linux wireless extensions (generic)
madwifi = Atheros
wired = wpa_supplicant wired Ethernet driver
wpa-ssid Имя нашей точки доступа (ESSID). Без кавычек.
wpa-ap-scan Параметр вещания точкой доступа ее имени.
«1» = ESSID вещается всем.
«2» = ESSID скрыт.
wpa-proto Протокол
«RSN» = WPA(2)
«WPA» = WPA(1)
wpa-pairwise & wpa-group «CCMP» = AES-шифрователь (как часть стандарта WPA(2))
«TKIP» = TKIP-шифрователь (как часть стандарта WPA(1))
wpa-key-mgmt «WPA-PSK» = Аутентификация через ключевую фразу (см. 'Cоздание ключей')
«WPA-EAP» = Аутентификация при помощи сервера аутентификаций.
auto wlan0 Автоматическое включение wlan0 при загрузке/перезагрузке сети.

Генерация ключей

Теперь нам нужно сконвертировать нашу ключевую фразу (WPA ASCII) в hex-ключ:
$ wpa_passphrase <имя_точки_доступа> 
Результат будет примерно таким:
network={
ssid="test"
#psk="12345678"
psk=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab1 5bbc6c52e7522f709a
}
hex-ключ это все символы после «psk=».

Нужно его скопировать в буфер обмена и вставить в файл /etc/network/interfaces в поле wpa-psk.
Теперь можно сохранить файл и перезагрузить сеть. Должно установиться соединение. Однако иногда этого сразу не происходит. Если это так - перезагружаем машину.

Перезапуск сети

Теперь, когда все необходимые действия выполнены можно перезапустить сеть и проверить соединение. Для этого:
$ sudo /etc/init.d/networking restart
Теперь при запуске комманды ifconfig должно отобразиться подключение eth0 с выставленными параметрами. Если подключение отображается, но параметры не такие, какие были указаны в файле /etc/network/interfaces, либо возникают любые другие ошибки, перепроверьте этот файл на наличие неточностей и опечаток и попробуйте ещё раз перезапустить сеть.

Minitybe теперь и качает

Приложение для просмотра видео с сервиса YouTube, не требующее flash-плеера, теперь может качать видео!

Как?

  • Найдите видео
  • Просматривая нужно видео  идите в меню Video и выберите пункт Download – загрузка видео началась
  • В нижнем правом углу появится кнопка-индикатор закачки. Нажмите на него. чтобы попасть в окно управления закачками
Вот так выглядят закачки в MiniTube:

Установка MiniTube

Ничего не изменилось. Как обычно используем репозиторий:
sudo add-apt-repository ppa:ferramroberto/minitube
sudo apt-get update && sudo apt-get install minitube

пятница, 17 декабря 2010 г.

Установка и настройка rTorrent + RuTorrent в Ubuntu/Debian

Одной характерной чертой rTorrent является наличие множества различных web-интерфейсов «на все вкусы» для удаленного управления. Именно об установке и настройке всего этого я и хочу рассказать на этот раз.


Устанавливаем rtorrent 
apt-get install rtorrent

После этого можно переходить к настройке rTorrent.


Создаем файл с настройками ~/.rtorrent.rc подобный этому:


# Если вы за NAT не забываем "пробросить" порты
port_range = 32001-32049

# Включаем DHT
dht = auto
# UDP порт для DHT
dht_port = 32000
# Обмен пирами
peer_exchange = yes

# Использовать ли UDP трекеры
use_udp_trackers = yes

# Директория в которую по-умолчанию будут загружаться файлы
directory = /arch/.Downloading/

# Глобальные ограничения по скорости
upload_rate = 80
download_rate = 800

# Директория для записи сессий rTorrent
session = /home/username/.rtorrent_session

# Задаем настройки для rpc управления
scgi_port = 127.0.0.1:5000
Создаем папку для хранения сессии rTorrent:
$ mkdir .rtorrent_session

web-интерфейс

Для работы web-интерфейсов, как вы уже наверняка догадались, требуется web-сервер. Это может быть как Apache, так и Lighttpd, а, вполне вероятно, и какой-либо другой. Однако, для определенности, я буду рассматривать все примеры на базе Apache. 



Установка Apache


Для установки Apache необходимо выполнить несколько простых команд. Начнем с установки самого web-сервера и необходимого для удаленного управления rTorrent модуля scgi:
# aptitude install apache2 libapache2-mod-scgi

Задаем настройки модуля в файле /etc/apache2/httpd.conf:
SCGIMount /RPC2 127.0.0.1:5000


и включаем его:
# a2enmod scgi

Далее, устанавливаем PHP:
# aptitude install php5 php5-common libapache2-mod-php5 php5-curl

и перезагружаем Apache:
# apache2ctl restart




ruTorrent


Для настройки ruTorrent скачаем последнюю версию из SVN:
# cd /var/www/
# svn checkout http://rutorrent.googlecode.com/svn/trunk/rutorrent


И зададим права доступа для web-сервера:
# chown -R www-data:www-data ./rutorrent/

Теперь чтобы открыть только что установленный ruTorrent нужно направить браузер по адресуhttp://<ваш IP адрес>/rutorrent/. И вот как он выглядит:

ruTorrent

ruTorrent

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