воскресенье, мая 04, 2014

Трамвайные проблемы

Вчера у меня случилась первая трамвайная проблема.

Приближаюсь я (серенькая машина на схеме) к перекрестку улицы Серебренниковской и Октябрьской магистрали со стороны Оперного и планирую поворачивать налево, на светофоре красный. Трамвайные пути на одном уровне с дорогой, поэтому согласно пункту 8.5 поворот налево должен выполняться с попутных трамвайных путей. Однако в зеркалах я вижу приближающийся к перекрестку попутный трамвай (зеленый на схеме). На встречке виднеется некоторое количество машин, которые придется пропускать при повороте (синие ребята), поэтому идея перестроиться на пути перед трамваем мною была отвергнута. Было решено действовать по обстоятельствам.

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

Вопрос: как же правильно это место проезжать?

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

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

среда, февраля 19, 2014

Шерегеш в –30, часть первая

Ребята из проекта НГУ в лицах предложили опубликовать заметки о поездке в Шерегеш, я согласился. Вот что получилось!

Шерегеш — поселок на юге Кемеровской области, известный всем сибирякам благодаря своему горнолыжному комплексу у подножья гор Зеленая и Мустаг. Там-то мы и решили провести 5 дней отпуска/каникул компанией из 6 сноубордистов, выпускников и студентов НГУ.

За две недели до поездки мы предусмотрительно забронировали автобус до Шерегеша и аренду трехкомнатной квартиры.

И наконец собрав все вещи, мы приехали в воскресенье в 7:45 утра на Речной вокзал. Однако автобус нас не ждал, после звонка узнаем, что он стоит на станции метро Октябрьская. Небольшая паника, поездка на метро и в 8:00 мы успешно сели в автобус, кажется, последними. Далее были 8 часов пути на юго-восток, сопровождаемые просмотром Любовь-Морковь, Любовь-Морковь 2 и Елки на автобусных телевизорах.

По приезду заселились в весьма уютную квартиру, поделили комнаты, что, кстати, не просто, ведь кому-то из парней придется спать вдвоем на кровати. Затем, закупив две пачки пельменей, мы смогли прокормить себя в первый вечер. На фотографии только половина! Закончив ужин, спать еще никто не хотел, и мы начали играть в Манчкин. Это веселая настольная карточная игра, которую неплохо характеризует ее девиз «Мочи монстров, хапай сокровища, подставляй друзей».

На следующий день в 9 утра мы уже стояли на улице и ждали бесплатный автобус в Сектор Е (один из секторов на горе Зеленая, известен самой длинной трассой). Но за 10 минут он не приехал, и мы решили взять такси. Приезжаем к подъемникам… А они стоят. Тут надо заметить, что на улице в этот момент было –31 °C! Что поделать, ведь кататься хотелось, и мы поехали к другому подъемнику (SkyWay). Там нас уверили, что после 10-минутного тестирования подъемники включат.

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

Собравшись вместе после окончания работы подъемника, мы поехали домой на такси. Кстати, такси в Шерегеше давно адаптировались к перевозке туристов, и в небольшой универсал тесно, но влазят шесть человек со сноубордами. Дома мы доиграли долгую, но интересную партию в Манчкин и активно делились впечатлениями о прошедшем дне. Ведь каждый хочет рассказать, сколько он елок сбил и у кого больше синяк!


Кому-то крупно повезло отхватить 11 сокровищ!

На следующее утро мы решили выйти на час позже, когда потеплеет и уже включат подъемники. В этот день мы поехали в Сектор А искать хорошо подготовленные трассы. Однако я нашел не только трассы, но и отличный пушистый снег за их пределами, о чем и пожалел. Весело спустился по полянам в пологий участок леса, где практически не было следов лыж/сноубордов/ботинок, отстегнул сноуборд и грустно пошел пешком на свет между елок — там должна быть трасса. Прошагав метров 100 по колено в снегу, я повидал красивые сугробы, следы белок, пушистые елки и все-таки вышел на трассу. Ехать в этот лес еще раз я больше не хотел.

Ближе к вечеру подгруппой из 4 человек мы совершили небольшое «восхождение» в сторону вершины горы Мустаг — поднялись метров на 50 от места высадки с подъемника. Однако эта небольшая удаленность от выкатанных трасс позволила сделать симпатичную панораму с видом на поселок, вершину г. Зеленая и на другие вершины Горной Шории.

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

Спать мы пошли, осознавая, что два дня катания, то есть половина поездки, уже позади.

четверг, октября 24, 2013

Do not mix tabs and spaces

After participating in peer assessment at Coursera's Programming languages I formulated one very common problem: mixing tabs and spaces.

Original post at Coursera's proglang discussion forum is here.

If student writes his code in editor which inserts tabs as is (as '\t' character) it is OK. However when student starts to add extra formatting with spaces (e.g. align if, then and else) his code becomes a problem. Look at the example with tab width 4 (tabs are shown as ->, spaces as spaces):

fun foo x =
--->let val abs = if x > 0
--->--->--->--->  then x
--->--->--->--->  else -x
--->in
--->--->(* ... *)
--->end

And see what happens when another student opens this code with tab width 2:

fun foo x =
->let val abs = if x > 0
->->->->  then x
->->->->  else -x
->in
->->(* ... *)
->end

then and else lines become unaligned and in complicated functions with nested case/if expressions it's very confusing.

There are 2 solutions for this problem:

  • Do not use tabs for alignment. In such case given example should look like:

    fun foo x =
    --->let val abs = if x > 0
    --->              then x
    --->              else -x
    --->in
    --->--->(* ... *)
    --->end
    

    Thus your code will look great with any tab width (e.g. 2):

    fun foo x =
    ->let val abs = if x > 0
    ->              then x
    ->              else -x
    ->in
    ->->(* ... *)
    ->end
    

    But it's quite hard to format code like this without help of your editor (however there are plugins for Vim/Emacs and other IDEs, maybe not perfectly working).

  • Do not use tabs at all. It means to insert needed amount of spaces instead of tab character ('\t'). And the example:

    fun foo x =
        let val abs = if x > 0
                      then x
                      else -x
        in
            (* ... *)
        end
    

    Thus your code will look identically with any tab width. This may be uncomfortable for some of you but this solution guarantees ideal formatting of your code in any possible editor.

    All editors support such mode of inserting spaces when you hit tab:

    • Vim: add set expandtab to ~/.vimrc.
    • Emacs: add (setq-default indent-tabs-mode nil) to ~/.emacs.
    • ... google for your favourite editor.

For more information you may google "tabs vs spaces" and visit this links:

P.S. I will add link to this post in the overall feedback field when I see this problem while assessment.

пятница, июля 01, 2011

Странный код

На работе наткнулся вот на такой Java-код:
    boolean flag = false;
    assert flag = true;
    if (flag) {
        // ...
    }
У кого есть идеи, зачем так писать?

четверг, июня 02, 2011

True, yes or sure

Третий вариант записи истинного выражения в строке хорошо поднял настроение с утра:
/*
 * Parse boolean string
 */
public static boolean parseBoolean(String s) {
    if(s.equalsIgnoreCase("true") || s.equalsIgnoreCase("yes") || s.equalsIgnoreCase("sure"))
        return true;
    if(s.equalsIgnoreCase("false") || s.equalsIgnoreCase("no"))
        return false;
    MSG.error("string cannot be converted to boolean: " + s);
    return false;
}

четверг, мая 19, 2011

Patch для Git Gui под Windows

После установки msysGit (например, отсюда) наблюдается следующий баг-фича в git-gui: он в упор не видит untracked-файлы (их можно увидеть только через git-status). Это может приводить к весьма печальным последствиям, так как можно легко забыть включить новые файлы в коммит.

Вот тут народ также озаботился этой проблемой, и изготовил решение, правда для оригинального git'а (в данный момент в основном репозитории git'а фикс уже есть, но до msysGit'а еще не дошло).

В итоге для msysGit'а нужно накатить на файл
...\Git\libexec\git-core\git-gui.tcl
патч вот такой:
1454,1461c1454
<  set ls_others [list --exclude-per-directory=.gitignore]
<  if {[have_info_exclude]} {
<   lappend ls_others "--exclude-from=[gitdir info exclude]"
<  }
<  set user_exclude [get_config core.excludesfile]
<  if {$user_exclude ne {} && [file readable $user_exclude]} {
<   lappend ls_others "--exclude-from=$user_exclude"
<  }
---
>  set ls_others [list --exclude-standard]

суббота, января 29, 2011

Отмечание просмотренных серий на MyShows.ru

Оригинал с дополнениями, обсуждением и прочим здесь

Постановка задачи

Задача: автоматизировать рутинные действия по отмечанию просмотренных эпизодов на сайте myshows.ru. Поясню, после просмотра очередной серии Теории Большого Взрыва я открываю свой профиль, нахожу сериал, нахожу просмотренный эпизод и отмечаю его как «просмотренный».

После обнаружения api.myshows.ru сразу зародилась идея серьезно упростить этот процесс. Хотелось бы, чтобы это выглядело так: вызываем контекстное меню файла с только что просмотренной серией и выбираем «Отметить на myshows.ru».

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

API

Сначала было решено сделать обертку поверх их API на Ruby. Получилась ничем не примечательная библиотека myshows, использующая httparty для общения с сайтом. В силу общей занятости меня, в библиотеке реализован не весь функционал сайта, а только поиск сериалов/эпизодов и их отмечание, так как именно это необходимо для решения поставленной задачи. Вот пример использования:


Стоит заметить, что метод Profile#show, который ищет сериал по имени среди ваших сериалов, оптимизирован для поиска именно имен сериалов. Он может находить сериалы по аббревиатуре названия, по части названия, по названию без пробелов и так далее. Это сделано в связи с тем, что названия сериалов в имени файлов зачастую сильно коверкаются: lietome.s03e01.webdl.rus.novafilm.tv.avi вместо lie.to.me.s03e01.webdl.rus.novafilm.tv.avi, House.M.D.s07e01.rus.LostFilm.TV.avi вместо House.s07e01.rus.LostFilm.TV.avi и так далее.

Парсинг имени файла

Скрипт должен уметь, получив имя файла с серией, распознать в нем имя сериала, номер сезона и эпизода. Everybody stand back. I know regular expressions. Поискав по локальной сети форматы записи этой информации в имени файла, выделил два основных и написал соответствующие регулярные выражения:
  • title.s01e01.blah.blah.avi;
  • Title - 1x01 - Episode Title.avi.
Существуют так же вариации с другими разделителями или без них, это не сильно усложняет регулярные выражения. Они получается совсем нехитрые, Вы можете найти их в конечном коде скрипта в функции parse_filename.

Скрипт

Объединив парсинг имени файла и использование библиотеки myshows получается простой скрипт, который получив в качестве аргументов имена файлов, пытается отметить их в Вашем профиле и сообщает в stdout об успехе этого действия:


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

Интеграция в файловый менеджер

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

Тут необходимо сказать, что я являюсь пользователем Mac OS X, и поэтому дальнейшие слова будут именно об интеграции ранее написанного скрипта с этой ОС. Если Вам это не интересно, можете перейти сразу к заключению.

Будем использовать Automator. Необходимо создать новую Службу, которая будет получать «выбранные файлы фильмов» в «любой программе».

Добавляем действие «Запустить shell-скрипт», выбираем в качестве языка «/usr/bin/ruby» с передачей ввода «как аргументов». Затем вставляем ранее написанный скрипт в поле для ввода скрипта, заменив то, что там было (для красоты можно удалить первую строку "#!/...").

Добавляем действие «Запустить AppleScript». Необходимо в каком-либо виде вывести информационные сообщения, которые печатал скрипт. Было решено воспользоваться функцией display dialog, получается примерно такой AppleScript:


Должно было получиться что-то похожее на это:


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


Заключение

Оно работает, это радует.

Измерения показали что среднее время работы скрипта 2-5 секунд на отмечание серий одного сериала, то есть отметить один эпизод сериала и десять займет примерно одинаковое время, а вот отметить пилотные серии десяти разных сериалов займет 20-50 секунд, что, в принципе, никому не нужно. Самое узкое место всей системы — это запросы к сайту и выкачивание больших списков эпизодов. Служба созданная Automator'ом работает по-дольше, есть постоянная добавка.

А теперь у меня есть обращение к тем, кого заинтересовала эта идея. Наверняка есть люди, которые отмечают сериалы на myshows.ru и пользуются Windows, KDE, Gnome, …. Сам Ruby-скрипт является кросс-платформенным, но вот интеграция с конкретным файловым менеджером — нет. В связи с этим ищутся люди, которые смогли бы рассказать, как интегрировать подобный Ruby-скрипт в их любимый файловый менеджер.

вторник, декабря 14, 2010

Google?

Этим летом меня удивило письмо с темой «Hello from Google Zurich», оказывается меня через GitHub нашел гугл, точнее один из сотрудников по поиску кадров. Был небольшой телефонный разговор, сошлись на том, что до конца 4-го курса я точно учусь и никуда не поеду, а потом со мной может когда-нибудь и свяжутся (я так до конца и не понял, но возможно по окончании 4-го курса), чтобы позвать на стажировку.
И вот несколько недель назад мне пришло «from Google Russia», в Московском и Питерском офисе открыты вакансии на инженеров-стажеров. Я опять сказал, что никуда пока не хочу, хочу учиться. Предложили прособеседоваться, так, на будущее.. Я был не против, и вот, на 13 декабря договорились провести со мной телефонное собеседование.
(история гораздо длиннее и интереснее, но я хочу рассказать именно о собеседовании)

Ровно в два часа дня, как и договаривались, позвонил Костя, программист из московского офиса. Собеседование состояло из трех частей: введение (по-русски, объяснили что щас будет происходить), собственно собеседование (по-английски, я должен был отвечать на вопросы) и свободный разговор (по-русски, я мог задавать вопросы). Предварительно для меня расшарили текстовичок в Google Docs, в котором происходил весь обмен письменной информацией, вполне удобно.

So let's start. Дан массив X[n] и число Y, найти такие i ≠ j, что X[i] + X[j] = Y. Гавно вопрос! За O(n²) полным перебором. Костя захотел чего-нибудь более.. Быстрого. Я решил, что O(n) все равно недостижимо (я был так наивен), и тогда не грех и отсортировать массив за O(n log(n)). Отсортированный массив это хорошо, напрашиваются два индекса, идущие с разных сторон, пусть i слева, j справа. Тут я немного затупил, но Костя попросил медленно вслух повторить мысль и затуп разрешился. Смотрим текущую сумму X[i] + X[j], если она равна Y, то разговор окончен, если она меньше Y, то двигаем i вправо, ибо j двигать влево бесполезно, если она больше Y, то двигаем j влево. Повторяем сие действо, пока i < j. Иначе решения нет. Костя согласился с алгоритмом, попросил определить скорость — O(n), попросил доказать — доказал. (Уже после собеседования я смог строго доказать корректность алгоритма, Костя не прикапывался). Получаем в итоге O(n log(n)), я решил что неплохо, но меня так между делом спросили: "А за O(n) слабо?!" Задумался минут на 5... Предложили подсказку: какие контейнеры в Java я знаю. List, vector, hash map, .. Меня остановили, спросили, что я знаю про hash map. Я начал лечить что у него время доступа линейное, точнее почти линейное.. Понял что несу чушь, поправился, время доступа константное. "So could you use hash map here?" YES — крикнул я, не скрывая ощущения полного офигевания от простоты алгоритма, который уже понял. Идем по массиву, и добавляем каждый элемент X[i] в хэш таблицу следующим образом {ключ: x[i], значение: i}, и также проверяем в таблице наличие элемента с ключом (Y-X[i]), если он есть, то берем соответствующее ему значение j и пара i,j является искомой. Линейное время, память конечно покушается в некотором количестве, но как я понял тут было важно время.
So another task. Есть функция int foo(int x) { return x*100; }, реализовать эквивалентную ей, не используя операцию умножения. Гавно вопрос! x << 6 + x << 5 + x << 2. Костя согласился и предложил обобщить: написать алгоритм, которой для произвольного N будет генерировать выражение равное x*N. Написал алгоритм нахождения максимальной степени двойки, непревосходящей N (двигаем вправо, пока число положительно; считаем сдвиги). Дальше повторяя этот алгоритм получаем конечное разложение N на сумму степеней двойки: x << k₀ + x << k₁ + ... . Костя хитрым голосом предложил продемонстрировать работу алгоритма при N = 15. Вышло стремно: 8 + 4 + 2 + 1, можно ли как-нибудь по-лучше? Да, (x << 4) - x. Написал алгоритм для нахождения и этой степени, в итоге вышло  x << k₀ - x << k₁ + x << k₂ - x << k₃ + ... . Этот алгоритм вроде не является лучше, ибо очень много зависит от начального числа, но Костя сказал ОК и сообщил, что 40 минут отведенные на собеседование кончились.

Фуух, я очень волновался, и эти 40 минут пролетели нереально быстро. Костя оказался выпускником МехМата МГУ, уже более трех лет работает в гугл, как я понял ему очень нравится. Оказалось, что они не gmail на русский переводят, а деляет вполне секретные и интересные проекты вместе с зарубежными коллегами. Поинтересовался, действительно ли их офисы такие клевые.. Да, клевые, но вот он уже привык и гораздо больше акцентировал внимание на том, что работа интересная. Пожелали друг другу удачи и все.

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

p.s. К собеседованию никак не готовился, проходил по большей части для себя.

суббота, августа 21, 2010

Контрольная по математике в ЛШ-2010

У меня окончилась работа в Летней Школе. В этот раз у меня было много нового, меня приглашали проверять олимпиаду вступительную и принимать собеседования, но сейчас о другом.

Вел математику опять у класса 9-4, 29 человек в двух группах. Были умные, были неочень :)

Теперь конкретно по контрольной: пять задач (метод мат.индукции, делимость, планиметрия, комбинаторика, построения циркулем и линейкой), на все 4 часа. Мне потребовалась 21 минута, чтобы решить оба варианта, так что воздержусь от субъективной оценки уровня задача, но судя по общим результатам контрольная сложная.

Средний бал по классу 9.8, что соответстует двум задачам при оценке из пяти баллов. За такой результат ставили три. Разбаловка вообще простая: больше одной задачи — три, больше двух — четыре, больше трех — пять. В классе же 4 пятерки, 7 четверок, 10 троек, 8 двоек.

А теперь интересная статистика..
  • задачку на делимость решали 27 человек, причем 19 решили верно! Это говорит о том, что все-таки толк от меня есть, и работе с остатками я их научил
  • задачку на мат.индукции решали 24 человека, а решили опять же 19. Это опять говорит о том, что я молодец, но все-таки боязнь перед "страшной индукцией" присутвует, и далеко не все понимают теор.основу мат.индукции
  • задача на комбинаторику была жесткая, пытались решать и решили ее только 2 человека. В задаче нужно было использовать прием, который я на семинарах не давал, бывает
  • планиметрию решали 9 человек, решили 2. Она даже не была сложной. Просто почему-то второй год подряд ЛШата вообще не шарят в планиметрии (или это традиция такая?)
  • задачу на построения решали 14 человек, решили 6. А вот это я объяснить не могу, на семинарах основы разбирали, вроде все было понятно, единственное при проверке очень прикапывались к оформлению, может в этом дело
Теперь о рекомендациях. В ЛШ преподаватели должны по результатам семинаров выставить каждому ученику рекомендацию по шкале от "настоятельно не рекомендую" до "настоятельно рекомендую". В этом году все дети были вроде адекватные, поэтому "не рекомендую" я не ставил.
Можно попробовать выявить закономерность между рекомендацией (зеленые линии на графике) и оценкой за контрольную (синяя) — я не смог. Это отчасти связано с тем, что многие дети не хотят поступать и сливают контрольную не особо стараясь, а всякие упрямые и целеустремленные девочки делают все, чтобы написать хорошо.

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

четверг, июля 29, 2010

Стиль "прямоугольник"

Нашел в одном style-guid'е, очень красивый пример:

Форматирование исходного текста в стиле "прямоугольник", например
crlf    = (String) java.security.AccessController 
          .doPrivileged(new sun.security.action   
          .GetPropertyAction("line.separator"));  
есть неуважение к людям, которые вынуждены будут этот текст читать.

понедельник, мая 10, 2010

Ruby продолжает удивлять

Уже не в первый раз в жизни я столкнулся с задачей написания парсера какого-либо кода, на этот раз на Ruby.

Чтобы не забыть, вот так вот можно делать простенький разбор на токены:
"abc:def".split /:/   #=> ["abc", "def"]
"abc:def".split /(:)/ #=> ["abc", ":", "def"]

суббота, марта 13, 2010

The Time Tracking

Уже давно мы разрабатываем сервис TTT (The Time Tracker) - система учета времени. Реализована в виде веб-приложения, консольного клиента и кроссплатформенного GUI-клиента.. Но сейчас не об этом.
А о том, что же дает нам подобная система? Вот что она дает!

Это моя активность по разным проектам за последние полгода, с комментариями. :)

четверг, января 14, 2010

Писанина vs Лень

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

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

Перед экзаменом

Два часа ночи, а я недавно проснулся...

Сессия - это очень удивительное время, по многим параметрам. Многие готовятся к экзаменам, и я в их числе..

Когда начинаю?
Обычно дней за пять я распечатываю программу курса, с квадратиками.. И кладу ее куда-нибудь по-дальше, не спеша начинать что-либо читать. В итоге, за три дня до экзамена (этот срок выработался за три последние сессии) я начинаю готовиться - этого хватает с запасом для подготовки к простым экзаменам и обычно хватает для подготовки к сложным.

Как учу?
Всегда должен быть какой-то план: список вопросов или программа курса, иначе очень сложно оценивать свои силы и можно что-то не успеть. Так же успехи в изучении каких-то тем я отмечаю закрашиванием квадратика напротив этой темы, каждый квадратик, на самом деле, очень поднимает настроение! Собственно процесс изучения у меня однопроходный: прочитал тему, полностью разобрался во всех выкладках (я никогда не пропускаю что-либо в вопросе, всегда сразу во всем разбираюсь, если пропуск и происходит - то сразу всей темы, дальше в нее не вчитываюсь), представил, что говорить про этот билет - пошел дальше. Если в вопросе была крайне тяжелая выкладка - помечаю, через несколько часов я попробую ее восстановить и, если не получится, прочитаю еще раз.

Что я в итоге знаю?
После такой работы я ориентируюсь во всем материале, имею хорошо упорядоченные знания по предмету. Обычно я довольно хорошо знаю основы (постулаты или какие-либо аксиомы), а дальше все мои знания связаны переходами, какими-то рассуждениями (например кванты: я не помню вид операторов рождения и уничтожения, но я помню, как их вывести за весьма конечное время) - то есть если меня начнут "гонять" по всему курсу, требуя быстрых ответов по памяти, я заведомо слаб в этом деле, но этот подход используется по отношению к людям "плавающим" в материале, к коим я себя не отношу. Шпаргалки: обычно, не более одного листочка для записей с чем-то из следующего раздела или, крайне редко, целые книжки в уменьшенном варианте (лень выбирать оттуда что надо, а что не надо).

А что может пойти не так?
Если мы видим выкладку в которой в уме берутся БОЛЬШИЕ интегралы (и я не могу этого повторить), мы их шпорим. Если присутствует выкладка, в которой слабо прослеживается логика, мы ее (логику, основную суть) шпорим. Если присутствует целый билет, в котором суть спрятана так глубоко, что никто из группы с этим не разобрался, весь вопрос шпорим. Если весь предмет представляет из себя несвязанный набор формул и утверждений, значит я идиот и не должен здесь учиться (на других это не распространяется), так как именно я виноват, в том, что не могу разобраться, а не предмет (последнего еще ни разу не было).
Насчет "прогона" по всему курсу, тут было исключение. На функане Тресков Сергей Андреевич после ответа на билет начал спрашивать у меня одна за другой формулировки нескольких теорем (т.к. я не правильно сформулировал что-то там).. В итоге он сделал вывод, что думать я могу, думаю я правильно, но память плохая - я с ним согласился, но ведь он и не хотел от нас заучивания, поэтому, наверное, и поставил пять.

Когда заканчиваю?
Начиная за три дня подготовку к заведомо разным экзаменам (некоторые очень простые, другие очень сложные), реально учусь я совсем не три дня, иногда больше, иногда меньше.
Простой экзамен. Встал с утра, поел, как-нибудь отдохнул за ноутом, поучил, параллельно читая habra, опять поел. Вообщем за день, часа 3-4 чистой учебы набирается.
Сложный экзамен. Встал, поел, поучил, поел, лег спать. Порядка 10 часов чистой учебы. Но и этого обычно не хватает, в последний день за 12 часов до экзамена у меня (на примере функана и квантов) остается еще около 30-40% процентов материала, что придает мне безумное количество сил для того, чтобы к семи утра все дочитать.
Возможно, это не правильно, следовало бы сосредоточенно выучивать простые за день, а сложные за пять дней, но... Я так не могу, не хватает силы воли, да и я так уже привык, за последние три сессии я ни разу не спал в ночь перед экзаменом более одного часа. И каждый раз (кроме квантов, о них отдельно) приходя на экзамен, я произносил слова Нео "Я знаю кунг-фу" и хотел только пять, потому что в моем мировозрении именно ее я и заслужил.

Кванты
Начал за три дня. За первый день я прошел 6 вопросов из 30, и призадумался, что ситуация весьма неутешительная. К концу второго дня я даже не дошел до половины. В третий день, за 12 часов до экзамена оставалось еще 12 вопросов, ИМХО, самых сложных вопросов в курсе. В итоге у меня в голове осталось приблизительно 70% вопросов, которые я могу рассказать, а остальные 30% - только шпоры, которые я даже не успевал сделать. Подходя к аудитории, я осозновал, что скорее похож на Панду из "Кунг-фу Панда", чем на Нео. Я хотел пять, но остальные варианты не отбрасывались. В итоге зашел первым, долго выбирая билет я выбрал счастливый. С вопросом и задачей среднего уровня. Сдал. 5

воскресенье, сентября 27, 2009

Bored with rebooting

Уже год и два месяца я являюсь "линуксоидом", пользователем опереционной системы Kubuntu. Но учась на кафедра Автоматизации Физ-Тех Исследований Физического факультета порой приходится сталкиваться с технологиями, которые очень не дружат с линуксом.

Полгода назад нам рассказывали про MFC и пришлось-таки установить голую винду с visual studio. Сейчас у нас читается курс 3D графики, где мы прогаем только на Direct3D (OpenGL типа устарел, покрайней мере так сказали)..

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

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

Все по-русски, понятно. Создаю вирт.машину, windows, xp (хотя поддерживает все от 95-ой до семерки), отдал ей под вирт.винтчестер 10 Гб (динамических - то есть реально файл будет весить столько, сколько используется).

Скачал образ WinXP, получил ключ по программе MSDN AA. Через диспетчер вирт.устройств смонтировал образ винды и начал установку... Потом аналогичным образом установил Visual Studio 2008.

В итоге с включенной интеграцией дисплеев и мыши получаем на отдельном рабочем столе свой "маленький" windows :) Скриншот и твит здесь

p.s. Для любителей гамать в Virtual Box, начиная с версии 3, появилась аппаратная поддержка D3D через OpenGL хост-системы в линуксе. Чтобы заполучить это, нужно установить "Guest Additions" в гостевую систему в безопасном режиме и включить поддержку D3D в настройках машины.

p.p.s. в версии 3.0.6 по сравнению с 3.0.2 в режиме интеграции дисплеев пропадает всплывающая панель внизу, из-за чего все настройки машины недоступны, сделал понижение версии обратно к 3.0.2

суббота, сентября 19, 2009

Screencasting

Всегда было интересно сделать screencast... И вот папа попросил показать ему как работать в программе XMind - вот я и решился! Вышло не сильно круто, но первый опыт есть.

суббота, сентября 12, 2009

Not stupid boy

Согласно данным этого теста мой IQ равен 135.

Довольно забавная вещь, давно не ломал голову над тем, что общего может быть у квадрата в круге и у круга в треугольнике :)

Если кто раскроет секрет #34,38,39 - буду рад почитать, т.к. самому думать уже поздно - спать пора...

четверг, сентября 10, 2009

Большие перемены

Недавно узнал, что звонки на мой мобильный телефон (Мегафон Кемеровский) для абонентов новосибирского МТС и Билайна стоят очень дорого, в связи с этим решил все-таки сменить симку на новосибирскую. В офисе меня огорчили, сказав, что сохранить старый номер никак не получится.

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

Мой новый номер:
8-923-188-83-47,
старым пользоваться не буду.

p.s. старый номер был таким: 8-923-618-83-47 - спасибо девушке из офиса Мегафона за возможность подбора номера :)

пятница, августа 21, 2009

Twenty pull-ups

Пока я учился в ФМШ я все два года ходил в местную качалку, плюс до этого летом ходил в Кемерово.. Тогда я научился подтягиваться 15 раз, жать от груди 50, поднимал гантели и жал ногами большие штуки, не помню уже веса, вообщем вполне удовлетворительные заслуги для моего веса... Занимался так, как научили в Кемерово (там был тренер), три дня, подходы, чередование ног, рук... Но ближе к концу ФМШ я начал лениться, часто пропускал, вообщем забросил. В универе меня определили на футбол и это окончательно сбило меня с пути истинного, нет, в футбол я играть немного научился конечно же, но вот подтянуться 10 раз уже было большой проблемой...

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

Я нашел такую штуку, просто программа упражнений из одних подтягиваний: TwentyPullUps.com (есть аналогичная про 100 отжиманий)... И решился выполнить! Посмотрим, что будет через 6 недель... :)

Простенькая контрольная в ЛШ'09

Говорить буду о контрольной девятого класса первого варианта и о работах учеников класса 9-4 (21 человек). Всего было пять тем, соответственно, пять задач: мат.индукция, делимость, комбинаторика, планиматрия, задача на построение.

Сначала все задачи (решения с комментариями позже), вдруг кто захочет проверить свои силы:

  1. Мат.индукция: доказать, что ( 7∙11^n + 50∙n + 13 ) кратно 20 для любого натурального n.

  2. Делимости: чему равен остаток от деления ( 71^38 + 42^71 ) на 13?

  3. Комбинаторика: сколько четырехзначных чисел кратных четырем можно составить из цифр
    2,3,4,5,6,7 (цифры не должны повторяться)?

  4. Планиметрия: дан прямоугольный треугольник с катетом 10,5; радиус описанной окружности 7,25, найти радиус вписанной окружности.

  5. Построение: дан отрезок √2, построить с помощью циркуля и линейки отрезок √(2√5).


Ну, вперед! Каждая задача стоит 7 баллов.

  1. Решается простой индукцией, без хитростей. Так же можно решить методом остатков (рассмотреть, какие остатки дают степени 11-ти по модулю 20, найти закономерность, аналогично с 50*n; затем сложить их, прибавить 13 и получить ноль).
    Полностью решили задачу 8 человек, полный ноль получили 6 человек.

  2. 71 ≡ 6 (mod 13), 71^2 ≡ -3 (mod 13), ..., 71^12 ≡ 1 (mod 13) => 71^38 ≡ 71^2 ≡ -3 ≡ 10 (mod 13)
    42 ≡ 3 (mod 13), 42^2 ≡ 9 (mod 13), 42^3 ≡ 1 (mod 13) => 42^71 ≡ 42^2 ≡ 9 (mod 13)
    71^38 + 42^71 ≡ 10 + 9 ≡ 19 ≡ 6 (mod 13). Это и есть ответ. Задача сложна тем, что у 71 цикл длиной в 12 - очень многие делали арифметические ошибки.
    Полностью решили задачу 9 человек, полный ноль получили 3 человека.

  3. Признак делимости на 4 - число из последних двух цифр должно делится на 4. Итого у нас всего 8 вариантов на окончание числа (32, 52, 72, 24, 64, 36, 56, 76). Остается выбрать две цифры из четырех оставшихся на первые два места. Это размещение из 4 по 2, равно 4!/2! = 12. Для нахождения ответа перемножим 12 и 8 согласно правилу произведения. Задача не совсем тривиальная, на семинарах были проще, но за день до контрольной мы разбирали с ними такую же со слегка другим условием. Но многим это не помогло..
    Полностью решили задачу 7 человек, полный ноль получили 10 человек.

  4. Т.к. треугольник прямоугольный, его гипотенуза равна двум радиусам описанной окружности = 14,5. Третий катет тогда равен 10. По трем катетам используя теорему о равенстве касательных к вписанной окружности находим ее радиус = 3. Задача в три действия, никаких доп.построений, все очень линейно. Имхо несложная..
    Полностью решили задачу 7 человек, полный ноль получили 8 человек.

  5. Строим прямоугольный треугольник с катетами по корню из двух, гипотенуза равна 2. Делим попалам, получаем 1. В прямоугольном трегольнике с катетами 1 и 2 гипотенуза равна корню из пяти. Есть классическая задача на постоение корня из произведения, по ней строим корень из двух умноженных на корень из пяти. Все. Задача не из самых простых. Требует умение строить корни из целых и наоборот, и знание задачи на построение корня из произведения. В принципе все это мы разбирали и делали аналогичную задачу.. Толи никто не понял, вообщем хз...
    Полностью решили задачу 6 человек, полный ноль получили 14 человек.

В итоге имеем..
5 человек с пятерками (28 баллов и больше ~ 4 задачи)
5 человек с четверками (от 15 до 27 баллов ~ 3 задачи)
9 человек с тройками (от 5 до 14 баллов ~ 1-2 задачи)
2 человека с двойками (менее 5 баллов ~ 0 задач)

Все задачи полностью решали примерно по 7 человек из 21-го - в принципе ожиданно было.
Хорошо, что практически все хоть как-то да решали мат.индукцию и делимость; ожиданно, что комбинаторику сложную не многие решат; по их решению планиметрии на семинарах можно было ожидать что и ее не многие решат; единственное мне непонятно, почему за построение так мало народу получило не нули.. Ведь даже за построенный отрезок √5 давали баллы - вот на этой теме в следующем году надо будет акцентировать внимание...

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