Home

Advertisement

Некоторые пользователи встречаются с проблемой, когда при открытии файла по ссылке в Internet Explorer они снимают галочку "Всегда задавать этот вопрос при открытии файлов данного типа", а потом ррраз! - и не могут найти, где эту галочку вернуть на место! Окошка-то нет:)

Гугление по словам из темы поста не даёт ни одного результата, что мне показалось странным, но не обескураживающим. Сменил поисковой движок на Bing - и, bingo!, понял, откуда у него такое имя. На второй странице был требуемый рецепт. В ветке реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\AttachmentExecute нужно удалить подветку с требуемым типом файла. Всё.

AntiSpam

  • Nov. 26th, 2009 at 5:15 PM
Подумалось: а вот бы нанять опытного спамера для настройки спам-фильтра! Сплошные плюсы! Человек досконально знает способы обхода фильтров, и это значит, что лучше него никто не сможет настроить защиту от спама.

Но возникают всего две загвоздки: спамера надо а) найти и б) не убить после этого. Они-то и сводят идею на нет. А жаль.

Tags:

Новосибирск, WiFi, халява

  • Aug. 27th, 2009 at 4:37 PM

Итак, посмотрим, какие есть места в Новосибирске, чтобы посидеть с ноутбуком. Я разослал в контакт-лист ICQ сообщение следующего содержания: "Ты знаешь места в городе, где можно посидеть с ноутом, спокойно, долго, сосредоточенно, с вай-фаем и за минимальные деньги?"

Самым ожидаемым ответом был: "Дома," - и он же был самым частым. Ну, кто бы сомневался.

Вторым по популярности был Ростикс на Красном, 29. Я и сам был там однажды с заявленной целью.

Большинство респондентов на этом выдохлись, но кое с кем получились и содержательные беседы. Были перечислены:

  • Traveler's Coffee на Красном, 17.
  • Тинькофф на Ленина, 29.
  • 5'nizza на Ленина, 3.
  • Royal Park на Красном, 101.
  • Иль Патио на Красном, 29.

В принципе, по другим адресам сетевых кафешек тоже должен быть WiFi, но это надо подтвердить. Вот, пожалуй, и все варианты. Про совсем бесплатные места, вроде площадки перед НГУ, никто не упомянул, а жаль. Возможно, виновата постановка вопроса.

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

Ростикс. Доступ нелимитированный, медленный. Стоимость определяется только купленной едой. Играет музыка, ходят люди, довольно шумно. Розетки есть, но только у стены и не за каждым столиком.

Traveler's. Доступ нелимитированный, но за деньги (пока не знаю цену). Относительно спокойно, но от музыки в общепите никуда не деться. Про розетки хз.

Тинькофф. Не был. Говорят, что инет бесплатный. Охотно верю.

5'nizza. Не был. Характеристики доступа пока не знаю. Говорят, там в обеденное время умеренные цены на еду.

Royal Park. Про инет ничего не могу сказать, но он бесплатный. Еда не фонтан, и цены так себе. Довольно шумно, людей много и не все они приятны. Розетки - хз.

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

Кофемолка на Советской.

I-Cafe Wasabi на Потанинской, 5.

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

Грандиозный update. Не прошло и часа, как я наткнулся на такую карту. Тема вайфая практически раскрыта.

Чтение мануалов полезно, кто же с этим спорит, однако эта истина каждый раз открывается по-новому.

Вот и сейчас я наткнулся на упоминание о том, что в комплекте поставки Бакулы присутствуют скрипты и конфигурационные файлы для журнального дозора. Иссесна, я тут же скопировал что надо куда надо и запустил /etc/cron.daily/0logwatch. Иссесна, ничего не сработало.

Первая обнаруженная ошибка была простой: в версии Bacula 2.2.4 рабочая директория была /var/spool/bacula с файлом log внутри, а обновлённый конфиг из пакета Bacula 3.0.2 /etc/logwatch/conf/logfiles/bacula.conf желал видеть журнал по пути /var/lib/bacula/log. Исправил. Не заработало.

Вторая ошибка поразила меня до глубины души, и для ясности я кратко опишу, как Logwatch парсит логи. Собственно парсеру на STDIN передаётся STDOUT препроцессора /usr/share/logwatch/scripts/shared/apply%servicename%date (в данном случае, applybaculadate), который выделяет из файла журнала только те строки, которые относятся к требуемой дате. Такого препроцессора в пакете не было (!) и его пришлось написать на основе applyhttpdate, что, в общем-то, нетрудно при знании Perl'а, однако же основная засада оказалась в логах: директор пишет день и месяц события, но не пишет год! То есть на 15 августа мой препроцессор по умолчанию выдавал записи за 2008 и 2009 годы. Ну ладно, поправил и это, выцепив год события из полного имени задания (Job Name). Заработало при тестовом прогоне препроцессора. Не заработало при запуске 0logwatch.

Шозанах?! Полез разбираться в текст самого 0logwatch и что же я увидел?

# Setting ENV for scripts invoked by this script.
$ENV{'LC_ALL'} = "C";
# Using setlocale to set locale for this script.
use POSIX qw(locale_h);
setlocale(LC_ALL, "C");

И точно, препроцессоры формируют регулярное выражение для поиска при помощи Logwatch::TimeFilter, и в локали "C" август выглядит как "Aug", а в локали логов Бакулы - как "Авг". Сделал временную смену локали в applybaculadate на ru_RU.UTF-8. Проверил. Заработало!

Для желающих под катом - тексты рабочих скриптов и конфигурационных файлов (thx tohtml.com) Read more... ) UPD: Скрипт applybaculadate теперь не спотыкается на пространных сообщениях об ошибках (см. use locale; и $ThisLine =~ m/^\D+/ ).

Казалось бы, что может быть проще покупки стандартного компьютера "НЭТА"? Ан-нет! Это вылилось в целое мероприятие.

Я увидел подходящую конфигурацию на сайте и сразу же позвонил в магазин, где мне стандартно ответили:
- Компания "НЭТА". Здравствуйте!
- Здравствуйте, есть ли у в наличии компьютер "НЭТА-Стандарт 2 конфигурация 1"?
На этот вопрос последовал менее всего ожидаемый ответ:
- Не могли бы вы перечислить его комплектацию?..

Очень жалею, что не воскликнул: "А на кой хер вам тогда стандарт?!" Было бы смешно. Остаток разговора был сугубо по делу, в конце мне предложили компьютер зарезервировать, и я с радостью согласился - вдруг кто-то другой его купит до меня?

Казалось, дальше нужно было только забашлять денег и получить на выдаче коробку с системным блоком, но это было бы не так интересно! Сотрудник, отвечавший по телефону, не представился, и в этом не было особого смысла с моей точки зрения. Поэтому в магазине я обратился к первому попавшемуся менеджеру со словами: "Здравствуйте, я вчера резервировал компьютер на фамилию %username%." Проверка по фамилии в базе ничего не дала. Проверка по похожим фамилиям и по номеру телефона - тоже. При поиске по названию модели, наконец, выяснилось, что данный системник помещён в какой-то специальный резерв без указания имени клиента. А я-то подумал, что телефонный разговор закончился как надо, несмотря на сумбурное начало...

Менеджер подозвал того самого моего собеседника, по имени Алексей С***вич, указал тому на ошибку и отправил оформлять покупку до логического завершения. Вроде бы (вроде бы!) он таки её завершил без косяков.

Когда я установил ОС, оказалось, что она не видит второе ядро процессора и не использует управление питанием (шутка ли, Windows XP завершается со словами "Теперь питание компьютера можно отключить", - никогда такого не видывал раньше!). В общем-то, здесь больше косяки самой ОС, но я склонен и эту фичу частично приписать "НЭТе", потому что стандартная конфигурация должна работать без танцев с бубном. Зацените объём работы по включению второго ядра.

Резюме: Ни в персоналках, ни в серверах доверять "НЭТе" нельзя. Рассказ о серверах читайте здесь.

UPD: Как же я забыл:) Под такую покупку я захотел оформить себе дисконтную карту, и мне сначала не отказали. Правда потом выяснилось, что для этого надо рассчитываться живыми деньгами, а по банковской карте у них не срабатывает регистрация клиента для накопления скидок. Ну как так можно?! Что за подход к написанию приложений? Чтобы оформить скидку, мне надо купить какую-нибудь мелочь, чтобы только мои рублики прошли через кассу. Цирк!

IE - ущербен практически во всём и монополистичен; распространён только за счёт этого; но! корректно отображает большинство сайтов; ещё бы, веб-дизайнеру трудно объяснить, почему его интерфейс не отображается у метафорических "тётенек" - обычных пользователей.

Opera - массово популярен в России (в пределах доли, не затронутой IE), но тормозит на JavaScript'ах и в целом удобен лишь при низкоскоростном подключении.

Firefox - работает быстрее, но тоже раздражает мелочами.

Chrome - ну, более-менее, но нет плагинов. Ждём версии 2.0, а в ней плагины и официальное портирование на Linux. UPD:Дождались. Вторая бета уже умеет полноэкранный режим и прокрутку при помощи средней кнопки мыши (подумать только!), но содержит очень неочевидный подвох! Если вы нажали на ссылку скачивания файла, к которой не было информации о размере, и после начала скачивания решили, что размер слишком велик, то вы отменяете закачку, так? Всяко ведь бывает. То ждать долго, то провайдер не даёт безлимитный тариф. А вот хуй! Хром продолжает качать, но предпочитает вам этого не показывать!
Это бэта, но баг всё равно поражает.

Нет счастья в браузерах!

The Bat! - отличная юзабельность и любовь большинства пользователей. Удобные шаблоны "из коробки" и интуитивная понятность. НО! Работа с IMAP'ом, как с POP'ом (sic!), со всеми вытекающими из этого клюками и зависаниями заданий. Про подводные камни настройки имапа надо писать отдельный пост.

Outlook - в той или иной версии есть везде, и поддерживает IMAP. Но как только начинается работа не с Exchange и не простым получением-отправкой, сразу же вылазят проблемы.

Thunderbird - с имапом и попом проблем нет, что приятно. Но блять, где шаблоны?! Как вообще вести интенсивную переписку без потери времени на вставку приветствий и подписей в письмах?!!

Нет, не видно счастья в почтовиках!

ICQ и ICQ Lite - из них так и прёт проприетарность и избыточность. Фу! Пользоваться неприятно, хотя и можно во время отключений протоколов (когда же они закончатся?! мы уже перешли на собственный Jabber-сервер с транспортом ICQ; GTalk тоже не забываем).

Miranda IM - уже лучше, особенно плагины на все случаи жизни (привет Jabber'у). Недостатки пока ищу. В частности, для каждого второго, третьего и т.д. аккаунта какого-то протокола требуется скопипастить DLL плагина.

QIP - создатель слегка чудак. Чего стоит выпуск обновления лёгкой версии с задержкой относительно QIP Infium, с целью пересадить пользователей на эту гадость, которая требует регистрации и по умолчанию отправляет пароли от всех аккаунтов на сервера QIP! Да, можно изменить умолчание. Да можно указать специальный ключ для запуска без логина на qip.ru. НО! Надо знать про это умолчание ДО первого логина, иначе все пароли окажутся скомпрометированными. А уж многие ли из пользователей знают про существование ключа?

Ну и какое счастье с такими постановками? Только переписка, "несмотря на".

ФФух, что-то я не в духе.

На исходе 108 года

  • Dec. 12th, 2008 at 7:32 AM

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

Когда же наутро пришла мысль нормально протестировать новые наработки (не только countdown), то выяснилась неприятность: разные браузеры по-разному реализуют метод Date.getYear, и возвращают либо год от Р.Х., либо от 1900. Увиденное неприятно удивило. Я формирую строку с датой окончания отсчёта вручную, и при этом требуется задать год именно от Р.Х. Понятно, что можно тупо сделать

current_year = date.getYear < 1900 ? date.getYear() + 1900 : date.getYear();

но тогда никуда не денется зуд узнать, откуда растут ноги у явления, и кто же таки виноват в несоблюдении стандарта, если он вообще есть.

Не доходя до стандарта, я быстро обнаружил многими строчками ниже в таблице методов объекта Date то, что надо было заметить в самом начале - метод getFullYear()! И рекомендацию использовать его, а не getYear(), впрочем, без объяснений почему. Видимо, и так всё ясно. Но мой интерес на этом не иссяк и возник вопрос, насколько же по-разному разработчики движков JavaScript разных браузеров реализовали простой, в общем-то, метод.

По результатам была написана страничка для быстрого сбора информации о поведении браузеров. Вот её ядро:

with(document){
    write("<tr> <td>" + navigator.appName + "/" + navigator.appCodeName + 
          "</td><td>" + navigator.appVersion + 
          "</td><td>" + navigator.platform + 
          "</td><td>" + date.getYear() + 
          "</td><td>" + navigator.userAgent + "</td></tr>\n");
}
И такие вот данные она собрала:
appName/appCodeName appVersion platform date.getYear() userAgent
Netscape/Mozilla5.0 (X11; ru)Linux i686108Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008111217 Fedora/3.0.4-1.fc9 Firefox/3.0.4
Opera/Mozilla 9.62 (X11; Linux i686; U; ru) Linux 2008 Opera/9.62 (X11; Linux i686; U; ru) Presto/2.1.1
Netscape/Mozilla 5.0 (compatible; Konqueror/4.1; Linux) KHTML/4.1.2 (like Gecko) Fedora/4.1.2-5.fc9 Linux i686 108 Mozilla/5.0 (compatible; Konqueror/4.1; Linux) KHTML/4.1.2 (like Gecko) Fedora/4.1.2-5.fc9
Microsoft Internet Explorer/Mozilla4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)Win322008Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Netscape/Mozilla5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13Win32108Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13
Opera/Mozilla9.52 (Windows NT 5.1; U; en-GB)Win322008Opera/9.52 (Windows NT 5.1; U; en-GB)
Netscape/Mozilla5.0 (Windows; ru)Win32108Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Разброс большой, а метод getYear() из-за этого скорее мёртв, чем жив. При испльзовании getFullYear() меня уже не волнует будет ли он когда-то исключен из JavaScript.

Bugland C++ Builder 2007

  • Nov. 16th, 2008 at 3:56 PM
Мои заметки о неисчислимых косяках этой безголовой среды разработки. Начну с фундаментальных ошибок.
  • Введение расширений языка C++, лишающих код совместимости с нормальными компиляторами и средами разработки. Это родовое проклятье, и оно может быть исправлено только могилой.
  • Отсутствие средств форматирования кода. Нельзя взять чей-то небрежно оформленный исходник и привести его в человеческий вид. Нельзя даже расставить табуляции, соответсвующие уровню вложенности конструкций. Нельзя одним махом закомментировать или раскомментировать блок кода. Ничего нельзя. О меню, подобном Edit->Advanced в Visual Studio, приходится только мечтать.
  • Отсутствие внятного рефакторинга. Покажите мне, как в меню Refactor отобразить элементы кроме единственного "Rename..." (который не работает, к тому же)! UPD: К Студии та же претензия.
  • Глючный отладчик - как вам такое? Это уже не сапожник без сапог, это намного трагичнее. При запуске среды по клику на файле проекта отладчик вообще не показывает значения переменных. При запуске по ярлыку в "Пуске" - показывает... до первого закрытия приложения про крестику, а не по Program Reset (Ctrl-F2). Впрочем, после пятого ресета и такой экземпляр среды перестаёт показывать watch'и, с вытекающей из этого необходимостью перезапуска IDE, открытия файлов заново, расстановки точек останова с нуля, заполнения watch list'а и прочих радостей насильно прерванной работы.
Достающие, отвлекающие и раздражающие мелочи
  • Контекстное меню в результатах поиска по файлам зависает always on top и закрывается лишь по истечении достаточно долгого времени. Раздражает жутко самим фактом существования и мешает редактировать код. UPD:Против этого помогает перетаскивание окна.
  • Список модулей в окне Project Manager нельзя отсортировать по алфавиту; модули перечислены в порядке их добавления в проект, а точнее - в порядке их перечисленя в файле проекта, и осмысленный поиск в этом наборе возможен только полным перебором, что просто отвратительно! Окно View Unit (Ctrl-F12) не спасает в ряде ситуаций, т.к. в нём нет контекстных меню для операций с модулями.
  • Автодополнение синтаксиса C++ отличается редкостным идиотизмом! При вводе слова "for" редактор любезно вставляет for ( i=0; i<10; i++) { } а на "if" быстро реагирует словами if (true) { } Видимо, в Борланде чаще всего пишут циклы до десяти и делают только Ъ конструкции, а обрамляют их такими псевдо-условными операторами исключительно для подчёркивания их трууушности. Удивляюсь! Наверное у них в каждом методе заранее определа переменная i, раз они не стали автоподставлять что-то в духе for ( int i=0; %CARET_HERE% ; i++ ) { }.
  • Окно редактирования кода нельзя (!) разбить на две части. Нельзя открыть файл более чем в одном окне. Nuff said.
  • При написании символов на русском языке (и, видимо, на любом другом языке с не-латинским алфавитом) среда считает одну букву за две (!) и делает горизонтальную прокрутку на столько символов раньше, сколько в строке русских (не-латинских) символов. При написании серьёзных комментариев впечатление такое, что левая часть пропадает; приходится её специально прокручивать назад. Живём в век Юникода, ага.
  • Числа, начинающиеся с точки, не подсвечиваются как числа. То есть, 0.975 - это редактор понимает, а .975 - уже нет.
  • Нет полноэкранного режима редактирования.
  • При переключении из редактора на другое окно по альт-табу и возвращения в редактор - сюрприз! - фокус теряется и вернуть его можно только кликом мышки.
  • Чтобы сменить конфигурации сборки (например, с Release на Debug или обратно), нужно выполнить семь (!) кликов мышкой.
  • Набор панелей инструментов меняется только из главного меню. При включении/отключении более одной панели, беготня по его пунктам моментально надоедает.

Примеры кода, которые данный компилятор считает ошибочными. Естественно, ошибок в них нет.

  • class foo{
    public:
    	static const int bar;
    	static const double barbar[];
    };
    
    const int foo::bar = 4;
    const double foo::barbar[foo::bar] = { 0,1,2,3};
    //                          ^
    // [BCC32 Error]: E2313 Constant expression required
    

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

Бэкап на скорую руку

  • Sep. 11th, 2008 at 1:05 AM
Если надо бэкапить буквально несколько файлов, то не нужно городить огород из Бакулы или других средств общего назначения. Проще внести файлы в репозиторий системы контроля версий и кроном запускать скрипт, который будет делать коммиты.

Плюсы: контроль версий; передача только diff'ов; возможность проверять наличие изменений.

Минусы: необходимость иметь сервер с SVN/CVS/...; появление лишних директорий; необходимость выделять в репе отдельную директорию под каждую физическую директорию с файлами для бэкапа; издержки при копировании больших бинарных файлов, например, быстро разрастающуюся репу придётся периодически чистить.

Жаль, что не я первый догадался:)

Magic UTF-8 in Perl

  • Aug. 15th, 2008 at 1:12 PM
Вот такой код вполне исполняется интерпретатором:
use strict;
use utf8;
use open qw(:std :utf8);

my $переменная = "значение";

sub функция{
    print @_;
}

функция($переменная);

Я в шоке.

Наблюдение

  • Jun. 13th, 2008 at 6:35 PM
Пересидел на работе - это когда то и дело вводишь рабочий пароль в домашнюю машину и успеваешь нажать Enter.

Дебилизм в действии

  • May. 30th, 2008 at 11:17 PM
Вот ведь какая штука получается. Некий тип с поведением полного морального урода пытается вывести из себя сотрудника техподдержки Стрима. Сам тип (не буду хайлайтить его имя) совершенно не вызывает никакой симпатии. Но чёрт возьми, зачем уделять столько внимания идиотской выходке, создавать фотожабы, записывать вторичные ролики, создавать топики в форумах, группы в контакте?! Ппц, люди! Как от этого можно получать удовольствие?! Ведь не из-под палки же вы разводите эту активность, не по принуждению! Отказываюсь это понимать.

ЫЫЫ, Овечкин жжот!

  • May. 24th, 2008 at 4:48 PM
Есть такая примета у суеверных канадцев. Перед началом крупного турнира они замуровывают в лед в центре площадки один доллар. Иначе он называется "луни" или "гагара на удачу" - серебряная однодолларовая монета выпущена к Олимпиаде-2010 в Ванкувере.

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

Овечкин забрал эту самую счастливую монетку себе. И собирается вместе со своим лучшим другом - защитником сборной России Ильей Никулиным распилить ее пополам и носить на шее до Олипиады-2010 в канадском Ванкувере, пишет "Советский спорт".

allhockey.ru


Ржал. Не мог:)

Играюсь с Бакулой

  • Feb. 23rd, 2008 at 7:07 PM
Попинал бакулу на предмет сжатия бэкапов. Оказалось, что опция Compression применяется только к тем файлам, которые совпали с масками или регэксами в ТОЙ ЖЕ САМОЙ секции Options, например:

FileSet {
   Name = "Foo Set"
   Include {
     Options {
       Compression = GZIP
       Signature = MD5
       RegexFile = ".*\.(doc|docx|xls|xlsx|...insert any another extensions...)$"
     }
     Options {
       RegexFile = ".*"
       Exclude = Yes
     }
     File = /home/user
   }
}

Такой FileSet сжимает файлы, как и ожидалось. Если захочется включить в секцию список регэксов из файла (@/.../lots_of_regexes), то надо включать его именно в ту секцию Options, в которой определено сжатие, либо включать отдельно целую секцию со всеми нужными определениями. Выбор альтернативы зависит от поставленных целей.

Tags: