воскресенье, 10 июля 2011 г.

Вот что получается...

...когда делаешь сайт знакомств, а получается всемирная соц.сеть:



Пора бы уже Цукербергу пошевелить мозгой и переобозвать этот Like во что-то типа Это важно, Не пропустите или там Всем,всем,всем

Как порезать mp3 на части

Иногда попадаются аудиокниги, подкасты или лекции сделаные в виде одного mp3-файла длительностью час или два. Слушать такие файлы на портативном плейере одно мучение - стоит только случайно или по необходимости переключиться на другую запись и привет, пять-десять минут ковыряния с микроскопическими кнопками плейера для поиска "где же это я остановился примерно во второй половине этого 70-минутного файла" обеспечены.

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

Желаемая нирвана теперь достигается одной командой:
mp3splt.exe -t 5.00 input.mp3
всё, рядом с input.mp3 лежит нарезка на 5-минутные кусочки:
input_000m_00s__005m_00s.mp3
input_005m_00s__010m_00s.mp3
input_010m_00s__015m_00s.mp3
input_015m_00s__020m_00s.mp3
input_020m_00s__025m_00s.mp3
input_025m_00s__030m_00s.mp3
input_030m_00s__035m_00s.mp3
input_035m_00s__040m_00s.mp3
input_040m_00s__045m_00s.mp3
input_045m_00s__050m_00s.mp3
input_050m_00s__055m_00s.mp3
input_055m_00s__060m_00s.mp3
input_060m_00s__065m_00s.mp3
input_065m_00s__070m_00s.mp3
input_070m_00s__075m_00s.mp3
input_075m_00s__080m_00s.mp3
input_080m_00s__085m_00s.mp3
input_085m_00s__090m_00s.mp3
input_090m_00s__095m_00s.mp3
input_095m_00s__100m_00s.mp3
input_100m_00s__104m_03s_63h.mp3

Утилитка, кстати, умеет резать еще всяко по-разному - с ручным указанием нужного интервала, по данным из CDDB или из .cue-файлов. Есть также неконсольный вариант:

суббота, 9 июля 2011 г.

Создание сайта на IIS из инсталлятора

Смотрю кого-то занесло ко мне с поиском по фразе "как сделать инсталлятор сайта на iis". На самом деле их есть у меня. Вот выдержки из скрипта для Inno Setup, создающего сайт на основе каталога с файлами.

Несколько общих переменных и констант:
var
  WebSiteNamePage: TInputQueryWizardPage;
  DispatchWebSiteName: string;

const
  IISServerName = 'localhost';
  IISServerNumber = '1';
В самом начале убеждаемся, что все необходимое на месте:
function InitializeSetup(): Boolean;
begin
 // Проверка, что установлено все необходимое ПО
 result := IsDotNet35Installed() and IsSQLServerInstalled() and IsIISInstalled();
end;

// Проверка, что установлен Microsoft IIS
function IsIISInstalled() : Boolean;
var
 IIS: Variant;
begin
  try
    IIS := CreateOleObject('IISNamespace');
    result:=true;
  except
    result:=false;
    MsgBox( CustomMessage('InstallIIS'), mbError, MB_OK );
  end;
end;
Собственно создание сайта у меня происходит в PostInstall(), когда уже скопированы все файлы сайта:
// Действия после установки
procedure PostInstall();
begin
 // Создать виртуальный каталог IIS для сайта
 CreateDispatchVirtualDir();
end;

// Создание сайта на основе каталога со скопированными файлами
function CreateDispatchVirtualDir() : Boolean;
var
 IIS, WebSite, WebServer, WebRoot, VDir: Variant;
 ErrorCode: Integer;
begin
 result:=true;
 // подключение к IIS
 try
  IIS := CreateOleObject('IISNamespace');
 except
  result:=false;
  MsgBox( CustomMessage('InstallIIS'), mbError, MB_OK );
 end;

 if result then
 begin
  try
   // берем рычаги
   DispatchWebSiteName := WebSiteNamePage.Values[0];
   WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc');
   WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber);
   WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');

   // удаляем виртуальный каталог, который собираемся создавать
   try
    WebRoot.Delete('IIsWebVirtualDir', DispatchWebSiteName);
    // сохранить изменения
    WebRoot.SetInfo();
   except
   end;

   // создаем виртуальный каталог
   VDir := WebRoot.Create('IIsWebVirtualDir', DispatchWebSiteName);
   VDir.AccessRead := True;
   VDir.AccessScript:=true;
   VDir.DefaultDoc:='default.aspx';
   VDir.AppFriendlyName := DispatchWebSiteName;
   VDir.Path := ExpandConstant('{app}');
   VDir.AppCreate(True);
   // сохранить изменения
   VDir.SetInfo();

   // открываем сайт в браузере
   ShellExec( 'open', 'http://' + IISServerName + '/' + DispatchWebSiteName + '/', '', '', SW_SHOW, ewNoWait, ErrorCode );
   result:=true;
  except
   MsgBox( CustomMessage('VirtualDirNotInstalled'), mbError, MB_OK );
   result:=false;
  end;
 end;
end;
Ну и удаление при деинсталляции:
// Действия после деинсталляции
procedure PostUninstall();
begin
 DeleteDispatchVirtualDir();
end;

// Удаление виртуального каталога
function DeleteDispatchVirtualDir() : Boolean;
var
 IIS, WebSite, WebServer, WebRoot: Variant;
begin
 result:=true;
 // подключение к IIS
 try
  IIS := CreateOleObject('IISNamespace');
 except
  result:=false;
 end;

 if result then
 begin
  try
   // берем рычаги
   WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc');
   WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber);
   WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');

   // удаляем виртуальный каталог
   try
    WebRoot.Delete('IIsWebVirtualDir', DispatchWebSiteName);
    // сохранить изменения
    WebRoot.SetInfo();
   except
   end;
   result:=true;
  except
   result:=false;
  end;
 end;
end;
Скрипт проверен на windows 2003 и 2008. Надо только не забывать в 2008-й при настройке ролей сервера дополнительно инсталлировать компоненты, обеспечивающие совместимость со средствами управления IIS6:

суббота, 2 июля 2011 г.

«Родовой кинжал»

LiveLib - социальная сеть читателей книг

Александра Руда «Родовой кинжал»

Родовой кинжал

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

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

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

А уж если вспомнить известное письмо писателей против пиратов, подписанное автором этой книги... Что тут скажешь... Продолжайте в том же духе и ваши бумажные книги перестанут покупать вообще, только вот кто тут кому злобный буратино?

понедельник, 27 июня 2011 г.

Бег Чистой воды 2011

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

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



















Самых предусмотрительных сопровождает велосипедист с надувной лодкой в рюкзаке:


Эх, зря я оставил дома ласты!


А вот бежать сразу в купальнике - это была хорошая идея!


Зато не пыльно!




Если бежать быстро, вода не успевает расступаться!


Облака спускаются вниз - это к дождю и крутому подъему:


Уфф, где здесь сдают металлолом?







Еще фото здесь - Бег Чистой воды 2011

четверг, 16 июня 2011 г.

Непонятки

На kendoguide выложили видео с небольшими комментариями Масатаке Суми сенсея (8 дан, ханси) после 7-го международного открытого турнира по кендо «Кубок Харькова».



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

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

воскресенье, 5 июня 2011 г.

Гибель империи. Уроки для современной России.

LiveLib - социальная сеть читателей книг

Рецензия на книгу «Гибель империи. Уроки для современной России»

Гибель империи. Уроки для современной России

Читая книгу не мог отделаться от аналогии с Титаником. Грандиозные сооружения, изначально созданные с дефектом в конструкции. В Титанике это были водонепроницаемые переборки в корпусе, заканчивающиеся ниже, чем это было необходимо, Союз создавался эффективным менеджером™ как конструкция жизнеспособная только если её правители и армия готовы при необходимости применять к своему народу насилие в неограниченных масштабах.

Оба сооружения в своё время производили довольно сильное впечатление, особенно если смотреть с мест пассажиров первого класса. Внушали так сказать гордость. А дефекты конструкции наружу не торчали. И моря они рассекали уверенно. Пока не встретили свои айсберги. Титаник пожалуй имел шанс увернуться и проплавать лет 100 до естественной смерти в виде разделки на металлолом, Союз же встретил свое "нефтяное проклятие" закономерно, разве что в очень неудачное время. Ну а дальше и там и там неотвратимо сыграли дефекты в конструкции, Титаники идут на дно, шлюпок на всех рассчитано не было. Опять же пассажиры и команда чуть ли не до самого конца не верили, что всё, конец уже, finita la comedia. Если б вовремя сообразили, может успели бы из будущих утопленников хоть плотиков спасательных понаделать.

Капитаны... Ну так они ж не с прекрасного далёка свалились. Как принято было в их время, так и рулили своими Титаниками.

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

пятница, 3 июня 2011 г.

Венгерская нотация и Силы Зла

LiveLib - социальная сеть читателей книг

Цитата из книги «Джоэл: и снова о программировании»

Джоэл Спольски. «Джоэл: и снова о программировании»

Оригинальную концепцию нотации Симони в Microsoft назвали Apps Hungarian ("венгерской для приложений"), потому что применялась она в отделе приложений (Application Division), который, в частности, разрабатывал Word и Excel. В исходном тексте Excel вы встретите много [префиксов] rw и col, и видя их, сразу поймете, что они относятся к строкам и столбцам. Да, это целые числа, но бессмысленно присваивать значение строки столбцу, и наоборот. В Word, как мне говорили, есть многочисленные [префиксы] xl и xw, где xl означает "горизонтальная координата относительно листа", а xw - "горизонтальная координата относительно окна". Обе переменные целые. Не взаимозаменяемые. В обоих приложениях часто встречается cb, что означает "счетчик байтов". Это счетчик байтов - размер буфера. И если вы видите xl=cb, то это сигнал: очевидно, что код здесь неправильный, потому что полный идиотизм присваивать горизонтальной координате размер буфера.

Нотация Apps Hungarian была чрезвычайно ценна, особенно в эпоху программирования на C, когда компилятор предоставлял не слишком удобную систему типов.

Но затем случилась неприятность.

Силы зла завладели венгерской нотацией.

Никто в точности не знает, но похоже, что это авторы документации из команды Windows неосторожно изобрели то, что стали называть System Hungarian.

Кто-то где-то прочел статью Симони, в которой говорилось о "типе", и решил, что автор имел в виду тип как класс.

В Apps Hungarian были определены очень полезные и содержательные префиксы, такие как ix - для обозначения индекса в массиве, c - для счетчиков, d - для разности и так далее.

В System Hungarian были гораздо менее полезные префиксы, такие как l - для длинного целого, ul - для беззнакового длинного целого.

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

Нотацию System Hungarian распространили; она стала стандартом во всей документации по программированию Windows; её широко рекламировали такие книги, как "Программирование в Windows" Чарльза Петцольда, и она быстро стала доминирующим видом венгерской нотации даже в Microsoft, где только очень немногие программисты помимо разработчиков Word и Excel поняли, какая ошибка была сделана.

А затем пришел Великий Бунт. В конечном счете, программисты, которые никогда не понимали венгерскую нотацию правильно, первые заметили, что то неправильно понятое подмножество, которое они использовали, было Раздражающим и Почти Бесполезным, и восстали против него.

Пик Великого Бунта совпал с первым выпуском .NET. Microsoft наконец начала говорить, что пользоваться венгерской нотацией не рекомендуется. По этому поводу было много веселья. По-моему они даже не потрудились объяснить причин. Просто открыли раздел руководства, посвященный правилам именования, и написали "Не используйте венгерскую нотацию".

Но в нотации Apps Hungarian все-таки очень много полезного, поскольку [...], что важнее всего, она заставляет неправильный код выглядеть неправильно.