воскресенье, мая 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) {
        // ...
    }
У кого есть идеи, зачем так писать?