суббота, 21 января 2012 г.

[comp] Интересуюсь мнением об Android-планшетниках

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

Знаю, что на рынке есть три основные категории планшетов – Apple-овские iPad-ы, Android-планшеты от разных производителей, ну и несколько моделей на базе Windows. Windows-планшеты, как мне кажется, вряд ли имеет смысл рассматривать (насколько я слышал, Intel Atom намного прожорливее, чем ARM Cortex, поэтому время работы таких планшетов будет заметно меньше). iPad по религиозным соображениям сразу ставится в конец очереди ;) Поэтому сначала хочется посмотреть на Android-ы.

Беглый просмотр имеющихся предложений показал, что есть практически идентичные модели от ряда серьезных производителей: Sumsung, Asus, Acer, Lenovo и Sony (не говоря уже о более мелких поставщиках).

Самая интересная из них, по количеству различных разъемов, это Acer Iconia TAB – тут тебе и HDMI, и целых два USB. Но поработав некоторое время на Acer-овском ноутбуке решил больше с Acer-овской продукцией не связываться. Поскольку, на мой взгляд, привлекательное сочетание цены и возможностей Acer обеспечивает более низким, чем у конкурентов, качеством.

Из остальных же вариантов самыми интересными для меня являются Lenovo IdeaPad K1 и Sony Tablet S.

Достоинством планшета от Lenovo является наличие HDMI разъема. Поскольку иногда я пускал трансляции из Интернета с ноутбука на телевизор через HDMI и так было намного удобнее, то HDMI-выход я воспринимаю как отличную фичу. Плюс к тому, IdeaPad, даже имея в два раза больший SSD накопитель внутри, намного дешевле Sony Tablet S. Но при этом на 130 грамм тяжелее, чем Sony.

В Sony Tablet привлекает прежде всего качество Sony (о котором я высокого мнения), плюс меньший размер и вес. Но главный плюс – это наличие USB разъема (хоть и требующего дополнительного переходника). Был бы у него еще и HDMI, как у Lenovo, то выбор был бы однозначно в пользу Sony.

Так вот хочу спросить у уважаемых читателей – а так ли важно, на самом деле, наличие USB для Android-планшета?

На обычном нетбуке USB разъем нужен мне для того, чтобы легко скачивать что-нибудь с бука на флэшку (фильмы, музыку, книги, фотографии) и закачивать тоже самое обратно. Но позволяет ли все это USB на Android-е?

Да и вообще любые отзывы об Android-ах (особенно негативные и особенно об упомянутых выше моделях) всячески приветствуются.

четверг, 19 января 2012 г.

[prog] Пояснение/дополнение к предыдущему посту

В предыдущем посте в одном месте мне не удалось достаточно полно выразить свою мысль, поэтому постараюсь исправиться здесь.

Итак, в одном из примеров автор статьи хотел показать способность системы типов вылавливать баги:

let rec destutter l = 
  match l with 
  | []             -> [] 
  | x :: y :: rest -> 
    if  x = y then destutter (y :: rest) 
    else  x :: destutter (y :: rest) 

Эта функция не обрабатывает вариант, когда в исходном списке l всего один элемент. И эту ошибку обнаруживает компилятор, подсказывая программисту, что остался необработанным вариант _::[], которого не было в паттерн-матчинге.

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

Так вот, главная причина в том, что даже найденная компилятором ошибка не освобождает нас от написания тестов для функции destutter. Да, компилятор гарантирует нам, что мы обработали все основные варианты в паттерн-матчинге. Но дает ли это нам гарантию в правильности работы функции?

Нет, не дает. Поскольку мы могли ошибиться где-то в ветвях паттерн-матчинга. Например, вместо if x = y написали бы if x <> y. Или же в ветви else вместо x::destutter(y::rest) указали бы destutter(y::rest). Ведь такого рода ошибки система типов не контролирует.

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

Т.е. выловленная компилятором ошибка, на мой взгляд, вовсе не уменьшило количество тестов, которые должен был бы написать разработчик. Именно поэтому помощь со стороны системы типов в данном месте – это счастливый случай, на который не приходится рассчитывать в будущем. А, посему, нет разницы, перестаем ли мы надеяться на счастливые случаи в Python-е или же в OCaml-е.

Я убежден, что системы типов (т.е. то, что ставится во главу угла евангелистами от функциональщины) должны уменьшать количество проверок, которые должен делать программист. Не суть важно, в unit-тестах или же в виде assert-ов или if-ов в основном коде программы.

Взять в качестве примера самый простой void safety (т.е. отсутствие обращения к нулевому указателю). В C/C++ и Java можно передать в функцию аргумент по указателю (в Java по ссылке) и этот аргумент запросто может оказаться нулевым. Даже если в комментариях к функции сто раз будет написано, что ноль туда передавать нельзя. И разработчику такой функции, если он не хочет допустить краха приложения, придется вставлять проверку на равенство аргумента нулю. Эта так самая лишняя проверка, лишняя работа и еще один шанс допустить ошибку в программе, от которой действительно избавляет разработчика система типов.

Ведь если язык поддерживает понятие nullable и non-nullable ссылок (в Eiffel они называются attached и detachable), то тогда разработчик функции может явно указать, что аргумент функции не может быть нулевым. И компилятор ему это будет гарантировать! Следовательно, разработчик будет освобожден от написания лишних проверок и тестов, поскольку это уже не нужно.

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

вторник, 17 января 2012 г.

[prog] Прочитал тут статью Аарона Минского “OCaml for the Masses”…

которая на acmqueue с подзаголовком “Why the next language you learn should be functional” (статья не новая, от 27 сентября 2011, но мне попалась на глаза случайно пару дней назад).

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

Развитие темы под катом, поскольку букв много.

[prog] Релиз POCO 1.4.3

Состоялся релиз версии 1.4.3 библиотеки POCO.

Из основных изменений разработчики отмечают поддержку HTTP Digest authentication и WebSockets. А так же большое количество более мелких исправлений и улучшений. Полный список которых можно увидеть в CHANGELOG.

понедельник, 16 января 2012 г.

[life.sport.darts] Завершился Чемпионат Мира по версии BDO/WDF

В этом году Чемпионат Мира по версии BDO/WDF оказался интереснее чем аналогичное PDC-шное мероприятие. А все благодаря двум “старичкам” – Теду Ханки (15 номер мирового рейтинга) с Тони О’Ши (8 номер рейтинга), и двум молодым, мало кому известным голландцам – 27-ми летнему Уэсли Хармсу (13 номер рейтинга) и 25-летнему Кристиану Кисту. Именно эта четверка, как нож сквозь масло, прошла через все раунды чемпионата и разыграла увлекательные полуфиналы.

В первом полуфинале Тед Ханки встречался с Кристианом Кистом. И ведя в матче до 6 побед со счетом 5-3 не смог сдержать свои нервы. Из-за чего проиграл 5-6. Хотя, пожалуй, именно Тед Ханки был тем единственным человеком на Чемпионате, который мог остановить Киста.

Во втором полуфинале до самого последнего сета упорно боролись Тони О’Ши и Уэсли Хармс. Было видно, что Тони собрал весь свой опыт, весь свой характер для того, чтобы одолеть молодого целеустремленного голландца (очень похожего, кстати говоря, на молодого Роберта Патрика в роли T-1000 во втором Терминаторе). Мне показалось, что все решил внезапный перерыв перед последним, решающим сетом. В этом перерыве Тони О’Ши смог восстановиться, а Хармс, напротив, потерял концентрацию. Что и позволило О’Ши победить и попасть в свой второй в карьере финал Чемпионата Мира (первый он проиграл в 2009 году Теду Ханки).

К сожалению, все силы Тони отдал в полуфинале и в финале это было заметно. Если в начале соперники еще были более менее равны – до счета 2-2 они отбирали сет за сетом друг у друга, то после 2-2 Кист резко пошел в отрыв и, хоть с трудом, но быстро довел счет до 6-2 в свою пользу. И это в матче до 7 побед!

При счете 2-6 О’Ши вновь проявил весь свой характер и все свое мастерство, выиграл три сета подряд и чуть было не возродил интригу в матче, доведя счет до 5-6. Но это уже был последний резерв, который истощился и противопоставить Кисту что-нибудь еще О’Ши уже не смог.

Кристиан Кист, человек, которого знали только специалисты, который выбился на Чемпионат через сито квалификаций, а не по рейтингу, сенсационно стал Чемпионом Мира!

Кист повторил уникальные достижения Кейта Деллера (Чемпион 1983, обыграл в финале Эрика Бристоу) и Йелле Классена (Чемпион 2006, обыграл в финале Раймонда ван Барнивельда). Те так же начинали свои чемпионаты “черными лошадками”, но выигрывали главный трофей.

Имхо, этот чемпионат показал, что такое спорт. Не важно, сколько у тебя титулов в прошлом, не важно, какие у тебя были заслуги и достижения. Важна твоя нынешняя форма, твой нынешний настрой. Ну и нынешнее отношение к тебе со стороны госпожи Удачи, поскольку без ее участия здесь не обошлось, имхо. Ведь Теду Ханки на своем пути пришлось встретиться со Скотом Уэйтсом (которому предрекали победу специалисты), Тони О’Ши обыграл 3-х кратного чемпиона Мартина Адамса (ни много, ни мало, а номер один мирового рейтинга). Но самый трудный путь к полуфиналу, на мой взгляд, оказался у Уэсли Хармса, которому пришлось по дороге обыграть не кого-нибудь, а Дина Уистанли (прошлогоднего финалиста, еще одного явного претендента, которому прочили титул). У Киста же первый по-настоящему серьезный соперник встретился лишь в полуфинале. Но ведь Удача – это так же элемент спорта.

воскресенье, 15 января 2012 г.

[life.humour] Все остальное свежее

Только что подслушанный в торгующем сдобой ларьке диалог покупателя и продавца:

-- Мне две булочки “Брестские” и…
-- “Брестские” вчерашние.
-- А какие свежие?
-- Все остальные свежие.
-- Тогда две “Ароматные” и…
-- “Ароматные” то же вчерашние!