Немного мыслей по поводу хранения файлов у простых пользователей

Так сложилось, что в жизни мне пришлось поработать с десятками различных компьютеров, основная масса которых принадлежит рядовым пользователям. И одна из главных проблем при переустановке системы или покупке нового компьютера – это поиск и «спасение» информации, которая хранится на компьютере. Зачастую пользователь сам не может объяснить, где находятся его файлы – знает только, что в «Моих документах». Лично наблюдал такую картину: на просьбу показать, где находятся фотографии, клиент открывает «Мои рисунки» из меню Пуск, включает дерево файлов, с помощью «плюсиков» через дебри «Новых папок» добирается до нужной папки и только потом разворачивает её в основное окно «проводника». При этом найти те же файлы через Total Commander для того же пользователя – проблема неразрешимая в принципе. При попытке объяснить, что так жить нельзя, из раза в раз слышу «Мне так удобнее». И даже если пользователь один раз потеряет свои файлы – не факт, что после этого он попытается понять, почему же так получилось, и что он сделал не так. Я решил попытаться понять, почему может погибнуть информация.

Читать дальше →

Хорошая практика использования систем контроля версий в web-проектах

Я занимаюсь разработкой web-проектов сравнительно недавно. И с первых же дней работы мне пришлось столкнуться с системами контроля версий, и, как вы уже догадались, это был Subversion. Для меня сначала было не совсем понятно, что такое trunk, brunch и tag. Вернее, что это такое мне объяснили, а что с этим делать — нет.

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

Это статья рассчитана в основном на начинающих программистов. Но как показала практика, некоторые разработчики с опытом работы более 1-2 лет, так же не до конца понимают, как правильно организовать структуру svn.

Читать дальше →

Как я исправлял «startup error» системы управления проектами Gridiron Flow

Ну, наконец-то, разработчики самой удобной (на мой взгляд) сисемы управления проектами «Flow» решили расширяться, и перешли на бесплатную лицензию. Теперь на их сайте можно скачать бесплатную вторую версию их системы. Ее удобство заключается в том, что руководитель проекта, находясь на своем рабочем месте, может контролировать работу своих подчиненных или нанятых фрилансеров, которые могут находиться в другом городе. Программа работает с различными форматами (html, pdf, psd, aep, etc.) способна показать все отношения с другими файлами в виде нодального дерева. Очень удобно, затащив в проект например html страницу, сразу увидеть с какими страницами и изображениями она связана. Или имея огромное колличество медиа файлов в проекте After Effects, сразу понять где они лежат и при небходимости просмотреть какой это файл конкретно. Иногда в не разберихе переходя с компьютера, на компьютер, возникают ненужные копии файлов, или файлов которые не имеют ни какого отношения к конкретному проекту, они создают беспорядок и забивают свободное место. Потом сиди, ковыряйся в 14 файлах html, с названием html_1, html_new, html_12-10-2010, которые при копировании имеют одно и тоже число изменения. Программа работает в фоновом режиме, в ней так же есть контроль версий, и тайминг работы с проектом различными пользователями, но это платный сервис и стоит 10 уё в месяц. Вот коротко о предмете.
Читать дальше →

О программировании и не только

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


Читать дальше →

Био-информационная эволюция. Мозг — Язык — Интернет — ?

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


Читать дальше →

Прогнозирование временных рядов методом муравьиных колоний

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

Для начала вкратце о задаче и о самом алгоритме:

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

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


Теперь, перейдем непосредственно к решению задачи прогнозирования методом муравьиных колоний.
Первая проблема с которой мы сталкиваемся — необходимо представить временной ряд в виде графа, на котором будем запускать муравьиный алгоритм.
Было найдено два возможных решения:
1. Представить временной ряд в виде мультиграфа где из каждой точки временного ряда можно перейти в каждую набором определенных приростов. (Для облегчения задачи будем брать нормализованные значения на промежутке от -1 до 1). Это был первый подход, который мы попробовали. Он показал неплохой результат на временных рядах малой размерности, но с увеличением размерности стала резко падать как точность прогноза, так и производительность, поэтому от этого варианта отказались.
2. Представить временной ряд в виде набора сцепленых графов, где каждый граф отвечает за свою величину прироста значения временного ряда. иначе говоря, имеем граф который отвечает за прирост -1, -0,9… и так до 1. Шаг, естественно, можно уменьшить, или увеличить, что скажется на точности прогноза и ресурсоемкости задачи.(в конечном итоге этот вариант оказался наиболее удачным.)

На этом наборе сцепленных графов, запускался муравьиный алгоритм(на каждом графе свой), который откладывал феромон на ребрах, соответствующих известным значениям временного ряда. Причем, при откладывании феромона на графе i, феромон также откладывался на графах i-1и i+1, но в гораздо меньшем количестве(в нашем случае 1/10 от базового количества феромона) таким образом, муравьи выделяли наиболее часто встречающиеся последовательности прироста значения временного ряда, а за счет откладывания феромона на смежные графы, нивелировалась возможная погрешность и изначальная зашумленность временного ряда.

Данный алгоритм мы тестировали на искусственно подготовленных временных рядах с разным уровнем периодичности и шума. Результат получился двояким. С одной стороны, при уровнях шума до 0,3 алгоритм показывает высокие результаты прогноза, сравнимые с результатами ARIMA модели. На более высоких уровнях шума возникает большой разброс результатов: прогноз то очень точный, то совершенно неправильный.

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

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

Редактирование exif информации в Mac Os

Привет камрады! В своем первом посте хочу рассказать о своем опыте редактирования метаданных exif изображений jpeg полученных с камеры и правленных в Photoshop.

Дело было так: имелись фотографии сделанные камерой на телефоне, неважного качества. Надо было их почистить, подогнать размер, будто они сделаны фотокамерой, не оставив следов. Вся информация о снимках хранится в EXIF (Exchangeable Image File Format) стандарт, хранящий техническую информацию об изображении, методах его получения, авторстве и т.д. Посмотреть эту информацию можно многими способами, и просто выбрав свойства файла и специальными программами. Но с редактированием дела обстоят сложнее.

После долгих поисков бесплатной программы с GUI, пришлось смириться с отсутсвием таковой и обратить внимание на command-line приложение ExifTool by Phil Harvey Версии есть для всех платформ, устанавливаем необходимую.
Вобщем, долгое и вдумчивое чтения мануала дало понять, что информация франится в тэгах со значением.

Напиример, дата создания файла:
CreateDate: 2010:11:01 10:59:08

Дата правки файла:
FileModifyDate: 2010:11:04 01:10:33

Производитель фотокамеры:
Make: Canon

Модель фотокамеры:
Model: Canon Digital IXUS 970 IS

Всю информацию можно получить набрав в консоли:

exiftool -s IMG_0001.jpg

где IMG_0001.jpg имя редактируемого файла

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

Задача стояла убрать все следы работы Photoshop, не стал париться и искать нужные тэги, а просто полностью очистил exif информацию:

exiftool -all= IMG_0001.jpg

Кому нужно- ищите нужный тэг и вписываете необходимую информацию.
Например, инфомация о редакторе:

Software: Adobe Photoshop CS4 Macintosh

Чтобы изменить значение, пишем:

exiftool -Software=«Picasa» IMG_0001.jpg

Если хотите убрать тэг, то ставите пробел после знака "="

exiftool -Software= IMG_0001.jpg

Далее добавляем производителя фотокамеры:

exiftool -Make=«Canon» IMG_0001.jpg

Модель фотокамеры:

exiftool -Model=«Canon Digital IXUS 970 IS» IMG_0001.jpg

Дату создания:

exiftool -CreateDate=«2010:11:01 11:01:23» IMG_0001.jpg

Дату правки:

exiftool -FileModifyDate=«2010:11:01 11:08:12» IMG_0001.jpg

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

Русификация RGB LCD Shield for Arduino 65K color KIT

Мой приход в мир Ардуино не был оригинальным — прочитал, заинтересовался, купил,
попробовал и… подсел. Тысячный раз читать об этом никому не интересно (хотя,
должен признаться, фотографии процесса распаковывания первой заветной коробочки
есть и у меня). Поэтому перейдем к делу.

Цветной дисплей для Ардуино


Среди доступного сейчас великого разнообразия готовых модулей расширения (или, как их часто называют, шилдов) для ардуино-подобных контроллеров имеется (в виде набора для домашней сборки) неплохой RGB-дисплей размером 128*128 точек и 64К цветовой палитрой. Производитель называет его довольно длинно — «RGB LCD Shield for Arduino 65K color KIT» — и поддерживает программно. Подлкючаемая библиотека позволяет скрыть от пользователя внутреннюю кухню управления контроллером дисплея, предоставляя простые функции типа drawPixel, drawLine, drawCircle и т.п. Быстродействия дисплейчика хватает даже на простую движущуюся графику. Имеется также функция вывода строки текста print, которая умеет автоматически выравнивать строку по центру или по краю.
Короче говоря, полный джентельменский набор. За одним досадным исключением — не поддерживается кириллица. Но ведь открытая платформа на то и открыта, чтобы можно было что-нибудь улучшить.


Читать дальше →

Сертификация Nokia Qt: новый уровень



Сегодня пришло письмо из Нокии о том, что скоро будет доступен новый уровень сертификации для Qt-разработчиков — Nokia Certified Qt Specialist.

Напомню, что программа сертификации по Qt была впервые представлена в октябре 2009 года, первый и единственный ее уровень назывался Nokia Certified Qt Developer, а экзамен — Qt Essentials, то бишь основы Qt. Могу сказать, что для практикующих Qt-программистов экзамен этот достаточно легкий, многие (в т.ч. ваш покорный слуга) проходят его, не готовясь практически вообще.

Новый уровень сертификации (Нокия называет уровни certification schemes) будет представлен на конференции Qt Developer Days 2010, которая скоро пройдет в Мюнхене и Сан-Франциско. Посетителям конференции будет предоставлена возможность попробовать сдать бета-версии новых экзаменов бесплатно.

Почему «экзаменов», а не «экзамена»? Потому что новых экзаменов сразу два: Advanced Widget UI и Qualified in C++ with Qt. Оба они являются продвинутыми экзаменами, в противовес старому обычному Qt Essentials.

Экзамен Advanced Widget UI


Разработка UI с помощью виджетов является одной из старейших фич Qt. Также это одна из наиболее часто запрашиваемых тем-кандидатов для продвинутых экзаменов. Qt Essentials покрывает лишь основы, которые надо знать для того, чтобы начать разработку GUI с помощью виджетов. Более сложные, но необходимые для сколь-нибудь сложных программ темы, такие как Model/View Framework, кастомные виждеты и многопоточность, сейчас включены в этот новый экзамен.

Рекомендации от составителей:
Для успешного прохождения экзамена вам следует иметь хотя бы полтора года опыта фуллтайм-разработки с Qt, включая разработку GUI, логику сложных и мультипоточных программных систем с кастомными UI-элементами и стилями.

Учебный план экзамена состоит из следующих тем:
  • Model/View
  • Multithreaded programming in Qt
  • Rich text processing
  • Manage Qt Projects (Develop / Unit Test / Port / License)
  • Creating plugins
  • Drag/Drop and Clipboard access
  • Custom Widgets
  • Styling widgets
  • Making Applications scriptable
  • Writing code for efficient Internationalization
  • Using the Undo Framework
С полным списком, состоящим из 71 подтемы, можно ознакомиться здесь: Advanced Widget UI Curriculum.

Экзамен Qualified in C++ with Qt


Qt известна своим достаточно низким порогом вхождения в том плане, что не надо быть С++-гуру, чтобы начать писать Qt-приложения. Qt Essentials охватывал основные аспекты С++/Qt-разработки, позволяющие делать относительно простые программы. Экзамен Qualified in C++ with Qt призван выявить наличие более продвинутых знаний в C++/Qt, которые нужны для разработки сложных программ.

Рекомендации от составителей:
Для успешного прохождения экзамена вам следует иметь хотя бы три года опыта парт-тайм разработки на C++ плюс один год разработки с использованием Qt.

Учебный план экзамена состоит всего из четырех тем:
  • Types, Declarations and Definitions
  • Classes
  • Inheritance and Polymorphism
  • Miscellaneous Topics

Более информативных список с подтемами лежит тут: Qualified in C++ with Qt Curriculum.

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

Дополнительные ссылки по теме:
«А зачем мне эта сертификация вообще нужна?»
Qt Certification Start Page
Топик про Qt-сертификацию на форуме prog.org.ru, личный опыт сдававших экзамены.

Комфортное рабочее окружение на примере awesome wm (взгляд изнутри)

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

Почему тайлинг?


Тайлинг — очень удобный способ управления рабочим пространством. Основными достоинствами являются:

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

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

Из множества существующих тайловых оконных менеджеров я остановился на awesome wm, как наиболее оптимальном для меня варианте. Однако настроить исключительно внешний вид — это всего лишь полдела. Стоит отметить, что awesome это всего лишь оконный менеджер, и если его не использовать в качестве оконного менеджера в kde/gnome/etc, то рабочее окружение придется настраивать самостоятельно. Однако овчинка стоит выделки.


Читать дальше →