четверг, 22 ноября 2007 г.

Связываем PHP и Java через AES шифрование

Задача: нужно зашифровать сообщение на PHP чтобы расшифровать его в Java.

Решение:
1. Использование mcrypt в PHP. Код для шифрования:


002 $cipher = "rijndael-128";
003 $mode = "cbc";
004 $plain_text = "Hello World";
005 $secret_key = "01234567890abcde";
006 $iv = "fedcba9876543210";
007
008 td = mcrypt_module_open($cipher, "", $mode, $iv);
009 mcrypt_generic_init($td, $secret_key, $iv);
010 $cyper_text = mcrypt_generic($td, $plain_text);
011 echo bin2hex($cyper_text);
012 mcrypt_generic_deinit($td);
013 mcrypt_module_close($td);

2. Вывод должен быть следующим:
"ac5c3404f57a5061f36a694eb5d56214"

3. Съедаем данные на выходе Java программой для того чтобы расшифровать


001 import javax.crypto.spec.IvParameterSpec;
002 import javax.crypto.Cipher;
003 import java.security.MessageDigest;
004 import java.security.NoSuchAlgorithmException;
005 import java.lang.Exception;
006 import javax.crypto.spec.SecretKeySpec;
007 import javax.crypto.SecretKey;
008 import java.io.IOException;
009
010 public class tester {
011 public static byte[] hexToBytes(String str) {
012 if (str==null) {
013 return null;
014 } else if (str.length() < 2) {
015 return null;
016 } else {
017 int len = str.length() / 2;
018 byte[] buffer = new byte[len];
019 for (int i=0; i020 buffer[i] = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16);
021 }
022 return buffer;
023 }
024 }
025
026 public static void main(String [] args) throws Exception {
027 Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
028 SecretKeySpec keySpec = new SecretKeySpec("01234567890abcde".getBytes(), "AES");
029 IvParameterSpec ivSpec = new IvParameterSpec("fedcba9876543210".getBytes());
030 cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
031 byte[] outText = cipher.doFinal(hexToBytes("ac5c3404f57a5061f36a694eb5d56214"));
032 System.out.println(new String(outText).trim());
033 }
034 }

Оригинал: http://propaso.com/blog/?p=4


среда, 29 августа 2007 г.

Теперь LinuxFormat можно еще и скачать

Достаточно иметь счет в Webmoney или Яндекс-Деньги и вы - обладатель последнего номера LinuxFormat. Правда вы не получите DVD прилагаемый к журналу (да и получать удовольствие от держания журнала в руках тоже вряд ли сможете). Зато дешевле. И, главное, быстро!

К примеру, августовский номер...


четверг, 14 июня 2007 г.

MonoDevelop 0.14

Несмотря на обещания разработчиков "вот вот" выпустить стабильный релиз 1.0 Mono плавно увеличивает в миноре - с 0.13 до 0.14.

Кроме большого количества исправлений появились новые возможности:

  • Обновленный тулбокс и таблица свойств для дизайнера
  • Поддержка Subversion
  • Экспорт проекта (например в Visual Studio 2005)
  • Генератор пакетов (архив исходников, архив бинарников или tarball на automake)
  • Интеграция в среду (начальные скрипты, .desktop и установка в меню программ)
  • Незначительные зменения в редакторе, менеджере файлов, дизайнере
Ссылки по теме:

Release notes for MonoDevelop 0.14


четверг, 31 мая 2007 г.

C#: Выбор книги

Всегда приходится с чего-то начинать. Знакомиться ближе с C# я решил после прочтения нескольких статей в журнале Linux Format, тем более опыт написания приложений на прародителях (C/C++) у меня уже был.

Поиск книги, которая смогла бы мне помочь меня озадачил: мне не нужно разжевывать что такое переменные или объектная модель, я хорошо знаком с синтаксисом и практикой использования C++. Мне просто нужно понять какие особенности присущи C# и как я могу максимально эффективно их использовать!

Первая книга которая мне попала в руки - C# (самоучитель) Секунова Н. - оказалась достаточно сухой и неинтересной. Множество терминов и определений и минимум диалога с читателем. Книга написано грамотно, но читать ее до зевоты скучно. И назвал бы я ее скорее не самоучитель C# а справочник C#.

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

Вы не поверите - эта книга называется "Полный справочник по C#" Герберта Шилдта! Справочник для обучения? Именно этот справочник. Справочник, который интересно читать. Его легко читать. Автор не пытается оградить читателя от диалога. Это важно, если вы не хотите со сморщенным лбом вчитываться в каждую строчку, а хотите быстро и легко погрузиться в новую технологию. Книга вам не нужна, если вы не знаете основ программирования, но если вы знакомы с C / C++/ Java / PHP и т.п. и хотите быстро научиться C#, я буду рекомендовать вам именно эту книгу!


пятница, 20 апреля 2007 г.

VMware на Ubuntu 7.04

Краткая инструкция о том как быстро установить VMware на Ubuntu 7.04

1. Скачиваем с официального сайта последнюю версию VMware в формате tar.gz

2. Устанавливаем пакеты:
- linux-source
- gcc
- g++

3. Скачиваем патч для VMware vmware-any-any-updateXXX.tar.gz (на момент написания 109)

4. Распаковываем архив с WMware и запускаем в режиме суперпользователя vmware-install.pl:

sudo ./vmware-install.pl

5. Распаковываем скачанный патч и в нем запускаем:
sudo ./runme.pl

и проводим первичную настройку VMWare


четверг, 19 апреля 2007 г.

Обзор Ubuntu 7.04 Feisty Fawn


Вы пытались хотя бы раз пересадить вашего друга на линукс? Если да, то наверняка вы сталкивались с одними и теми же проблемами, вроде "А как мне установить драйвера для видео ?" или "Почему когда я пытаюсь проиграть mp3 у меня вылетает ошибка ?". Для закоренелого пользователя такие вопросы - не проблема. Но, все же, большинство из людей использующих компьютер - это пользователи, которые часто даже не знают что такое "винчестер".

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

Установка


Это очень просто! Еще проще чем в прошлый раз. Вставляем диск в привод, загружаемся с него, жмем на рабочем столе иконку "Install" и запускаем процесс установки. Единственное о чем сразу предупреждаю - не пытайтесь при загрузке с CD включать проприетарные драйвера. После того как я скачал драйвера от NVidia и установил Ubuntu загрузка у меня начиналась только в текстовом режиме (runlevel 3).

У вас спросят пару незначительных вопросов, мол, какой час, где живете (для настройки часового пояса), как отформатировать диск (похоже, единственное место где начинающие пользователи курят - хотя можно по умолчанию установить Ubuntu на весь жесткий диск ;-). Если у вас была установлена Windows вы сможете экспортировать настройки наиболее популярных приложений, а также документы, музыку, картинки из этой ОС. Достаточно просто - вам покажут окошко со списком аккаунтов в Windows - поставьте галочку там где нужно и нажмите на кнопку "ОК". После того как индикатор установки поползет вперед. Только не переживайте, если вдруг при настройке источнико установки Apt (об этом вам напишут возле индикатора) прогресс-бар на несколько минут остановится в одном положении.

Первые шаги


Люди могут долго спорить о вкусах, кому-то нравится работать в KDE, кому-то нравится тема максимально похожая на Windows 98. Но если вы просто хотите работать и готовы потратить самую незначительную часть вашего времени на то чтобы еще раз взглянуть на ваши старые привычки, графическая тема Ubuntu 7.04 вам понравится. Никто не мешает вам позже настроить все по своему вкусу, но когда видишь что установленная "из коробки" система выглядит профессионально и законченно, это еще раз настраивает на положительную работу с новой системой.

Первое что я попытался сделать, так это открыть один из фильмов, который лежал в моем Windows-видеоархиве. Тут же вылетело сообщение что кодека нет (как знакомо!)и мне предложили скачать недостающие кодеки из интернет. Соглашаемся, устанавливаем галки возле предложенных кодеков и жмем "ОК". Брямс! После скачивания я еще раз нажал "Play" в видеопроигрывателе и все заработало!

После я решил настроить видео. Тут история тоже очень короткая: система скачала драйвер для моей видеокарты и попросила перезагрузить компьютер. После того как я включил 3D-Desktop все опять сразу заработало. Так что теперь можно побаловаться с эффектами Compiz.

И еще, что немаловажно - перед установкой Ubuntu 7.04 у меня стояла Ubuntu 6 LTS. Очень хорошо чувствуется - система начала работать быстрее.

PS


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


среда, 18 апреля 2007 г.

Ubuntu 7.04

Считанные часы остались до выпуска новой версии дистрибутива. Теперь мигрировать с Windows-приложений и настраивать поддержку проприетарных кодеков для мультимедиа станет проще. Похоже релиз уже можно начинать качать.

Жители России, как обычно, могут заказать Ubuntu через интернет-магазин.


среда, 21 марта 2007 г.

Ролики. День третий. Полет нормальный.

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


воскресенье, 11 марта 2007 г.

Введение в Gtk#

Эта статья - введение для начинающих программировать на Gtk#. Она поможет тем, кто никогда ранее не программировал для GUI Gtk+. Программисты связанные с API GTK+ другими языками (в т.ч. C, C++, Perl, Python) так же найдут эту статью полезной, т.к. она объясняет основы процесса создания приложений на Mono/C#. Эта статья так же рассказывает об основах использования Glade и libglade как быстрого инструмента создания графического пользовательского интерфейса.

Что такое Gtk#?


Если говорить простым языком, Gtk# - это обертка над gtk+ - кроссплатформенным GUI фреймворком.

С сайта gtk+:
Gtk+ - это мультиплатформенный тулкит для создания графического пользовательского интерфейса. Предоставляя полный набор элементов, gtk+ пригоден для использования в различных проектах, как для небольши забав, так и для приложений уровня предприятия.

На сегодняшний день Gtk+ работает напрямую под любым X сервером, системой Direct Framebuffer и производными Microsoft Windows NT. Сама библиотека вышла из Linux, где она является основой для популярной рабочей среды GNOME. Gtk+ включен практически во все дистрибутивы Linux и прекрасно работает под управлением Windows NT.

Портирование библиотеки для использования напрямую в Mac OSX пока только в планах.

Одно из наиболее популярных заблуждений - то что для работы GTK# обязательно нужно использовать Mono. Это далеко от истины. GTK# может запускаться и работать на любой .NET совместимой среде. GTK# регулярно тестируется на MS.NET и Mono, но может быть запущена так же и на любой другой. Это означает что если вы пишите ваше приложения на GTK# и хотите чтобы ваше приложение было запущено под Windows, вы можете выбрать какую среду использовать - от Microsoft или Mono для Windows.

Установка


Первое что вы захотите сделать - это установить GTK# на ваш компьютер.

Для пользователей Linux, MacOSX, FreeBSD и др.: Проверьте наличие требуемых пакетов для разработки на GTK# в вашем дистрибутиве. Если не можете найти, попробуйте найти пакет который вам подойдет со страницы загрузки. Если и здесь вы не найдете пакета для своей платформы, вам нужно будет скомпилировать GTK# самостоятельно из исходников.

Для Windows: скачайте установочный пакет со страницы загрузок. Вполне возможно вы так же захотите скачать пакет интеграции GTK# для Visual Studio, который позволит использовать GTK# с Microsoft's Visual Studio без необходимости устанавливать Mono.

Внутри библиотек GTK#

GTK# состоит из следующих компонентов:

gtk-sharp Связи для тулкита gtk+ 2.x - кроссплатформенного тулкита для создания грфического пользовательского интерфейса
glib-sharp Связи для тулкита glib 2.x, который предоставляет низкоуровневое не-GUI ядро для gtk+
pango-sharp Связи к Pango - слой для работы и рендеринга с интернациональными текстами
atk-sharp связи к фреймворку atk
gdk-sharp низкоуровневый инструмент для отрисовки элементов gtk+
glade-sharp Glade# позволяет подгружать графические интерфейсы пользователя во время выполнения программы. Это наиболее простой путь создания Gtk# GUI.
art-sharp библиотека рендеринга и работы с векторной графикой
rsvg-sharp библиотека рендеринга SVG
gtk-dotnet интеграция пространства имен Gtk# с System.Drawing.
gnome-sharp Связи с GNOME
gnomevfs-sharp (*) связи для работы с файлами, MIME типами, иконками и т.п. в GNOME.
vte-sharp (*) связи к эмулятору VTE терминала.
gconf-sharp (*) Связи к системе хранения конфигурации GNOME
gtkhtml-sharp (*) Связи к легкому HTML виджету

* - Не доступны в патеке GTK# дляя Windows

Некоторые компоненты не включены в основную поставку GTK#, но заслуживают упоминания, т.к. имеют отношение к GTK# - это Gecko#, Gtksourceview#, Gsf#, Guile#, Gst# и dbus#.

Выбор между GTK# и Glade#


Когда люди начинают изучение Mono часто они могут растеряться - какую библиотеку использовать: Gtk# или Glade#. Для того чтобы понять что именно вам нужно вы должны понимать различия между тем что такое Glade# и что такое Gtk#. Gtk# - это ядро для использования окон и виджетов. Glade# наследуется от Gtk# и позволяет управлять ресурсами виджетов через XML файл. XML для описания вашего GUI может быть сгенерирован при помощи утилиты Glade - WYSIWYG GUI студии дизайна.

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

Для быстрого ознакомления с Glade# вы можете захотеть взглянуть на этот скринкаст Ната Фридмана (Nat Friedman), в котором он создает простое графическое приложение всего за несколько минут.

Ваше первое приложение GTK#

Шаг 1: устройтесь поудобнее

Мы должны чувствовать себя комфортно. Откройте Dr. Pepper и включите любимую музыку. Хорошо, теперь мы готовы.

Шаг 2: создаем директорию и файлы

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

Затем вы захотите открыть shell (Если вы в Windows, откройте меню Start и идите в "Programs->Mono 1.x.x->Mono Command Prompt". Это автоматически утсановит нужные пути, т.о. вам не нужно дополнительно ничего делать). Перейдите в только что созданную директорию. Мы будем часто использовать консоль, поэтому оставьте ее запущенной в фоне.

Вернемся к делу. Откройте свой любимый редактор (MonoDevelop, vi, emacs, notepad и т.д.) и создайте новый пустой проект (если это возможно) или создайте новый пустой файл. Сохраните файл под именем "helloworld.cs".

Шаг 3: Пишем код

Подразумевается что вы уже знакомы с C#, т.о. код описанный ниже не доолжен вызвать никаких проблем в понимании. Мы должны создать новый класс, использовать Gtk# и указать точку входа в нашу программу. Это будет выглядеть примерно так:

 using System;
using Gtk;

public class GtkHelloWorld {

public static void Main() {
Console.WriteLine("HelloWorld");
}

}

Это должно выглядеть очень знакомым для вас. Теперь мы воспользуемся компилятором для компиляции кода. Сохраним созданный файл и перейдем в консоль:

mcs -pkg:gtk-sharp-2.0 helloword.cs

для те кто пользовался csc компилятором в Windows параметр "-pkg:" может показаться малознакомым. Этого параметра не было в csc потому как Mono пришел к нам из мира Linux. Этото параметр позволяет указать на необходимость подключения пакета gtk-sharp-2.0. Т.е. система ищет файл "gtk-sharp-2.0.pc", который содержит данные о местоположении библиотеки для этого пакета (и множество другой информации). Т.е. мы не должны вводить что-то вроде "-r:gtk-sharp-2.0.dll -r:atk-sharp-2.0.dll -r:pango-sharp-2.0.dll ...." руками.

Шаг 4: Добавляем GUI

Давайте вернемся обратно к нашему коду. Уберем строчку с "Console.WriteLine". Первое что мы хотим сделать - создать новое окно:

 using System;
using Gtk;

public class GtkHelloWorld {

public static void Main() {
Application.Init();

//Create the Window
Window myWin = new Window("My first GTK# Application! ");
myWin.Resize(200,200);

//Create a label and put some text in it.
Label myLabel = new Label();
myLabel.Text = "Hello World!!!!";

//Add the label to the form
myWin.Add(myLabel);

//Show Everything
myWin.ShowAll();

Application.Run();
}
}

Теперь скомпилируем код как мы делали это ранее и запустим программу используя `mono HelloWorld.exe`. В итоге вы получите что-то вроде этого:

Мило, не правда ли?

Первая вещь, на которую я отел бы обратить ваше внимание, это то что в отличии от использования System.Windows.Forms мы не должны точно размещать нашу текстовую метку в окне. К примеру, мы не говорим 'myLabel.Left = 100' или 'myLabel.Width = 200' или что-то подобное для добавления текстовой метки. Мы просто указываем 'myWin.Add(...)'. Это связано с тем что 'Gtk.Window' это виджет, который наследуется от Bin, или виджета который размещен в контейнере.

Вторая вещь, которая могла вас заинтересовать, это использование выражений "Application.Init()" и "Application.Run()". Если вы когда-либо ранее использовали System.Windows.Forms это аналогично использованию "Application.Run()" во многих случаях. Обычно, когда приложения заканчивает обработку любого кода в основном потоке, приложение останавливается. Команда "ShowAll()" не блокирует код и продолжает дальнейшее выполнение кода (вплоть до остановки). Команда "Application.Init()" говорит оболочке выполнения "слушать" сигналы поступающие от Gtk.Windows и в момент когда выполняется "Application.Run()" выполнение кода передается основному циклу сообщений. Это позволяет оставаться приложению запущенным до тех пор пока не будут закрыты все окна. Для большей информации смотрите информацию об объекте Application.

Шаг 5: Заполняем окно

Сейчас скорее всего вы спрашиваете себя: "Как я смогу добавить новый виджет на окно, если оно может содержать только один виджет?". Окно действительно может содержать в себе только один виджет, но виджет сам по себе может содержать в себе множество других виджетов. Некоторые из виджетов наследуются от контейнера Gtk.Box, а в некоторых случаях и напрямую от контейнера. Контейнерный виджет Bin наследуется напрямую от виждета-контейнера, как и многие другие виджеты, но Bin может содержать в себе только один элемент управления.

Для того чтобы размещать любое количество виджетов в нашем окне, мы должны добавить на окно один из виджетов, который может содержать в себе другие виджеты. Существует огромное количество виджетов, которые могут делать это, но мы коснемся только некоторых из них, таких как HBox, VBox или Table.

Шаг 6: Добавляем события

Все классы которые наследуются от Widget предоставляют следующие события:
Многие из этих событий могут быть обработаны при помощи стандартного обработчика событий. К примеру:

public static void HandlerMethod(object obj, EventArgs args)

Пример обработки события нажатия на кнопку:

public static void ButtonPressHandler(object obj, ButtonPressEventArgs args)

ButtonPressEventArgs это класс наследуемый от EventArgs. Класс ButtonPressEventArgs, как и множество других в Gtk#, добавляет свойство Gtk.Event (или что-то наследуемое от Gtk.Event) к EventArgs.

Типы Gdk.Event:

К примеру, для использования события Gdk.Event мы можем использовать что-то вроде:

using Gdk;
...
widget.ButtonPressEvent += new ButtonPressEventHandler(ButtonPressHandler);
...
private void ButtonPressHandler(object obj, ButtonPressEventArgs args) {
// single click
if (args.Event.Type == EventType.ButtonPress) {
...
}
// double click
if (args.Event.Type == EventType.TwoButtonPress) {
...
}

// the left button was used
if (args.Event.Button == 1) {
...
}
}

В примере выше вы можете увидеть как мы можем обнаружить было ли одиночное нажатие мышкой или это был двойной клик.

Ваше первое Glade# приложение

Шаг 1: Что такое Glade#

Glade# это набор связей с libglade в C# для того чтобы легко создавать GUI приложения используя визуальные средства и сохранять их в формате, который приложение сможет использовать во время выполнения чтобы создать интерфейс. На данный момент существует две среды для генерирования файлов в формате glade: Glade и Stetic.

Что представляют из себя glade файлы ?

Файлы написанные на XML которые представляют собой интерфейс пользователя в Gtk+ со всеми аттрибутами и свойствами.

как выглядит файл .glade ?

файл gui.glade:
Файл .glade содержит в себе всю необходимую информацию для того чтобы библиотека libglade могла воссоздать нужный вам дизайн.

Шаг 2: Интеграция файлов Glade в нашу программу

Подразумевается что файл .glade уже был создан каким-либо путем, при помощи Glade или Stetic. Вы можете просмотреть видео об использовании Stetic.

Для использования в нашем примере мы предполагаем что glade файл был сохранен в файле под названием gui.glade, который содержит в себе определение окна window1, кнопки button1 и текстовой метки label1.

Мы должны создать директивы для использования Gtk# и Glade# а затем создать новый класс и точку входа в нашем приложении. Что-то вроде этого:

// file: glade.cs
using System;
using Gtk;
using Glade;
public class GladeApp
{
public static void Main (string[] args)
{
new GladeApp (args);
}

public GladeApp (string[] args)
{
Application.Init();

Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
gxml.Autoconnect (this);
Application.Run();
}
}

Как компилировать?

Теперь мы должны откомпилировать наш исходный файл glade.cs используя пространство имен glade, которые находятся в glade-sharp DLL. Команда компиляции:

$ mcs -pkg:glade-sharp -resource:gui.glade glade.cs

При помощи этой команды мы создаем программу glade.exe, параметр -resource вставляет наш файл gui.glade в выполняемую программу.

Передавая null в качестве первого параметра в конструктор Glade.XML мы указываем libglade загружать glade файл из ресурсов. как вариант может быть использована загрузка из файла в файловой системе, что особенно полезно когда вы не хотите перекомпилировать приложение после каждого изменения файла интерфейса.

Если мы запустим нашу программу мы увидим наш GUI. В то же время нажатие на кнопку на даст нам никакого эффекта, т.к. мы не сопоставили никакого действия на событие виджета. Продолжайте чтение для того чтобы узнать как это можно сделать.

Шаг 3: Как использовать Glade# в моем коде

Для того чтбы получить доступ к виджету из gui.glade мы должны знать имя этого объекта и его тип. Использование виджета в C# происходит следующим образом (обратите так же внимание на аттрибуты [Widget]:

[Widget]
Тип Название;

Мы добавляем это определение в наш пример следующим образом:

using System;
using Gtk;
using Glade;
public class GladeApp
{
public static void Main (string[] args)
{
new GladeApp (args);
}

public GladeApp (string[] args)
{
Application.Init();

Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
gxml.Autoconnect (this);
Application.Run();
}

[Widget]
Button button1;

[Widget]
Label label1;
}

Как добавлять события

Для добавления новых событий следуйте нижеуказанному примеру. Вы так же можете добавлять события через Glade.

using System;
using Gtk;
using Glade;
public class GladeApp
{
public static void Main (string[] args)
{
new GladeApp (args);
}

public GladeApp (string[] args)
{
Application.Init();

Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
gxml.Autoconnect (this);

button1.Clicked += OnPressButtonEvent;

Application.Run();
}

[Glade.Widget]
Button button1;

[Glade.Widget]
Label label1;

public void OnPressButtonEvent( object o, EventArgs e)
{
Console.WriteLine("Button press");
label1.Text = "Mono";
}
}

Оригинал статьи: http://www.mono-project.com/GtkSharpBeginnersGuide


суббота, 10 марта 2007 г.

Mono

После прочтения нескольких статей о mono в журнале Linux Format заинтересовался этой кросс платформенной технологией. Будучи неосведомленных об основных различиях между .NET и Java узнал, что .NET выгодно отличается от Java хотя бы потому что не ограничивает использование технологии одним языком. Все дело в реализации Common Language Runtime, который используется как препроцессор с целью создания промежуточного языка ваших программ (Intermediate Language). Это значит что я могу заниматься написанием программы на C# с моим другом из Чикаго, который пишет на Ruby. Это действительно здорово!

Mono является бесплатной альтернативой .NET, при этом совместимость на уровне API позволяет запускать приложения написанные ранее для .Net под Линуксом.

Приятно что для разработчиков доступна бесплатная среда разработки (наподобие Microsoft Visual Studio) - MonoDevelop.


среда, 21 февраля 2007 г.

На новом месте

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

Среди последних событий хочу отметить круглый стол "Linux vs. Windows: кто победит в России?".


понедельник, 29 января 2007 г.

воскресенье, 21 января 2007 г.

Обзор WordPress 2.1 rc

В середине января 2007 года на официальном сайте WordPress был выложен первый релиз кандидат WordPress 2.1. С одной стороны изменилась только минорная версия, поэтому ожидать чего-то совершенно нового не приходится. С другой стороны - не так уж часто мы переходили с 2.01 на 2.02, поэтому переход на версию 2.1 можно считать в какой-то мере значительным.

Что нового в WordPress 2.1:

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

  • Более эффективный код по работе с базой данных, быстрее чем в предыдущей версии
  • Автосохранение
  • Редактор текста со вкладками
  • XML экспорт и импорт для того чтобы переезжать с одной версии WordPress на другую без потери данных
  • WYSIWYG проверка орфографии
  • Блокировка поисковых движков для закрытых блогов
  • Теперь вы можете сделать любую страницу сайта вашей главной страницей
  • Ссылки теперь могут содержать подкатегории
  • Изменен дизайн страницы для входа в админ-панель
  • Большее использование AJAX для работы с дополнительными полями, модерации и удалений
  • Страницы теперь могут быть установлены как черновики или закрытые для просмотра
  • Небольшой редизайн административной панели
  • Менеджер загрузок файлов на сервер
  • Более быстрая панель управления сайтом

Для разработчиков / продвинутых пользователей:

  • Псевдо-крон (выполнение заданий по расписанию)
  • Администратор пользователей теперь может без труда работать с сотнями пользователей
  • Новый класс WP_Error
  • Javascript загрузчик
  • Много нового API
  • Feed для комментариев теперь содержит полный список комментариев

В конце концов, разработчики утверждают, что исправлено более 550 ошибок.

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

Установка WordPress 2.1 практически не изменилась. Создаем файл wp-config.php и в несколько шагов устанавливаем новую систему. В дополнение к тому что было раньше, на странице где нужно указать название блога и email администратора, у вас спросят, нужно ли делать блог доступным для индексации поисковиками.

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

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

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

Ждем релиз!


вторник, 9 января 2007 г.

Дизайн сайта: профессиональный подход

Дуглас Бауман (Douglas Bowman) - известный американский дизайнер. Среди его заказчиков - большие фирмы, в том числе Google, для которой он занимался оформлением портала blogger.com. В этой статье Дуглас рассказывает как протекала его работа над дизайном для проекта CSS Zen Garden. Несмотря на то, что процесс описан на примере конкретного сайта, статья будет полезна при создании проектов любой сложности.

Dmitry Nikolaev

Без фокусов


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

Как я уже рассказывал ранее, в соответствующей теме о моей работе для CSS Zen Garden, я подумал, что будет интересно рассказать, какие шаги были мною предприняты при проектировании дизайна Golden Mean. Процесс разработки дизайна для Zen Garden не было настоящим полномасштабным проектом, и вряд ли подходит для разработки дизайна по контракту с заказчиком. Но после того как большая половина работы была уже позади, я заметил, что те же самые шаги используются и в больших проектах. Итак, мои шаги по созданию проекта для Zen Garden можно разбить на следующие этапы:

Исследование


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

Для проектирования Zen Garden я начал свой путь с изучения содержания (текста) самой страницы и поиска типовых решений. Я распределил разделы страницы в различные блоки и указал важность каждого из них. Я также провел время думая о целях проекта, наряду с идеями и концепциями Дэйв Ши (Dave Shea). Цель этого проекта заключается не в том ,чтобы показать какие-либо хитрости использования CSS. Вместо этого основная цель - показать красоту и гибкость при проектировании на CSS, осознать все его возможности как средства, для создания хорошо разработанных, эстетических, доступных и хорошо структурированных страниц.

Анализ


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

Когда я наконец нашел свободное время для того чтобы начать думать над одним из моих представлений для этого проекта, я уже исследовал множество других дизайнов в Zen Garden. Я проанализировал концепцию и исполнение каждого из них, и был восхищен творческому подходу для некоторых проектов. Я отметил сходства и различия между ними, я искал вещи, которые в них не присутствуют.

Идеи


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

Эскизы


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

Типографика


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

В конце концов, я остановился на шрифте Morpheus из-за его красивых отображений символов. Уникальность M и N, готический стиль A и U, дополнения K и R… В дополнение ко всему заголовки получаются в средневековом стиле, в то же время отличный от Sans-serif.

Изображения


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

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

Я давний поклонник использования слоев, для создания текстур и дополнительной значимости различных компонентов. Я также люблю сочетание текста и изображений для достижения тонких различий в цвете и значимости элементов. (Смотрите соответствующие части моего портфолио: 01, 02, 03).

Композиция


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


Имея на руках несколько эскизов, гарнитур и изображений, я начал собирать все воедино для создания одного изображения. Переключаясь между Illustrator и Photoshop, импортируя элементы из одной программы в другую, я приближался к окончательному варианту моего дизайна. При проектировании HTML и CSS я сосредоточил свое внимание на правильном построении языка и принципы печати, определяя размеры, ширину и высоту, величину отступов, размер гарнитуры, применению цвета как средства для обычных блоков и акцентирования других элементов.

Осуществление замыслов


Я уже рассказывал о некоторых вопросах, с которыми сталкивался при строительстве CSS для Zen Garden. (см. записи для более подробной информации). Для начала я спроектировал CSS на более высоком уровне, с упором на форму всей структуры и крупных регионов. Затем я достаточно подробно описывал каждый элемент на странице по порядку: сверху - вниз.

После того как я создал CSS и проверил как выглядит дизайн в различных браузерах, внешне проект изменился, но не слишком сильно. Некоторые детали пришлось принести в жертву, некоторые позволили что-то улучшить. Я расширил исходное изображение фона слева и справа, т.к. я не смог расположить заголовок так как было задумано вначале. Информация о вертикальном выравнивании была заполнена только после того как были размещены все блоки на странице. Все изменения касаемые CSS и дизайна стали возможны потому что я явлюсь не только автором таблицы стилей, но и автором всего дизайна. Я могу где-то что-то изменить, прижать, согнуть по мере необходимости. Это единство мысли на заключительной стадии процесса является весомым основанием к тому, чтобы ответственным за разработку CSS/HTML был сам дизайнер.

И в заключение


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

Оригинал статьи: http://stopdesign.com/articles/design_process/