Категория: Компьютеры

Заметки о программировании и на околокомпьютерные темы

Вложенные категории: Delphi, Игры

Купил себе телефон на Android 2.3

Samsung Galaxy Ace S5838 или как-то так.

Сам телефон удобный. Ловит интернет через GPRS, 3G, разный вай-фай. Уже поставил скайп, читалку для Aozora Ruby (японские тексты с разметкой). В общем, доволен.

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

(смешные жалобы на гугл)

Пытаюсь подключиться по имапу к почте на Google Apps – не подключается.

Два часа возни и сорок тредов таких же горемык спустя, нахожу в справке:
Если у вас не подключается по IMAP, зайдите на apps.google.com/yourdomainname.com/UnlockCaptch… и введите капчу.

Что?
А как я должен был догадаться, блин?

Ну ладно. Захожу по этому адресу, ввожу капчу:
– Капча не та.

Ввожу ещё раз:
– Пароль не тот.

Почему пароль-то, блин, не тот, я его скопипастил из ластпасса! Проверяю, логинюсь – правильный пароль. Копирую в UnlockCaptcha – неправильный. И что блин теперь?

Два часа возни и сорок тредов таких же горемык спустя, нахожу:
Если ваш аккаунт Google Apps старый – вам нужно туда, куда написано в справке. А если уже прошёл обновление (непрошеное, между прочим) – вам теперь на google.com/accounts/UnlockCaptcha

Что?
А как я должен был догадаться, блин? А написать об этом в справке, перенаправить старую капчу на новую? А ответить, в конце концов, хоть в одном из тех сорока тредов? Майкрософт свои форумы поддержки старательно отслеживает, между прочим.

Но ладно. IMAP так и не заработал. (Бог его знает, почему). А раз уж речь зашла про долбанный гугл, расскажу ещё вот что.

В какой-то момент гугл решил, что надо Всё Объединить (хотя никто не просил).

Есть такая штука, Google Apps, это gmail для вашего собственного домена. Например, для boku.ru, чтоб понятней было.
Раньше можно было залогиниться в me@boku.ru, и этот логин работал для веб-интерфейса почты boku.ru. А логин на гугле работал для почты гугла. Всё логично.

Потом гуглу захотелось сделать универсально. Облачная инженерия, как Спольски это называет.

Гугл сделал так, чтобы любой аккаунт работал везде. Хочешь – логинься в гугле под me@boku.ru. Это здорово!
Но при этом гугл сделал так, чтобы работал только один аккаунт. Хочешь залогиниться на boku.ru – разлогинься в гугле. А вот это уже, друзья и товарищи, слово с буквы П на букву Ц, и совсем не ПЛОВЕЦ. Начинаем перелогиниваться между аккаунтами по десять раз на дню, потому, что гуглу захотелось странного.

Мало того.

Администратор домена Google Apps может включить или выключить дополнительные сервисы. Например, Google Docs для домена. Это хорошо и понятно: если мне Google Docs нафиг не сдался, зачем его держать?

С момента объединения эта система работает чуть иначе: не “дополнительные сервисы внутри домена включаются”, а “обычные сервисы в интернете выключаются”.

Заходишь на youtube, а тебе: администратор домена (какого, блин, домена?) не включил вам этого сервиса.

Чё?

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

Мало того.

Включаю youtube. Включаю ВСЕ сервисы, которые есть, чтобы уж наверняка. Чтоб не обнаружить потом, что меня ещё где-нибудь в интернете превентивно забанил я сам (с услужливой допомогой гугла). Что б вы думали?

Есть сервис, который нельзя там включить. И пользователей Google Apps на него не будет пускать в принципе. Какой же это секретный сервис?

Справка Гугл.

Справка Гугл отключена для вас вашим администратором домена.

В смысле, Гугл… минуту. Я не могу даже нормально сформулировать свой вопрос. Это что вообще такое? Кто придумал банить справку-то? Ну её-то за что?

Ладно. Набираю в гугле “как включить справку гугл”. Находит. Находит несколько страниц об этом в справке. В справке гугл…

Окей, слава богу, кеш Гугла ещё работает, меня в нём ещё не забанили, и я смотрю справку Гугла через кеш Гугла, как китайский политзаключённый видеозапись движения танков на площади Тяньаньмэнь. Но ничего полезного там нет. Зато есть сорок тредов таких же горемык, откуда ясно, что справку Гугла включить никак нельзя из-за ошибки.

Этой ошибке уже больше года. Её и не думают исправлять. (Ведь так сложно, наверное). Ни в одном из тредов работники гугла не отвечают.
(Кстати, работники гугла вообще существуют? Кто-нибудь когда-нибудь их в интернете видел? Я вот ни разу).

Итого: пользоваться логинами Google Apps в веб-интерфейсе невозможно. Слава богу, что мне в общем-то нужен только логин по имап, а в вебе я могу оставаться под обычным гугловым аккаунтом.

Но вообще-то говоря, Гугл! У вас много миллиардов долларов, десятки тысяч программистов. Чё, сложно сделать привязку аккаунтов друг к другу, чтоб не перелогиниваться? Чё, оттестировать было сложно все процессы? Чё, мониторить форумы техподдержки большой напряг?

И этот марафон фейла – не первый. Про гугловый IMAP знаете?

Есть стандарт IMAP, поддерживающий папки для писем и теги. Письмо может лежать только в одной папке, но быть помеченным несколькими тегами.
Десяток лет существует стандарт, написана куча клиентов и серверов. И все, в целом, счастливы. Потому, что следуют стандарту.

Появляется гугл. Сопит, оглядывается… Нахоженная тропа не для слонов: прётся через кусты:

У гугла папки работают как теги. А теги не работают никак.

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

Как можно было такое написать – просто крыша едет. Либо программисты, либо менеджеры были либо без мозгов, либо с клешнями. Либо всё это вместе.

Но всё это было давным-давно в тридесятом царстве, и как вы думаете, за прошедшие шесть лет, как починил гугл свой имап? (Если вы думаете, что никак – вы правы). С тех пор изменилось только то, что некоторые имап-клиенты приноровились к тому уроду, не без которого в семье, и работают с умственно отсталым братцем особым образом.

А починить свой имап гугл не смог. За шесть лет. С десятками тысяч программистов. Злые языки… да что там, любые языки скажут, что гуглу просто невыгоден имап: они проталкивают идею использования веб-интерфейса своего GMail, а имап – ему альтернатива. Зачем его чинить? Даже напротив: лучше не чинить. Лучше даже сломать. Собственно, поэтому, скажут языки, его и сломали.

Ответить этим языкам нечего, да и незачем, поскольку они правы. Какой там у гугла слоган, “не делай зла?” Правда? Правда-правда?

Документация к PHP

Ножницы

Ножницы – отрезают кусок тонкого предмета от него самого. Для отрезания толстых предметов используйте Нож.

Параметры:

Предмет – предмет, от которого отрезают.

Возвращаемое значение:

Отрезанный кусок или null.

См. также:

Нож – отрезает кусок от толстого премета.
Пила – отрезает кусок от крепкого предмета.

Дополнения пользователей

(далее)

Ковыряние в ушах

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

Ножницы из подручных материалов

Если ваша версия PHP не поддерживает ножницы, используйте следующий трюк. Возьмите два длинных тонких предмета, например, авторучки или зубочистки, и смотайте их проволокой. Посередине намажьте клея для надёжности, а к двум концам зубочисток приклейте кольца от ключей. В принципе всё! У меня оно почему-то не работает, мелочи отлаживайте сами…

зачем нужен нож я не понимаю?!!!

кто нибудь может обеснить мне зачем, нужен нож это же то же самае в чём разница. какую версию мне исползовать?!!!! почему у ножа нет дырочек?!!! подскожите кто нибудь плиз!!!!

вот вам кусок кода

/\n((?:\*|#|\;|\:)+.*?(\[)((http\:\/\/|https\:\/\/|ftp\:\/\/|gopher\:\/\/|news\:\/\/)[\w\d\:\#\@\%\/\;\$\(\)\~\_\?\+\-\=\\\.&]*)(?<!')'('{1,4})(.*?)\\1'(?!')(\s+([^\[^\]]*))?(\])\n(?!(?:\*|#|\;|\:)+))/s
мне подошёл вроде бы

Эта функция абсолютно бесполезна!

Разработчики PHP ещё раз показали, что им совершенно плевать на пользователей. Кому нужно дурацкое приспособление, которым даже дерева разрезать нельзя? А в Бензопиле до сих пор не исправлен баг, из-за которого она глохнет…

Чтобы не обрезаться Ножницами…

Закройте их и обмотайте в закрытом виде десятью слоями изоленты.

Я написал код, который заменяет ножницы, нож, ножовку, бензопилу

Если вам вдруг будет скучно использовать стандартные функции! Только он сюда не влез, тут ограничения на комментарии 20 килобайт, так что я запостил его в своём блоге: ссылка. Милости прошу! Между прочим, мой блог вообще интересное место… Да… А ещё я отаку и очень, очень одинок…

Импорт постов с Diary.ru

Написал пару php-скриптов, которые могут пригодиться хозяевам дневников на diary:

diary_fix_rss.php – исправляет ошибочный RSS вашего блога. После недавних изменений в RSS записей даты печатаются на русском языке, и большая часть RSS-клиентов их не понимает. В результате записи перемешиваются. Этот скрипт всё чинит.

В качестве параметра нужно передавать номер пользователя. Номер можно узнать, например, из адреса RSS дневника на самом diary.ru (static.diary.ru/userdir/1/2/3/4/12345/rss.xml: 12345 – это ваш номер).

diary_export_rss.php – генератор RSS не только из последних, а вообще из всех записей дневника по вашему выбору. Это значит, что вы можете экспортировать через RSS любое количество любых записей за любые сроки. Весь дневник целиком (только это долго) или любую категорию.

Кроме того, скрипт делает много других приятных вещей: восстанавливает теги ..., удаляет <br /> и <p>, и заменяет их переносами строки, в общем, приводит неудобочитаемый HTML к его исходному виду.

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

Скачать скрипты.

Обратите внимание, что скрипт работает медленно (ему приходится спрашивать все посты с more по отдельности), так что если вы переносите весь дневник, имеет смысл разбить вашу тысячу записей на группы, скажем, по 50-100, и переносить по частям.

Три расширения для Оперы, о которых вы не знали

И четыре, о которых знали.

Четыре, о которых знали:

  • LastPass – хранит и синхронизирует все пароли в интернете
  • ImagePreviewPopup – показывает картинки при наведении мыши на ссылку
  • LinkRedirector – переходит по ссылке насквозь через промежуточные сайты
  • ImageAutosizer – щелчком подгоняет раскрытую картинку под размер экрана
  • Эти расширения наверняка стоят у любого пользователя Оперы. Жизнь без них тяжела, но слава богу, недолга. А вот следующие три малоизвестны, хотя не менее интересны.

    Easy User CSS

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

    HTML Ruby

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

    Кстати, хорошо бы кто-нибудь сделал расширение, рендерящее txt-файлы с настоящим, исходным руби в красивом виде.

    Tilt!

    Поворачивает открытую страницу на произвольный угол. При этом страница продолжает работать. Говорите что хотите, а это расширение круче любых “Астероидов” и “Явись, о Комик Санс!“. У него есть и практическое применение: вращать фотографии на удобный угол.

    Pushing the limits

    Я, кажется, не рассказывал об этом смешном случае? Подходит ко мне как-то товарищ по работе:
    – Володя, ты же работал с MySQL… Не знаешь, как в нём увеличить максимальный размер запроса?

    Верный принципу “отвечай не на вопрос, а на то, что пытаются спросить”, я быстренько прокручиваю в голове варианты. Зачем ему это? Предельный размер запроса обычно такой, что достичь его нереально. Мегабайт или два. Текст такой длины – это как “Война и мир”. Ни один человек такого запроса не напишет.

    Может, он генерирует его автоматически?

    – А какой длины у тебя запрос? – спрашиваю я

    – Два гигабайта.

    – …………

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

    Два гигабайта. Это приказ серверу в четырёх тысячах томов, указание, для хранения которого нужно выстроить величественную библиотеку, это, можно сказать, то самое Слово – могучее и всеобъемлющее – во исполнение которого родилась вся вселенная. Если бы этот приказ зачитывал человек, на его оглашение ушло бы несколько лет.

    И какими данными нужно оперировать, чтобы о них можно было дать столько уточнений?!

    Реальность оказалась прозаична. Программист генерировал сценарий некоторой 3D-сцены, а потом сохранял его в MySQL-базу (sic!), передавая в хексе:
    INSERT INTO tableName VALUES Data=0x’5B7716A6A18… – и ещё два миллиарда букв.

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

    Default Programs Editor

    Как известно, начиная с Windows Vista пропали старые окна настройки действий для типов файлов, а вместо этого появился упрощённый настройщик, позволяющий выбрать только главное приложение, открывающее файл – так называемую “Программу по умолчанию”.

    Между тем, дополнительные действия (Edit, Print, Set as desktop background) никуда не делись, и их тоже часто хочется перенастроить. Для этой цели рекомендую утилиту, которой сам только что воспользовался и впечатления остались приятные:

    Default Programs Editor.

    Она умеет всё и больше, что умел старый интерфейс Проводника, и при этом бесплатна. Жалко только, что не open source – значит, рано или поздно станет платной. Ну что поделать.

    AniDB tool

    Обновил AniDB tool, консольную утилиту для хеширования и добавления аниме на anidb.

    Из интересного в обновлении добавилось распараллеливание работы. Медленных точек в программе три: таймауты AniDB (команды не чаще, чем раз в 2 секунды), чтение диска и вычисление хеша. Последнее – нагрузка на процессор.

    С таймаутами AniDB сделать ничего не получится. Чтение диска тоже, в общем, не ускоришь, единственное, что можно сделать – это устранить любые промедления. Как только один кусок считывается, сейчас же надо начинать читать другой.

    Для этого хеширование, обычно отнимающее примерно 30% времени, было вынесено из главного потока. Сам по себе MD5 вычисляется строго последовательно и параллелится очень плохо, однако хеш ED2k, который использует анидб, хоть и основан на MD5, но файл в нём разбивается на кусочки, каждый из которых хешируется, а потом от всех хешей берётся хеш. Поэтому хеширующих потоков можно сделать несколько.

    К сожалению, так можно максимум устранить те самые 30%, поскольку чтение с диска всё равно никуда не денется.

    Если здесь есть программисты, интересно, есть ли у кого-нибудь ещё какие-нибудь идеи, как процесс можно ускорить?

    Всё должно быть файлами

    Первое правило хранения пользовательских данных: всё должно быть файлами.

    Букмарки, заметки, пароли, контакты, сохранённые игры, адреса серверов – каждый пункт списка должен лежать отдельным файлом, и если хранилище поддерживает группировку, то группы должны сохраняться как папки.

    И наоборот, примеры того, как делать ни в коем случае нельзя:
    – Нельзя хранить весь пользователський профиль в одном файле, как это делает Миранда.
    – Нельзя хранить весь контакт-лист в одном файле, как это делает Remote Admin
    – Нельзя хранить все заметки, контакты и букмарки в трёх файлах, как это делает Опера.

    Почему нельзя?

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

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

    Дополнение.
    Разумеется, лучше всего хранить данные не просто в файлах, а в текстовых файлах. В них легче находить изменения и другим будет проще работать с вашим форматом. Сейчас моден XML, но я бы не стал использовать его без прямой необходимости: достаточно текста, любого текста.

    Ещё одно правило: все пользовательские данные должны храниться в %USERPROFILE%\AppData\YourAppName. Тогда они не только будут переноситься с компьютера на компьютер при включенных Roaming Profiles, их ещё и будут автоматически бэкапить вместе со всем профилем пользователя.

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

    LastPass FAIL

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

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

    На всякий случай цифрами: 100 из 1 000 000.

    Эти скачанные аккаунты были зашифрованы, так что даже если они попали бы к злоумышленнику, никто не смог бы их прочесть! Тем более, что и злоумышленника, скорее всего, не было. В общем, как в игре Pandemic 2, на Аляске кто-то чихнул – SHUT. DOWN. EVERYTHING.

    LastPass решили выпендриться и показать, как серьёзно относятся к безопасности.

    Они заставили весь миллион пользователей сменить пароли.

    Остановимся на минуту и сделаем то, чего не сделали в LastPass: задумаемся над последствиями. Чем чревата одновременная смена паролей всеми пользователями сервиса?

    Ну во-первых, перегрузкой серверов. Что и произошло. Сервера LastPass весело легли и последние два дня почти не шевелятся. Из-за этого пароли сменить невозможно, а поскольку это требуется для продолжения работы, никто не может работать! А так как в LastPass хранятся все пароли, то десятки тысяч человек упорно долбят клавиши F5, всё повышая нагрузку на сервер.

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

    И наконец, если загадочный хакер действительно взломал сервера LastPass, получил к ним доступ, и не знает теперь, что делать с зашифрованными данными, а тут все пользователи подключаются и шлют ему сначала свои старые, а затем новые пароли, как вы думаете, что он скажет?
    Он скажет “Спасибо”.

    Да и каким образом вообще могла смена пароля защитить от подбора старого, слабого пароля к уже скачанным данным? Украденное злоумышленником не перешифруется магическим образом новым, сильным паролем.

    Из-за весьма ветренного подозрения на то, что 100 из 1 000 000 аккаунтов могли быть скачаны (при этом оставаясь зашифрованными и бесполезными), LastPass обрушил на несколько дней весь свой сервис, лишил десятки тысяч доступа к своим паролям и украл у них огромное количество времени.

    Выпендрились, что я могу сказать.

    Portal 2

    Первый Portal в момент выхода был никому не известен – так, бонус на диске с Half-Life 2: Episode 1. Второй Portal ждали и насочиняли такого, что игре не под силу было все надежды оправдать. Тем не менее, она это как-то сделала.

    Portal 2 очень длинный. До сражения с GlaDOS проходит примерно столько же, сколько в первом портале, но здесь это – треть игры. И каждая следующая часть не похожа на прошлую. Нигде не придётся “просто решать всё то же, что раньше”, постоянно – новые дизайны, подробности сюжета, игровые блоки.

    (спойлеры)

    Да, Portal – сказка. Алиса, падающая с GlaDOS в картофелине в кроличью нору. Или Дороти, падающая на повозке в подземные миры. Мы открыли эту книгу ради GlaDOS, но сказки так не работают, и перевернув последнюю страницу, мы помним не только циничный искуственный интеллект, а всех их – упрямого Кейва Джонсона, молчаливую Каролин, пустоголового Витли, безбашенные турели-брак и даже рабочих, готовых отдать свою жизнь за 60 баксов. (И ради науки, конечно).

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

    Едва ли Portal 2 мог бы быть лучше.