четверг, 20 ноября 2008 г.

Аналитические функции Oracle

Ссылки самому себе:

Аналитические функции Oracle

среда, 19 ноября 2008 г.

камасутра по айфоновски

сегодня узнал, что iPhone знает не о четырех своих стандартных положениях, а о шести.

Кроме того, что экран можно наклонить вправо, влево или перевернуть кверх ногами, система может определить, что телефон лежит экраном вверх или экраном вниз.

Можно, например, автоматически выключать экран если ты перевернул телефон экраном вниз. или еще как нибудь использовать это ценное знание

понедельник, 3 ноября 2008 г.

iPhone upgrade: from 1.1.4 (ziphone'd) up to 2.1

Кратенько напишу о том, как я обновлял свой iphone до прошивки 2.1
Дано: iPhone 2G (первого поколения), латаный-перелатаный, с прошивкой 1.1.4 (разлочка ZiPhone 3)
Последовательность действий по обновлению


* Перерыть весь форум (http://iphones.ru/forum), прочитать кто на какие грабли наступал. Коллективное мнение - обновляться до 2.0 при помощи кастомного дистрибутива, затем уже до 2.1 при помощи QuickPwn 2.5 BETA2

* Этап 1 - обновляемся до 2.0

** Обновился до стандартной прошивки 2.0.2. Слетела активация и разлочка GSM

** Сделал downgrade itunes до 7.5

** Обновился до кастомного дистрибутива ("iPhone1,1_2.0_5A347_Custom_Restore.ipsw", нашел в недрах форума на iphones: http://www.iphones.ru/forum/index.php?s=&showtopic=22636&view=findpost&p=242413) - при установке запустился BootNeuer и починил мне baseband

** Обновил iTunes до 7.7


* Этап 2 - обновился до 2.1

** Обновил iTunes до 8-ки

** применил эту инструкцию: http://www.iphones.ru/forum/index.php?showtopic=27388 * восстановил свой профиль из iTunes.


Вот, теперь наконецто все хорошо. Только заметки в блокноте потерялись...

пятница, 10 октября 2008 г.

HTC G1

Эмулятор HTC G1, который с андроидом внутри. На флеше :)

вторник, 7 октября 2008 г.

Поиск по аудиозаписям

...а тем временем, Гугль выпустил поиск по аудиофайлам (точнее, аудиодорожкам записей, расположенных на Google Video)

http://labs.google.com/gaudi

пятница, 26 сентября 2008 г.

Скринкаст про устройство Eclipse IDE

http://www.artlebedev.ru/tools/technogrette/soft/eclipse-introduction/

как узнать PublicKeyToken для сборки .Net

How to obtain public key token for a .Net assembly:

C:\Program Files\NUnit 2.4.8\bin>sn -Tp nunit.framework.dll
Microsoft
(R) .NET Framework Strong Name Utility Version 2.0.50727.42Copyright (c)
Microsoft Corporation. All rights reserved.
Public key
is0024000004800000940000000602000000240000525341310004000001000100cf4a0bbf354b6d8d0c39e7bc40dd0be16a32ba9d763e8d04fd9591b92d7269dd09c2c65ec7563ce393aca71913bea13dd6a20d676ed7ddc726f846fce66800bb034903619a1baa520f5f758946cf2b4af6ba7c310d02d092a5cf51be6d52e88633f502474b4f461d850b63219c09a3373a23d73156ee03d6c7b38c36d1211fac
Public
key token is 96d09a1eb7f44a77

понедельник, 15 сентября 2008 г.

The Ultimate Whiteboard

http://blog.streamlinelogic.ca/2008/03/ultimate-whiteboard.html

Вот это ребята молодцы - я давно говорю, что облепить стену бумажками sticky notes - чуть ли не лучший способ управления проектом в стиле agile

суббота, 13 сентября 2008 г.

Как начать программировать для iPhone под Windows

iPhone Development on Windows Platform quick start how-to

UPDATE Nov 2008: Статья касается программирования под Open SDK, Firmware 1.x

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

Кому?

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


· Опыт программирования на C, C++ или Objective C
· Базовые знания средств разработки и администрирования мира Unix – GCC/C++, Make, SSH, shell, tar, gnu zip и так далее...
Что вам еще понадобится
· iPhone и какой-то опыт его использования
· Cygwin с кросс-компилятором G++ и LLVM (ToolChain)
· Файловая система от iphone с lib файлами для линковки
· Include files от вашей версии фреймворка
· базовые знания Objective C, C++ или plain C
· Аккаунт на Apple Connect, чтобы читать документацию Apple
· Google Code Search, чтобы искать примеры, как что сделать.
· Документация по платформе - Cocoa, WebKit, LayerKit и т.д – ищется по крохам в интернете и же на сайте Apple.

Как пишутся «родные» программы для iPhone

Есть два основных способа написать для iPhone (я имею в виду, "родные" программы на Objective C – и не рассматриваю варианты типа написания веб приложений или приложения на iUI или ином новомодном фреймворке)
- Либо вы получаете лицензию Apple, покупаете MacBook, качаете официальный iPhone SDK и ставите XCode (IDE для разработки) и становитесь настоящим эпловским разработчиком.
- Либо вы используете open source и всякие неофициальные инструменты, устанавливаете ToolChain (http://www.mattcutts.com/blog/hack-your-iphone-toolchains-and-cross-compilers/ ) и пишете все с чистого листа в каком-нибудь текстовом редакторе, поддерживающем синтаксис Objective C (для работающих на Windows могу посоветовать Notepad ++)
Windows разработчикам также понадобится специально настроенный Cygwin и всякие полезные инструменты типа WinSCP.
Сам же iPhone должен быть подвергнут процедуре Jailbreak и для работы на него нужно установить BSD tools и SSH.

Что надо сделать

Итак, перво-наперво надо попробовать хоть что-то собрать под iPhone. В качестве вводной документации по платформе можно воспользоваться книжкой "iPhone Open Application Development" (есть на Amazon, встречается в электронном виде). Из нее можно почерпнуть базовые знания, которых будет достаточно, чтобы собрать ваш первый пример. Правда, надо понимать что книга написана для Firmware v1.1 и несколько устарела.

Жизненно важно накачать как можно больше примеров приложений – можно искать на Google Code Repository, Google Code Search а начать, скачав примеры от книги (http://examples.oreilly.com/9780596518554)

Способу установки ToolChain, описанного в книге, я например предпочитаю вот такой способ:
· http://wiki.iphonegameover.com/Windows_Cygwin_Binary_Toolchain_Installation

Альтернативный вариант описан на форуме сайта iPhones.ru: http://www.iphones.ru/forum/index.php?showtopic=4659

Затем, если вы программист windows, нужно изучить Objective C :-). В принципе, базовые знания даются в книге Open App Development, но их может не хватить. Как минимум, нужно понять концепции - можно начать с Википедии: http://en.wikipedia.org/wiki/Objective_c . Еще одна интересная вводная статья про Objective C: http://cocoadevcentral.com/d/learn_objectivec/

Не помешает понять принципы построения Сocoa framework - это можно либо гуглить, либо искать на сайте http://developer.apple.com/ (там же есть документация по iPhone SDK (http://developer.apple.com/iphone/ ), которая поможет, поскольку при методе разработки, рекоммендованном Apple, используются все те же фреймворки и библиотеки, что и при кустарном методе

Обазательно прочитайте про Memory Management в Cocoa - там используются ref counters, как в COM-е, но с немного нетипичными нотациями. Читать, например, начиная отсюда - http://www.stepwise.com/Articles/Technical/2001-03-11.01.html , далее гуглить.

Как искать утечки памяти?





Можно почитать вот здесь:

Когда приложение падает с BUS ERROR?

SIGBUS, который роняет приложение, возникает от неправедной работы с памятью, например, при использовании (при попытке повторного освобождения) уже освобожденного объекта. 99% что где-то вызывается лишний release или неправильно применено событие autorelease.

Как отлаживаться?

Насколько я знаю, нормально отлаживаться можно только в эмуляторе iPhone при использовании iPhone SDK. При «неофициальном» способе я лично использую логгинг (см процедуру NSLog()) и запускаю приложение внутри iPhone из shell.
Возможно, есть способ прикрутить GNU debugger (gdb), но пока я его не познал – буду рад наводящему совету :-)

Интернационализация и локализация

На блоге weho.ru ребята достаточно подробно рассказывают.
http://blog.weho.ru/2008/04/lokalizacija-prilozhenij-iphon.html

Еще полезные ссылки

· http://ericasadun.com/ – сайт одного из лучших разработчиков и хакеров iPhone
· http://cocoadev.com/ – Wiki с документацией по cocoa, UIKit etc
· http://www.iphonedevcentral.org/home.php - множество скринкастов

Удачи в вашей практике!

PS поздравляю, что дочитали до конца - и вот вам небольшой подарок за терпение - история библиотеки Cocoa и различных KIT-ов на сайте Apple. Оттуда становится понятно происхождение префикса "NS" в назвниях ключевых классов - NSObject, NSString и др.

четверг, 28 августа 2008 г.

Пишите usage для ваших веб-страниц

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


///
/// usage:
EditDistributionEmail.aspx?iid=INSTANCE_ID[&back=ENCODED_BACK_URL]
///

public partial class EditDistributionEmail :
System.Web.UI.Page
{

...


С точки зрения программиста, веб-страница ничем не отличается от статической функции - принимает некоторый набор параметров (HTTP Request) и возвращает некоторые значения (HTTP Response).

А следовательно, и документировать ее надо как функциою - описывать параметры и return value (последнее для фанатов, конечно :). Хотя, если страница может менять какие-то глобальные cookies, это желательно в документации тоже указать.

пятница, 22 августа 2008 г.

Техсаппорт для аналитиков

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

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

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

Отсюда вывод - или аналитиков (product manager-ов) иногда нужно ссылать на поддержку продукта, который они создали, причем на самую неблагодарную ее часть - решение мелких бытовых вопросов пользователя, либо аналитики должны сами органиовывать получение feedback информации от саппортеров. Обязательно. Иначе так и будут витать в облаках ;)

четверг, 21 августа 2008 г.

Рабочее - вылизываем код до совершенства

Из чата:

1: главное чтоб там была сноска что это workaround for bug ### - а то потом будут люди будущего голову ломать, что ж за хуйню предки понаписали )))
2:
//This method added for bug0012852 workaround!!!
[Obsolete("This method added for bug0012852 workaround only!!! We strongly needs refactor here.")] поймут?
1: ага. только It is strongly needed to refactor, или "We strongly recommend to refactor this. -- Your predecessors"
1: Или так - Shall you to refactor this, shall not you to leave this unchanged
1: тьфу, модальные без "to"
1: shall you refactor this, shall not leave this unchanged
2: To refactor or not to refactor?
1: а вот этой неопрделенности нам не надо )

КЛАДР as a Service

Чудесно, что нашелся человек, который сделал REST версию справочника КЛАДР

http://gazdovsky.blogspot.com/2008/08/blog-post.html

Полезное

вторник, 5 августа 2008 г.

iPhone: This accessory is not made to work with iphone

Однажды, совершенно неожиданно, мой iPhone начал в случайные моменты времени выдавать вот такое сообщение:

"This accessory is not made to work with iphone."

и начал просить перевести его в Airplane mode. Перестал играться звук из iPod и YouTube через встроенный динамик.

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

Мораль: иногда надо работать руками ;)

пятница, 25 июля 2008 г.

Сравнительный анализ современных .net ORM

Задача

Необходимо было аргументированно выбрать ORM для большого .Net проекта. Рассматриваемые (пока) ORM: Entity Framework, BLTooklit, SubSonic.

Результат

* Аналитический отчет
* Сводная таблица с баллами, набранными каждой из ORM

Ваша критика/пожелания приветствуется. Надеюсь продолжить этот опыт и рассмотреть еще и другие (не менее интересные ORM)

среда, 23 июля 2008 г.

"И снесла курочка дедушке яичко. Левое. Напрочь."

http://www.metasploit.com/users/hdm/tools/debian-openssl/
Это, извините за мат, пиздец.

Вкратце - в 2006 году народ, который поддерживает сборку библиотеки OpenSSL, вычищая потенциальные уязвимости из библиотеки, "вычистил" напрочь код, который генерировал начальное значение для генератора псевдослучайных чисел (Pseudo Random Number Generator, PRNG). Вместо случайной последовательности байт PRNG инициализировался ID текущего процесса (а в linux это число <32768)

Эффект одной ошибки
Как результат - все debian based операционки (такие, как Ubuntu) до последнего времени были подвержены атаке "man-in-the-middle". Все SSL/SSH сертификаты, выданные в это время, скомпрометированы. Любые утилиты, использующие библиотеку debian-овскую сборку OpenSSL, могут быть уязвимы.

В оригинале:

All SSL and SSH keys generated on Debian-based systems (Ubuntu, Kubuntu, etc) between September 2006 and May 13th, 2008 may be affected. In the case of SSL keys, all generated certificates will be need to recreated and sent off to the Certificate Authority to sign. Any Certificate Authority keys generated on a Debian-based system will need be regenerated and revoked. All system administrators that allow users to access their servers with SSH and public key authentication need to audit those keys to see if any of them were created on a vulnerabile system. Any tools that relied on OpenSSL's PRNG to secure the data they transferred may be vulnerable to an offline attack. Any SSH server that uses a host key generated by a flawed system is subject to traffic decryption and a man-in-the-middle attack would be invisible to the users. This flaw is ugly because even systems that do not use the Debian software need to be audited in case any key is being used that was created on a Debian system. The Debian and Ubuntu projects have released a set of tools for identifying vulnerable keys.

Инструменты для взлома SSH/SSL сессий существуют и доступны в Сети. Такая вот веселая история из мира опен соурс.


Ссылки по теме:

суббота, 5 июля 2008 г.

вторник, 1 июля 2008 г.

Как реюзать master pages и user controls между веб-проектами

Всегда думал, что нереально использовать в ASP.NETовском проекте UserControl, созданный и "живущий" в другом проекте.

Однако я был неправ - вот здесь -

http://blogs.msdn.com/webdevtools/archive/2006/08/15/701642.aspx

- описывается, как это сделать без особенных даже сложностей.

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

Есть только пара ограничений - вы не сможете использовать Dev Web Server для отладки (нужно будет конфигурить IIS) и это должны быть проекты типа Web Application Project (не вебсайты).

ну и по разным app pool-ам подпроекты в таком виде уже не раскидаешь....


А так - способ, который явно работает.

пятница, 27 июня 2008 г.

iPhone: Create AppTapp (Installer.app) Repository Source How-to

Почему-то нужные ссылки на документацию по тому, как создать свой Repository Source для Installer.app находятся не сразу.

Будем восполнять этот недостаток. Итак:

Как создать репозиторий приложений для iPhone, на сайте iPodTouchFans:

http://www.ipodtouchfans.com/wiki/index.php?title=Creating_a_Source_Repository_for_use_with_Installer.app

суббота, 21 июня 2008 г.

Уязвимость в кофеварки

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

"Fun things you can do with a Jura coffee maker:
1. Change the preset coffee settings (make weak or strong coffee)
2. Change the amount of water per cup (say 300ml for a short black) and make a puddle
3. Break it by engineering settings that are not compatible (and making it require a service)"

http://www.securityfocus.com/archive/1/493387

А это, меж тем, только начало. Представьте, например, вирус для электробритвы. Или, страшно сказать, в эпиляторе. Брр...
Добро пожаловать в новую эпоху :)

пятница, 20 июня 2008 г.

РЖД - про ответственность

Еще один казус из просторов российского интернета. Есть такой сайт - http://ticket.rzd.ru/, на котором можно купить билет на поезд и тут же оплатить его картой. В результате, тебе выдают некий номер, с которым приходишь в ЖД кассу и прямо перед отправлением поезда тебе выпишут настоящий билет.

Пользуюсь сайтом последний год наверное. Не переставая. И очень доволен, РЖД за воплощение огромное спасибо.

Вот только меня все время забавляет такой момент, что когда начинаешь оформление билета, в том месте, где у обычных сайтов стоит договор публичной оферты, Terms-of-Service или чтонибудь подобное, на tickets.rzd.ru есть две такие вот кнопки:



И когда пользователь системы нажимает "Хочу ознакомиться с правилами", он попадает на такую вот страницу:


На этой странице выложено около 20 (sic!) таких полезных документов, как например "Об индексации тарифов на железнодорожные перевозки пассажиров, багажа и грузобагажа в дальнем следовании и платы за пробег собственных (арендованных) вагонов, следующих в составах скорых, пассажирских, почтово-багажных и грузопассажирских поездов.".

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

Всего страниц 200-300.

То есть предполагается, что перед тем, как начать пользоваться сервисом, я должен все эти триста страниц прочитать и запомнить. И если я чтонить не прочитал - то пусть пеняю на себя...

Вообще-то это называется валить с больной головы на здоровою. Не захотелось тратить время юристов на придумывания нормального TOS Agreements, так просто отправили пользователя ковыряться в барахолке документов - и так сойдет... Такое вот делегирование ответственности.


PS - а сервис хороший. работает быстро, билеты потом выписывают исправно, а нынче еще и сборы отменили, получается еще и супердешево.

А вы говорите - юзабилити

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

Задание: на сайте сотового оператора найти эту информацию.

Пробуем выполнить задание для "большой тройки"

МТС: запутался в навигации, но в три клика вышел на "Вопросы и ответы". списка вопросов не нашел, но нажал Control-F, ввел слово "баланс" и получил искомую информацию

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

Мегафон: тоже провал поначалу. UPD: информация находится в поиске по словам "узнать баланс" (вторая по счету) или "баланс" - одиннадцатая ;) субъективно, вычленить нужную мне статью из остальных было почему-то сложно.

А теперь внимание, вопрос - зачем вообще нужен сайт сотовому оператору?

понедельник, 16 июня 2008 г.

Пассив на пассиве сидит и пассивом погоняет

Вот так переводят на русский в Microsoft . Особенно выморозило "Планирование внедрения"



Привет, Нора Галь!

Singularity OS

Вот ведь мимо пролетело - оказывается, MS выпустила в опенсоурс свою объектно-.net-базированнуб-исследовательскую операционную систему Singularity. Доступно это чудо в виде Singuilarity Research Development Kit на CodePlex: http://www.codeplex.com/singularity

Прочитать про саму ОС можно на Википедии: http://ru.wikipedia.org/wiki/Microsoft_Singularity

LinqToSql vs ADO.NET Entity Framework

(Задумчиво) Интересно, зачем Майкрософту целых два O/R маппера? Навскидку, LinqToSql выглядит младшим братом EF (который только-только вылезает из пеленок, и доступен пока в VS 2008 SP1 Beta).

Вот зачем нужно было их оба разрабатывать?...

И значит ли это, что с выходом EF старый LinqToSql потихоньку задвинут и не будут развивать?

понедельник, 21 апреля 2008 г.

"Нет такой вещи, как бизнес."

"Так чего же мы боялись? Мы чувствовали себя уверенно в программировании, но нам
не хватало уверенности в том, что мы сможем заниматься загадочной и непонятной
нам вещью под названием "бизнес". На самом деле нет такой вещи, как "бизнес".
Есть продажи, реклама, определение потребностей людей, определение ценовой
политики, поддержка пользователей, оплата счетов, получение оплаты от клиентов,
обеспечение деятельности юридического лица, привлечение инвестиций и так далее.
А все вместе это не так сложно, как кажется, потому что некоторые задачи
(например, привлечение инвестиций или обеспечение деятельности юридического
лица) отнимают множество усилий, как у маленьких, так и у больших компаний, а
другие (например, продажи или реклама) требуют скорее энергии и воображения, чем
какой-то особой подготовки."

Пол Грэм, "Почему умным людям приходят в голову глупые идеи"
http://www.perevedem.ru/article/why-smart-people-have-bad-ideas.htm

воскресенье, 20 апреля 2008 г.

Fitts Law

Егор Шокуров тут подкинул -

Лабораторная работа по закону Фиттса. Закон Фиттса гласит, что "время, требуемое для позиционирования на какой-либо элемент есть функция от расстояния до этого элемента и от его размера"

Советую попробовать это на собственной шкуре собственном опыте - занятное ощущение.

http://fww.few.vu.nl/hci/interactive/fitts

пятница, 18 апреля 2008 г.

Расстояние до счастья

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

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

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

среда, 2 апреля 2008 г.

Антипаттерн: Менеджер - пересылальщик писем

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

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

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

понедельник, 31 марта 2008 г.

История одной "примадонны" на RSDN

Читаю сейчас тред на форуме RSDN (http://www.rsdn.ru/forum/message/2883756.1.aspx) и это какой-то детектив.

Начинается все с классического менеджерского вопроса "что делать с примадонной"

"На проекте присутствует сотрудник с таким
паттерном. Подскажите, что делать?"

...

"Тут какая проблема: из команды разработчиков (три человека) в начале проекта на него приходилось 70-80% работ, сейчас (спустя время) объем работы возлагаемого на него стал примерно 30%-40% (плавное снижение его степени участия в работе над проектом со стороны руководства), сейчас получается что уменьшение степени участия этого сотрудника влияет на сроки сдачи в худшую сторону."


Затем какое-то кол-во постов занимают стандартные советы, поперемешанные с флудом, народ предлагает сделать примадонну лидом, предлагает потихоньку выводить из проекта и все такое.

А вот затем начинается интересности, когда автора поста начинают расспрашивать о подробностях:

0rc>>Он сам просит выделить какой-нибудь проект, где он в чистую
может показать только свою работу. Как быть?

ГВ>Зачем это ему обязательно "показывать только свою работу"? Похоже на
оборонительную позицию. С чего бы это?Потому что паттерн "примадонна" применен исключительно к талантам + он не может работать со многими.

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


Пока выглядит как обычный конфликт, типа "толковый спец, который начинал проект, но не может работать в команде" + некоторое непонимание менеджером сути конфликта в подотчетной команде - больно уж странным выглядит его объяснение.

Смотрим дальше... А дальше автора поста спрашивают, а почему бы не отдать проект одному этому человеку, раз он суперэффективен. А вот почему:

0rc> Начальство решило, не спрашивайте почему, просто решило и ему
веднее, что лучшим мерилом денег будет — строчки кода. Но он пишет слишком компактный код, из-за этого все проблемы.

http://www.rsdn.ru/forum/message/2886396.1.aspx


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

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

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

Я буду эту историю долго помнить. Надеюсь, я ее вообще никогда не забуду.

TFS при разработке Rosario

А мы все не спим.. :)

На channel 9 интересное видео про то, как команда MS Visual Studio использует Team Foundation Server при разработке следующей версии VS codename Rosario

http://channel9.msdn.com/ShowPost.aspx?PostID=391362#391362

воскресенье, 30 марта 2008 г.

Антипаттерны Test Driven Development

Сергей Розовик перевел интересную статью TDD Antipatterns. Крайне советую прочитать всем, кто как-то связан с созданием юнит-тестов.

"Лжец (The Liar). Тест, который успешно проходит во всех случаях. Однако при ближайшем рассмотрении оказывается, что фактически ничего не тестирует

.Попробуй запусти! (Excessive Setup). Тест, который требует сложной и длительной настройки тестового окружения перед запуском. Иногда тест содержит сотни строк кода, подготавливающие необходимые условия для запуска одного теста. В результате очень сложно разобраться действительно тест не прошел, либо что-то случилось с настройками...."

http://stump-workshop.blogspot.com/2008/01/tdd-anti-patterns.html

100% of requirements in spec?

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

http://stump-workshop.blogspot.com/2008/03/100.html

воскресенье, 23 марта 2008 г.

FormsAuthentication - мелочь, а неприятно

Искал я искал, почему у меня в ASP.NET при использовании forms authentication не работает "remember me" - а оказывается, по умолчанию этот самый permanent login ни фига не перманент, а 30 минут. Чтобы это исправить, нужно было поменять значение authentication/forms/@timeout в web.config-е


<system.web>
...

<authentication mode="Forms">
<forms timeout="50000000">
</authentication>

пятница, 7 марта 2008 г.

Пейджинг это зло. Кликните на страницу #447252639

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

А я вот про пейджинг имею сказать следующее - пейджинг сосет.

Если у меня есть список A..Z на 200 страниц - откуда я знаю, на какой странице расположены, например, слова на S?
мне кажется разумным либо делать рубрикатор или (и) поиск. А страничный пейджер годится лишь там, где не очень важно - что ты найдешь, кликнув на 125 слева страницу. Ну, например, на bash.org.ru :-)

вторник, 26 февраля 2008 г.

ОСТ 4.071.030. АСУП. Создание системы. Нормативы рабочего времени

А вот это вот - отраслевой стандарт на создание "Автоматизированных систем"

http://ooad.asf.ru/standarts/Library/GostIT/Index17.aspx

понедельник, 25 февраля 2008 г.

Сколько трафика съест Joost?

По мотивам поста "Сколько трафика съест Last.FM"

На этот раз возник вопрос, сколько трафика будет захавано видео-аналогом ластфм-а - Joost-ом. Для ответа на этот вопрос, я решил не использовать никакого внешнего софта, а просто посмотреть на трафик при помощи встроенного в Windows XP менеджера задач (вызывается через ctrl-shift-esc, или из контестного меню task bar-а). В task manager-е я открыл закладку "network" и добавил через меню туда колонки bytes received и bytes received per interval.

После запуска joost-а мы видим следующую картину:



Поскольку интервал у меня был 1 секунда, то трафик можно условно посчитать как 72 Кб/сек.

Таким образом - 8 часов смотретнья Joost-а в день обойдется нам в 72*3600*8 ~ 1.98G
Почти 2 гигабайта. В месяц, соответственно, 60 гигабайт. Мораль - переходите на анлим или помните, что час работы Joost-а - это 260 мегабайт трафика. :)

воскресенье, 24 февраля 2008 г.

Office Fast Save или еще одно различие между умом пользователя и разработчика

Сегодня прочитал историю про то, как Microsoft в Office 2003 SP3 выключил т.н. режим "Fast Save".

Вкратце - начиная с 95 офиса в нем была функция быстрого сохранения файлов, которая позволяла очень быстро сохранять документы Word и Excel за счет того, что при записи документ целиком не перезаписывался, а в его конец просто добавлялись все правки, которые пользователь внес со времени последнего сохранения.

Программисты баз данных сразу же увидят сходство SQL серверами - там создается
файл transaction log, в котором так же записываются операции изменения данных в основной базе.


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

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

Вспоминается история про Гугль, который не хотел добавлять кнопку delete в своем почтовом клиенте gmail, потому что она "была не в концепции системы" и потому что "пользователям в нашей почте не нужно будет удалять письма"

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

GWT-Ext 2.0

Зарелизили дико мощную библиотеку компонентов для GWT, базирующуюся на JS-Ext

Посмотреть можно здесь: http://www.gwt-ext.com/demo/

из минусов - секунд 15 загружается в первый раз...

среда, 20 февраля 2008 г.

15 тезисов о юзабилити тестировании веб-сайтов (UsabilityLab)

http://habrahabr.ru/blog/usabilitylab/36096.html
"Эффективная разработка веб-сайтов (включая дизайн, эстетику, навигацию по сайту и его содержание) предполагает получение обратной связи от пользователей. Обратную связь можно организовать различными способами и на разных этапах жизни веб-сайта. Однако получение обратной связи нельзя рассматривать как универсальное средство для улучшения его эффективности. Только юзабилити тестирование с реальными пользователями может показать, отвечает ли сайт поставленным целям"

понедельник, 18 февраля 2008 г.

Нельзя держать пользователя в неведении

Сегодня порадовал Microsoft, прислал письмо следующего содержания:

"Hello Yury,Thank you for your interest in Microsoft Office Live Workspace beta.
We haven’t forgotten about your pre-registration and appreciate your patience.
We’re still gathering feedback from thousands of early testers in the United
States to fine-tune the user experience before releasing the service worldwide.
Over the next few months you should receive an e-mail invitation to the English
version of Office Live Workspace, and later this year we will make other
languages available too. "


Вот как надо (tm). Я с месяц назад написал им просьбу дать мне тестовый доступ на office live workspace. Я так понимаю, они его еще не доделали :-) и мне сразу после регистрации пришло письмо о том, что "мы вам скажем, когда можно будет получить доступ".

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

Посмотрите, как этим письмом они убивают сразу несколько зайцев:

1. Показывают, что ценят меня. "Юра, мы тебя не забыли и спасибо что интересуешься нами". Это приятно тешит самолюбие и оставляет хорошее впечатление от компании.

2. Делают ненавязчивое промо. Я уже и забыл про этот Office Live Workspace. А они подогревают во мне интерес и через это повышают узнаваемость бренда.

Мораль - потратьте немного времени, подумайте, как сделать хорошо [потенциальным] пользователям для вашего продукта. Не поступайте, как роботы: заявка->подтверждение заявки->{while not product.isReady(); sleep();} ->письмо-оповешение о готовности продукта.

Всегда есть место человечности :)

воскресенье, 17 февраля 2008 г.

Оттопыривались они...

Готовлю демо-сайт для своей крохотной CMS-инки...

суббота, 16 февраля 2008 г.

GWT + ASP.NET + JSON + MVC и все-все-все. Часть первая, вступительная

Часть первая, идея

Вот так сидишь, пьешь чай в третьем часу ночи, и неожиданно понимаешь, что тебе хочется рассказать всему миру, как можно сделать хорошее, добротное GWT-приложение, да еще и по-честному интегрированное с Microsoft-овским стеком веб-технологий. Что ж, начнем.

Тема это довольно большая, увесистая, поэтому рассказывать будем по частям. Начнем, как водится, с постановки задачи.

Постановка задачи

Задачу мы поставим не очень сложную, но вместе с тем не совсем тривиальную – написать компонент для просмотра и ограниченного редактирования списка контактов, на манер skype. Сам компонент должен быть встроен в приложение на ASP.NET.

Список контактов выглядит в скайпе вот как:

Как видите, это список, каждый из элементов которого снабжен индикатором состояния, псевдонимом и подписью.

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

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

Требования

Итак, сформулируем требования к нашему Контакт-листу:

1. Системные требования

1.1. Редактор контактов должен быть выполнен с использованием Google Web Toolkit (GWT)

1.2. Веб-приложение должно быть написано на C# и «бегать» под управлением Microsoft ASP.NET 2.0

1.3. GWT-шный модуль с ASP.NET-овской частью будут взаимодействовать по протоколу JSON-RPC

1.4. GWT часть должна без проблем запускаться как изнутри ASP.NET, так и в hosted mode, для того, чтобы не иметь проблем с отладкой.

2. Требования к интерфейсу контакт-листа

2.1. Контакт лист должен отображать список контактов

2.2. Контакт лист должен показывть кол-во отображаемых контактов

2.3. Контакт лист должен позволять выбирать одного из показанных контактов

2.4. Выбранный контакт отображается в развернутом виде, остальные контакты – в свернутом.

2.5. «Свернутый» контакт показывает

2.5.1. Состояние контакта – онлайн или офлайн в виде иконки

2.5.2. Псевдоним (nickname) контакта

2.6. «Развернутый» контакт показывает

2.6.1. Псевдоним контакта

2.6.2. Состояние контакта – онлайн или офлайн в виде разного цвета его псевдоним – зеленый (онлайн) или серый (офлайн)

2.6.3. Кнопку «скрыть»

2.7. «Развернутый» контакт можно скрыть по нажатию соответстующей кнопки и тогда он пропадает из списка контактов.

2.8. Для того, чтобы показать список контактов, на странице должна быть кнопка «показать все контакты»

Для разнообразия, кнопку «показать все контакты» мы поместим за пределам GWT-модуля, чтобы продемонстрировать возможности модуля по интеграции с «внешим миром»

Прототип контакт-листа

Потратив 5 минут с Microsoft Visio, делаем вот такой прототип нашего приложения:

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

Пока все просто и ясно, huh? Теперь нам нужно сделать заготовку для нашего проекта.

Структура приложения

Если грубыми мазками – то приложение будет выглядеть вот так:

На ASP.NET-овском сайте расположена страница default.aspx, в которую встроен модуль GWT ContactListModule. Модуль общается с веб-приложением через JSON-RPC интерфейс, опубликованный на странице cl_service.ashx.

Вам понадобится

Чтобы собрать приложение своими руками, вам понадобятся клей,ножницы,бумага следующие инструменты:

  1. Microsoft Visual Studio 2005 (можно Express Edition - http://www.microsoft.com/express/vwd/)
  2. Eclipse IDE - http://www.eclipse.org/downloads/
  3. Google Web Toolkit - http://code.google.com/webtoolkit/gettingstarted.html

Первые шаги

Итак, перво-наперво создадим структуру приложения


mkdir ContactListModule
cd ContactListModule
\projectcreator -eclipse ContactListModule
\applicationCreator -eclipse ContactList org.acme.client.ContactListModule

  • При помощи Visual Studio 2005 создаем пустой веб-сайт. Назовем его «ContactListSite»
  • Создаем на веб-сайте пустую страницу default.aspx – место, где затем разместится наш GWT модуль
  • Подключаем какую-нибудь JSON-RPC библиотеку. Я для примера буду использовать JayRock JSON-RPC. Взять ее можно здесь: http://jayrock.berlios.de/. Вам нужно добавить к сайту ссылки на сборки Jayrock.dll и Jayrock.JSON.dll, как сказано в инструкции: http://jayrock.berlios.de/#quick-start. Также создайте заготовку для JSON-RPC service и назовите ее cl_service.ashx. Пусть этот сервис лежит в корне сайта, рядом с default.aspx

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

На этом вступительная часть закончена. В следующей серии - дизайним GWT модуль в духе Model-View-Controller.

среда, 6 февраля 2008 г.

Что работает и что не работает:: Здравый смысл - это здорово

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

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

А вспомните теперь желание заказчика «резать косты», только потому, что «дорого». И вспомните врожденный оптимизм программиста, из-за которого он запросто назовет сроки реализации задачи раза в 2-3 меньшие, чем получается.

Здравый смысл – это способность в лесу видеть и каждое дерево, и весь лес. И не видеть в лесу, например, пустыни. Это когда ты не обманываешься словами «процесс», «методология», а просто тихонько смотришь и замечаешь, какая идея работает, а какая-не работает. И используешь чужие, хорошо систематизированные советы, которые кто-то назвал методологией, по назначению – как некий reference, с которым сверяешься периодически – все ли учел? Ничего не забыл?

вторник, 5 февраля 2008 г.

Полезная утилита

Тестирование скорости загрузки страниц + советы по оптимизации.
http://webo.sunnybear.ru/

суббота, 2 февраля 2008 г.

DllMain это особое место. Это Зона

Порадовало, в блоге Not-a-kernel-guy: Драматическая история о правилах DllMain

"Точка входа в DLL, так же как и точка входа в программу, - это очень специальное место. Зона. В Зоне действуют свои правила касательно того, что можно делать, а что делать нельзя. В Зоне можно инициализировать локальные данные DLL, можно создавать критические секции. В Зоне нельзя динамически загружать другие Модули или создавать потоки. Любой Сталкер знает и следует правилам Зоны. Все остальные рано или поздно нарушают правила и расплачиваются за это."

Читаем и радуемся :-)

пятница, 1 февраля 2008 г.

Программирование и монотеизм, с примерами на Java

Потырено из LJ: ru_java

Монотеизм
Религия, основанная на вере в единого Бога. Аналог в программировании это, естественно, синглтон:


Lord myLord = Lord.ohMyLord();

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

суббота, 26 января 2008 г.

Превращаем любую поверхность в touch screen при помощи Wii Remote

Это магия :-)

http://www.cs.cmu.edu/~johnny/projects/wii/

посмотрите, не поленитесь - пара светодиодов + wii remote + небольшой софт - и можно делать touchscreen из всего :)

четверг, 24 января 2008 г.

Человеческий фактор в проектировании систем. Otvety.*.ru

Вот есть две системы - http://otvety.mail.ru/ и http://otvety.google.ru/

Одна - интересная, удобная и полезная, а другая - бесполезная, некрасивая, дурацкая.

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

Домашнее задание: почему получились такие разные результаты?

суббота, 19 января 2008 г.

CSS для новичков - позиционирование

Нашел наконец идеальную шпаргалку про позиционирование в CSS - "Позиционирование за 10 шагов" http://www.barelyfitz.com/screencast/html-training/css/positioning/.

А по поскольку задачи по HTML верстке всплывают редко, все время забываю все эти премудрости.

Microsoft открывает исходные коды .Net Framework

Наконец-то свершилось - исходники .Net Framework опубликованы, отладка со вклбченными иходниками возможна в VS2008. Не нужно больше ковырять фреймворк .Net Refelector-ом :-)

Побробности можно прочитать в блоге ScottGu.

Исходники открыты под Read-Only Reference License. То есть смотреть можно, изучать можно, копировать и использовать нельзя. Это не очень настоящий OpenSource, но все-таки.

четверг, 17 января 2008 г.

Еще паники: Microsoft хочет получить патент на биометрический мониторинг

http://technology.timesonline.co.uk/tol/news/tech_and_web/article3193480.ece

По версии журнала "The Times": Microsoft подала патентную заявку на систему, которая будет предоставлять менеджерам биометрическую информацию об их подчиненных: давление, температура, выражение лица и т д. прелесть какая...

среда, 16 января 2008 г.

Microsoft Volta

В ряду JavaScript-компиляторов пополнение: технология Microsoft Volta (возможно, это новое имя Script#-а)

Поглядим-поглядим...

QuickStart: http://labs.live.com/volta/docs/quickstart.aspx

О монетизации

Свершилось чудо! Сегодня, спустя 9 месяцев, 12 дней и 79 написанных сообщений, я заработал на adsense, которая висит в блоге свой первый доллар :-). То есть еще лет 60 активной работы, и я получу свой первый чек на стобаксов. Вот так-то, вот так-то...

Социальные сети: пользователь больше не беспокоится за свою privacy?

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

Например, пользователю проекта mirtesen.ru предлагают ввести свой домашний адрес с точностью до дома. Очень красиво получается - карта такая аккуратная, на ней домики а вокруг домиков такие фотки юзеров и можно устраивать "блог дома номер 18 по онежской улице".

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

А началось все с Одноклассников - на них есть твои имя-фамилия и друзья твои есть, тоже с именами и фамилиями. Можно много придумать идей, как эту информацию использовать во вред (оставим эту задачку читателю на самостоятельную проработку).

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



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

уменьшают сопротивление раскрывать личную информацию, причем такое . И это, как думается, может быть опасным.

PS: Еще к копилку конспирологии: как известно, любая информация, которую ты исторг из себя во внешний мир, потенциально может попасть в недобрые руки. Так что я могу представить себе некий СОРМ будущего, где социальные сервисы типа тех же одноклассников должны будут в рамках например борьбы с организованной преступностью предоставлять ФСБшникам информацию о связях между пользователями и т д и т п. Так что бойтесь френдится с вашими наркодиллерами :-)

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

GWT + ASP.NET Ajax = ?

Провозился сегодня какое-то время, пытаясь встроить модуль, написанный на Google Web Toolkit внутрь приложения, написанного на ASP.NET 2.0 + Ajax Extensions. В мозилле работает - в MSIE падает со словами "operation aborted". Проблемы я так понимаю с инициализацией DOM-дерева - там какие-то заморочки с таймингом.

Оказалось - виноват GWT. К счастью, баг поправили буквально в декабре выкатили GWT 1.4.61, где все уже работает нормально. Зато теперь я могу с уверенностью утверждать, что оно совместимо с ASPNET-ом. Правда, на серверной стороне для транспорта пришлось прикрутить JayRock JSON-RPC, а на стороне GWT вообще писать json-овские реквесты руками. Но тем не менее - работает, и работает весьма.

воскресенье, 6 января 2008 г.

Материалы с GWT Conference 2007

http://voicesthatmatter.com/gwt2007/presentations/

Unit Tests - Fuzzers, repeatability and so on

http://blog.not-a-kernel-guy.com/2007/12/25/273

Себе на почитать - заметка о повторяемости результатов юнит-теста. Важная, сам не раз на эти грабли наступал. И еще покурить на тему Fuzzers

"Юнит тесты, в отличие от многих других видов тестирования, обладают одной замечательной особенностью. Они обеспечивают практически 100% (a в теории - так точно 100%) повторяемость результатов. Грубо говоря, после успешного прогона тестов можно с уверенностью говорить, что покрываемые тестами сценарии работают. Гарантированная повторяемость важна для обнаружения быстрого регрессий, рефакторинга кода и множества других вещей. Как обычно, окунание в реальность сильно портит эту радужную картину."