02.01.2012

Samsung Galaxy S2

Подарил себе на новый год новый телефон.

Начальный интерфейс не показался мне каким-то сильно удобным, поменял его на Go Launcher и Go Contacts.


Расхождения с ожиданиями:
1. В телефоне 2Гб "внутренней" памяти для установки программ и еще 12 для данных (тоже где-то внутри), вместо ожидаемого общего объема, куда можно программы ставить (в общем не критично, в большинстве случаев даже удобно).
2. Нет аппаратной кнопки поиска.

Ощущения:
1. Работает быстро, это факт (хотя на стандартном интерфейсе ощущались некоторые задержки в отображении эффектов, именно задержки на 0.3-0.5 сек, не тормоза).
2. Фотокамера 8 Мегапиксеоей, но качество фотографий от этого каким-то особым не становится, SonyEricsson C902 фотографировал значительно лучше с 5-ти мегапиксельной камерой. Качества достаточно для того чтобы фотографировать тексты или делать какие-то снимки, когда больше под руками ничего нет, но вообще лучше иметь с собой нормальный фотоаппарат/видеокамеру.
3. Звук громкий, классный, чистый.
4. Время жизни аккумулятора: на просмотр 1.5-часового фильма ушло 19% заряда аккумулятора (т.е. грубо хватит на 7.5 часов просмотра фильмов).
5. Следы от пальцев на экране конечно остаются, но нужно присмотреться, чтобы их заметить.
6. Очень яркая вспышка.
7. Очень понравился экран - видео показывает красочно, тексты - четко.

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

15.12.2011

Crashplan unlimited backup

Crashplan - really unlimited storage.

Timofey - me, Tom N. - support staff.

Chat with support:
Tom N. has joined the room
Tom N.
Hi there. How can I help today?
timofey
Can I store large amount of data in unlimited unlimited plan? Large is about 1-3TB per server for 40 servers.
Tom N.
I would recommend CrashPlan PRO unlimited. It truly is unlimited. 3TB for 40 servers is just fine. :)
timofey
Can you answer - how you will save it? Cost of storage 3TB of data much more then $8/mounth
Tom N.
We charge $7.49 per month per machine.
timofey
yes, $8 is round($7.49) :)
timofey
Tom N.
I don't quite understand your question.
timofey
I will pay to crashplan $7.49/mounth
timofey
prime cost of storage 3TB of data much more then $8.
timofey
Why you will change me lower then you will pay for storage my data?
Tom N.
OK, well, I don't have that information. All I can give you is what we charge for the service.
timofey
thanks

12.12.2011

О надежности паролей

Предистория: Знакомая потеряла пароль, попросила восстановить из базы QIP, там хранится только md5-хеш, при полном изначально отсутствующем опыте и т.п. вместе с изучением того как это делается подбор занял меньше суток на домашнем компьютере. Потом попробовал на амазоновском - там подбор занял 3 часа.

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

Детали:
Если известен MD5-хеш пароля, то 1-7 символьные пароли вроде: маленькие буквы, цифры ломается полным перебором за 9 секунд, 8-символов - за 3 часа на мощном сервере, 20 часов на ноутбуке.

Пароли с буквами в разном регистре, цифрами, спец. символами:
6 символов - около 40 минут
7 символов - 77 машинных часов (календарных может быть меньше, при аренде нескольких серверов).
8 символов - 7300 машинных часов.

Стоимость такого переборного машинного часа в amazon: от 23 рублей.

Итого, максимальна стоимость подбора пароля в пересчете на рубли:
Стоимость подбора пароля при аренде серверов в amazon:
маленькие буквы и цифры 8 символов: 60 рублей или просто подождать на домашнем компе.
со спец. символами, 7 символов: 1600 рублей
со спец. символами, 8 символов: 150 тыс. рублей

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

25.11.2011

whoosh-appengine–полнотекстовый поиск для Google App Engine

На маленьких примерах работает хорошо, есть записей какое-то ощутимое количества или какие-то из них большие (не выяснял что именно) – просто перестает работать с исключением.
ResponseTooLargeError: The response from API call datastore_v3.RunQuery() was too large.
Для проба предложил ему проиндексировать пробную базу писем около 1000 штук, меньше чем по 30кб текста (обычно значительно меньше).
После 200-300 штук это исключение вылезало что при записи, что при попытке чтения из хранилища, при этом по объему индексов понятно, что там скорее всего ничего особо небыло (меньше 2-3 мегабайтов суммарно все объекты).
P.S. возможно это проблема Python 2.7 в режиме threadsafe: yes, видел описание похожего бага.
https://github.com/tallstreet/Whoosh-AppEngine
http://code.google.com/p/googleappengine/issues/detail?id=6282
Update: Попробовал использовать после исправления ошибки - теперь GAE нехватает памяти для работы с индексом. Пока пользуюсь Google Cloud SQL, жду полнотекстового поиска.

Обработать все данные в Google App Engine

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

делается это просто:

1. Скачать с http://code.google.com/intl/en/appengine/downloads.html файл “MapReduce Bundle”

2. Положить папку mapreduce из архива в корень проекта

3. Создать файл mapreduce.yaml с описанием обработчика, например:

mapreduce:
- name: onetimetask
  mapper:
    input_reader: mapreduce.input_readers.DatastoreKeyInputReader
    handler: pages.OneTimeTask.process
    params:
    - name: entity_kind
      default: EMail
    - name: shard_count
      default: 2

означает, что обработчиком будет функция process в модуле pages.OneTimeTask, в функцию передается  одно значение, в данном случае это ключ объекта типа EMail, обработку вести в два потока.

4. Создать функцию, указанную в параметре handler, например

def process(key):

    logging.debug(str(key))

5. Зайти на страницу /mapreduce и запустить задание кнопкой.

Более подробное описание

http://code.google.com/p/appengine-mapreduce/wiki/UserGuidePython

16.11.2011

Скрыть содержимое буфера от программ, следящих за его изменением

WIN_API

1. Зарегистрировать формат "Clipboard Viewer Ignore", формат должен называться именно так, как тут написано.

CF_CLIPBOARD_VIEWER_IGNORE = (CLIPFORMAT)RegisterClipboardFormat(_T("Clipboard Viewer Ignore"))

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

SetClipboardData(CF_CLIPBOARD_VIEWER_IGNORE, “MyProgram”);
SetClipboardData(CF_TEXT, content);

 

Для C#:

DataObject d = new System.Windows.Forms.DataObject();

doData.SetData("Clipboard Viewer Ignore", false, “MyProgram”);

doData.SetText(“Content”);

Clipboard.SetDataObject(doData);

09.11.2011

Google Cloud SQL

Пару дней назад получил доступ к тестирование Google Cloud SQL.

Выглядит это как собственные полноценные MySQL-сервера 5.1, к ним можно подключаться из Google App Engine и (через специальный Java-Driver) снаружи. Есть импорт и экспорт через файлы Google Storage for developers.

Есть доступ к Web-консоли, где можно создавать новые сервера, изменять настройки имеющихся и выполнять произвольные SQL-запросы.

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

Работает полнотекстовый поиск (собственно для него сейчас MySQL и нужен).

Подключение из Python выглядит так:

conn = rdbms.connect(instance='blabla:bla', database='db_name')

Запросы к базе выполняются через стандартный Python-интерфейс DB-API 2.0, например так:

cursor = conn.cursor()
        cursor.execute('INSERT INTO `email` (`id`, `time`, `from`, `to`, `subject`, `comment`, `text`) VALUES (%s, %s, %s, %s, %s, %s, %s)',
                [email.id(), email.Time.strftime('%Y-%m-%d--%H-%M-%S'), email.From, email.To, email.Subject, email.Comment, email.Text])
        cursor.close()
        conn.close()

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

Мне понравилась возможность совмещать нереляционное и реляционное хранилище.

Про скорость работы пока ничего не понятно – объем данных пока маленький.