Собственно довольно толковая статья с обзором четырех самых интересных клиентов есть на M-R, я же хотел вставить по поводу каждого из этих клиентов свои пять копеек.
http://www.mobile-review.com/soft/2010/wm-soft-digest-27.shtml Для некоторых бедствующих товарищей главный показатель кашерности клиента есть количество потребляемого трафика. Я практически все время нахожусь в зоне халявного Wi-Fi, поэтому на этот аспект я не обращаю никакого внимания. Для меня главные критерии -- удобство и скорость работы.
Поехали.
moTweets. Бесплатный (но с банером), красивый и очень функциональный клиент.
Всем хорош, но, блядь, скорость работы интерфейса в этой программе просто ниже всякой критики. Может для девайсов с QVGA экранами и монстров вроде HD2 все в порядке, но на i8000 менюшка вызывается с паузой больше секунды.
Увы.
Twikini. Кажись платный. Довольно минималистичная штука с невзрачным интерфейсом. В принципе, вполне съедобно, если бы не один достающий меня недостаток -- текст длинных твитов показан не полностью, и для его просмотра надо еще дополнительно кликать на твит. Чтение ленты превращается в мышиную возню. Ну и прокрутку ленты хотелось бы поплавнее.
PockeTwit. Бесплатный open source проект, писанный на .NET.
В свое время мой выбор пал на него, и я даже пытался кой-чего допилить в сырцах (уродские аватары и позывы к горизонтальному скроллу при просмотре ленты).
Изнутри код ужасен чуть больше чем полностью.
Интерфейс странный и неудобный одновременно.
Как и всякое .NET приложение жрет много памяти, но работает очень гладко и красиво.
TouchTwit. Платная, продающаяся только через Market. Однозначно -- наш выбор! А ведь в свое время я даже не пытался ее попробовать, так как Лутфуллин крепко жаловался на долгое время старта и выхода. Я этих проблем не наблюдаю -- во-первых, запускаю приложение ровно один раз, и потом оно постоянно висит в памяти. А во-вторых, время старта секунд пять, что для приложения, которое стартует сразу с обновленной лентой не так уж и много.
Написано на .NET, поэтому висящий в фоне TT жрет около 10 метров (бесценной, в случае i8000) оперативы. Выглядит очень эстетично, работает красиво и гладко. Примечательный факт -- в случае твиттер клиентов .NET приложения работают значительно быстрее нативных. Скорее всего отгадка этого следующая -- нативщики по старинке работают через GDI, а .NET приложения "автоматически" рисуют в более быстром (ускоряемом аппаратно) DirectDraw.
У TT есть один, на мой взгляд, существенный недостаток -- в нем принципиально невозможно отключить автоматическое обновление ленты, причем максимальный интервал такого обновления аж 6 минут. Такая самодеятельность мне категорически не понравилась, и я пропатчил версию 1.6 на предмет блокировки вообще всяческих автоматических обновлений (подробнее --
http://cd-riper.livejournal.com/268097.html).
На днях вышла версия 1.7 (и я уже приложил к ней руку на предмет избавления от жадности), в которой появился RT в новой стиле и поддержка списков. От добра добра не ищут -- я пока что переходить на нее не собираюсь.
Ну и писался весь этот текст, конечно же, ради очередного пиара собственного твиттера:
https://twitter.com/cdriper Зы. Еще немного про ковыряния в TT.
Таймер для своих обновлений программа заводит через notification queue (чтобы работало в случае спящего режима) и очень похоже на то, что иногда она делает это не очень хорошо для системы -- очередь блокируется и перестает работать. Для меня это выливалось, блин, в несрабатывающий утром будильник. Так что программу я патчил еще и на предмет этого бага.
Рыдаю горючими слезами, когда вижу код, который Microsoft предлагает разработчикам использовать для advanced защиты своих Market приложений. С криптографией, все по взрослому.
Copy Source |
Copy HTMLbyte[] signature = null;
try
{
signature = Registry.CurrentUser.OpenSubKey(@"Security\Software\Microsoft\Marketplace\Licenses\").GetValue(m_appSku) as byte[];
}
catch
{
}
string s = m_appSku.ToLower() + " " + GetUniqueDeviceID();
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
RSAParameters parameters = new RSAParameters();
parameters.Modulus = Convert.FromBase64String(m_certModulus);
parameters.Exponent = Convert.FromBase64String(m_certExponent);
provider.ImportParameters(parameters);
byte[] bytes = Encoding.ASCII.GetBytes(s);
if (!((signature != null) && provider.VerifyData(bytes, new SHA1CryptoServiceProvider(), signature)))
{
MessageBox.Show("Could not verify signature");
}
else
{
// start application
// ...
}
Лечится такая "защита" за минуту.
кузовной ремонт