понедельник, 12 марта 2012 г.

Старый добрый MFC

Есть у меня такой предмет "Технологии программирования". Ведет клёвая тётя - какой-то крутой программер в Минской компании. Она задала нам сделать лабу по работе с dll. Задание таково:

"Необходимо написать программу, имеющую графический интерфейс (GUI), на С++. Программа должна иметь два поля Edit и две кнопки. Первая группа Edit+Button для работы со статической библиотекой, вторая - для подключенной динамическим образом. В поле Edit ввести число и по нажатию кнопки выскакивает приветственное сообщение столько раз, сколько было введено."

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

Итак! Грузим Microsoft Visual Studio 8 -> File -> New -> Project. Выбираем Visual C++ - MFC и выбираем приложение которое хотим создать - MFC Application.

По нажатию "Ok" среда предлагает нам настроить внешний вид нашего приложения. Здесь важный для нас шаг выбрать "Типа приложения". Для нас должно быть "Диалоговое приложение"(Dialog based). Именно этот вариант предполагает наличие всяких кнопочек и полей и избавит от ненужных мытарств с документами. Окно выглядит так:

Так же обязательно выбираем "Use MFC in a static library". Настройки в других вкладках по вкусу.

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

Нас интересуют только выделенные файлы - это два .cpp файла с кодом, два их хидера .h и .rc файл ресурсов, с помощью которого и вызывается это диалоговое окно приложения ( .rc -> Dialog -> IDD_MFCPROJECT_DIALOG).

Справа обращаем внимание на вкладку Toolbox (вызывается сочетанием клавиш Ctrl+Alt+X). Отсюда мы натягаем нужные нам элементы и получим что-то похожее на моё приложение.


Очень удобно в проекте клацнуть два раза на кнопку, нажатие которой хотим обработать, и сразу попадаем в её функцию-обработчик. А клацаем правой кнопкой по кнопке -> Properties  - можем настроить элемент (Например поменять все надписи). Можно запускать приложение Ctrl+F5.

Вот такая простая магия и никакого кода.

среда, 7 марта 2012 г.

Конкурс от Texas Instruments

На моей кафедре работает довольно активный преподаватель, который, наверное, больше других любит давать студентам творческую работу. Он всегда старается найти студентов для участия в том или ином конкурсе и даже параллельно с лабами предлагает поучаствовать в студенческих проектах. В прошлом семестре мы с двумя ребятами участвовали в IEEExtreme Programming Competition по его предлогу. К слову, он возглавляет университетский IEEE союз, хотя сейчас он скорее мертв, чем жив. Мне вообще-то нравится любая подобная активность, но времени на неё не находится...

На этот раз мы с ребятами решили поучаствовать с конкурсе от Texas Instruments. Конкурс называется Analog Device Contest. Самая приятная его фишка это возможность заказать любые комплектующие этой компании на сумму до $100.


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

Проект называется Intelligent Greenhouse. Ну а дальше вы поняли короче. Сегодня я написал ребятам письмо что кому делать, потому что если не начнешь командовать, то никто ничего так и не начнет, да и самому как-то себя организовать хочется.


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

четверг, 1 марта 2012 г.

О программировании

Так уж получилось, что Blogger мне казался более деловым движком и хотелось писать только стоящие умные статьи, но сейчас я слегка изменил ход своих мыслей, наверное мотивируясь такими удачными блогами как у Дмитрия Шахова.

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

Внешне такие компании, как EPAM или iTransition, кажутся довольно попсовыми - у простых студентов популярных ВУЗов давно уже выработалось соответствующее отношение к ним, которое передается от старших курсов младшим. Обе компании, кстати имеют очень крепкое ядро из грамотных специалистов. Так, Itransition, начинали молодые ребята с очень грамотным подходом во главе с Сергеем Гвардейцевым, ибо руководствовались серьезной литературой, а не только энтузиазмом.

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

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

Минимальное достаточное условие, чтобы втереться в доверие. Критерий Коши? ;)

1. Инвестируем год в изучение литературы по нужному направлению, тренируем и разбираем каждый пример из книг.
2. Изучаем хотя бы 4 основных метода сортировки так, чтобы смогли написать код на листике бумаги. Сюда же относим ещё несколько самых известных алгоритмов а-ля вычисления НОД, числа Фибоначчи и т.д.
3. Мы должны уметь как минимум понимать англоязычные мануалы по проге. Разговорный английский важен. Тут можно готовить темы "Моё хобби", "Мои дальнейшие цели в жизни"...
4. К этому времени уже стоит понимать основные отличия ООП от структурных методов.
5. Послать резюме.

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

среда, 4 января 2012 г.

Мммм... такой тёплый ламповый звук!

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

Но теперь я постараюсь доступно объяснить это.

Гармониками синусоидального сигнала частоты f называются сигналы с частотой кратной f, где номеру гармоники соответствует коэффициент, на который умножена основная частота. Это значит, что первая гармоника и есть основная частота, вторая гармоника находится на частоте 2f, третья - 3f и т.д.

Октава (в музыкальном смысле) - это интервал между двумя нотами, равный 6 тонов. Например, октава это созвучие "До" первой октавы и "До" второй октавы. Звучание октавы приятно для уха. В физическом смысле частота между нотами октавы отличается в два раза:

"До" первой октавы - 261.63 Гц
"До" второй октавы - 523.25 Гц

Временное представление сигналов (амплитуда сигнала зависит от времени).

Спектр сигналов.

Спектр - частотное представление сигнала. Матлаб моделирует вместе с ошибками вычисления, вызванными конечной разрядностью компьютера и аппроксимацией при дискретизации. В идеальном случае на спетре частоте каждого сигнала соответствует пик. Т.е. подразумевается, что у нас должно быть два пика на частоте 261 Гц и 523 Гц.

Так вот, для "до" первой октавы второй гармоникой является "до" второй октавы. Третья гармоника находится на частоте 261*3 = 783 Гц, что соответствует ноте "Соль" второй октавы. Четвертая гармоника - 1044 Гц - нота "до" третьей октавы. Казалось бы всё хорошо - все гармоники приятно звучат вместе (третья гармоника = октава + квинта к основной частоте), однако, в произведении непредвиденная композитором нота соль второй октавы может диссонировать с другими звуками. Все нечетные гармоники вносят диссонанс.

Наконец подобрались к транзисторам и лампам!

Транзисторы характеризуются ярковыраженными нечетными гармониками.

Лампы же имеют малое количество гармоник (доминируют вторая, третья и четвертая). Поэтому звук ламп и кажется приятнее.

четверг, 15 декабря 2011 г.

Классы vs Кластеры

Долгое время не понимал отличия двух понятий - классификация и кластеризация.

Но теперь в одной из статей нашел простое определение:

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


воскресенье, 6 марта 2011 г.

Написание курсового проекта


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

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

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

Теперь подробнее:

Введение должно содержать пару абстрактных абзацев – что-то вроде истории или характеристики исследуемой области. Потом туда же кидаем абзац содержащий фразу «Актуальность данной темы заключается …». Тут же необходимо кратко определить основные цели работы, а так же то, на что она опирается (например, законодательные акты). Основные вопросы введения: «Что?» и «Для чего?»

Основная часть… это, пожалуй, самое трудное. Тут надо страниц на 20-30 расписать что же мы наисследовали! Что же делать… Обычно вся необходимая информация уже существует, но раскидана по книгам. Берем кучу книг и статей по теме, выдираем из них необходимое, собираем это все вместе. Используем имеющийся у нас интеллект для обработки этой информации, чтобы сделать какие-то выводы. Дальше анализируем эти выводы, пробуем найти изъяны – в процессе нарастают какие-то новые мысли, и мы далее стараемся вырастить из этого комка что-то более менее практически полезное.

Заключение определяет причины-следствия, полученные в ходе исследование. И конечно же мы должны получить ответ на вопрос «Кому же всё это нужно?» - пусть никто не назовет вашу курсовую бессмысленной.

Звучит вроде всё просто. Основная проблема найти те самые источники, упомянутые в «Основной части», а потом всё это понять и вникнуть.


воскресенье, 6 февраля 2011 г.

Шифрование. Криптография

Я начал изучать шифрование данных. Т.к. криптонаука является довольно объёмной, то планирую посвятить ей целый цикл постов.

Изучаю не только из интереса, сколько ещё и из-за необходимости готовить курсовой проект.


В создании постов мне будет помогать товарищ Брюс Шнайер с помощью свой книги «Прикладная криптография. Протоколы, алгоритмы и исходные тексты на языке Си». Книга написана в приятном изложении – это сразу бросается в глаза когда начинаешь читать введение:

«Криптография бывает двух типов: криптография, которая помешает читать ваши файлы вашей младшей сестре, и криптография, которая помешает читать ваши файлы дядям из правительства. Эта книга о втором типе криптографии.»

Немного истории. С давних времен человек один человек старался скрыть информацию, другой наоборот получить доступ к ней – так рождались различные ухищрения, но криптография, которая нас интересует была замечена только в начале двадцатого века. Была даже изобретена специальная роторная машина – устройство на котором основывалась военная криптография в течение почти 50 лет. После первой мировой войны почти все разработки по криптографии велись в засекреченном виде и только в 1949 появилась работа Клода Шэннона “The Communication Theory of Security Systems” и до 67 года снова затишье. Ну а дальше уже история получила свое развитие.

Появились также соответствующие организации от Международной ассоциации криптологических исследований до NSA (National Security Agency) – криптографический орган США, который в свое время даже попытался подавить общественный интерес возникший к криптографии. В настоящее время с криптографией тоже не всё однозначно – во многих странах ею запрещено заниматься без специального разрешения.


Дадим пару терминов.

Криптография – наука о методах обеспечения конфиденциальности.

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

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

Шифрование – способ преобразования открытой информации в закрытую и обратно.

Дешифрование – получение открытых данных по зашифрованным.

Все эти определения есть в википедии более подробно

Думаю почерпнуть привычку у paveldev.blogspot.com вставлять демотиваторы, но буду вставлять не демотиваторы, а что попадет под руку интересного – может иногда и демотиваторы :)