вторник, 9 февраля 2010 г.

KeePass: удобный и безопасный способ хранить пароли

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

Одна из таких программ это KeePass
Достоинства:
  1. Бесплатная
  2. Известная - про нее много пишут и многие ей пользуются
  3. Open-source - это позволяет надеяться что откровенной лажи в криптографии там нет
  4. Есть под Windows и Mac ,причем использует одну и ту же бинарно-совместимую базу , т.е. базу можно открыть на любой ОС
  5. Есть русификация ,и поддержка еще кучи языков
  6. Есть куча плагинов (бэкап и прочее)

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

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

DropBox - удобная синхронизация

Уже месяц как наткнулся и с удовольствием пользуюсь сервисом DropBox. Он позволяет синхронизировать файлы между разными машинами через интернет, причем делает это очень не навязчиво.
Бесплатно сервис предоставляет 2Г места , что по моему более чем достаточно.

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

Пользовался версиями для Windows, Mac и iPhone ,а так же web интерфейсом.

четверг, 26 ноября 2009 г.

Sharepoint Survey raise "You are not allowed to respond again to this survey"

В силу ряда обстоятельств мне необходимо было заполнить Survey ответами от разных людей , при этом настройка "Allow multiple responses?" должна быть в "No".
Заполнял примерно вот так:
var item = list.Items.Add();
var Author = web.SiteUsers[@"DOMAIN\user"];
item["TestQuestion"] = "TestAnswer";
try
{
    item["Author"] = Author.ID;
    item["Editor"] = Author.ID;
}
catch
{}
item.Update();
т.е. в теории, такой алгоритм приводил бы, к тому что ответы, даже от несуществующих пользователей, не пропадут.
Но получается все интереснее. Если создается хотя бы один ответ от пользователя под которым работает программа, в моем случае это "SystemAccount", то после этого уже никакие ответы создать нельзя. Даже если "Author" и "Editor" выставленны верно получаем все равно "You are not allowed to respond again to this survey".
Оказывается перед тем как засунуть данные в базу WSS вызывает сторную процедуру:exec proc_UserHasDataItems в которую передает идентификатор текущего пользователя (того под кем работает приложение) и лишь в случае успеха вызывает proc_AddListItem

Вот так вот.

среда, 4 ноября 2009 г.

Uninstall PowerShell 1.0

Потребовалось мне обновить PowerShell стоящий у меня, скачал новый отсюда, попытался поставить, а он меня просит удалить сначала предыдущую версию.
Своего значка uninstall я не нашел, и в "Add Remove Programs" его нет.

Бился бился, но оказалось что достаточно удалить ключ реестра :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell

И новая версия прекрасно ставится.

пятница, 23 октября 2009 г.

GAE: Mail API - Получение и отправка почты

Не так давно Google анонсировал, что приложения для Google App Engine (GAE) могут не только отправлять почту, но и принимать ее.
Документация на Mail API, в которой описывается механизм принятия сообщении, пока есть только на англииском.

Вот небольшой примерчик:

Пример принимает почту посланную на адрес вида string@supermailapp.appspotmail.com и возвращает его отправителю.

Тогда app.yaml будет выглядеть так:
application: supermailapp
version: 1
runtime: python
api_version: 1

inbound_services:
- mail

handlers:
- url: /_ah/mail/.+ 
  script: handle_incoming_email.py 
  login: admin

а обработчик вот так:

import logging
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import mail
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler

class MyInboundMailHandler(InboundMailHandler):
 def receive(self, mail_message):
  logging.info('Received greeting from %s: %s' % (mail_message.sender,mail_message.body))
  mail.send_mail(
   sender=mail_message.to,
   to=mail_message.sender,
   subject=mail_message.subject,
   body=mail_message.body)
  logging.info('Sended answer to  %s'% mail_message.to)

application = webapp.WSGIApplication([MyInboundMailHandler.mapping(),], debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

Всё очень просто.

четверг, 22 октября 2009 г.

SQL: Куда деваются коннекции

При отладки приложения бывает полезно узнать сколько в текущий момент установлено коннекции к SQL.

Вот запрос который показывает подключения ко всем базам на SQL-сервере:

declare @t TABLE
 (
     SPID INT, 
     Status nVARCHAR(100) NULL, 
     Login SYSNAME NULL, 
     HostName SYSNAME NULL, 
     BlkBy SYSNAME NULL, 
     DBName SYSNAME NULL, 
     Command VARCHAR(32) NULL, 
     CPUTime INT NULL, 
     DiskIO INT NULL, 
     LastBatch nVARCHAR(100) NULL, 
     ProgramName nVARCHAR(100) NULL, 
     SPID2 INT,
     requestid int 
 )

insert @t exec sp_who2

select ProgramName, COUNT(ProgramName) as count from @t  GROUP BY ProgramName ORDER BY count



Проверено на MS SQL 2005.

SQL: INSERT OR UPDATE

Часто бывает ситуация что надо обновить данные в таблице если они там уже есть ,а если нет то добавить их. Делается достаточно просто:

IF (EXISTS (SELECT ID FROM MyTable WHERE ID = 123))
begin
     UPDATE MyTable  SET MyValue = 555 WHERE ID = 123
end
else
begin
     INSERT INTO MyTable (ID, MyValue) VALUES(123, 555)
end

среда, 21 октября 2009 г.

VMWare Virtual Server 1.0.6 -> VMWare ESXi 4: Экономим дисковые ресурсы сервера

Оказывается VMWare Converter по умолчанию преобразует диски в Flat (Thick). Если на VMWare Server диск был не преалоцированым, то после конвертации он станет Flat. Т.е. например при формировании виртуальной машины было указано 40G, но реально использовано лишь 10G, и на VMWare Server файл с диском занимал около 10G, то после перевоза на ESXi он займет все 40G. Так что если вам, как и мне, жалко дисковых ресурсов (особенно если используются снэпшоты), то не забывайте при конвертации выставлять Thin для дисков.

понедельник, 19 октября 2009 г.

VMWare Virtual Server 1.0.6 -> VMWare ESXi 4: Аккуратней со снэпшотами

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

пятница, 16 октября 2009 г.

Радио on-line

Нашел приятный сервис в котором представлены разные on-line радиостанции. Удобно что большой выбор и единообразный интерфейс.
Вот он

VMWare ESXi 4 Server вместо VMWare Virtual Server 1.0.6

Долгое время для создания виртуальных машин я пользовался VMWare Virtual Server, он бесплатен, легко ставится под 32х и 64х битный версии Windows 2003, имеют вполне удобную консоль и возможность удаленного управления скриптами. Пробовал я и версию 2.0, но мне не очень понравилась идея web-интерфейса, посему я предпочел остаться на версии 1.0.6.
Недавно я узнал что VMWare ESXi стал бесплатным и решил опробовать его на одном из своих серверов (Dell PowerEdge 1950).

Процесс установки ESXi чрезвычайно прост и, думаю, сказать мне тут практически нечего, отмечу лишь одну маленькую трудность которая привела к тому что ставить ESXi мне пришлось дважды. В первый раз я выбрал 0-вой HDD и после перезагрузки увидел опять свой Windows, можно было конечно по колдовать, но мне проще было поставить ESXi еще раз уже на 1-ый HDD.

После установки можно зайти на сервер по http и скачать VI Client, все остальные настройки можно делать уже через него.

Основная задача у меня была перемещение уже существующих под Virtual Server машин в ESXi, для этого существует отдельный тул - VMware vCenter Converter, с помощью которой можно с конвертировать машину и залить ее на сервер. Работает весьма просто и отдельных слов не заслуживает. Работает правда достаточно долго, машина с двумя дисками по 20G (реальный размер файлов не превышал 15G) заливалась около трех часов, но возможно что скорость зависит от загрузки сети и исходной машины т.к. коллеги рапортовали о более высоких скоростях.

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




Интересен тот факт что VMware vCenter Converter при переносе машин не процессит (или не полностью) конфигурационный файл вары - ".vmx". Это приводит к тому что часть настроек которые были в старом сервере и отсутствуют в интерфейсе нового - работают, но изменить их из UI не получается. Сначала я было расстроился что из за того что у меня в старом сервере была включена галочка мне придется заливать вару снова ,но оказалось что можно скачать этот самый vmx файл себе на компьютер ,подправить и залить обратно.



Вызывается этот чудный диалог нажатием правой кнопки мыши на "datastore1" и выбором пункта "Browse Datastore"

О дальнейших впечатлениях расскажу позже.

воскресенье, 27 сентября 2009 г.

Failure decoding embedded permission set object

Рефакторил код и столкнулся с ошибкой при выполнении автоматических тестов "Failure decoding embedded permission set object", долго курил, что же я такого натворил, и удивлялся описанию ошибки в гугле.
Оказалось все просто , я использую SharePoint 2003 и SharePoint 2007, при этом для удобства сборки приложении на машинах где нет этого самого SharePoint у меня в системе source control'а лежат, в разных папочках, 2 версии библиотеки Microsoft.Sharepoint.dll, ну и как водится по умолчанию копируются при сборке в общий bin. Причем в одном солюшене у меня есть проекты залинкованые на новую (WSS3) и проекты линкующиеся на старую версию (WSS2).
При выполнении авто тестов на виртуальную машину копируется весь bin без разбора.
Оказалось что из за смены порядка сборки проектов в bin вместо новой версии попала старая (WSS2), что и вызывало такую необычную ошибку.
Вылечилось убиранием этой библиотеки из bin ,при этом каждая версия берет ту dll которая уже есть в системе.

суббота, 26 сентября 2009 г.

Профсоюз програмистов

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

Ссылки по теме:
Хабр - "Профсоюз программистов. Реальность?"
Длинный тред дискуссии на SQL.RU

Все остальное как то мало интересно и не информативно.

пятница, 24 июля 2009 г.

Начальство и подчиненные

Лучший начальник это тот, который даже не задумывается над тем как его приказы будут воплощаться в жизнь. Должно быть как в армии - "С завтрашнего дня все исходники должны быть написаны справа налево, чтобы нашим израильским коллегам было их проще читать!"
А хороший подчиненный это тот кто придумает как и начальство удовлетворить и продукту не очень сильно повредить.
Но таких подчиненных мало...

вторник, 14 июля 2009 г.

GTD Попытка найти софт

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

Недавно услышал о методике приведения множества мелких дел в порядок - "Getting Things Done (GTD)" и решил испробовать на себе. Первым делом захотелось найти удобный софт для этого , требования к софту достаточно простые - варианты под iPhone и Windows, возможность синхронизации через интернет, бесплатность.

Вот краткие отзывы о том что посмотрел:


  1. myLifeOrganized - есть версия под Windows и Windows Mobile при этом есть, как платная, так и бесплатная версия. Я скачал обе, разницы почти не заметил. Разрабатывают русские ребята, но по умолчанию поддержки русского языка я не нашел. Пока использую именно эту десктопную версию с целью посмотреть подходит ли мне вообще эта методика. Из первых впечатлении - очень перегруженный и не вполне понятный интерфеис содержащий огромное количество контролов. Основные для меня минусы - нет версии для iPhone,нет синхронизации через inet (возможно есть в платной версии), платная.

  2. Things - посмотреть к сожалению не смог ,но в инете очень хвалят. Есть версия для iPhone и Mac, нет для Windows,нет синка с инетом, платная ($10 за iPhone и $50 за Mac).

  3. OmniFocus - могу сказать то же что и про Things - только Mac и iPhone и приличная цена (обе версии вместе почти $100)

  4. Remember The Milk - в начале обрадовался - бесплатный online-сервис, бесплатная версия для iPhone. Но после того как поигрался понял что не то. "Бесплатное" приложение для iPhone на деле оказывается работает лишь 15 дней, при этом требует постоянного подключения к инету. К тому же весьма скудные функции, например у меня так и не получилось создавать подзадачи для задач, задавать контекст и прочее, да и веб морда не удобная.

  5. GTD-Free - бесплатная и open-source. Сразу как поставил испугался уж очень перегруженому интерфейсу, с первого раза даже не понял как мне просто создать элементарную задачу типа "Сходить за пивом" выставить ей приоритет и контекст. Так же само собой нет версии для iPhone и снихронизации. Зато бесплатно.


  6. Appigo To Do List - смотрел бесплатную версию для iPhone. Вроде неплохо ,но оказалось что бесплатная версия поддерживает всего 10 задач, что делает ее полностью бесполезной, а платная стоит $10. Умеет синкаться с online-сервисами Toodledo и Remember The Milk (требует платный аккаунт).


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

пятница, 5 июня 2009 г.

Russian podcasting

Оказывается русский подкстинг тоже существует, живут они тут.

Я послушал несколько и спешу поделится своим скромным мнением:

1. RADIO-T неплохой подкаст по всяким ИТ темам. Постоянно рекламируют Яндекс и Твиттер в несколько завуалированной форме.
2. Еженедельный подкаст от Umputun (US, Чикаго) Тоже ИТ ,поскучнее предыдущего (кстати автор участвует и в RADIO-T) т.к. автору не с кем дискутировать.
3. compulenta.ru - новости ИТ, сухое изложение новостей, что то типа автоматической читалки новостей.
4. Янки после пьянки - Ребята развлекаются, особой темы и веселья я не понял. Сил дослушать до конца даже один подкаст не хватило.
5. Сиськи - Письки Шоу - фривольные разговоры на немного компьютерную тематику, иногда смешно
6. PODслушивание Анатолия Вассермана - Анатолий человек уважаемый, но подкаст его надо ставить в детском саду перед сном. Очень монотонно и занудно.
7. АЭРОСТАТ - очень качественный подкаст ведомый БГ о музыке и с музыкой.

Касательно ИТ-подксатов рекомендовал бы только РАДИО-Т.

четверг, 14 мая 2009 г.

Опоздания на работу

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

Режим работы моего отдела очень гибок, время прихода на работу у нас до 13:00. При этом ровно половина сотрудников ну никак не может приходить во время. Вот замечательный лог СМС-сообщений от самого главного опоздуна.



Что бы вы сделали с таким человеком?

понедельник, 13 апреля 2009 г.

Как определить x64 или x86 у нас OS?

Нужно определить под чем запущено наше 32битное приложение ,под 32х-битной Windows или по 64.
Пока ничего умнее не придумал как делать так:


def IsItx64():
import _winreg
import win32con
try:
RegPath = r"SOFTWARE\Wow6432Node"
hKey = _winreg.OpenKey (_winreg.HKEY_LOCAL_MACHINE, RegPath,0, win32con.KEY_READ | win32con.KEY_WOW64_64KEY)
except:
return False
return True

пятница, 10 апреля 2009 г.

Редирект в SharePoint

Появилась задача перенаправлять обращения по некоторым URL в SharePoint'е на другие URL в нем же. Оказывается люди такое уже делают.

Получилось и у меня:

Делаю редирект с урла вида
 http://server/TestRedirectionSharePoint/ 

на
 http://server/NewRedirectionSite/ 




using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Text.RegularExpressions;
using Microsoft.SharePoint;

namespace SP2007RedirectExample
{
public class RedirectModule : IHttpModule
{
public void Dispose()
{ }

public void Init(HttpApplication context)
{
context.BeginRequest +=
new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
string requestUrl = app.Request.Url.ToString();

if (requestUrl.Contains("TestRedirectionSharePoint"))
{
var destinationUrl = requestUrl.Replace("TestRedirectionSharePoint", "NewRedirectionSite");
app.Response.AddHeader("Location", destinationUrl);
app.Response.StatusCode = 301;
}
}
}
}


Редирект в браузере при этом работает прекрасно , а вот когда мы пытаемся открыть офисный документ лежащий на SharePoint'е то в случае если по оригинальному пути он существует ,то открыть будет старый документ , а если не существует то тот документ на который указал редирект.

четверг, 9 апреля 2009 г.

Публикация исходных текстов в блоге

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


public void Init(HttpApplication context)
{
context.BeginRequest +=
new EventHandler(context_BeginRequest);
}