среда, 28 сентября 2011 г.

Выложил Notes на Sourceforge.
Все последние версии будут там.
Вот ссылка: http://sourceforge.net/projects/notessoft/

вторник, 20 сентября 2011 г.

Сериализация (Serialization)
Основная моя деятельность в первую очередь связана с такими языками как Assembler, C (в первую очередь для микроконтроллеров) и один из диалектов Basic'а. В последнее время часто приходится работать с STL, FBD, LD (языки программирования для ПЛК). С объектно-ориентированным программированием сталкиваюсь довольно давно, но глубоко изучить его на тот момент так и не удалось.
И ВОТ! Сейчас довольно много занимаюсь этой темой.
Хотелось бы осветить один важный момент, а именно: сохранение различных настроек, состояний и тому подобное.
Если того не требует специфика (например мне как-то пришлось конфигурацию выносить в файл в формате XML (а первый вариант был вообще ASCII-текст), это нужно для того, чтобы была возможность править конфигу в ручную) можно использовать такую приятную вещь как сериализация!
Так как я рассматриваю всё в рамках .NET, то позволю себе процитировать великого Эндрю Троелсена: "Сериализация (serialization) - это термин, описывающий процесс преобразования объекта в линейную последовательность байтов".
То есть -  имеем мы объект и хотим его сохранить (например объект содержит конфигурацию), используя сериализацию, мы с минимальными усилиями можем это сделать. Нет необходимости городить всякие парсеры и т.п. Всё Очень Просто!
Алгоритм наших действий примерно такой:
1. Определиться с тем, какой класс должен быть доступен для сериализации и особрым образом пометить его (с помощью атрибута [Serializable]):
[Serializable]
public struct workSer
{
public string Val1;
public string Val2;
public string Val3;
}
2. Выбрать формат, в котором будет сохраняться объект (двоичный или SOAP). Будет использовать двоичный, для этого нам нужен класс BinaryFormatter, который лежит в пространстве имён: System.Runtime.Serialization.Formatters.Binary.
3. Пользуемся!

Для сведения разных вопросов по возможности к нулю, вот "рыба":

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace workSerialization
{
[Serializable]
public struct workSer
{
public string Val1;
public string Val2;
public string Val3;
}
public class test
{
public static void Main()
{
workSer ws = new workSer();
ws.Val1 = "first";
ws.Val2 = "second";
ws.Val3 = "third";

FileStream myStream = File.Create("config.dat");

BinaryFormatter myBF = new BinaryFormatter();
myBF.Serialize(myStream, ws);
myStream.Close();

myStream = File.OpenRead("config.dat");
workSer ws2 = (workSer)myBF.Deserialize(myStream);
Console.WriteLine("ws2 Valx = {0}, {1}, {2}", ws2.Val1, ws2.Val2, ws2.Val3);
myStream.Close();
Console.ReadLine();
}
}
}

Буду очень рад, если кому-то пригодится)))

воскресенье, 18 сентября 2011 г.

Последняя версия "Заметок" )))
В ней учтены последние пожелания пользователей:
1. Появилась возможность менять местоположение заметок.

2. Можно скрыть окно "Заметки" нажав правую клавишу мыши на поле с заметками и выбрать "Скрыть"

Программу можно скачать здесь:  http://ifolder.ru/25807961

воскресенье, 11 сентября 2011 г.


Я всё-таки  закончил свой первый маленький проект – программка «Заметки». В ней вы можете делать для себя маленькие записи, наподобие тех, что обычно пишутся на стикерах (с последующим приклеиванием куда-либо).
Хотя программка и позволяет только создавать заметки, у неё имеется достаточный набор настроек, для того, чтобы она полностью удовлетворила ваши запросыJ.
Скачать её вы можете здесь: http://ifolder.ru/25679144

А теперь небольшое описание, как с ней работать.
«Заметки» имеет два основных окна – это главное окно программы:

И окно, содержащее ваши записи. Оно может иметь два вида.
Первый вид: Стикер:

Второй вид: стандартное окно:

Рассмотрим ряд вопросов, связанных с описанием интерфейса и настройкой программы, а так же непосредственно с созданием заметок.

Создание заметки.
Создать заметку можно несколькими способами:
1. В главном окне программы нажать кнопку «Создать заметку».
2. В главном окне программы нажатием правой кнопки мыши на поле «Ваши заметки» вызвать контекстное меню, и выбрать в нём пункт «Добавить».
3. В главном окне программы на панели меню выбрать «Заметки->;Создать заметку…»
4. Двойным щелчком левой кнопки мыши на окне «Заметки».
5. Вызвать контекстное меню иконки в трее и выбрать Создать заметку.

После выполнения любого из перечисленных действий появится окно «Создать заметку»:

В нём необходимо будет ввести текст заметки и нажать кнопку «ОК» или Enter на клавиатуре.
Заметка будет видна в главном окне программы в поле «Ваши заметки» и в окне «Заметки».
Удаление заметки.
Удалить заметку можно следующими способами:
1.  В главном окне программы выделить заметку, которую нужно удалить, нажать правую кнопки мыши и выбрать пункт «Удалить».
2.  В главном окне программы выделить заметку, которую нужно удалить и нажать клавишу Del.

Описание интерфейса и настройка программы.
Главное окно программы содержит:
1.  Панель меню.
2.  Календарь.
3.  Область «Ваши заметки». В ней отображаются создаваемые вами заметки.
4.  Кнопку «Создать заметку». Создаёт заметку.
Через меню вы можете получить доступ к следующим командам:
1. «Файл»
«Файл->Выход» - выход из программы.
2. «Заметки»
«Заметки->Создать заметку…» - создание заметки.
«Заметки->Показать (Окно «Заметки»)» - отображает на переднем плане (поверх всех открытых окон) окно «Заметки».
«Заметки->Скрыть (Окно «Заметки»)» - скрывает в трей окно «Заметки»
3. «Сервис»
«Сервис->Настройка…» - открывает окно «Настройки»
Настройки разделены на две категории:
· Общие – Относятся ко всей программе в целом
· Окно «Заметки» - Настройка окна «Заметки».
«Общие»
· «Запускать при загрузке Windows» - программа «Заметки» будет запущена после загрузки ОС Microsoft Windows.
·  «Скрыть Главное окно после запуска» - главное окно программы будет свёрнуто в трей после запуска программы.
· «Цвет заднего фона» - цвет фона области «Ваши заметки» главного окна.
· «Цвет заголовка» - цвет заголовков календаря и области «Ваши заметки».
· «Цвет строк» - цвет строк (через одну) области «Ваши заметки».
· «Цвет окна «Создать заметку» - цвет окна «Создать заметку»

Окно «Заметки»
· «Скрыть окно «Заметки» после запуска» - окно «Заметки» будет свёрнуто в трей после запуска программы.
· «Поверх всех окон» - отображать окно «Заметки» поверх всех окон
· «Прозрачность» - задаёт прозрачность окна «Заметки» в процентах от 0 до 100%.
· «Вид окна «Заметки»:
Стандартный – обычное диалоговое окно.
Стикер – стилизованный под стикер вид окна
· «Цвет» - доступен только для  вида «Стандартный» задаёт цвет окна «Заметки».
· «Шрифт» - задаёт шрифт для окна «Заметки».

«Сервис->Язык» - позволяет выбрать язык интерфейса.

4. «Справка»
«Справка->О программе…» - показывает краткую информацию о программе.


При нажатии правой кнопкой мыши на поле «Ваши заметки» появится контекстное меню со следующими пунктами:
1.   «Добавить» - добавляет новую заметку.
2.    «Удалить» - удаляет выделенную заметку.

вторник, 6 сентября 2011 г.


   Сегодня рассмотрим тему окон нестандартной формы.
   Если бегло погуглить этот вопрос (с ориентацией на .NET), то можно остановиться на трёх достаточно интересных вещах:
  Очень познавательная статья! Используя данных подход можно получить фигурные окна с тенями и т.п. Если VB .NET не ваш любимый язык, то может помочь: http://www.developerfusion.com/tools/convert/vb-to-csharp/

  Ну уж очень простое решение.

  Вот этот вариант меня привлёк легкостью реализации. НО! Возник ряд интересных моментов, которые мы посмотрим ниже.

   Непосредственно сам проект лежит здесь: http://ifolder.ru/25589879
   С первого взгляда всё вроде бы хорошо, окошко выглядит интересно и симпатично.

  Но дальнейшее использование такого окна приводит к довольно некрасивым эффектам.
  Например, если задний фон тёмный (консоль), то появляется белый «налёт» на границе окна.

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

  Если убрать эту размытость (на рисунке представлены чёткие границы):

  То получится довольно сносное решение (область, обведённая зелёным эллипсом):
    Конечно, есть WPF, который позволит решить данную задачу проще, но если использовать .NET 2.0 и Window Forms, то подход приведённый выше IMHO можно считать рабочим. Или опускаться на более глубокий уровень (ссылка 1). ИЛИ, использовать C++, а там уж точно придётся работать на глубине))).

Спасибо за внимание ;)

воскресенье, 6 июня 2010 г.

Производство, знания, Toyota...

       Некоторе время назад в своей Живой ленте (которую вы можете найти по a-mail:fkel.22@gmail.com) я упомянул о производственной системе Toyot'ы и одной замечательной книжке Майкла Кеннеди «Почему Toyota лучше?». Так вот, буквально недавно я дочитал её до конца и с уверенностью могу сказать, что каждый инженер, программист, руководитель да и вообще работник сферы разработки (неважно какой, даже дизаин с большой лёгкостью суда попадает) должен прочитать её. Язык, которым написана книга невероятно простой, читается очень легко. А главное в ней — это форма подачи и смыславая нагрузка. Там нет сухой теории, нет готовых рецептов, книга написана так, будто это роман, главные действующие лица которого — это люди: руководители отделов одной американской коорпорации, перед которой возникли большие проблемы, да и само её существование стало спорным вопросом. И им необходимо найти способ, которым можно вывести их предприятие на ведущие позиции на рынке. Если кому-то нравятся вещи, которые пишет Макл Ридпат, то вам это твоение точно понравится.
       Ну а теперь собственно о Toyota. Ещё раз хочется выразить восхищение, того как там организованная производственная система. Можно с уверенностью сказать, что технологический прогресс в таких областях как улучшение качества продукции и технологическая совместимость довольно сильно ушёл вперёд. НО! Какой кровью это даётся, как это не только сохранить и приумножить? Это достаточно актуальные вопросы. И у Toyot'ы есть свой ответ на эти вопросы. Хотелось бы процитировать немножко и параллельно дать свои коментарии. Одним из важных моментов, который отмечается — это то что «успехи компании Toyota очень мало зависят от использования типичных для Америки сложных подходов, таких, например, как автоматизированное проектировани и т.п.». И что же это значит? А значит это то, что если у тебя здоровые ноги, тебе не нужны костыли. Именно фундаментальный уровень, который лежит в основе, позволяет этой компании достаточно успешно развиваться.
       Очень важным является подход, который используется в ходе разработки. Именно разработки, потому что разработка и производство — это две совершенно разные вещи, которые в корне отличаются друг от друга! В Toyota во главу угла ставится подход, основанный на знаниях. ЗНАНИЯ! Вот тот ключ, который позволяет этому автомобильному гиганту открывать всё новые и новые двери. Если кратко, то принцип примерно такой. В Toyota нет жестких требований к организации производства, нет необходимости вести постоянную отчётность и т.п. Короче бюрократия сведена к минимуму. Центральным звеном всей структуры являются знания. Они общие для всех, будто то работник вовлеченный в разработку, инженер или менеджер, все имеют доступ и информации, тем знаниям, которые копятся и копятся в процессе создания новых изделий. Во-вторых это личная ответственность всех и каждого за те решения, которые он принимает в процессе разработки. Таким образом у инженеров появляется стимул развиваться и получать новые зания, которые они с пользой могут потом применить. Инженерам нет смысла пытаться запрыгнуть в административный аппарат, потому что у них предостаточно способов для реализации и собственного роста. Вот как-то так. Естественно я не притендую на полноту, всем, кому станет интересно очень советую прочитать книжку. Успехов!

воскресенье, 16 мая 2010 г.

Wall Street

Уолл Стрит? Уолл Стрит.... Уолл Стрит! Тем, для кого это не пустое слово очень рекомендую посмотреть один маленький сериальчик называется "Войны Уолл Стрит" или по англу "Wall Street Warriors". Довольно интересно рассказывает про жизнь и работу людей, делающих деньги на подъёмах и падениях рынка. Только нужно фильтровать, то что там показывают, некоторые вещи откровенная лажа. А так стоит посмотреть, хотя бы пару серий))).