*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

среда, 24 февраля 2010 г.

Простое понимание, что возвращает sizeof

Чтобы просто и понятно осознать, что возвращает sizeof в С++ для сложных составных типов (структур и классов) и сходу не вдаваться в детали выравнивания -- надо запомнить, что sizeof возвращает число, равное разности адресов двух соседних элементов массива, хранящего экземпляры вашего типа.

Печать контейнера с разделителями

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

Простейшее решение выглядит так:

#include <iostream>
#include <vector>

int main(int argc, char* argv[]) {
  int a[] = { 1, 2, 3, 4, 5 };
  std::vector<int> v(a, a + 5);

  for (int i = 0; i < v.size(); ++i) {
    std::cout << v[i];
    if (i < v.size() - 1)
      std::cout << ", ";
  }
  std::cout << std::endl;

  return 0;
}

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

#include <iostream>
#include <vector>

int main(int argc, char* argv[]) {
  int a[] = { 1, 2, 3, 4, 5 };
  std::vector<int> v(a, a + 5);

  for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i) {
    std::cout << *i;
    if (v.end() - i > 1)
      std::cout << ", ";
  }
  std::cout << std::endl;

  return 0;

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

#include <iostream>
#include <vector>

int main(int argc, char* argv[]) {
  int a[] = { 1, 2, 3, 4, 5 };
  std::vector<int> v(a, a + 5);

  typedef std::vector<int>::const_iterator iterator;
  for (iterator i = v.begin(); i != v.end(); ++i) {
    std::cout << *i;
    if (std::distance<iterator>(i, v.end()) > 1)
      std::cout << ", ";
  }
  std::cout << std::endl;
  return 0;
}

Шаблонный класс std::distance умеет рассчитывать расстояние между итераторами, и даже для тех, которые не поддерживают операции сложения и вычетания. Для таких итераторов будет делаться пошаговый обход от одного к другому для подсчета расстояния. На первый взгляд получается, что вычислительная сложность такого простого цикла будет уже не линейной, а квадратической. Еше надо таскать за собой описание типа дважды — чтобы создать итератор цикла и экземпляр std::distance. Например, Visual Studio 2008 требует указывать тип итератора для шаблона std::distance и не может "угадать" его из параметров (другие компиляторы могут вести себя иначе). Получается, на ровном месте навернули какую-то ерунду.

Но есть весьма элегантный способ, который позволяет и использовать итераторы, и сохранить линейную сложность алгоритма для контейнеров, которые не умеют эффективно вычислять расстояние между элементами (например, std::list), и писать красиво и компактно:

#include <iostream>
#include <vector>

int main(int argc, char* argv[]) {
  int a[] = { 1, 2, 3, 4, 5 };
  std::vector<int> v(a, a + 5);

  for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i) {
    std::cout << *i;
    if (i != --v.end())
      std::cout << ", ";
  }
  std::cout << std::endl;

  return 0;
}

Трюк с оператором "--" позволяет эффективно проверить на последний элемент контейнера.

суббота, 13 февраля 2010 г.

Проект поддержки библиотеки cmockery

Открыл проект для обкатки новых возможностей и "горячих" багфиксов для cmockery (замечательной библиотеки unit-тестирования для языка C) — cmockery staging.

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

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

Посты по теме:

четверг, 11 февраля 2010 г.

Формат 32nd (thirty seconds)

В работе с трейдинговыми системами наткнулся на необычный формат представления чисел, представляющих котировки ценных бумаг, в частности для государственных облигаций правительства США. Например, цена, представленная как 100-31 далеко не означает 100 долларов и 31 цент, или 100-127 вообще имеет мало смысла, так как в одном долларе всего 100 центов, а не 1000, и нет необходимости резервировать под дробную часть три знака после запятой.

Вся хитрость тут в том, что это не привычная десятичная запись. Например, 100-31 в десятичной форме равно 100.97265625, а 100-127 соответствует 100.40234375.

Итак, данный формат записи дробных чисел называется «thirty seconds» или 32nd. Для визуального удобства и явного отличия от десятичной формы вместо точки в качестве разделителя используется маленькая черточка. А само число имеет в общем следующий формат:

AAA.XXY

где AAA - это целая часть числа, имеющая такой же смысл, как и в десятичной системе. XX - это количество 1/32-х долей от дробной части, а Y - это количество восьмушек (1/8) в последней 1/32 доле. Несмотря на туманное описание, формула перевода числа AAA.XXY в формате 32nd в десятичный формат весьма проста:

D = AAA + (XX + Y * 1/8) * 1/32
или
D = AAA + XX * (1/32) + Y * (1/256)

то есть для числа 100-127 ААА=100, XX=12, Y=7, поэтому:

D = 100 + 12/32 + 7/256 = 100.40234375

Чтобы формула была корректной, XX может принимать значения только от 00 до 31, а Y от 0 до 7. Также при записи Y число 4 может быть заменено на +, а 0 на пробел. То есть 100-31 в полной форме записи равно 100-310, а 100-12+ эквивалентно 100-124.

Видно, что в трех дробных разрядах кодируется не 1000 долей, как в десятичной системе, а только 256 (32 * 8).

Итак, еще раз: если написано 100-12+, то это 100.39062500 в десятичной системе.

Формула обратного перевода из десятичного представления в формат 32nd не многим сложнее. Пусть D десятичное число:

A = TRUNC(D)
XX = TRUNC((D - A) * 32)
Y = ((D - A) * 32 - XX) * 8

TRUNC - это функция взятия целой части.

Если Y равно 0, то можно этот разряд не писать, а если 4, то можно заменить на +.

Компонента Y должна получиться обязательно целочисленной. Иначе, наличие дробной части у Y - это признак, того, что исходное десятичное число D не имеет отображения в формат 32nd (только 256 значений дробной части из всех 1000 возможных могут иметь соответствие в формате 32nd).

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

Формат странный, но знать его приходится.

вторник, 26 января 2010 г.

Распространенные заблуждения про банковские карточки

Работая долгое время области банковского ПО, а в частности по всяким электронным платежам, вместе с коллегами я составил мини-ЧАВО на тему банковских пластиковых карт. Многие вопросы очевидны, а некоторые могут быть весьма туманными. В России бизнес пластиковых карт набирает обороты, что приятно, и лучше быть подкованным по "матчасти".

Итак, 10 распространенных заблуждений.

1. Количество денег хранится на самой карте.

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

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

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

3. Банкоматы или терминалы для платежей подключены прямо в Визу или Мастеркард.

Крупные международные платежные системы не держат своих банкоматов или платежных терминалов. Любой банкомат или терминал обязательно принадлежит какому-то банку, который в свою очередь либо сам, либо опосредовано (см. п.2) подключен в платежную систему.

4. У меня "на карте" $200. Это все, что я могу потратить.

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

5. При использовании карты ПИН-код проверят сам банкомат или платежный терминал.

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

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

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

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

Интересна методика начального ввода ключей. Например, реален вот такой сценарий. Выбирается N сотрудников безопасности банка, например, 3 (в идеале, они даже знать друг друга не должны лично). Каждый генерирует вариант ключа и никому его, конечно, не показывает. Затем, они по очереди заходят в помещение, где стоит оборудование по хранению ключей, и вводят каждый свой ключ. Затем, когда все ключи введены, устройство делает операцию XOR между ними, и это сохраняет внутри себя в качестве ключа. Получается, что ключ не знает никто вообще. И чтобы его восстановить, надо получить исходные компоненты от каждого из тех N сотрудников безопасности, которые обязаны заботиться о конфедециальном их хранении.

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

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

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

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

8. Сумма, написанная на вашем чеке при оплате картой, в точности будет списана с вашего счета.

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

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

9. Сумма, заблокированная на счету при оплате картой, так или иначе спишется с моего счета.

Сумма, заблокированная при авторизации, может никогда быть не списана со счета. Через 10 (для банкомата) или 45 (все остальные терминалы) дней без прихода в ваш банк финансового подтверждения операции из платежной системы она будет разблокирована. Это и "хорошо" и "плохо". Это "хорошо", когда вы сделали операцию, от которой хотите тут же отказаться. Сразу после операции вы звоните в банк, объясняете оператору причину отказа, и если она разрешенная, то операция "отменяется", и блокировка может быть снята. В этом случае если вдруг на операцию придет финансовое подтверждение от торговой точки (через пару дней), то сам банк будет разбираться с ним без вашего участия (и ваших денег). Это "плохо", когда вы таки подождали день-два, и финансовое подтверждение уже пришло в банк до вашего звонка, тогда "откатить" операцию будет уже сложнее. Банк будет вынужден начать официальное разбирательство по этому случаю, которое может длиться эти 45 дней. В течение этого времени сумма покупки может оставаться заблокированной.

10. Владельцы дебетовых (а не кредитных) карт не могут оказаться "должны банку".

Как уже говорилось в п.4 — логика авторизации покупки основана не на реальной сумме на счету, а на дневных лимитах, то как и для кредитных карт, так и для дебетовых, можно "залезть в минус", если банк ставит дневные лимиты, немного превышающие остаток на счету даже для дебитных карт.

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

Посты по теме:

воскресенье, 17 января 2010 г.

KeePass, TrueCrypt или как обезопасить свои конфиденциальные данные

В вопросе конфиденциального хранения данные на компьютере не бывает полумер. Идея типа «никто не догадается» тут не работает. Решение должно быть абсолютным и опирающимся на достижения современной криптографии, и единственным способом раскрытия секретных данных должен быть только подбор пароля квантовыми компьютерами будущего в будущем или методом «паяльника в ж…». То есть никаких банальностей типа тут мои файлы никто не найдет, пароль по умолчанию, пустой пароль, один пароль на все случаи жизни или надеяться типа «никто не знает мой метод шифрования». Очевидно, что все основные современные алгоритмы шифрования открыты, и вопрос стоит только в правильном (= безопасном) хранении ключей.

Меня всегда интересовал вопрос — если администратор замечательного сервиса всех времен и народов «Мейл.ру» сможет узнать пароль ящика пользователя (не удивлюсь, если они хранят пароли в чистом виде) – какова вероятность, что у пользователя с аналогичным именем, скажем, на почте Яндекса, будет точно такой же пароль — более 90% или нет? (А сколько у вас «кросс»-паролей? 2, 3 или больше?)

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

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

Интересно, современные почтовые системы типа Gmail или Яндекс используют подобные устройства?

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

Пример из личного опыта. Пару лет назад у меня «увели» почтовый ящик на «Мейл.ру» (с тех пор у меня устойчивый рвотный рефлекс при упоминании этого сервиса). Я не «восторженная блондинко»™ с паролем «1234» на все и имею здравый смысл. Пароль там был «сильный», и единственный способ его потери – это сдача «налево» кем-то из «администрации». Цель? Не могу даже представить, для чего можно это сделать (продать однофамильцу красивый адрес? бред). Но месячная переписка с суппортом и менеджментом сервиса не привели к успеху – ни то, что я мог показать им всю почтовую базу за пять лет и переписку с новым «владельцем» ящика, который предлагал мне его продать назад – ни к чему не привели. Ящик мне не вернули. Благо использовался он только для пересылки, и писем в онлайне не было. Но я потратил недели, чтобы вспомнить все места, где я регистрировался по тому ящику, и экстренно заменить украденный адрес и пароль (пока это не сделал новый владелец через восстановление пароля на e-mail). Не думаю, что это была целенаправленная атака на меня именно, но масштаба проблемы это не уменьшило ни на йоту. Забавно, были сервисы, например, «Аромат.ру», в котором имя аккаунта был сам e-mail, поэтому единственный выход был — это удалить аккаунт на Аромате. А были сервисы, где просто нет функции удаления аккаунта (зачем кто-то будет удалять потенциальный товар, который можно продать спаммерам?). В общем, я кое-как все подчистил, но было очень, очень противно. Очень схожее ощущение, когда тебя ограбили. Так что до сих пор от души желаю «Мейл.ру» скорого разорения.

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

Главный принцип — никогда не использовать повторяющихся паролей.

Легко сказать — сложно сделать. Вряд ли кому-то комфортно помнить более 5-6 паролей. Придумывать же систему генерации паролей в уме — тоже не выход. Современный средний человек пока в уме едва ли посчитает крипто- или хеш- функцию (а только им можно доверять), а иначе мы приходим к подходу «авось никто на догадается», который может больно ударить в спину.

Единственный выход — электронный хранитель паролей.

Подобных программ великое множество. У меня были основные критерии:

  • open-source
  • максимальная простота и кондовость использования (в идеале должен быть один exe-шник и portable-режим)
  • наличие клонов под разные платформы (Windows, Linux, сотовые телефоны, iPhone, а теперь уже и Android.

Почему open-source? Факт наличия открытых исходников дает более менее уверенность, что в программе нет «закладок», отсылающих ваши пароли по интернету, «системных» паролей по умолчанию (так как спецслужбы этого могут требовать), и вообще – популярный open-source – это значит, что код отсмотрен сотней другой внимательных глаз.

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

Мой выбор пал на KeePass. Все три критерия великолепно выполнялись, а список платформ, под которые есть реализации, впечатляет.

Почему удобно иметь версии под разные платформы? А чтобы один и тот же секретный файл можно было бы открыть и в Windows, и в Linux или прямо на iPhone или Андроиде, если ты в пути.

Что конкретно делает эта программа, и почему это правильно?

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

Внутри зашифрованного файла можно создавать записи. Каждая запись имеет имя и набор полей — имя, e-mail, url, пароль и поле для произвольных текстовых данных. Записи можно организовывать в группы с помощью простой древовидной структуры. Также есть контекстный поиск по записям.

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

А теперь ключевая функция программы — генерация паролей. Допустим, вы регистрируетесь на каком-то сайте. Придумали логин, ввели e-mail, и надо вводить пароль. Вы нажимаете в KeePassе кнопку «Сгенерировать пароль» (его длину и алфавит используемых символов можно менять), и получаете новый случайный пароль у себя в окне KeePass’а (напомню, по умолчанию он отображается звездочками). Затем через буфер обмена вы переносите новый пароль в форму регистрации. При такой схеме, вы можете даже сами и не знать, какой там пароль.

Я зарегистрирован на десятках разных форумах, и я не только не помню свой пароль от них, я его даже и не знаю. Если надо, я его перетаскиваю из окна KeePass не глядя.

Конечно, есть ключевые пароли: от вашего основного ящика, мессенджера и т.д., которыми пользуешься часто, и их удобно держать в голове. Но их должно быть два-три. Они также должны абсолютно разными и «сильными», но запоминаемыми. Остальной же регистрационный мусор стоит хранить не в голове, а в программе (например, в KeePass), тем самым не подвергая основные пароли опасности.

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

Если у вас есть портативное устройство (например, телефон с J2ME, Windows Mobile, iPhone или Android), то доступ к паролям можно получить прямо на ходу, если периодически сбрасывать на устройство последнюю версию зашифрованного файла.

У Андроида есть отличная вещь: разработчик приложения декларирует в манифесте какие ресурсы нужны его приложению (сеть, записная книга, флеш-карта, GPS и т.д.). Все остальные ресурсы приложению будут заблокированы. Этот манифест показывается тебе при установке приложения, и сразу видно, чем ты рискуешь. Было бы странно, если бы при установке KeePass на Google Nexus One мне бы сказали, что приложение будет ходить в интернет. Но KeePass запросил только доступ к флеш-карте для хранения файла с паролями.

KeePass хорош для хранение небольшого объема данных. А если счет идет уже на мегабайты или гигабайты, нужен другой подход.

Кроме KeePass я активно последние несколько лет использую TrueCrypt для создания зашифрованных дисковых томов. Удобно, например, на рабочем компьютере создать место, куда стопроцентно никто, кроме вас не заглянет. Кроме того, такие шифрованные «диски» удобно переносить с места на место и бэкапить. TrueCrypt, конечно, open-source, не требует предварительной установки в систему (можно просто носить на флешке) и существует под Windows и Linux (можно лазить за защищенный контейнер из любой из этих систем).

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

вторник, 12 января 2010 г.

Google Nexus One — начало

Вчера мне DHL доставил из Штатов Google Nexus One, заказанный в пятницу на сайте.

Цена вопроса (без контракта): 529$ аппарат, 19$ британская зарядка, 30$ доставка. Итого 578 американских буказоидов.

Я давно являюсь фанатом Андроида, и после G1 и G2 я наконец решил купить сам аппарат, а не только играться на эмуляторе. Тем более Nexus — это официальный аппарат именно от Google.

Сразу скажу, что я пока не рассчитываю, что Nexus сразу полностью заменит мне айфон. Очевидно — аппарат новый, новый Андроид 2.1, так что скорее всего будут глюки (и они есть), но в качестве "игрушки для взрослых" — в самый раз (прошлой игрушкой у меня был Lego NXT), и так как платформа не в пример Эпплу открытая и свободная, обновления, новая информация, и вообще активность разрабочиков не заставит себя ждать (по крайней мере хочется в этого верить).

Вместо подробного отчета с расписыванием размеров, веса и т.д. просто приведу моменты, на которые обратил внимание, как программист (тем более, что есть официальный 3D тур по аппарату.

Что дают в комплекте.

Сам аппарат, съемный аккумулятор (не могу поддержать восторгов на эму тему, так как за два года пользования неразборным айфоном ни разу не захотелось его открыть и поменять аккумулятор, хотя он более одного дня не работает), зарядка от сети (американская и опционально плюс за 20$ британская), проводная гарнитура с микрофоном и кнопкой, кабель USB-to-MiniUSB (боже! стандартный разъем mini-USB), приятный чехол с логотипом Андроида, mini-SD карта на 4GB, инструкция в виде небольшой картонки, мини книжка с гарантией и условиями.

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

Вынул я симку O2 из айфона и заправил в Нексус. В отличии от айфона, разъем симки находится под аккумулятором, и там же находится карточка mini-SD. Аппарат завелся. Грузился чуть дольше, чем айфон.

Первое, что он меня спросил — это гугловский аккаунт. После этого спросил пароль на wifi и затем моментально подхватил все из гугловского аккаунта (почта, календарь, контакты).

Настройки EGDE/GPRS пришлось руками вбивать из айфона, так как аппарат, конечно, был не в курсе о параметрах O2.

Gmail сделан отдельным приложением, заточенным только под него. Работает в фоновом режиме. Для традиционной почты (POP3, IMAP и т.д.) есть приложение Mail. Пользоваться очень удобно.

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

Я как-то и не ожидал, что в первых версиях прошивки будет русификация. Но русские шрифты и язык для интерфейса таки оказались. Русской же клавиатуры не было. Ну я было уже приуныл и решил, что подожду обновления прошивки, но тут пришла мысль — а не сходить ли мне на Google Market (аналог Apple Store). И первое бесплатное приложение, которое я поставил — это она из русских клавиатур. Теперь я могу писать на русском.

Еще я бесплатно поставил (играясь вчера пару часов): англо-русский словарь (о да!), распознавалку штрих-кодов (фоткаешь штрих-код, и она находит в сети товар), эмулятор игры "Ну погоди!" (там, где волк яйца ловит с четырых полок — это угар!), клиент твиттера, эмулятор терминала (можно telnet'иться на сам Nexus), карту метро и нотификатор состояния его линий (для лондонского метро это актуально). Пока все. Понимаю, набор странный, но это только начало.

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

В качестве аналога iTunes Store предлагается Amazon Store. Работает похоже (можно послушать и купить). Богатство ассортимента я не сравнивал пока (хотя догатываюсь, i-кто победит).

Явные пройгрыши айфону.

Тач-скрин не поддерживает так называемое мульти-нажатие, к которому так привыкаешь в айфоне (очень удобно для zoom'а). В Нексусе zoom сделан просто — делаешь двойной клик на экран, и возникают полупрозачные кнопки "+" и "-". Кстати, надо отметить, что браузер в Nexus мне понравился больше, чем в айфоне, несмотря на отстутствие мульти-тача для увеличения/уменьшения. По умолчанию отображается сайт по всей ширине (горизонтальная ориентация, конечно, тоже есть), и при двойном клике на экран браузер каким-то удивительным образом подбирает размер шрифта для комфортного просмотра.

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

Также интересная деталь: в айфоне количество настроек в целом (меню Settings, например) разительно мало, по сравнению с Windows Mobile (скажите, кто не употреблял матерных слов, пытаясь настроить GPRS или Dial-up в смартофоне Windows?) — дают настраивать только что, реально надо настраивать. Так вот: в Нексусе настроек еще меньше.

Замеченные реальные глюки.

Пока я нашел только один — самопроизвольное переключение с wifi на EDGE (я уже читал, что это многими замеченный глюк). Лечится выключением и включением wifi (благо есть просто иконка на десктопе). Будем ждать обновления прошивки.

Пока все. На этом закончились мои первые несколько часов наедине c Nexus.

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

Постараюсь и далее рапортовать моих интересных находках в Google Nexus.