Cloud IDE

Сделаю небольшой обзор облачных (онлайн) IDE с позиций их использования в учебном процессе.

IDE One

http://ideone.com/

Вход через Facebook или Google. Можно просто зарегистрироваться.

Набор кода в один файл. Есть окна для стандартных потоков stdin, stdout.  Данные этих потоков сохраняются вместе с кодом.

Отладчика нет.

Есть языки Bash, Pascal, C, C#, Perl, PHP, C++ (в т.ч. 11), Python, Haskell, Python 3, Java, Ruby, Objective-C, VB.NET, Ada, COBOL 85, Intercal, Perl 6, Assembler, Common Lisp, JavaScript (rhino), Pike, D (dmd), Prolog, AWK, Erlang, Lua, F#, Nemerle, bc, Factor, Nice, Scala, Falcon, Nimrod, Scheme, Forth, Node.js, Smalltalk, C99 strict, Fortran, Ocaml, Tcl, CLIPS, Go, Octave, Clojure, Groovy, Oz, COBOL, Icon, PARI/GP. Т.е. большинство языков, которые могут понадобиться в разумном учебном процессе. И даже в основательно неразумном — Unlambda, Brainfuck, Whitespace. При желании можно показать и SQL. Из того,  что могло бы прийти мне на ум в качестве первого языка программирования не нашёл только Logo и Eiffel.

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

Совместной работы нет. Возможен только fork (просто копирует код и открывает редактирование)

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

compilr

https://compilr.com

Вход через Facebook или Twiter. Теперь является частью платной системы учебных курсов  lynda.com. Если не проходить учебные курсы, то денег пока не берут.

Набор кода в дерево папок проекта. Можно создавать файлы данных.

Отладчика нет.

Список языков чуть беднее, но за счет более редких. Из «любимых» нету Scala.

Есть импорт/экспорт проектов в виде архивного файла.

Совместная работа есть. Можно делиться с правом изменения или только чтения. Публикация только для указанных пользователей или групп пользователей в рамках сайта.

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

Сompileonline</>com

http://www.compileonline.com/

Набор кода в несколько файлов. Есть stdin и аргументы командной строки.  Данные этих потоков сохраняются вместе с кодом.

Отладчика нет.

Есть языки

Ada, Algol-68, Assembly, Awk, Bash, Shell, Basic, Befunge, Brainf**k, C, C99 Strict, COBOL, C++, C++11, C++0x, C#, Clojure, Dart, D, Embedded C, Erlang, F#, Factor, Falcon, Fantom, Forth, Fortran-95, Go, Groovy, Haskell, ICON, Intercal, Java, LISP, Lua, Malbolge, MATLAB/Octave, Mozart-OZ, Nimrod, Node.js, Objective-C, OCaml, PARI/GP, Pascal, Pawn, Perl, PHP, Pike, Prolog, Python, Python-3, REXX, R, Programming, Ruby, Rust, Scala, Scheme, Simula, Smalltalk, SQLite, SQL, Tcl, Unix Shell, Unlambda, VB.Net, Verilog, Whitespace, LOLCODE, Julia, ScriptBasic, BaCon, ilasm, QuickBasic, SML/NJ.  Неожиданно MathML и LaTex.

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

Отладчика нет.

 

Share

Обучение программированию

Это пока перечень мыслей вокруг одной темы. Как мне справится с преподаванием начального курса программирования студентам. Я много раз вёл разные курсы по программированию и коммерческие, и университетские, и  начальные, и продвинутые. Только вчера закончилась летняя вычислительная практика  где я за 10 дней попытался показать основы программирования на Java. Но каждый раз возникает момент выбора,  связанный со специфическим форматом, требованиями и новыми возможностями. Вот и возникает вопрос как лучше (технически, а не содержательно!) в современных условиях организовать базовый начальный курс программирования на базе С/С++ в классическом университете для большого потока студентов. Так чтобы была польза студентам, чтобы изменить их способ мышления на деятельностный алгоритмический, чтобы сделать для них эту деятельность естественной функцией организма… И чтобы самому при этом не сдохнуть.

Начнем с проблем:

  1. Студенты в массе своей не умеют делать то, чему их учат. В том числе и программировать. Побороть это можно только большим количеством (больше десяти за семестр) индивидуальных задач-программ, которые необходимо написать. Они могут быть крохотными, но должны быть самостоятельно изготовлены.
  2. Студенты в массе своей не читают то, что им предлагается прочесть. В том числе и специально подготовленные фрагменты кода или готовые программы. Побороть это можно сериями мелких тестов (quize), которые необходимо пройти после ознакомления с небольшой порцией информации. Желательно, чтобы тесты были разнообразны и требовали написания фрагментов кода
  3.  Студенту приходится тратить много времени на ожидание «внимания» со стороны преподавателя. «Внимание» это в начальный момент в основном состоит в том, что преподаватель расставляет студенту в коде правильную лесенку (indent) и исправляет ошибки. Студент при этом, как правило, думает о чём-то своём. Сократить время ожидания и привлечь студента к написанию его собственной программы можно автоматическим тестированием. Т.е. TDD или любые техники юнит тестов тут вполне вполне уместны. Что-то аналогичное и с бьютефулайзингом кода.
  4. Преподаватель не может качественно проверить по 5-10 раз за пару программы у 10-12 студентов. Не может, но регулярно это делает. В результате он начинает работать в режиме пастушьей собаки — уделять внимание отставшим овцам (т.е. студентам). Их работы и проверять легче. Успевающие студенты предоставлены в большую часть времени сами себе. Они либо перестают работать, либо в них развивается неадекватно высокая оценка своих возможностей. Обычно такие «успевающие» студенты пишут грязный, кривой, безграмотный, но как-то работающий код. А преподаватель тратит своё время на подтягивания отстающих до этого уровня. Результат — хороший стиль появляется без участия преподавателя или не появляется вообще. Другой вариант — забыть об отстающих и работать с успевающими, тоже не работает нормально. У успевающего студента кода куда больше, проблемы глубже, времени на него нужно масса. А время ресурс невосполнимый.

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

  1. Онлайн IDE
  2. Тестирование программ
  3. Системы для тестирования знаний
  4. Хранение кодов с контролем версий
  5. Предоставление материалов студенту и общение
  6. Накопление результатов и формирование отчетов
Share

Порядок доступа

Иногда (ну, совсем иногда) меня спрашивают о том, какие мои любимые вопросы при проведении собеседований. Конечно раскрывать секреты нет смысла, но один занимательный пример хотел бы привести. Он демонстрирует три важных для программиста качества: осведомленность, логическое мышление и внимание к деталям. Пример касается доступа к элементам массива. Т.е. темы в которой начинающий программист обычно уверен на 100%.
Итак простая задача, например, на Java. Необходимо создать квадратный целочисленный массив большого размера (порядка 10000 х 10000) и инициализировать его элементы значениями равными сумме индексов. Легко говорит начинающий и пишет такой код:


int g[][] = new int[n][n];
for(int i = 0; i < n; i++) {
    for(int j = 0; j < n; j++) {
        g[i][j] = i + j; 
    }
}

Все правильно, все работает. Но более «умный» претендент заметит, что массив симметричный и мы напрасно вычисляем n2 элементов. Достаточно перебирать только один треугольник, а значение элементов второго треугольника выставлять симметрично. Так мы экономим n(n-1)/2 сложений, что для больших n должно дать какой-то заметный эффект. Предположим, что этот товарищ даже обратил внимание на главную диагональ и написал разумный код вида:


int g[][] = new int[n][n];
for(int i = 0; i < n; i++) {
    g[i][i] = i + i;
    for(int j = 0; j < i; j++) {
        g[j][i] = g[i][j] = i + j; 
    } 
}

Чего мы добились? Вычислительных операций стало существенно меньше. А как со скоростью работы программы?
Зафиксируем время работы первого варианта. Получится что-то порядка 0,2 сек. Радостно потирая руки запускаем второй вариант… Но программа что-то не заканчивает работу… А, вот! Наконец!
Но что за странный результат? 8 секунд! Где же наша экономия?

В этот момент самое время предложить соискателю объяснить ситуацию и поискать способ все же ускорить инициализацию. А у Вас получится?

На всякий случай код программки с тестом времени лежит здесь. Поэкспериментируйте. Поставьте, например, n=512 или 256. Почему ситуация изменилась? Полагаете из-за степени двойки? Тогда проверьте 1024, 2048, 4096.


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

Share

World Final ACM ICPC

Одна из команд по спортивному программированию Одесского национального университета имени И.И.Мечникова по результатам соревнования в Юго-восточном европейском регионе вышла в финал чемпионата мира по программированию.
Пришли приглашения и соответствующая информация опубликована на официальном сайте чемпионата мира.
С учетом всех этапов соревнований наша команда оставила позади около 700 команд университетов 13 стран, относящихся к нашему региону (Украина, Турция, Румыния, Болгария, Греция, Израиль, Молдова, Ливан, Албания, Хорватия, Македония, Кипр, Сербия).

Состав студенческой команды:
Юрий Монастыршин
Федор Поляков
Сергей Скляниченко
Тренер: аспирант Олег Петров

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

К такому высокому результату мы шли начиная с 2000 года, когда начали вести научный кружок по программированию для студентов Кубки Украины по программированию, различные профессиональные соревнования программистов. Большой вклад внесли не только преподаватели и организаторы, но и все, кто принимал участие в этой работе, поскольку важно было создать хоть сколько-нибудь массовое движение, когда студенты развиваются в контакте с другими, постоянно поддерживая и поощряя друг-друга. Хочу отметить большой вклад, который внесли за эти годы многие студенты и преподаватели — Алексей Тигарев, Петр Обухов, Кузьма Кудим, Александр и Павел Антоненко, Виктор Бурдейный, Артур Максимов, Дмитрий Тинитилов, Олег Петров, Кирилл Чеканов и многие другие без многолетнего труда которых вряд ли возник бы необходимый для сегодняшней победы фон.
Все время своего существования студенческое программистское движение получало поддержку от компании CSOdessa это были и гранты для студенческих научных работ и совместное проведение соревнований. Руководители компании Григорий Жуков и Светлана Науменко много личного времени посвящали работе со студентами и организации соревнований. Периодически проводились мероприятия с участием других компаний — The Product Engine, Lohica, Opera Software Ukraine.
На сегодняшний день университетское студенческое движение в области спортивного программирования получило наибольшее достижение за все время его существования. Конечно хотелось бы, чтобы, в свете этого, внимание и поддержка информатики, алгоритмизации и программированию снова вернулись бы на прикладную математику в нашем университете. Но даже если этого не произойдет, все равно приятно, что прикладники так красиво, на взлете уходят из большого спорта.

Share

Blues

В этом посте пространными цитатами я попытаюсь ответить на вопрос что такое блюз? Если Вы хотите получить знания, то смотрите умную статью на wikipedia или на википедии. Английская версия снабжена кучей музыкальных цитат и там действительно можно разобраться чем отличается Detroit blues от G7 Shuffle в Chicago-blues. Писать что-то про блюз после этих и множества других статей просто нахальство. Я и не буду ничего писать. Я просто попытаюсь выложить ссылки на видеоматериалы, которые позволят выработать собственное ощущение этого предмета.
Начнем с чудом сохранившейся записи мелодичного варианта «настоящего» черного блюза. Готовьтесь к шоку

Наверняка вы догадались, что это не ретро инсценировка — это настоящие живые люди — «стиляги» 60-х. Так это было в жизни — приглядитесь к публике. Публика достойна такой музыки.
Ну, если мы это выдержали, давайте углубимся в историю вопроса. Коротенько так, часа на полтора.

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

и что? только это блюз? Нет конечно. Но дальше как-то сами…

Share

Roy Buchanan

Рой Бьюкенен. Почти уверен, что Вы о нем ничего не слышали. Вообще похоже, что это именно ему и нужно было. он не рвался к славе, он хотел только играть и даже без того чтобы быть услышанным. Этот странный парень называл музыку просто еще одной формой секса.
Я не решусь сказать, что это лучший гитарист всех времен и народов. Это скорее всего будет неправдой. Но то, что никого лучше его нет и не было, это точно. Но вот к славе он кажется точно не стремился. Вы можете себе представить человека, который не пошел в проект к Джону Леннону на пике его славы?! Когда Brian Jones вошел в клуб 27, Роя пригласили в Rolling Stones. Нормальные варианты, да? Не захотел. Но послушайте, что он умеет… ну, то есть умел…

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

Как? вы уже не так уверены, что Гэри Мур самый лучший? Они с Роем, кстати, не раз играли вместе.
Давайте рванем в 1976-й и послушаем знаменитый «роевский» блюз

Трагически кончилась жизнь этого гениального музыканта и интересного человека. И даже не известно точно как именно.
И традиционный ассоциативный офтопик. Рой Бьюкенен по каким-то непонятным причинам связывается у меня с другим выдающимся гитаристом более старшего поколения, другого направления и совсем другой культуры. Я имею в виду великого и ужасного Джанго Рейнхардта, знаменитого цыганского гитариста с полу сожженной правой рукой. Вот моя самая любимая его вещь — минорный свинг (скрипка — Стефан Грапелли):

Если Вас заинтересовал Джанго, то вот фрагмент передачи с российского телевидения о нем

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

Share

Chet Baker

Пока почти ничего писать о нем не буду. Просто застолблю место, чтобы нечаянно не забыть про Чета Бекера. Это именно такой кул-джаз, который мне понятен и то чего я жду от джаз фестивалей в Одессе. И иногда получаю.
Как, например, в 2012, когда играл Терентьев. У Терентьева, как и у Бекера есть музыка в паузах. Правда, Терентьев лучше.

Здесь не очень хороший звук, но живая запись

Звук лучше слушать здесь

А вот Осенние листья с Полем Десмондом на саксофоне:

Очень характерный для него вариант Саммертайм:

Вставлю еще его альбом с Биллом Эвансом. Имеется в виду не саксофонист Билл Эванс, а пианист. Пианист Билл Эванс умер в 80-м и сам стоит огромной статьи. Он настоящее чудо. Возможно даже лучший джазовый пианист всех времен и народов по моей версии. Уже упомянутого выше Терентьева я бы сравнивал именно с ним. Даже внешне чем-то похожи. Наверное, очками :)

Я знаю, что оффтопик, но давайте послушаем Била Эванса (William John Evans) в одной из старых черно-белых телевизионных передач

Share