30.12.11

Новогодний скринсейвер-открытка 2012

Tags: OpenGL, QT, Программирование / 2:41 pm , Victor Laskin

Happy ney year 2012 screensaver

Давно я не писал в блог - но есть хороший повод! Чтобы качественно поздравить всех с новым годом, я написал новогодний скринсейвер-открытку (QT OpenGl). Для запуска необходима не древняя видеокарта и монитор побольше. Happy new year 2012!

Скачать ~10Mb

14.09.08

Защита от спама в блогах

Tags: Блог / 12:56 pm , Victor Laskin

2$ за 13 комментов” вынудили поставить комментарии на премодерацию. Но когда стало приходить по спам 10 комментов в день пришлось еще подправить код блога.

Как же защититься от спама? Первый уровень защиты - против автоматических рассылок. Достаточно чуть-чуть модифицировать форму, в которой пользователь оставляет комментарий. Например, добавить галочку “Я не бот”, отключенную по умолчанию. Или поставить плагинчик с капчей. Это сразу отсечет весь автоматический спам, но не поможет против ручного спама.

Я решил вместо капчи поставить вопросик, на который быстро может ответить любой программер. Посмотрим насколько это поможет.

Интересно, что большинство владельцев сайтов даже не знают каким способом их раскручивают (75% владельцев сайтов не знают, что их раскручивают спамом в блогах). Бизнес, однако. И дальше будет только хуже…

05.09.08

Курсы доллара и евро: гаджет для висты

Tags: Полезные программы, SilverLight, WPF (.Net 3.0), Программирование / 2:30 pm , Victor Laskin

Давненько хотел написать какой нить гаджет для висты. Изначально хотел сделать это на WPF, но выяснилось что к гаджетам у микрософта другой подход. Посути гаджет - это html веб страница со всеми вытекающим. Поэтому только xbap или silverlight можно засунуть в гаджет (причем стало это можно сделать относительно недавно).

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

Попытка использовать сильверлайт закончилась неудачно. Во первых, под 64-битной вистой сильверлайт не работает в 64-битном сайдбаре. Это можно обойти, запуская 32-ух битную версию сайдбара, но это уже извращение. Во вторых, из сильверлайта в гаджете нельзя нормально обратиться к вебсервису. Это связано с тем, что сильверлайт в гаджете не видит конфигурационных xml файлов и не может получить доступ. Есть workaround, который передает данные в сильверлайт контрол через скрипт AJAX, но я считаю это не очень красивым. 

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

Гаджет курса валют ЦБ для висты

Скачать гаджет

Просто запустите скаченный файл, и гаджет установится. Если этого не произойдет и он откроется как зип архив, то можно на гаджете нажaть Open with… Sidebar. Если и это не поможет, то можно создать папку C:\Users\Ваше имя\AppData\Local\Microsoft\Windows Sidebar\Gadgets\CurrencyRates.gadget\ и в нее скопировать содержимое архива. 

03.09.08

Новый браузер от гуугла: Chrome

Tags: Полезные программы / 1:36 pm , Victor Laskin

 

Гуугл порадовал выпуском нового браузера, который просто обязан потеснить осла и файрфокс на компьютерах продвинутых пользователей. 

Главное достоинство - скорость:

 

На графике скорость исполнения различных тестов JavaScript (источник). 

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

14.08.08

Релиз .NET Framework 3.5SP1 и VS2008 SP1

Tags: WPF (.Net 3.0), Программирование / 6:03 pm , Victor Laskin

Состоялся релиз сервис пака .NET Framework 3.5SP1 и VS2008 SP1.

Доступны они тут.

The .NET Framework 3.5 SP1 delivers:
* Performance increases between 20-45% for WPF-based applications – without having to change any code
* WCF improvements that give developers more control over the way they access data and services
* Streamlined installation experience for client applications
* Improvements in the area of data platform, such as the ADO.NET Entity Framework, ADO.NET Data Services and support for SQL Server 2008’s new features

28.06.08

Как сделать чтоб WPF Popup был не поверх всех окон (или Win32 API живет до сих пор)

Tags: WPF (.Net 3.0), Программирование / 12:21 pm , Victor Laskin

Уже несколько раз подряд за последние дни упираюсь в “пределы” WPF. Причём задачи были отнюдь не экзотические.

Класс Popup генерирует окно, которое располагается поверх всех окон в системе. Если вы хотите изменить это вам поможет только Win32 API:

[DllImport(“user32″, EntryPoint = “SetWindowPos”)]

private static extern int SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, int x, int y, int cx, int cy, UInt32 wFlags);

 

const UInt32 SWP_NOSIZE = 0×0001;

const UInt32 SWP_NOMOVE = 0×0002;

const UInt32 SWP_NOACTIVATE = 0×0010;

static readonly IntPtr HWND_BOTTOM = new IntPtr(1);

static readonly IntPtr HWND_TOP = new IntPtr(0);

 

public static void Popup_SetZOrderTop(Popup pop)

{

IntPtr hwnd = ((HwndSource)PresentationSource.FromVisual(pop.Child)).Handle;

SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

}

 

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

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

public struct POINT

{

public int x;

public int y;

};

 

[DllImport(“user32.dll”)]

static extern bool GetCursorPos(out POINT point);

Еще пара полезных функций (поиск окна и получение его положения):

[DllImport(“user32.dll”, SetLastError = true)]

static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

 

[DllImport(“user32.dll”)]

static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

 

public struct RECT

{

public int left;

public int top;

public int right;

public int bottom;

};

07.06.08

Правильная локализация

Tags: Программирование / 7:45 pm , Victor Laskin

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

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

Структура:

  1. Локализованные (переведённые) строки должны храниться во внешнем файле открытого формата (txt или xml например)
  2. Новый язык нужно мочь подключать без перекомпиляции кода
  3. Приложение должно уметь на любом этапе исполнения переключать язык, перечитать строки из файла и “перерисовать” весь интерфейс
  4. Любая функция по выводу текста должна вызывать функцию вида GetLocalText(string Token), где токен - идентификатор выводимой строчки
  5. Необязательно: Хорошо бы разбить строки по группам и написать маленькую утилитку для их быстрого редактирования и перевода.

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

Актуальны еще рекомендации по языку ресурсных строчек, которые можно найти в MSDN.

Язык:

  1. Не разбивайте фразы на куски, переводчику будет трудно понять как именно эти куски переводить
  2. Аналогично нельзя использовать отдельно многозначные термины или слова, которые могут быть глаголом и существительным одновременно
  3. Учтите, что при переводе размер надписей может увеличиться процентов на 50-75%. Это самая существенная проблема в компактных интерфейсах.

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

01.06.08

Сортировка директорий на C#

Tags: .Net 2.0, Программирование / 4:18 pm , Victor Laskin

Оказывается метод, который возвращает список директорий (GetDirectories) иногда может их не сортировать. Вроде как это происходит на винтах под FATом. Поэтому если Вы где-то визуализируете список директорий, то рекомендую Вам вставить туда алгоритм ручной сортировки, ибо сделать это легко с помощью Array.Sort:

DirectoryInfo[] dirs = dir.GetDirectories();

        

//Сортировочка:

Array.Sort(dirs, 0, dirs.Length, new DirectorySort());

Сам принцип сортировки нужно оформить ввиде класса реализующего интерфейс IComparer:

  class DirectorySort : System.Collections.IComparer

  {

    public int Compare(object x, object y)

    {

      DirectoryInfo d1 = x as DirectoryInfo;

      DirectoryInfo d2 = y as DirectoryInfo;

      return String.Compare(d1.Name, d2.Name, true, CultureInfo.CurrentCulture);

    }

  }

 

Сортировка тут не различает заглавные-прописные буквы и учитывает CurrentCulture.

13.05.08

Вышла бета Service Pack 1 к .NET 3.5 и Visual Studio 2008

Tags: WPF (.Net 3.0), Программирование / 11:29 pm , Victor Laskin

Вышла бета .NET 3.5 Service Pack 1 и Visual Studio 2008, скачать можно тут.

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

добавит под кнопку аппаратную тень:

Еще одна новая возможность заслуживает особого внимания - New .NET Framework Client Profile Setup Package. Это возможность создать компактный дистрибутив для машин, на которых не установлен .Net Framework, в котором будут содержаться только нужные части фреймворка:

Также много чего нового для удобства разработки веб приложений и работы с данными (ADO.NEТ Entity framework и ADO.NET Data Services).

Обещано, что это последняя бета и релиз совсем скоро.

12.05.08

Новая CUDA и конкурс разработчиков

Tags: Программирование / 11:59 am , Victor Laskin

Оказалось, что совсем недавно вышла новая версия (Beta 2.0) технологии CUDA от NVIDIA. Эта технология позволяет использовать мощности графического ядра видеокарт серии geforce 8×00 и выше для математических расчётов. При этом алгоритмы, которые допускают распараллеливание, могут показать огромный выигрышь в производительности.

Cuda

До недавнего релиза эта технология проходила мимо меня, так как просто не работала под 64-х битной Вистой. Но вот наконец она заработала и я поставил себе новые дровишки, cuda sdk и cuda toolkit. Я хотел прикрутить ее к своему проекту по обработке фото PerfectPhotos. Но, к сожалению, оказалось, что драйвера еще сыроваты и начали спонтанно перезапускаться в один прекрасный момент (когда я даже не работал с cuda), а потом дело дошло и до синего экрана, что под вистой является большой редкостью (лично у меня).

А тем временем NVIDIA и iXBT проводят конкурс для разработчиков (об этом я узнал тут).

« Previous entries