Обновить

Как не делать плохого программного обеспечения?

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

Недавно я посмотрел фильм о процессе создания фильма “Матрица”. Надо сказать, что этот документальный фильм длится гораздо дольше, чем сама “Матрица”. В этом документальном фильме показывали съемочный процесс, рассказывали о спецэффектах, местах съемок и об отношении съемочной группы к работе. Этот документальный фильм был бы одним из заурядных (вроде “Стоп — снято”), если бы во время того, как актеры рассказывали о своем отношении к работе, я не увидел, что они хотели создать совершенство.

Все актеры, участвующие в сценах с боями, значительное время (до начала съемок) тренировались с постановщиком боев в Голливуде. У Киану Ривза (Нео) в это время были проблемы с позвоночником, и он постоянно носил на шее корсет. Невзирая на боли, он упорно тренировался, чтобы каждая сцена в “Матрице” была максимально эффектной. Во время съемок, Киану “измучивал” всю съемочную группу до тех пор, пока каждый снятый кадр не становился максимально зрелищным. Сцена, в которой Нео подпрыгивает и несколько раз бьет ногами Морфеуса (Лоуренс Фишберн), переснималась бесчисленное количество дублей, и каждый раз Ривз был недоволен. Съемки сцены, в которой Тринити (Керри-Энн Мосс) стреляет в агента на крыше здания, была закончена только после того как актер играющий агента ударился головой, когда его дернули специальным канатом.

Каждая “мелочь” в “Матрице” была доведена до совершенства. А уж поверьте, таких “мелочей” было предостаточно: освещение, декорации, музыка, костюмы, грим и многое другое. Заметили ли вы, что когда герои фильма находились в “Матрице”, изображение было зеленоватым, а когда в реальном мире – голубоватым? Казалось бы, “мелочь”… Но именно каждая такая мелочь в совокупности приводит к совершенству.

О “Ночном дозоре” (да простят меня поклонники), много говорить не приходится. Явно выраженная “бюджетность”… Не выровненный свет, “грубые” спецэффекты (якобы как в “Матрице”), наигранность актеров и многое другое, и все это – “Ночной дозор”. Волею судеб, этот фильм мне пришлось смотреть в кинотеатре. Я еле высидел до конца. И то, сидел до конца только из-за того, что отдал немалые деньги за просмотр (он только-только поступил в прокат).

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

Очень часто разработчики оставляют какие-то вещи “на потом”, например не переименовывают метод в классе, если это можно сделать за 10 секунд прямо сейчас, благо средств позволяющих это сделать сейчас полно (ReSharper например). Или, что гораздо страшнее, забывают поменять текст в элементарном Label’е на форме. Многие могут сказать: “Ну, это же мелочи, главное это продуманная архитектура и чтобы был рабочий функционал”. Да, архитектура и функционал – это очень важно, но если учитывать только эти вещи, в конце получится “Ночной дозор”. Мелочи – вот ключ к “Матрице”. Уделение огромного внимания мелочам позволит сделать безупречный программный продукт. Конечно, достичь совершенства трудно, вряд ли у кого-то из нас были релизы без багов, но учитывая мелочи, рано или поздно получится “Матрица”.

Немаловажным является дух команды, которая создает программный продукт. Обычно в команду входят не только программисты, но и дизайнеры, менеджеры, инвесторы и многие другие (обычно такие бесконечные списки пускают в конце фильма). Если все эти люди работают на “одном дыхании”, в конце обязательно получится “Матрица”. Но если хоть один человек осознанно допускает погрешности (или целые грехи вроде Label’а), это неминуемо приведет в “Ночной дозор”.

Трудоустройство программистов в США

Не так давно представился мне случай побывать в Соединенных Штатах Америки и некоторым образом поучаствовать в процессе трудоустройства знакомого в качестве программиста C#, в чем нам помогали ученые и знающие люди :)

Первым шагом стало составление резюме. К резюме в США относятся трепетно, как впрочем и к таким вещам как «какой университет закончил, имеешь ли опыт» и пр. В резюме обязательно должны быть освещены такие пункты:
1. ФИО, телефон(мобильный желательно), e-mail(желательно hotmail или yahoo), статус(green card holder, US citizen, h2b и пр, влияет на возможность трудоустройства вообще)
2. Полностью про то, какой ВУЗ закончил(полное название, название факультета, кафедры, степень)
3. Опыт работы:
а. годы, с какого по какой работал
б. фирма
в. чем занимался — тут пишут не просто «был админом», а серьезнее вида «работал с криптографическими алгоритмами и цифровыми подписями, генерация отчетов с помощью VSTO,...»
г. какие технологии использовались

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

1. monster.com — у этого сервиса даже крутится реклама, не помню по какому каналу. Реклама забавная(в принципе, в США много хорошей рекламы, намного больше чем у нас).
2. dice.com — самый толковый. Впринципе, именно здесь и удалось найти работу:)
3. careerbuilder.com — привлек своим удобством :)

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

Этап 1

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

Этап 2

Т.н. первое собеседование. Собеседователь — не программист, а просто какой-то человек из HR(human resources, «отдел людских ресурсов» в грубом переводе:) отдела, возможно менеджер, у которого есть бумажка. В ней указано, какие вопросы задавать и какие ключевые слова должен человек говорить. Т.е. он может даже не понимать, о чем вообще речь. Он просто ставит плюсик, если ключевое слово было упомянуто, и минус — если нет.
По всей видимости, после подсчитывается количество плюсов и определяется ваша «проф-пригодность».

Этап 3

Если после собеседования с менеджером о вас остались хорошие впечатления, вас повторно пригласят на собеседование. На этот раз вам предстоит меряться делиться знаниями с каким-то ответственным программистом этой компании(может быть начальник отдела, мб еще кто-то). Эдакий boss fight :) Задаются вопросы впринципе по тематике вашей работы.
В Америке по этому поводу есть множество сайтов, можно в гугль попробовать ввести interview questions.

Хочу лишь отметить, что вопросы задают обычно в 4х направлениях:

1. Базовое знание языка. Для C# это было что-то вроде «разница между ref и out», «что такое boxing и unboxing», вопросы про сборки(private,shared, satellite assemblies) и проч.
2. Вопросы по ООП. Наследование, полиморфизм, «diamond problem».
3. Вопросы по шаблонам проектирования. На хабре уже рекламировалась книга «Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования», впринципе ее знание и требуется. Вопросов по паттернам мало, 1-2. Очень любят давать код и спрашивать что это за паттерн(обычно это синглтон :)
4. Вопросы по UML. Умение читать и понимать подобные диаграммы очень приветствуется :) Вопросы обычно плана вам дают диаграмму классов и просят описать словами что здесь происходит.

Заключение

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

Надеюсь, рассказ был интересным. :)

Защита SSH от подбора паролей

Недавно заметил по логам, что по ssh достаточно много народу пытались подобрать пароль от root и других пользователей по ssh.
Начал искать, как же от защититься от подобных действий.
Перечитал несколько статей и написал свой скрипт, который проверяет логи и банит тех, кто подбирал пароль.
Список забаненых храниться в /etc/hosts.deny
Я помести свой скрипт sshd_block.sh в /usr/local/sbin/
Там же создаем каталог sshd_block:
mkdir /usr/local/sbin/sshd_block

собственно скрипт sshd_block.sh:
#!/bin/sh
while [ 1 -eq 1 ]; do
cd /usr/local/sbin
#удаляем старые временные файлы
rm ./sshd_block/block.txt
rm ./sshd_block/new_block.txt
rm ./sshd_block/new_block1.txt
rm ./sshd_block/new_block2.txt
rm ./sshd_block/new_block3.txt
#Поиск нужных строк в журнале
grep sshd /var/log/auth.log | grep Failed | grep invalid >> ./sshd_block/block.txt
#Эта строчка удалит из файла все, кроме IP-адресов
cut -d \ -f 13 ./sshd_block/block.txt | uniq >> ./sshd_block/new_block.txt
#Эта строчка удалит баг-запись from
sed 's/from//g' ./sshd_block/new_block.txt >> ./sshd_block/new_block1.txt

#Эта строчка добавит новые записи в черный список
target=`cat /usr/local/sbin/sshd_block/new_block1.txt`
for i in $target; do
echo ALL:$i >> /etc/hosts.deny
done

#Эта строчка удалит из файла все, кроме IP-адресов
cut -d \ -f 14 ./sshd_block/block.txt | uniq >> ./sshd_block/new_block2.txt
#Эта строчка удалит баг-запись port
sed 's/port//g' ./sshd_block/new_block2.txt >> ./sshd_block/new_block3.txt

#Эта строчка добавит новые записи в черный список
target=`cat /usr/local/sbin/sshd_block/new_block3.txt`
for i in $target; do
echo ALL:$i >> /etc/hosts.deny
done

cat ./sshd_block/new_block1.txt
cat ./sshd_block/new_block3.txt
#удаляем одинаковые строчки из черного списка
cat /etc/hosts.deny | sort | uniq > /etc/hosts.deny.new
mv /etc/hosts.deny.new /etc/hosts.deny
sleep 100
done


Скрипт проверяет логи /var/log/auth.log
grep sshd /var/log/auth.log | grep Failed | grep invalid >> ./sshd_block/block.txt
у меня IP на 13-й позиции, но почему-то не всегда и банит вместо ip слово from, поэтому пришлось дописать еще и проверку 14-й позиции, а так же удаление шлака, а именно слов from и port из списка ip для бана.

Запускаем скрипт от root или через sudo и дело в шляпе :)

Раскладка клавиатуры Crunchbanglinux

Недавно установила

Crunchbanglinux

.
Пришлось помучитсо с раскладкой клавиатуры. Все законные методы для ubuntu не помогли, но прописать все равно нужно:
sudo nano /etc/X11/xorg.conf отредактировала:
Section «InputDevice»
Identifier «Generic Keyboard»
Driver «Keyboard»
Option «CoreKeyboard»
Option «XkbRules» «xorg»
Option «XkbModel» «pc105»
Option «XkbLayout» «us,ru»
Option «XkbVariant» ",winkeys"
Option «XkbOptions» «grp:ctrl_shift_toggle,grp_led:scroll»
EndSection

Section «ServerLayout»
Identifier «Default Layout»
screen 0 «Default Screen» 0 0
Inputdevice «Generic Keyboard»
EndSection

и здесь: /etc/default/console-setup
XKBMODEL=«pc105»
XKBLAYOUT=«us,ru,ua»
XKBVARIANT=",winkeys"
XKBOPTIONS=«grp:ctrl_shift_toggle,grp_led:scroll»

Помогло
прописать: gedit /home/undine/.bashrc
setxkbmap -layout us,ru -variant ,winkeys -option grp:ctrl_alt_toggle

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

Стартап стоит делать не смотря ни на что.

За сегодняшний день на хабре уже дважды поднималась тема стартапов в рунете. Хочу добавить немного от себя. Когда полтора года назад я перешел на фриланс, передо мной и моим партнером остро встал вопрос поиска заказов и мы начали копаться в интернете в поиске порталов для фрилансеров. Итог был настолько не утешительным, что ко мне пришла мысль сделать сайт самим. Если никто до нас не сделал хороший сайт для фрилансеров почему бы его не сделать нам! Основная трудность заключалась в том, что на тот момент весь наш опыт веб-дизайнеров ограничивался двумя-тремя красивыми, но очень простыми сайтами и веб-дизайн ни коим образом не вписывался в наш основной род занятий – рекламную фотографию. Стоит ли говорить, что мы тогда совершенно не представляли, за что беремся. И это было к лучшему, потому что если бы знали сколько это займет времени, денег, нервов и крови, то скорее всего отказались бы от этой затеи. Но обо всем мы узнавали постепенно и каждый раз были настолько эмоционально втянуты в проект и настолько с ним сжились, что решили идти до конца.

Казалось бы – безнадежный проект. Никакого опыта, отсутствие инвесторов. Но хоть мы не были веб-дизайнерами, зато мы были фрилансерами и фактически делали этот сайт для себя, стараясь предусмотреть все для того, чтобы он был удобным и интересным. Работая над ним мы начали изучать русские и западные аналоги и в итоге решили ориентироваться на лучшее, что было на тот момент – западный Behance. Изучив и разобрав его по косточкам, мы обнаружили, что за внешней идеальностью скрывается множество серьезных недоработок вроде ограничения на ширину картинок в проектах – 600 px, что плохо для веб-дизайнеров и фотографов или невозможности добавить pdf-, doc- и swf-файлы в проект, что закрывает дорогу на сайт аниматорам и журналистам.

Месяц назад мы запустили наш проект Russian Creators. Несмотря на то, что попасть на сайт можно только получив приглашение, сейчас на сайте зарегистрировано более 400 человек и каждый из них – профессионал в своей области. Пока еще не известно, насколько коммерчески успешным будет наш проект, но за год работы над ним мы получили столько опыта и знаний и познакомились со столькими людьми, что наш стартап окупил себя еще до запуска. Никогда не стоит сомневаться, надо просто делать. И как уже неоднократно говорилось, необходимо делать сайт для людей. Лучше всего, когда вы – один из этих людей. Просто подумайте чего вам не хватает в рунете и делайте, это обязательно принесет свои плоды.

FireFox 3 удобство минимизации и web master tools

Прочитав эту статью решил внести свою лепту в минимизацию интерфейса FireFox3. В обших чертах все хорошо но можно сделать еше лучше.
Например убирании табов в верх не всегда удобно, я например ставля этот аддон вообше потерляся где я. Есть более лучший способ увеличени я пространства:
1. Перемещяем полоску закладок над полоской адрес бара + ставим Tiny Menu
2. Убираем тулбар где стояли закладки
Таким образом он становиться уже и намного бустрее привыкаешь ( имхо)
Установливаем дополнения для веб мастеринга:
1. Ставим великий и могучий FireBug
2. Добавки для него b
FirePHP php для firebug
ColorZilla Работа с цветом
FireFTP фтп клиент, очень удобен для мелких заливок-сливок )
Web Developer tools огромное колличество инструментов для веб разработчика
YSlow показывает время загрузки сайтов
Extended Statusbarпоказывает размер, время, скорость при посешинии сайта
Wappalyzerпоказывает движок сайта
Cache Status индикатор кеша на нижней панеле
Flash Blockблокировка флеша

ну и под конец можно добавить красивую тему под chrome

Всё это очень помогает при работе с сайтами.

Как я искал систему электронного документооборота и… не нашел.

Я работаю в небольшой (10 компьютеров, столько же людей) научно-исследовательской компании. Компания работает в области добычи и подготовки нефти и газа. Основная моя специализация – инженер, но поскольку я достаточно неплохо дружу с компьютерами, то по совместительству я и сисадминю.

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

Аутентификация в Active Directory, c использованием смарт-карт.

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

Ядром нашей системы будет корневой Ценр Сертификации (ЦС), который будет выдавать пользователям подписанные сертификаты и записывать их на смарт-карту. После этой процедуры будет возможно проходить аутентификацию в системе не по паролю, а используя карточку. Все данные на смарт карте шифруются на основе ключевой фразой — пин код, который устанавливается при записи сертификатов. Стоит отметить, что подойдут для такой системы не все смарт карты… Я немного ступил, когда купил просто микропроцессорные карты — windows отказалась записывать на них сертификаты. Это обстоятельство вынудило меня купить (на ebay.com) карточки gemsafe, которе я и использовал в своих экспериментах. Вот как они выглядят:



Читать дальше →

CoWorking в Санкт-Петербурге, быть или не быть?

С прошлого года наткнулся на статью о Co Working (этаком офисе где собираются фрилансеры -единомышлениики, снимают вскладчину помещение и вместе работают, при этом оставаясь самостоятельными), почитал, сохранил и благополучно забыл. И вот в начале этого года снова эта тема всплыла в моей памяти. К моей радости с тех пор многое изменилось. Появилось много новых офисов и даже кто то успел закрыться. А так же выявились несомненные лидеры и долгожители, «коворкинг» офис в Екатеринбурге «Башня» Конечно же мне, как начинающему неизвестный и новый проект предпринимателю стали интересовать все подробности этого дела. Как всегда всё началось со сбора информации.
Вот основное что я бы выделил из беседы с руководителем и основателем «коворкиг» клуба из Екатеринбурга Алексеем Глазковым:

(Евгений) А вопрос первый такой, как быстро у вас решилось наполнение офиса людьми?
(Алексей) У нас заполнение Башни длилось достаточно долго. Здесь 15-16 мест, в первые месяцы было всего 5 участников, затем в среднем добавлялось постоянных 1-2 человека в месяц. Значительно проявляется текучка: 1-3 человека в месяц приходят, сидят 2-4 недели и уходят. Но тут нужно делать скидку на то, что сейчас кризис

(Евгений) Что вы считаете самым эффективным в деле привлечения в офис тех кто будет там работать?
(Алексей) Лучший способ привлекать людей — несомненно, цены. Цена за место должна быть совершенно смешная, какая-то очень маленькая. Разбейте помещение на МАКСИМУМ возможных мест, сколько можно туда втиснуть, и не делайте никакую свою наценку — тогда она как раз и получится мизерная. Народ пойдет.

(Евгений) Может есть такое что вообще никогда не следует делать?
(Алексей) Что никогда не следует делать — так это 1) считать коворкинг просто «сдачей рабочих мест в аренду», 2) пытаться зарабатывать на этом.
Англоязычная модель в этом плане очень правильная: они там понимают, что основная ценность коворкинга — в том, что куча активных людей с идеями, проектами и малым бизнесом сосредотачитваются в одном месте, готовые расти, готовые сотрудничать. Если хочешь новый бизнес, или хочешь в кого-то вложиться — только протяни руку! Вот тебе 10, 20, 30 вариантов на выбор!

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

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

В общем общение получилось содержательным и из него я сделал соответствующие выводы. В общем следите за следующими статьями о Co Working на просторах интернета.

Почта от QIP

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

Уважаемый пользователь!

Поздравляем Вас с успешной регистрацией нового почтового ящика нискажуномер@qip.ru!

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

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

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

По любому интересующему Вас вопросу, можно обратиться в техническую поддержку QIP.Почты, которая работает круглосуточно.

Желаем приятной работы!
С уважением,
администрация QIP.Почта


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

Вобщем жаль. Хорошая была программа.

Дистанционное образование сегодня

Многие знают о существовании портала intuit.ru. «Твой путь к знаниям», — красуется их девиз в шапке сайта. Почему новичкам, по моему мнению, не стоит идти по этому пути вместе с Интернет-университетом?
Курс «Язык программирования С++» — третий по популярности. Приведу несколько вопросов из тестов, вызывающих сомнения в компетентности их составителей.
интересно

«Умная» настройка SpamAssassin или деньги на ветер

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

Сперва небольшая предыстория...

Вся история началась с того, что за нежеланием «работать на дядю» я занялся фрилансом — помогал предпринимателям нашего региона размещать их товары/услуги в сети. Сами сайты клиентов хостились у одного мелкого и недорого хостинг-провайдера, с которым я работал. Первое время сайтов было не много и провайдер меня вполне устраивал. Однако уже через пол года бизнес начал набирать более серьезные обороты — фриланс перерос в веб-студию, а клиенты всё больше жаловались на огромное количество спама, да и наш e-mail тоже разошелся по всем спам-базам и ящик постоянно был завален рекламой.

Читать дальше →

Здравствуй, обезьяна! Прощай, обезьяна!

Давно хотел написать про образ тестера в команде и компании в целом.
Не буду поднимать тему отношений программист-тестер — она и так муссировалась достаточно много.
Сделаю больше упор на глобальный «имидж», если так можно сказать, роли тестера. Роли Тестера.
То, что я опишу в этом посте — это мои наблюдения и опыт, плюс консультации друзей-тестеров и совместные воспоминания.
Это очень позитивный опыт и я очень благодарен людям и компаниям, которые мне его дали, прямо либо косвенно.

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

Меня же занесло с ходу в ява веб проект.

Итак, внимание, в чем проблема нераскрученного имиджа тестера в этой компании?

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

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

Я спрашивал: «почему программист?»
На большинство вопросов ответ был по типу: «нуууу… там же з.п. больше»
«Хм… зп больше и все, точно?»

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

Не у каждого члена команды тестинг тимы еще хватит время на самопиар в стиле «Тестер рулезз!»
Надо же концентрироваться на технических задачах.
Поэтому, в таком случае очень хорошо показала себя практика, когда, такую PR задачу в бОльшей части возьмет на себя тест тим-лид.
Человек на коне с развевающимся флагом, рвущийся в бой коммуникационный, и находящийся в курсе технических дел.
Плюс очень важный момент, который тоже стал явным со временем — помимо локальной харизмы тест тим-лида, присутствие глобального харизмата, такого как директор департамента по качеству (примерно так звучит должность) очень и очень важно.

Будет отлично для Образа Тестера, чтобы директор отдела качества был публичный человек, который лично собеседует новичков на работу, которого все тестеры знают в лицо, любят и могут обратиться в любой момент.

Это должен быть открытый, позитивный, публичный человек, принимающий участие в организации профессиональных тренингов, презентаций, отборе людей, следить за ротацией людей, в общем харизмат еще тот и светлый Луч!

В первой компании, большинсвто тестеров и не знали директор отдела качества ни в лицо, ни тем более по фамилии.
Он сохранял стиль серого кардинала…

Решение проблемы напросилось:
Личная харизма плюс харизма твоего лидера плюс харизма глобального лидера по тестированию.

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

Догадка:
А может быть это внегласная политка компании :))) Занижать рейтинг тестеров, чтобы повышать их мотивацию стать программистами, и потом набрать новых целеустремленных молодых специалистов на роли тестеров, кторые тоже будут разв иваться :))

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

Резюме по второй компании:
позитив — работа в команде близко-близко к программистам, открытость общения, большое количество харизматов.

Я жду Вашей жесточайшей критики, т.к. она-источник позитива для меня, также фидбэка по поводу имиджа тестера в Вашей комапнии.

Коротко о себе: работаю в IT, сам недалек от уровня обезьяны, стараюсь развиваться :)

Спасибо за комментарии.

IE 8 — мнение со стороны

Вокруг IE (Internet Explorer) ходят не добрые ассоциации и по моему мнению они относительно оправданны в отношении версий IE7 и младше. Среди пользователей это связанно отчасти с отсутствием достойных плагинов, а среди разработчиков с постоянно изменяющимся от версии к версии внутренним устройством, заставляющим для поддержки всех версий писать несколько вариантов верстки страниц. Но с выходом IE8 по заявлениям Microsoft, проблемы с корректным отображением страниц должно отойти назад, а для этого все пользователи IE должны перейти на более новую его версию, иначе все это не имеет смысла. Конкретнее дело в том, что не все пользователи используют автоматические обновления и поэтому переход некоторой массы на новый продукт затягивается.

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

Textarea и табуляция

Доброго времени суток.

Потребовался мне простенький редактор для моего сайта. Главная задача была — поддержка табуляции. Искал в интернете, но так и не нашёл того, что мне нужно и решил написать сам.

Читать дальше →

Распознавание лиц

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

Немного теории
Распознавание лица на изображении можно представить в виде следующих шагов:
1) Детекция области лица на изображении 2) Выделение признаков изображения. В простом случае это могут быть пиксели исходного изображения, возможно преобразованные в одномерный вектор.
3) Обработка признаков изображения. Вектор признаков изображения служит входом некой функции, которая выдает выходной вектор признаков изображения.
4) Заключительный этап — определение расстояния от выходного вектора признаков до аналогичных векторов изображений людей, находящихся в базе. То есть человек с минимальным расстояним считается опознанным. Здесь стоит отметить проблему порога для минимального расстояния. Если изображение некачественное и алгоритм не может распознать лицо, расстояние будет больше порога и сделан вывод о невозможности распознавания.

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

Читать дальше →

Single Table Inheritance in Ruby on Rails

Недавно, при поптировании одного приложения с Java на RoR столкнулся с проблемой «отображения иерархии классов на реляционную модель». Изветное дело в Java или .NET я бы использовал Hibernate/NHibernate и Single Table Inheritance или STI (в данном случае это наиболее подходящий из 3 представленных способов). На мое счастье, оказывается ActiveRcord в RoR, также поддерживает STI. Итак, приступим.

Предметная область


В качестве предметной области я взял модель безопастности приложения (т.е. ее часть). У нас есть базовая сущность Principal(name, description), и три конкретные сущности наследника: User(login, passwordHash, lastLoginDate, expirationDate, accountDisabled), Role, Group. Для данного примера я решил не усложнять модель связями между User, Role и Group.

Реализация


Дла реализации STI нам потребуется в талбицу principals добавить зарезервированное поле type и все поля из классов: Principal, User, Role и Group.

Скрипт миграции


Привожу скрипт миграции для таблицы principals.
class CreatePrincipals < ActiveRecord::Migration
def self.up
create_table :principals do |t|
t.column :name, :string, :limit => 64
t.column :description, :string
t.column :account_disabled, :boolean
t.column :last_login_date, :date
t.column :expiration_date, :date
t.column :type, :string, :limit => 48
end
end

def self.down
drop_table :principals
end
end


Модель


Сущность Principal
class Principal < ActiveRecord::Base
end
Сущность User
class User < Principal
end

Сущность Role
class Role < Principal
end

Сущность Group
class Group < Principal
end

Как видим в объявлениях классов модели нет ничего особенного. Обо всем остальном позаботится ActiveRecord.

Примеры работы с моделью


Тепрь можно создавать наши объекты, сохранять в базу данных и выполнять запросы. В качестве примеров приведу тесты модели (они простые, так что проше не бить ногами :) ). Примеры только для Role и Group, с User-ом аналогично.

Фикстуры для principals
users_role:
id: 100
name: users
description: system users
type: Role

testers_group:
id: 101
name: testers
description: testers group
type: Group


Тест для сущности Role
require 'test_helper'

class RoleTest < ActiveSupport::TestCase
fixtures :principals

# Save Role in database.
test "role_has_type_eq_role_after_save" do
role = Role.new(:name=>"admins", :description=>"system administrators")
role.save

assert role.id
assert_equal "Role", role.type
end

test "users_role_exists_in_db" do
role = Role.find_by_id(100);

assert_not_nil role
assert_equal 100, role.id
assert_equal "users", role.name
assert_equal "Role", role.type
end
end


Тест для сущности Group
require 'test_helper'

class GroupTest < ActiveSupport::TestCase
fixtures :principals

# Save Role in database.
test "group_has_type_eq_group_after_save" do
group = Group.new(:name=>"developers", :description=>"developers group")
group.save

assert group.id
assert_equal "Group", group.type
end

test "users_group_exists_in_db" do
group = Group.find_by_id(101);

assert_not_nil group
assert_equal 101, group.id
assert_equal "testers", group.name
assert_equal "Group", group.type
end

end


Как видим все достаточно прозрачно.

Ложка дегтя


Как уже можно было догадаться есть и обратная сторона медали. Котроль соответсвия набора значащих полей конкретной сущности лежит целиком на совести программиста. Для среды ActiveRecord значение имеет лишь колонка type. Так, что я вполне могу создать сущность Role с данными User-а. А это не очень хорошо отразится на отношениях ко мне моих коллег :) . По этому в Rails очень важно покрытие кода функциональными тестами.

Жду отзывов, исправлений и предложений. ;)

OpenTTD 0.7.0

Здравствуйте.
Я один из разработчиков русских сборок игры OpenTTD с портала open.ttdrussia.net, известный там под ником Smoky555.
Хотел бы здесь помогать играющим в эту игру, однако же не смог зарегистрироваться, никого с этого портала не знаю :(
Может кто поможет мне в этом, вышлет приглашение?

P.S. на вашем портале игра обсуждается здесь — habrahabr.ru/blogs/games/56225

Анонс проекта: Информационно-коммуникационный портал в сфере изучения иностранных языков.

Всем здравствуйте.
Представляю вашему вниманию анонс весеннего проекта.



Суть.


Создание и запуск в интернет среде точки входа (портала) в мир изучения иностранных языков. Портал поможет людям выбрать себе путь к познанию и овладению иностранным языком из всего многообразия форм, методов, способов, представленных на сегодняшнем рынке услуг данного типа, а так же наладить коммуникационные связи.

Внутренняя форма портала будет реализована в виде ряда разделов с структурированной в ней информации, плюс его социальной составляющей.

Структура представляет собой четкое разграничение по принципиально-различным способам изучения языка, которые создадут эти разделы.

Итак изучение иностранных языков может быть:

  • Самостоятельным (индивидуальным обучением). Это книги, самоучители, тематические словари, разговорники, аудио курсы, видео материалы и т.п. Отличительный принцип — человек самостоятельно изучает язык.
  • Совместно с персональным учителем. В мини группе или индивидуально. Учителем может быть: преподаватель, репетитор, коучер. Отличительный принцип — с индивидуальным учителем.
  • В узкоспециализированной лингвистической школе, в ВУЗе (на факультете), колледже и т.п. Отличительный принцип — государственное образование.
  • На коммерческих языковых курсах. Отличительный принцип — негосударственное образование.
  • Дистанционным. Пример: получение материала — выполнение заданий — проверка методистом (учителем) — отправка результатов. Отличительный принцип — учишь дома сам, но есть свой методист и куратор, с которым ты можешь даже и не встречаться. Материалы высылаются через интернет или почтой.
  • Онлайн. Отличительный принцип — Здесь и сейчас по средствам интернет технологий. Чат, Skype, Видеоконференции и т.д.
  • За рубежом в иностранных языковых школах. Отличительный принцип — не на территории РФ.
  • На неформальных встречах и языковых клубах. Отличительный принцип — полная свобода посещений, простой формат, бесплатность и т.п.


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

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

Информация в разделах будет представлена в виде:
  1. Статичной контактной информации об участниках портала с внешними ссылками на их ресурс.
  2. Презентационным контентом этих участников (видео, фото, интервью, обзоры и т.д.).
  3. Социальной обратной связью, оставленной в виде отзывов, комментариев и т.п.


Что сейчас?


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

Мы сейчас находимся на стадии создания прототипа. Команда проекта на данный момент — 8 человек.

Заранее предусмотрев вопросы могу сказать, что:


  • это не очередная социальная сеть (хотя часть социальной составляющей будет реализована)
  • это не база данных школ, институтов, курсов и т.д., а удобная площадка для их презентации
  • это не только интернет проект, но и оффлайн проект.


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

Пару слов о монетизации.


У нас клиентов нет, а есть только участники проекта и его партнёры. Размещение того или иного участника будет зависит от его намерений и формы проявления во внешнем мире. Коммерческие организации (такое общее слово) = платная основа размещения с дружелюбной ценой, некоммерческие организации = бесплатно.

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

P.S.1 Всё вышеописанное является только вершиной айсберга, но суть я думаю будет всем понятна.

P.S.2 Дорогие хабровчане, буду рад любым конструктивным предложениям, вопросам, замечаниям и другой обратной связи. И мы всегда открыты для новых знакомств с интеллектуальными и осознанными людьми.

С уважением Иван Лютаев.