IT-Stage №1. The 1st and the last.

Привет. Как-то давно я обещал выложить PDF первого номера журнала IT-Stage команды N7Team. Вот он — недовёрстанный, ужасно, но кропотливо оформленный в MS Publisher, пилотный номер. Обложка совмещает в себе содержание — клик по названию статьи перемещает на нужную страницу. Но там есть далеко не всё, что написано на титульнике.

Смотрим, читаем, соболезнуем 🙂

http://dl.dropbox.com/u/18053726/blogg/Release.pdf

Алгоритмы. Основные понятия.

Начинаю потихоньку выкладывать статьи, которые всё-таки были написаны в рамках проекта IT-Stage. Думаю, тебе понравится.

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

Алгоритм (algorithm) представляет собой пошаговую инструкцию выполнения процесса, действия или вычисления. Это достаточно вольное определение, но, на мой взгляд, более понятное и простое. Как ясно из определения, алгоритмы используются везде. Начиная от такого, на первый взгляд, банального сложения столбиком, и заканчивая более сложными, тяжелыми для понимания (по началу) и реализации. В программировании алгоритмы представляются как сложные методы выполнения различных вычислений. В этой статье я не буду приводить сами алгоритмы или код, это будет в следующих выпусках.
Особую роль выполняют прикладные алгоритмы, предназначенные для решения определённых прикладных задач. Алгоритм считается правильным, если он отвечает требованиям задачи (например, даёт физически правдоподобный результат), но если для некоторых исходных данных программа выдает ошибку, или вообще ничего не выдает (например, зацикливается), то в алгоритме есть ошибка и её надо исправлять.
Важную роль играют рекурсивные алгоритмы (алгоритмы, вызывающие сами себя до тех пор, пока не будет достигнуто некоторое условие возвращения). Начиная с конца XX — начала XXI века активно разрабатываются параллельные алгоритмы, предназначенные для вычислительных машин, способных выполнять несколько операций одновременно. Я не буду их никак по другому классифицировать, как это делают, допустим, учителя информатики — считаю, что этого читателю будет достаточно. Из определения итак все ясно.
Алгоритмы можно оценивать с разных позиций и разных точек зрения, но, наверное, самым основным критерием оценки будет быстродействие алгоритма (под быстродействием я понимаю время работы программы). Быстродействие нельзя определить только по одному виду кода, код должен работать, и, причем, работать с различными объёмами данных. Для оценки времени традиционно пользуются профилировщиком(profiler). Он загружает программу и достаточно точно измеряет время работы каждой подпрограммы.
Как правило, время работы программы (алгоритма) пропорционально объему обрабатываемых данных. Но при анализе алгоритма неудобно выражаться такими словесными конструкциями как: «Быстродействие алгоритма прямо пропорционально количеству элементов в третьей степени».  Для это есть более короткая и более удобная схема – О-нотация (bigOh notation). Эта нотация позволяет учитывать в функции f(n) лишь наиболее значимые элементы, отбрасывая второстепенные.
Например, в функции  f(n) = 2n2+ n – 5 при достаточно больших  n  компонента  n2  будет значительно превосходить остальные слагаемые, и поэтому характерное поведение этой функции определяется именно этой компонентой. Остальные компоненты можно отбросить и условно записать, что данная функция имеет оценку поведения (в смысле скорости роста ее значений) вида  О(n2). О-оценка позволяет разбить все основные функции на ряд групп в зависимости от скорости их роста:
1)       Постоянные функции типа О(1), которые с ростом n НЕ растут (в оценивании алгоритмов этот случай встречается крайне редко, но все-таки встречается!);
2)       Функции с логарифмической скоростью роста О(log(2n));
3)       Функции с линейной скоростью роста О(n);
4)       Функции с линейно–логарифмической скоростью роста О(n*log(2n));
5)       Функции с квадратичной скоростью роста О(n2);
6)       Функции со степенной скоростью роста  О(na) при а>2;
7)       Функции с показательной или экспоненциальной скоростью роста  О(2n);
8)       Функции с факториальной степенью роста  О(n!).
В этом списке функции упорядочены именно по критерию скорости роста: сначала идут медленнорастущие функции, потом – все более быстрорастущие.
Отсюда можно сделать несколько выводов:
· При выборе однотипных алгоритмов предпочтение (при прочих равных условиях) следует отдавать алгоритмам с наименьшей скоростью роста трудоемкости, поскольку они позволят за одно и то же время решить задачи с большей размерностью;
·   Если заранее известно, что размерность решаемых задач невелика, но зато число их повторений очень большое, имеет смысл рассмотреть возможность использования алгоритмов не с самой лучшей оценкой, поскольку при малых n “лучшие” алгоритмы могут вести себя хуже, чем “плохие” (это можно заметить по графику в области начала координат);
Как быть с оценкой трудоемкости программы в целом, если в программе используется несколько алгоритмов, решающих свои конкретные задачи? Есть два основных способа взаимодействия алгоритмов – последовательное и вложенное. При последовательном выполнении алгоритмов с оценками O(f1), O(f2), …, O(fk) общая трудоемкость определяется трудоемкостью алгоритма с максимальным значением:
O (программы) = Max (O(f1), O(f2), . . ., O(fk))

При вложенном выполнении общая трудоемкость есть произведение оценок вложенных друг в друга алгоритмов: O(программы) = O(f1)*O(f2)*O(f3).
При выборе алгоритма следует также учитывать, что при выполнении определенной задачи программа встретиться с тремя возможными случаями выполнения. Назовем их лучший, средний и худший случай.

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

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

Пробуксовка приложения вызванна, в первую очередь, самой операционной сиситемой, а в частносте страничной организацией памяти. Виртуальная память в 32-разрядной (Win32) системе с процессорами Pentium разделена на страницы по 4 Кб. При запуске приложения Win32 выделяет ему память, размер которой не много не мало 4ГБ. Весь этот огромный блок делится на более мелкие блоки, размерами по 4Кб, это и есть те самые страницы.

Очевидно, что физически ни одна операционная система не может выделить 4Гб память, поэтому когда физически память заканчивается ОС записывает физическую страницу на жесткий диск, этот процесс называется подкачкой или свопингом (swapping).

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

Так же о чем следует помнить при создании приложения, так это о выравнивании данных. Термин связан с работой процессора.  Я не буду освещать суть данного термина, лишь скажу, что необходимо убедиться, что переменные типа longint и указатели выровнены по четырехбайтовой или 32-битной границе. Иначе процессору потребуется достаточно большое количество времени для их чтения из кэша. Это может показаться трудным, непонятным, «страшным и лохматым». И, конечно, же вы спросите: «И как же это делается?», а я вам отвечу: «В наш век информационных технологий, это уже не важно». Дело в том, что в современных версиях Delphi компилятор это делает автоматически со всеми типами данных.
На этом я намереваюсь закончить статью. Я постарался дать вам все базовые знания, которые понадобятся вам в дальнейшем при конструировании приложений. Уже в следующей статье я начну знакомить вас с алгоритмами. 
Увы, продолжения никогда не будет.
Автор — Nikol05

N7Team больше нет

Друзья, рад сообщить вам, что N7Team больше не существует.

Я уже писал о реальной проблеме этого проекта и уже тогда было всё ясно и понятно — не быть журналу.

На данный момент всё, что осталось в нашем «хранилище» — кучка статей, кучка проектов (которые лежали там в надежде, что кто-нибудь из нас за них возьмётся), недоверстанный мной PDF-файл журнала (я его постараюсь выложить сюда в том виде, в котором он есть, хз, может понравится). Статьи буду постить на VR-Online и здесь.

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

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

Никакого профита

Знаете, горю желанием распустить команду на все 4 стороны. По сути, занимаюсь всем я один. И чувак с ником Blus. Но он не так часто в сети, и не всегда в курсе дел. Поэтому постит иногда несовсем корректную инфу на сайте.

2 человека совсем пропали из виду, один несовсем, 1 не в курсе больше чем половины дел и появляется редко, занимаюсь всем только я. А я, знаете ли, не Юлий Цесаревич — у меня и другие дела есть. В частности, я в студенческом активе колледжа, плюс замстаросты в группе (хоть не староста, уже классно). Плюс личная жизнь, к тому же да, лень, отдых, да блин, мало ли причин не уделить времени журналу в очередной день?! Один день, другой, десятый — и журнал стоит. И сайт стоит. И никто ничего не хочет делать (Blus не в счёт).

Зачем это всё тогда? Больше полугода потратили в никуда, ёпт…

PDF уже в разработке

Ну вот, наконец, сегодня я взялся за вёрстку нашего пилотного номера. И весь сегодня я просидел в паблишере, оформляя странички и распределяя материал, поработал над обложкой. Готово примерно 55,6% от всего номера.

22-го сентября уже наверняка получится выложить готовый номер, иначе релиз переносится на начало октября. Но и анонс номера на сайте сегодня-завтра я не могу сделать: надо определённо знать что будет в номере. Кое-что уже будет точно, а кое-чего ещё или нет, или не обработано. Например, интервью <кое с кем>. По идее, мы должны были найти связь с этим человечищщем и пообщаться с ним ещё давно. И меня терзают смутные сомненья, что до 22-го мы у нас получится это сделать, учитывая всякие нюансы, типа нашей занятости, наличия хоть какого-то списка вопросов (которого тоже ещё нет даже на русском языке) и часового пояса в <кое-где>.

Ещё мы с Nikol05 хотим основательно покумекать насчёт связки наших с ним сайтов (кнопка его сайта в моём сайдбаре есть). Надо согласовать какой материал может уходить к нему на сайт, что можно брать с его сайта и т.п.

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

Запостил сегодня свои старые обрывки «Под дождь дотла» на VRO, и обсуждение за день шло как-то вяло: 5 из 7 комментов — откровенный оффтоп. Знаю, что написал чушь, но хотелось бы получить адекватую критику… Зато целый ОДИН гуглоплюсик меня очень порадовал.

Эх, сейчас бы ливень за окно, да я бы ещё страниц 10 накатал…..

Обновление блога

Признаюсь, давно я уже решил забросить свой блог. А вот недавно совсем решил к нему вернуться. Ну, знаешь, надо же где-то публиковать свои заметки, делиться новым и интересным. Жить без блога оно, конечно, проще — не надо париться и думать чё б такого запостить. Но и скучно как-то без этого…

Вот, подновил дизайн, изменил название. «Блог Delphi’ста» — банально, «Anthony’s blogg_» — просто и попахивает каким-то оригинальным ходом. Ну, знаете, сейчас ведь модно везде в названиях сервисов на английском пропускать одну гласную букву…

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

Устроился я на работу на месяц-другой, совсем скоро куплю себе на эту небольшую зарплату отличный гуглофон Acer Liquid Mini E310. Завёл себе Твиттер (@AnthonySoprano_). Профиль нашей команды появился в Google+ (http://gplus.to/ITStage).

После почти полугодичного перерыва снова взялся за написание ABTool. Это уже смешно. И случайно решил изменить интерфейс стандартными средствами Delphi. Получилось довольно аппетитно, но есть ещё нерешённый вопрос: как прилепить CheckBox’ы к категориям/кнопкам компонента TCategoryButtons. Это ведь нужно для очерёдности установки нескольких программ, а, разумеется, стандартный TCategoryButtons не имеет чекбоксов. Надо ковыряться и смотреть как это воплотить.

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

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

Сайт открыт!

Наконец у нас открылся сайт на нормальном домене — http://it-stage.ru. Разумеется, он пока еще совершенно пуст. Старый сайт будет обновляться пока новый не будет минимально настроен и скорректирован.

О своём. Забрал-таки свою RAD Studio, установил и опешил. Ни один из 2-х рабочих креков не работал. Инет пестрит на**баловом, так что искать вручную что-то новое не вариант. А если и не на**балово, то готовые образы студии с таблетками внутри. И снова качать целый образ только ради этих таблеток — тем более не вариант. Ищем решение.

Что-то я совсем про блог забыл

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

В общем, вот он я, и я снова взялся за блог.

N7Team

Наверное, уже нельзя не заметить виждет Твиттера в правой колонке. Да, мы завели аккаунт в Твиттере, и там будем оперативно сообщать о текущем положении дел в команде и как обстоит наша верстка. Да и вообще интереные новости.

В команде всё, наверное, отлично, уже приняли нового участника с ником NailPlay, его блог можно почитать здесь. Сейчас ведется работа над статьями, и должен отдать должное, у CodeBryant есть уйма статей по C#, которые он писал еще познавая азы этого языка. И мы обоюдно решили взять эти его материалы для журнала.

Пожалуй, главная новость, непосредственно касаемая команды, это появление руководителя. Кто бы это мог быть? О да, ваш покорный слуга. Такое предложение быо видвинуто Лавиром, и никто не был против. И теперь я получаюсь руководителем проекта N7Team и IT-Stage. На сколько долго мне будет необходимо выполнять свои обязанности я точно не знаю, но, надеюсь, это время пройдет без эксцессов и проблем.

В любом случае, если встанет вопрос о смене руководства » я всеми руками за Лавира. Все может быть.

Это, пожалуй, самые-самые новости. А теперь перейду к себе.

Военкомат

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

Сменил я место жительства. Месяц спустя стало как-то не по себе: почему-то вспомнил, что состою на учёте в местном военкомате, и на старый адрес могли слать повестки.

«А если повесток штук 40? Так на меня там уже наверняка дело завели уголовное за уклонение» — подумал я и в один прекрасный день почапал туда в надежде на лучшее. Чтобы удостовериться в отсутствии повесток и оставить свой новый адрес.

Пришел я, значит, в картотеку. Тётенька (надо сказать о-о-о-очень пришлёпнутая по голове) уверила, что повесток нет. Спросила паспорт и… тут начинаются мои приключения.

Отсутствие прописки. А значит тётенька не может изменить мой адрес на новый. А чтобы это случилось необходимо:

  • Сняться с учета в местном Железнодорожном военкомате. Спустя год, с тех пор, как я туда встал на учёт, придётся оттуда «уйти». Тётенька дала бланк заявления о снятии с учёта. Сказала как заполнить. Заполнил. Оказалось неправильно, указала где как переправить. Исправил. Оказалось ещё неправильней. На просьбу дать новый бланк получил дозу истеричных жалоб на жмотство начальства, которое не даёт бумагу, и как следствие — на отсутствие чистых бланков. Тут же берёт из пачки бумаги чистый лист  и распечатывает мне бланк. Второй раз заполнил, как оказалось, правильно.
  • Встать на учёт в военкомате по месту постоянной прописки.То есть мне надо ехать в родной город и терпеть такой же дурдом, как здесь, уже второй раз. Одна медкомиссия чего стоит, а уж про сам военкомат я и говорить не буду.
  • Вернуться в Улан-Удэ и сделать временную прописку не меньше чем на полгода.
  • Соизволить притащить свою тощую задницу в местный военкомат, прихватив бумаженцию с пропиской и приписное удостоверение.

Да это всё фигня, если бы не один пустяк: на всё это даётся 14 дней. Вроде должно быть достаточно. А если учесть расстояние до родного города и обратно, потраченное на это время (около 4 суток в оба конца), плюс время для постановки на учёт, муть с временной пропиской — может и уложусь в эти сроки. А самое печальное, что если военкоматы эти соберутся обмениваться моей информацией… Быть беде.

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

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

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

Небольшая порция новостей

N7Blog

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

Уже не помню откуда пошла идея о нашем переназвании, но она развилась довольно сильно. Журнал будет выходить под заголовком IT-Stage, команду мы хотели сначала сделать NetCrew, однако вскоре передумали — N7Team уже прижилось.

Всё это будет в момент открытия нашего сайта, нормального сайта с нормальным доменом — it-stage.net. В начальстве uCoz видать какие-то зловреды кое-где шевелятся: они уже и не знают как begun’овкую рекламу распихать на халявных сайтах. Ну, да ладно, пошевелятся и успокоятся, а я рассказываю дальше.

Вчера закончил создание моего первого и немаленького PDF-файла, содержание которого держится в секрете. Я лучше расскажу в какой программе я это делал.

Microsoft Publisher

Недавно мне прислали диски от отца, который мне нарезал вроде 6 болванок со всякими полезностями, среди которых была семёрка с первым сервис-паком, много-много софта и… MSOffice 2010. Я его ждал, наверное, больше всего остального. Установил я себе простой пакетик — Word, Excel и Publisher. Вот о последнем я и поведу речь.

Я видел лишь один редактор PDF-файлов помимо Publisher’а, но уже могу сказать, что Publisher обгоняет множество из ему подобных по многим показателям. Он гораздо более понятный и простой засчёт того, что он смахивает на Word, а к нему уже привыкли практически все.

Перед началом работы остаётся лишь удостовериться, что все нужные кнопки на месте, псмотреть какие кнопки новенькие (которых нет в ворде), и что Publisher умеет сохранять файлы в PDF. Удостоверились, убедились — и вперёд создавать свои проекты, не задумываясь. В нем все понятно засчёт Ribbon-ленты, которая не скрывает надписей ко многим копкам и не таит секрета о их действии, как в некоторых других продуктах этого рода. Я, посидев в нем несколько часов, уже точно знал на какой вкладке нужная копка, в течение суток понял, что это то, что надо для верстки журнала. В общем, нахваливать сильно не буду, кто захочет, тот убедится сам.

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

N7Magazine

Когда мы создали сайт нашей команды у нас возникли некоторые непонятки. Сначала мы хотели сделать что-то вроде копилки наших работ и проектов. А сайт получался каким-то не скромным под такое дело. Разветвился форум, созданы куча страниц, началось создание некоего комьюнити. Мы остановились почесать репу: что делать — копилку знаний только для нас или для всех?

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

Так вот. Журнал будет, как обычно, ежемесячным и будет ориентирован на программирование на языках C# и Delphi.

Пока нас в команде только трое, но, уверен, это ненадолго, ведь у нас объявлен набор в команду N7Team.

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

  •  креативный дизайнер. Оформление нашего журнала будет меняться месяц от месяца, поэтому нужен профессионал своего дела;
  • верстальщик — для распределения статей по рубрикам и «упаковки» всего материала в PDF-файл;
  • программисты C# и Delphi;
  • авторы статей, обзоров, умеющие максимально полно и грамотно излагать свои мысли;
  • журналисты и редакторы.

Ну, это пока все, кто необходим. А требования таковы:

  • великолепное знание русского
  • и хоть какое-то знание английского языков
  • умение и/или желание работать в команде единомышленников
  • общительность и креативность.

Запись на «собеседование» по адресу: N7TeamHelp at gmail.com. В резюме указывайте всё, что хотите: любимые хобби и увлечения, отношение к IT-миру, кем хотели бы стать в будущем (если ещё не стали)… да просто расскажите о себе, и чем больше, тем лучше. Ни одно письмо без ответа не останется, поэтому у вас есть все шансы влиться в наши, пока ещё, скромные ряды редакции журнала N7Magazine!

А если нет желания присоединяться к нам, в любом случае у вас есть возможность помочь нашему проекту, подкинув нам на N7TeamBase at gmail.com собственноручно написанную статью на околокомпьютерную тематику. Она обязательно попадёт в первый выпуск журнала.

Ждём вас на страничках нашего сайта.