Встреча 23.04.2012

Дабы разгрузить немного основной топик давайте в этом топике обсуждать решения задач со встречи 23.04.2012. Сами задачи находятся здесь.

Ненормальное программирование (cерия 2). Memento...

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

В Delphi отсутствует как таковая проверка выхода за границы при обращении к элементам массива, поэтому можно обратиться к тем «элементам», которые лежат в памяти перед или после самого массива. Обычно точно не получится сказать, что же именно будет там находиться, однако, если мы объявляем, к примеру, одновременно два массива, то они с достаточно большой долей вероятности будут располагаться в памяти последовательно один за другим.

Что же нам может дать подобное поведение компилятора, кроме проблем?

Разберем простейшую задачу:
Имеются 2 массива по… Ммм… Предположим по 8 элементов (заполним их с помощью генератора псевдослучайных чисел). И элементы этих двух массивов нужно переставить таким образом, чтобы в первом были минимальные элементы из двух исходных массивов, а во втором – максимальные.


Задача элементарная и сводится обычно к двум вариантам: либо это последовательный поиск минимальных/максимальных элементов и постепенная перестановка, либо объединение двух исходных массивов в третий и его сортировка с помощью стандартных средств.

Но… Delphi в силу той особенности, о которой мы сегодня говорим, позволяет провернуть очень изящный фортель, а именно – отсортировать сразу оба массива как один. К тому же для этого даже не нужно делать ничего особенного: просто достаточно сортировать первый массив «сдвинув» его правую границу на длину второго массива.

{$APPTYPE CONSOLE}

uses
  SysUtils;

{ Стандартный алгоритм "быстрой" сортировки (можно использовать любой другой) }
procedure qSort(var a: array of Integer; low, high: Integer);
var
  i, j, x: Integer;
  t: Integer;
begin
      i := low;
      j := high;
      x := a[(low + high) div 2];
      repeat
          while a[i] < x do inc(i);
          while a[j] > x do dec(j);
          if i <= j then
            begin
              t := a[i];
              a[i] := a[j];
              a[j] := t;
              inc(i);
              dec(j);
            end;
      until (i > j);

      if low < j then qSort(a, low, j);
      if i < high then qSort(a, i, high);
end;

{ Это сделано для красивого вывода массивов }
procedure Print(a: array of Integer; name: String);
var
  i: Integer;
begin
  Write(name, ': [ ');
  for i := 0 to length(a) - 1 do
    if i < length(a) - 1 then
      Write(a[i]:3, ', ')
    else
      WriteLn(a[i]:3, ']');
end;

var
  i: integer;
  a, b: array [0..7] of Integer;
begin
  { Заполняем массивы }
  Randomize;
  for i := 0 to length(a) - 1 do
    begin
      a[i] := Random(256);
      b[i] := Random(256);
    end;

  { Выводим, чтобы посмотреть, что было }
  Print(a, 'A');
  Print(b, 'B');
  WriteLn;

  { Сортируем все 16 элементов }
  qSort(a, 0, 15);

  { Выводим, чтобы посмотреть, что стало }
  Print(a, 'A');
  Print(b, 'B');
  WriteLn;

  ReadLn;
end.


Как видите – все просто! Разве что не все позволяют так делать (к примеру, Free Pascal не даст так просто гулять по чужой памяти).

PS.: Напоследок, попробуйте решить задачу тем же способом, если будет 2 массива по 10 элементов типа Byte.

Связь между студентами в группе

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


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

1. Группы в социальных сетях

Самый распространенный вариант. Надо заметить, что кроме контакта есть и другие социальные сети: Фейсбук, Одноклассники, Google+ и т.д. Этот сайт тоже своего рода социальная сеть, но с упором на блоггинг, поэтому его я рассмотрю отдельно.

2. Почтовая рассылка

Например, Яндекс.Почта позволяет объединить несколько адресов в группу.

Написать письмо группе очень просто: введите первые буквы её названия, и Яндекс.Почта предложит вам добавить эту группу в список адресатов письма.

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

3. Закрытый блог группы на pgsha.info

Тоже на мой взгляд неплохой способ. Создать здесь закрытый блог группы очень просто — достаточно зарегистрироваться, нажать кнопку «Написать», затем «Создать блог», ввести его название, URL, выбрать тип «закрытый» (это означает что присоединиться к нему смогут только по приглашению администрации блога и топики в нем будут видеть только его участники), пригласить всех одногруппников на сайт, а затем в этот блог. При публикации нового топика в этом блоге сообщение об этом будет автоматически рассылаться на e-mail каждого участника (если указать email в настройках сайта и не отключать эту опцию).

Пока всё. А как организована связь в группе у вас?

Ректор ПГСХА отправлен в отставку

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

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

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

Таким наш край увидел весь мир!

Телеканал Russia Today показал сюжет о Перми и Пермском крае.

Внимание: видео на английском языке!

Чемпионат по программированию VK Cup 2012

Чемпионат VK Cup — это открытый чемпионат по программированию, проводимый компанией ВКонтакте, проектом Codeforces и СГУ. Финал чемпионата пройдет в июле в Санкт-Петербурге. Лучшие 50 участников по результатам третьего отборочного раунда будут приглашены на финал соревнования. Расходы по проезду и проживанию берут на себя организаторы. Основные особенности чемпионата:

  • ограничение на возраст участников — от 14 до 23 полных лет на момент регистрации. Таким образом, целевая аудитория — школьники старших классов и студенты.
  • довольно затейливая структура отборочных раундов, сконцентрированных в марте (первая квалификация — 4 марта) и начале апреля:
    • два квалификационных раунда, каждый из которых идет 24 часа и отбирает 800 лучших участников для раунда 1. Не пугайтесь длительности раундов — сидеть за компом сутки подряд не нужно, это означает только то, что сдавать задачи можно в любой момент этих 24 часов. Квалификации содержат несколько несложных задач, и обычно для прохождения в следующий раунд достаточно решить часть задач, штрафа за позднюю сдачу нет.
    • три отборочных раунда, проходящих по традиционным правилам Codeforces;

    • два wildcard-раунда, которые позволяют людям, выступившим в первом и втором отборочных раундах неудачно, попробовать еще раз. Для разнообразия wildcard'ы проводятся по другим правилам, чем основные раунды, и это довольно необычно для турниров по спортивному программированию.
  • наконец, финал чемпионата для 50 лучших участников по результатам третьего раунда пройдет в июле в Санкт-Петербурге — поездка за счет организаторов.

Из приятных для участника вещей — солидные денежные призы для топ-10 участников финалов, фирменные футболки для 200 участников 3 раунда, наконец, просто интересные задачи.

Подробное расписание раундов, правила и т.д. — в анонсе чемпионата. Удачи участникам!

Научно-практическая конференция ПГСХА

Каждый год в марте проходит научно-практическая конференция ПГСХА. Кто-нибудь участвовал или знает подробности? Какие требования к участникам, темам? Что нужно для участия и действительно все ли преподаватели будут рады стать научными руководителями?

Олимпиада по программированию для школьников

6 февраля стартовала заочная олимпиада для школьников «Эврика!», проводимая Факультетом Прикладной информатики Пермской ГСХА. Целью олимпиады является развитие интереса школьников к логическим и математическим наукам. В ней могут принять участие школьники 9-11 классов, а также учащиеся учреждений начального профессионального образования. Задания олимпиады носят нестандартный характер и требуют применения творческих и интеллектуальных способностей участников в области математики, информатики и логики. Для участия обязательна регистрация на форуме олимпиады. Там же можно найти подробные правила проведения олимпиады и задать интересующие вопросы. Регистрация участников заканчивается 29 февраля 2012 года, в момент окончания олимпиады.

Дальнейшее развитие этого сайта

Хотелось бы поделиться своими планами дальнейшего развития этого сайта и спросить ваше мнение на этот счет.
Но для начала расскажу что уже сделано в последнее время.

  • Может кто-то заметил, я убрал ЧПУ (Человеко-Понятные УРЛы). Ну например, pgsha.info/fpi/komanda-fpi-po-programmirovaniyu.html теперь открывается по адресу pgsha.info/blog/fpi/10.html. Этому есть причины — во-первых заметил большую конфликтность этого плагина, вследствие чего могут быть проблемы при будущих доработках, а во-вторых, по моим подсчетам, со включенным ЧПУ время генерации страниц дольше на ~45%, что совсем не радует. Надеюсь никто не в обиде :)
  • Создал специальный раздел для вопросов, где могут задать свои вопросы даже незарегистрированные пользователи. Очень надеюсь, что раздел будет востребован и увеличит активность на сайте. Правда я его еще не совсем доделал — пока думаю как лучше сделать. Естественно убрал голосование за вопросы (зачем рейтинг гостям?), но планирую добавить поля для имени и e-mail гостей, чтобы отсылать уведомления об ответах. Возможно еще стоит сделать категории для вопросов, среди которых могли бы быть и преподаватели, или, например, приемная комиссия. При публикации вопроса в эту категорию туда отправлялось бы уведомление на почту. Как считаете, стоит ли такое реализовать и будет ли пользоваться спросом?
  • Максимально упростил регистрацию — оставил там только 3 поля: логин, email и каптча. Сделал это в виде плагина, который кстати был неплохо принят сообществом этого движка. И кстати: кто знает PHP и хочет помочь расширить функционал этого сайта — скачать этот фреймворк можно здесь, а посмотреть документацию — здесь (правда она довольно скудная, лучше уж изучать исходники).
  • Ну и другие мелкие доработки, которых сейчас даже не упомню, но из которых и складывается сайт :-)


Вот теперь можно перейти к планам на будущее. В ближайшее время планирую, кроме доработки раздела вопросов, добавить возможность прикрепления файлов к топикам — мне кажется данная возможность будет весьма актуальна и востребована.

Ну и наконец просто абстрактные идеи на обсуждение, без каких-либо планов:

  1. Каталог преподавателей: студентам это возможность узнать побольше о преподавателе, а преподавателю соответственно — обратная связь.
  2. Файловый архив: место, где можно было бы выкладывать учебные материалы, книги и т.д.
  3. Вакансии: раздел с вакансиями и предложениями работы для студентов.
  4. Чат: мне кажется он не очень нужным, но как идею всё же напишу. Его сейчас вполне может заменить коллективная внутренняя почта.

Правда вот отсутствие активности на сайте никак не мотивирует этим заниматься — такое ощущение, что он никому не нужен =( Хотя заходит достаточно много народу и ясно прослеживается положительная тенденция:

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

А у вас есть какие-нибудь идеи?

Фотокросс ПГСХА 2012

Профком студентов ПГСХА проводит фотокросс. Фотокросс — это конкурс любительских фотографий по заданной теме. В этот раз была выбрана тема "Академия и Я".
Фотокросс — это «быстрая фотография». Надо не только придумать хорошее раскрытие темы, но и успеть ее реализовать за ограниченное время. Начало конкурса 26 января в 12:00. Окончание — 13 февраля в 22:00.

Этапы фотокросса

1 этап
25 января — 31 января
Сбор фотографий

Вы приносите свои фотографии на тему «Академия и Я» в профсоюз студентов
Условия:
  • Не более 2х фото от 1го претендента по каждой подтеме
  • Соответствие подтемам: «Обратная сторона академии», «Факультет», «Моя жизнь в академии»
  • Участник обязан состоять в профсоюзе ПГСХА

2 этап
1 февраля — 8 февраля
Отбор претендентов

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

3 этап
8 февраля — 13 февраля
Голосование

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

Условия участия

Для участия в конкурсе вы должны состоять в Профсоюзе и заполнить форму регистрации:
  1. ФИО.
  2. Факультет, специальность, группа.
  3. Стаж фотографа.
  4. Подтема конкурса.
  5. О себе.

Ваши фотографии на конкурс должны быть в формате JPEG, весить не более 5 мегабайт, без обработки фотошопом (по возможности), на строго заданную тему или подтему (не по теме будут исключены сразу), приносить нужно либо в Профсоюз студентов (Архит.корпус, аудитория 101б), либо скинуть на почтовый ящик foto-kross@mail.ru.

Узнать свежую информацию и задать свои вопросы можно на странице мероприятия «вконтакте»: vkontakte.ru/event3746924