четверг, 25 июня 2009 г.

Обновил ffmpeg...

Ну не ffmpeg, а хедеры паскалевские для него, ну и пересобрал dll-ки есессно

Основательно не тестил, но пока тьфу-тьфу-тьфу старые проекты вроде работают.. "Портировалось" практически безболезнено, в основном менял в uses avutil на pixfmt

Брать тут (тут и хедеры, и dll готовые.. все из svn ~ 18-19 июня), если чего не работает - пробуйте жаловаться..

А я между прочим был на море...

И там между прочим просто отлично... Несмотря на июнь, казалось бы еще ж не жара - но вода теплая, зато ничего в ней не развелось еще, не плавает зелень разная да жуки всяческие морские Может оно где-то всегда так, но в Кириловке (это Азовское море) вот повезло.. Зато с чего кириловчане взяли, что их село - пуп земли, непонятно; но цены на все такие, как будто-бы как минимум все там на золотых блюдцах подается :) Но зато если все нужное привезти с собой ;)

вторник, 16 июня 2009 г.

Это анекдот..

Между прочим разжигающий межрассовую ненависть, но пофиг, ибо прикольный:

Дзвінок. Путін знімає слухавку.
- Гальо, пане президенте, ту Місько зі Станіслава! Телефоную, жеби вам вповісти, же ми ту вам офіційно війну декляруємо.
- Харашо Міша, ето действительно важная новость. А большая у вас армия?
- Ну, зара... (щитає)... Я, Влодко, сусід Стефко і всі, шо ту в преферанс грали. То нас разом вісім.
- Должен сказать тебе, Міша, что у меня в армії 100 тисяч людей, каториє только ждут маєво пріказа.
- Холєра, я зара вам віддзвоню. ..
(за якийсь час)... - Гальо, прошу пана президента, стан війни не скасовано! До нас приєдналося ше штири хлопаки з сусідньої кнайпи.
- Должен сказать тебе, Міша, что со времені нашева последнєва разгавора я увеличил армию до 200 тисяч человек!
- Най го холєра вхопе! Я ще зателефоную.
(за якийсь час)...
- Слава Йсу, пане Путін! Я сі тєжко вибачєю, але мусимо ся вицофати з тої войни.
- Неужели? Очень жаль. А почему ето ви вдруг передумалі?
- Ну, ми ту посиділи за пару гальбами пива, так си між собов порадили, і вздріли, же аж ніяк не зможемо нагодувати 200 тисяч плєнних москалів.

Было испытание №3..

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

Но очевидцы говорят, что получилось неплохо :)

пятница, 12 июня 2009 г.

Испытание №2..

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

Вообще это уже смахивает на "что вижу то пишу" :) но зато можно будет "хронологию" если что вспомнить (я в прошл. году когда ремонт делал - кажется что все лето на него потратил):

- 18 мая мы сделали первый набросок, который собственно не очень и поменялся по ходу дела;
- 25 мая был готов чертеж и список для распила
- 26 мая отнесли чертежи
- 1 июня привезли доски
- 3 июня начал сборку
- 9 июня уже сам испытал 2-й этаж
- 11 июня заказчик обжил новое спальное место

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



Наконец (хоть и всего на пару дней) спала жара, +35 - это жесть просто..


четверг, 11 июня 2009 г.

Про школу..

Само приплыло - Отмечая день учителя

Особенно в тему, потому что сегодня жену классная попросила в школу прити и директору дифирамб на каком-то собрании попеть..

среда, 10 июня 2009 г.

Про ремонт..

У меня в доме снова как после стихийного бедствия.. готовимся к ремонту

Надо что-то сделать с комнатой 3*3.5 м, в которой живем с женой; собственно размахиваться особо не на что - у нового окна (с установки которого начался бардак, который дал старт ремонту) стоят мои башни-близнецы,  они там "навечно" на ближайшее время (сейчас вижу, можно было бы делать не такими глубокими - до сих пор полупустые.. правда размер столешницы между ними определяется как раз глубиной шкафа). Напротив окна - двери в комнату (которые сняли, потому что открываясь в комнату занимают много места, открываясь в коридор - то же самое.. хотели дверь-гармошку, но чтото они сейчас такие убогие), слева в углу стоит огромезный диван, на котором очень удобно спать или валяться перед телевизором - который на тумбочке у стены справа (а в плане перевесится чуть выше на стену)

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

Так что когда нормальные люди едут на море, я еду за шпаклевкой и прочим :)

вторник, 9 июня 2009 г.

Про "Терминатора-4"..

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

Как выйдет на dvd или в hdtv - пересмотрю с удовольствием дома; задумался, идти ли на Трансформеров-2..

Чего я зацепился.. а вот с этого: упрощенный сценарий Терминатора-4 :)

Кровать ну уже совсем почти..

С 3-я выходными время как вода в песок куда-то ушло :( так что кровать моя все еще не сделана полностью.. но прогресс налице: поставили ее на ее место, сделал верхнее "корыто", собрал несколько ящиков, собрал частично ступеньки, испытал :) :



Теперь точно не страшно никого туда запустить, раз тест с двойной нагрузкой прошел ;)

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

Как всегда накосячили немного и я, и программа (из-за меня скорее всего конечно), так что надо подрезать 3 детальки, чтобы было совсем все красиво - чем и попросил заняться жену сегодня, вечером буду заканчивать ступеньки..

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


пятница, 5 июня 2009 г.

Про drag-n-drop

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

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

  • добавить .pas файл в проект или путь к файлу в настройки окружения - кому как нравится
  • добавить в uses формы, которая будет принимать дропы, ссылку на модуль
  • создать 2 обработчика, для реакции на "мышка с обьектом над нами" и "юзер бросил нам обьект"
  • ну и создать собственно экземпляр класса в подходящем месте

Где-то вот так:

...
type
  TfrmMain = class(TForm)
  ...
  private
  ...
    procedure FileDropEvent (Sender: TObject; const Filenames: TWideStrings);
    procedure FileEnterEvent (Sender: TObject; const Filenames: TWideStrings; var Accept: boolean);
  public
    { Public declarations }
  end;
var
  frmMain: TfrmMain;

implementation

uses
  DragDropSupportUnit, ActiveX;

var
  FileDrop: TFileDrop;

{$R *.dfm}

...

procedure TfrmMain.FileEnterEvent(Sender: TObject; const Filenames: TWideStrings; var Accept: boolean);
begin
   // разрешим дропать только файлы по какому-то правилу - скажем только файлы .mp3
  Accept := AnsiLowerCase ( ExtractFileExt ( Filenames [0] ) ) = '.flv';
end;

procedure TfrmMain.FileDropEvent(Sender: TObject; const Filenames: TWideStrings);
begin
  // прореагируем на бросание файлов на контрол (файлов может быть и несколько)
  if Filenames.Count > 1 then
  begin
    MessageBox(Handle, 'Many files - will be used only first', 'Warning', MB_OK + MB_ICONINFORMATION);
  end;
  edSource.Text := Filenames [0];
end;

...

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ...
  FileDrop := TFileDrop.Create ( FileDropEvent, FileEnterEvent );
  RegisterDragDrop (Handle, FileDrop as IDropTarget);
  ...
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  ...
  RevokeDragDrop(handle);
  ...
end;

Это все: вызов RegisterDragDrop назначает контрол, handle которого передали параметром, приемником драг-дропа (так что это может быть как вся форма, так и к примеру только поле ввода.. дропаем файл на поле ввода и там тут же появляется имя файла), закрывая программу вертаем все взад.

Код собственно полезного модуля (мне лениво в пятницу вечером делать архив, ложить куда-то на рапиду.. скопипастить в ide да сохранить):

// использование: создать обьект, передав ему указатели на обработчики
// OnEnter и OnDrop и зарегистрировать приемник drag-drop-а:
//     RegisterDragDrop (Handle, FFileDrop as IDropTarget);
unit DragDropSupportUnit;

interface

uses
  windows, sysutils, widestrings, ActiveX, shellAPI;

type
  TFileDropEvent = procedure (Sender: TObject; const Filenames: TWideStrings) of object;
  TFileEnterEvent = procedure (Sender: TObject; const Filenames: TWideStrings; var Accept: boolean) of object;

  TFileDrop = class (TInterfacedObject, IDropTarget)
  private
    FDropEvent: TFileDropEvent;
    FEnterEvent: TFileEnterEvent;
    FFilenames: TWideStrings;
    FCanDrop: boolean;
  public
    constructor Create (AOnDrop: TFileDropEvent; AOnEnter: TFileEnterEvent);
    destructor Destroy; override;

    function DragEnter(const dataObj: IDataObject; grfKeyState: Longint;
      pt: TPoint; var dwEffect: Longint): HResult; stdcall;
    function DragOver(grfKeyState: Longint; pt: TPoint;
      var dwEffect: Longint): HResult; stdcall;
    function DragLeave: HResult; stdcall;
    function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint;
      var dwEffect: Longint): HResult; stdcall;
  end;


implementation

{ TFileDrop }

constructor TFileDrop.Create(AOnDrop: TFileDropEvent;
  AOnEnter: TFileEnterEvent);
begin
  inherited Create;
  FDropEvent := AOnDrop;
  FEnterEvent := AOnEnter;
  FCanDrop := false;

  FFilenames := TWideStringList.Create;
end;

destructor TFileDrop.Destroy;
begin
  FFilenames.Free;
  inherited;
end;

function TFileDrop.DragEnter(const dataObj: IDataObject;
  grfKeyState: Integer; pt: TPoint; var dwEffect: Integer): HResult;
var
  medium: TStgMedium;
  format: TFormatEtc;
  fn: array [0..MAX_PATH] of char;
  fcount, i: integer;
begin
  dataObj._AddRef;

  format.cfFormat := CF_HDROP;
  format.ptd := nil;
  format.dwAspect := DVASPECT_CONTENT;
  format.lindex := -1;
  format.tymed := TYMED_HGLOBAL;

  if dataObj.GetData (format, medium) = S_OK then
  begin
    fcount := DragQueryFile (medium.hGlobal, $FFFFFFFF, nil, 0);
    if fcount > 0 then
    begin
      for i := 0 to fcount - 1 do
      begin
        DragQueryFile (medium.hGlobal, i, fn, sizeof (fn));
        FFilenames.Add ( string ( fn ) );
      end;
      FCanDrop := true;
    end else
      FFilenames.Clear;
  end;

  if medium.unkForRelease = nil then
    ReleaseStgMedium (medium);
  dataObj._Release;

  if Assigned (FEnterEvent) then
    FEnterEvent (self, FFilenames, FCanDrop);

  if FCanDrop then
    dwEffect := DROPEFFECT_COPY
  else
    dwEffect := DROPEFFECT_NONE;
  Result := S_OK;
end;

function TFileDrop.DragLeave: HResult;
begin
  FFilenames.Clear;
  Result := S_OK;
end;

function TFileDrop.DragOver(grfKeyState: Integer; pt: TPoint;
  var dwEffect: Integer): HResult;
begin
  if FCanDrop then
    dwEffect := DROPEFFECT_COPY
  else
    dwEffect := DROPEFFECT_NONE;
  Result := S_OK;
end;

function TFileDrop.Drop(const dataObj: IDataObject; grfKeyState: Integer;
  pt: TPoint; var dwEffect: Integer): HResult;
begin
  if Assigned (FDropEvent) and FCanDrop then
  begin
    FDropEvent (self, FFilenames);
    dwEffect := DROPEFFECT_COPY;
  end else
    dwEffect := DROPEFFECT_NONE;

  FFilenames.Clear;
  Result := S_OK;
end;

initialization
  OleInitialize(nil);

finalization
  OleUninitialize;

end.

Про халяву и свистелки..

Я жутко падок до свистелок и перделок, поделать с чем ничего не могу :) поэтому в этом супер-блоге есть свои свистелки и остальное - в "бесполезностях".. ну а как, пользы нет особой - зато прикольненько :)

Хотя про пользу - ваучер на 30 минут прислали.. скайп я как-то использую редко и только между компами, а так поиграюсь, раз "холява"..


Вчера вечер прошел в праздном безделье ("Как я встретил вашу маму", 3/8, "Менталист" 1/22 и "Звездный путь") - жена забыла зарядить аккумуляторы днем, вот и бездельничал..

четверг, 4 июня 2009 г.

Про видео-декодирование..

Просто себе на заметку (типа все, что написал - запомнил): бился с непонятным багом, когда не хотело декодироваться видео в On2TrueMotion из flv файла.. ладно бы был совсем тупой - но в другой моей же программе этот же файл декодировался :)

А всего-то оказалось, что этот (...) декодер не желает декодировать промежуточные кадры просто так, без "предистории" (т.е. без декодирования ключевого кадра).. из "обычного" flv декодируется любой кадр (при этом для не-ключевого кадра картинка будет серая, а кусочки, которые поменялись с предыдущего кадра, собственно будут содержать это изменение), а этот не желает..

Но я его не виню ;) - он же не с AV падал, а честно говорил на своем непонятном языке машинном - "не получилось декодировать"..

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

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

Кровать в процессе..

Вчера шуруповертил до 11 ночи, пока аккумулятор не сел.. Нашуруповертил:



Заказали 2 матраса (16 см толщиной), обещают привезти на след. неделе.. Я не думал, что даже матрацы у нас и то редкость - дня за 2 думаю я все доделаю уже. Проблема - диван, его заберут, только когда - неясно

среда, 3 июня 2009 г.

Все про кровать и про кровать..

Вчера НАЧАЛОСЬ! :)

Сделал правда совсем мало (6 дырок если быть совсем точным), сидел долго прикидывал - что за чем делать (схему сборки короче); детали большие, места мало, рук всего 2

А, еще - бОльшую часть времени потратил на выпилы небольшие.. в мастерской сказали, что не делают (или делают, но очень уж задорого, не знаю деталей - я заказывать жену посылаю O:-) - я то на работе), так что делал 4 прямоугольных выреза 16х130 мм.. чепуха, а попотел (решил, что 4 выреза пока что не причина покупать электролобзик)

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

Хотя с другой стороны, мой прошлогоднеремонтный девиз остается в силе - "пугаться проблем по мере их появления".. вот перекосятся ящики - тогда и буду переживать

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

Капля нытья - уснул в пол-третьего ночи :'-(

Борюсь со своим новым интернетом; интернет сам по себе неплохой, со скоростями более-менее вроде все хорошо - не могу настроить все, чтобы локальная сеть видела интернет (пока видит только компьютер, собственно к шнурку подключенный)

Но я его победю, тут без вариантов.. спать только очень уж по утрам хочется :)

вторник, 2 июня 2009 г.

Квас, кровать..

Прислали ссылку, теперь хожу облизываюсь - Mangiare e Bere - Окрошка в ледяной вазе.

Собственно не на окрошку (не понимаю я пока, огурцы в воде плавающие есть :) ), а на квас.. обязательно с-агитирую жену попробовать квас сделать!
 
Может даже сегодня - начну кровать собирать, а она пусть мне за это квас готовит. Забрали вчера из распила дрова - а 2 детали (1902*802 между прочим) как-то не заметили и оставили - причем я не участвовал в процессе забирания, так что не виноват ни в чем ;)

Но бешеной собаке ж 3 километра - не круг, так что я "сбегал принес" (мастерская совсем недалеко).. думал помру чесговоря, когда вторую нес, еще и ветер сильный поднялся - норовил перевернуть меня с этим парусом :))

И финал дня - на улице +30С, а я чихаю и сопли ручьем.. это какой-то вселенский заговор, из-за которого я заболел летом :(

понедельник, 1 июня 2009 г.

Новый месяц; новая кровать; новый интернет...

Прям все-все новое навалилось :) :

- лето началось - это раз; причем по температуре - еще позавчера-вчера.. можно "официально" ходить на работу в обрезанных штанах :-]

- мне провели новый интернет домой: Beeline Home Internet, 5 неограниченных трафиком мегобит.. использовать его впрочем как настоящий интернет посмотрю как получится - сайты грузятся так себе (потестил только тытюбик, простые сайты понятно что грузятся хорошо), но фишка интернета дома ж не в этом ;) - а торренты качаются/раздаются на 620/670 кбайт/сек, что есть намнОГО быстрее, чем мой нынешний интернет (ОГО-1, которым я впрочем тоже очень доволен все 3 года пользования)

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