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

HOWTO: post source code into blogger

Как написать пост, содержащий исходный код?
Задача решается в три шага
  1. Получить хтмл код для c раскрашеным кодом. Для C++, C#, VB, HTML, XML, T-SQL можно использовать csharpformat (поставить галочку embed stylesheet). Больше количестов языков поддерживает Сервис форматирования исходников на основе Google App Engine.
  2. Для коректного отображения необходимо вставлять полученый хтмл в пост как одну строку. Копируем его Notepad++, и обьединяем строки - Edit->Join Line (Ctrl-J).
  3. Вставляем полученый результат в пост (в режиме редактирования исходного текста поста)

Save blob from database into a file

Програмисту часто приходиться писать достаточно тривиальные куски кода, на которые и время жалко тратить(а там могут быть последовательные вызовы к редко используемому/слабознакомому API ) и в отдельные библиотечки выделять не хочеться. Повторное использование такого кода возможно на основе code snippets.
Code snippet - кусок повторно используемого кода, функция, или несколько взаимосвязаных ф-ций. Он относительно небольшого размера, самодостаточен, выполняет одну задачу и легко интегрируется в проект с помощью минимальный работы напильником. Основное преимущество подхода - код очень просто интегрировать в проект, нету лишнего кода и зависимостей, можно быстро подправить форматирование и code convention. В визул студии есть даже поддержка для библиотек таких Code snippets
Под тегом "code snippets" буде выкладывать такой код.

Как не странно, учитывая что с++ основной язык програмирования, первый сниппет будет на c# и описывает работу с базой данных и BLOB полями в ней. Этот код был написан пару недель назад для автоматизации рутины, шарп и языка типа питона тут более применимы.

Получить BLOB поле (небольшой файл) из базы данных (MSSQL) и сохранить его в файл.
для использования заменить параметры в connection string, SQL и путь к файлу с результатом. Данный код предпологает, что sql вернет только один файл за раз, но переделать на обработку нескольких файлов его очень просто.
   1:  public void BLOB2File()
   2:  {            
   3:      SqlConnection Conn = new SqlConnection("server=SERVERNAME;uid=USERNAME;pwd=PWD;database=DB_NAME");
   4:      SqlCommand Cmd = new SqlCommand("SELECT FileName, FileImage FROM TARGET_TABLE WHERE (FILE_ID = NUMBER", Conn);
   5:      Cmd.CommandType = CommandType.Text;
   6:      Conn.Open();
   7:      SqlDataReader Reader = Cmd.ExecuteReader(CommandBehavior.CloseConnection);
   8:   
   9:      bool rdSatte = Reader.Read();
  10:   
  11:      FileStream FStream = null;
  12:      string str = Reader["FileName"].ToString();
  13:      FStream = new FileStream(@"c:\temp\" + str, FileMode.OpenOrCreate, FileAccess.Write);
  14:      byte[] Binary = null;
  15:      
  16:      Binary = (Reader["FileImage"]) as byte[];
  17:   
  18:      MemoryStream MStream = new MemoryStream(Binary);
  19:      BinaryWriter BWriter = new BinaryWriter(FStream);
  20:      const int ChunkSize = 100;
  21:      int SizeToWrite = ChunkSize;
  22:      for (int i = 0; i < Binary.GetUpperBound(0) - 1; i = i + ChunkSize)
  23:      {
  24:          if (i + ChunkSize >= Binary.Length)
  25:              SizeToWrite = Binary.Length - i;
  26:          byte[] Chunk = new byte[SizeToWrite];
  27:          MStream.Read(Chunk, 0, SizeToWrite);
  28:          BWriter.Write(Chunk);
  29:          BWriter.Flush();
  30:      }
  31:      BWriter.Close();
  32:      FStream.Close();
  33:      FStream.Dispose();
  34:  }

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

M$ vs Google: что кому подходит

нарыл в нете линк на статью Back to Microsoft если коротко, то это достаточно интересное описание причин по которым программист, проработав год в гугле, переходит в M$ на позицию Dev Manager.
Вольный(в оригинал много букв, не осилил) перевод ниже:

Назад в Майкрософт
Наверное я первый, кто сделал это, как минимум первый в районе Сиэтла.
I think I am the first person in the Seattle/Kirkland area to do so, so this merits an explanation. Isn't Google an insanely cool place to work for? What about the free food???

И в гугле было приятно работать, практики, используемые там, достойны высшей оценки, и даже внедрения их в M$:
  1. peer-based review model - оценка работы на основание ревью от других разработчиков, коллеги понимают в работе намного больше, чем менеджеры(в оригинале - ввести в заблуждении менеджера проще, чем коллегу)
  2. Широкое участие работников во внутренней жизни корпорации. Существуют "комитеты рабочих" и не в виде говорильни, а как объединения активных людей, способных придумать и воплотить свои идеи - "lot of aspects of Google are ruled by committees of employees who are passionate about an issue, and are willing to allocate some of their time to have this issue resolved."
  3. Для достижения чего-либо в Гугле нужно уметь достигать консенсуса работая в "комитетах", решения про наём персонала, выделения ресурсов решаются в них, как консенсус нескольких игроков.
  4. Кормят
  5. Один день в неделю можно потратить на собственный проект
  6. Одна база кода, унифицированные code guides

Так что же не нравиться - история умалчивает, но многие вещие в большом Г не хороши и заслуживают улучшения, особенно глупая политика (прим. переводчика: обратная сторона комитетов?), малая производительность, не эффективная работа, некоторые по-настоящему глупо организованные вещи (and things that are plain stupid), описывать их тут бессмысленно, не в них причина. Я ушел потому, что Microsoft оказалась подходящим местом для меня. Мне нравятся разнообразные аспекты в разработке софта, но и бизнес аспекты люблю не меньше (прим. переводчика: вот она причина, в корпорации - коммуне программистов можно программировать, но нет возможности иметь хоть какой-то контроль над продуктом, похоже позиция девелопмент менеджера в этом плане приятней), я не могу писать код, технологичность которого становиться самоцелью, требуется понимание и знание его полезности для других, а единственный способ оценить - деньги, которое люди готовы заплатить за доступ к результатам труда (прим. переводчика: думаю это отнюдь не единственное мерило, но с точки зрения программиста,который получит денежку, достаточно приятное).

Простите фанаты опенссорса, ваш мир не для меня! (Sorry open source fanatics, your world is not for me!)

Софт в гугле разделен не две части. "Конфетка" - красивая веб обертка вокруг сервисов привлекающая пользователей и инфраструктура под ней. Все сервисы бесплатны и никто даже не может представить сколько людей было бы готово, ,например, платить по 5$ за доступ к GMail (прим. переводчика: продавать софт, как сервис, конечным пользователям и получать регулярную оплату, давняя мечта M$, не пора бы задуматься, почему из этой модели за столько лет не вышло ничего стоящего?). Для меня невозможность пользователей платить(добровольно) за проект делает его намного менее интересным (For me, this really does make the project less interesting if people are not willing to pay for it.)
Еще с трудом воспринимается корпоративная культура, которая оценвает крутость больше, чем качество. Я использую продукты гугла(Blogger, Gmail, Google Docs, Maps и т.д.) каждый день на протяжении года, и каждую неделю 10% фичей в них не работают, как должные. и эти 10% меняются каждую неделю. Это цена бесплатного софта и частых релизов, но для меня надежность значить больше чем "крутость"
В конце концов работая в гугле, я осознал, что роль индивидуального контрибутора меня больше не удовлетворяет и не хочется становиться менеджером в этой корпорации.
ГМенеджер (The Google Manager) - интереснейший феномен. С одной стороны им подотчетно много людей в разных подразделениях, которые постоянно шлют репорты перманентно занятому ГМенеджеру. С другой, за год я так и не разобрался, что же они делают? Мой лучший менеджер собирал отзывы на мою работу и слал их мне, худший не делал и этого. Иного, видимого мне, влияния на гугл они не оказывали.

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