• 256 цветов в терминале ⇒ уровень nightmare
    +10
    Пожалуйста.
    Код
    #include <stdio.h>
    #include <unistd.h>
    
    #define RED         "\033[1;32;41m"
    #define GREEN       "\033[5;30;42m"
    #define OLDCOLOR    "\033[0;0;0m"
    
    main(){
    	if(isatty(STDOUT_FILENO)) printf(RED "This is a TTY! " GREEN "Output may be colorized!" OLDCOLOR "\n");
    	else printf("This is pipe, no colors!\n");
    }
    


    Выхлоп

  • UFO just landed and posted this here
  • Разработчики Ubuntu представили инновационную альтернативу традиционным меню
    0
    возможно инновация и небольшая но почему то мне кажется для людей с хотя бы средней скоростью работы с клавиатурой данное меню может серьёзно упростить работу. я же пользуюсь чем то похожим почти постоянно: iDo mode для emacs (screencast) на протяжении нескольких лет. Насколько хорошо реализована эта идея в Ubuntu? — посмотрим… На мой взгяд если там есть (нетривиальная но супер важная) возможность прервать текущий ввод и продолжить ввод новой подстроки — тогда таки ДА, это супер вещь!
  • Картинки в чате skype
    +8
    Пользуясь случаем, рекламирую мой юзер-скрипт, который преобразует код, подсвеченный в Source Code Highloghter, в HTML, который нормально отображается в скайпе.

    Теперь, если писать кому-то отрывки кода в скайпе, то его будет намного удобнее читать.

    userscripts.org/scripts/review/114459

    Тестировалось в Хроме.
  • UFO just landed and posted this here
  • Консольный словарь sdcv
    +2
    >ls | grep | sdcv
    зачем переводить имена файлов?
    Я использую sdcv так:
    sdcv -n --utf8-output --utf8-input --data-dir=путьксловарям "`xclip -o`" | dzen2 -l 16 -p -w 500 -bg gray75 -fg blue -x 300 -y 300 -e 'onstart=scrollhome,uncollapse;button4=scrollup;button5=scrolldown;button1=exit'
    Это привязано на клавишу, и переводит слово оказавшееся в буфере обмена. (для работы нужен dzen2)
    P.S. скрипт откуда-то пизжен, но откуда непомню.
  • Эволюция понимания ООП
    +8
    >Вы никогда не будете писать класс, а потом думать, чем бы ему заняться. То есть, цепочка всегда начинается от поведения.

    Извините, не удержался :):

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

    (с) Степанов (автор STL)

  • Так проверяют на грамотность учителей
    +37
    > Файрфокс я видел, это прикольный зверёк, гибрид панды с котом.
    типа такого? :)
    image
  • Мигель де Икаса даёт советы по Unix
    +2
    Cedet мне не пошел если честно. Показался слишком overbloated и не совсем удобным. По это же причине в свое время отказался от MuMaMo. Отнюдь не отрицаю, что я просто не умею их готовить :)

    В результате остановился на следующей
    python: python-mode + flymake для проверки синтаксиса/кодинг стандарта + yasnippet + ropemacs, если нужен рефаХторинг
    javascript — голый js2.el,
    html — html-mode + html-font
    для php обычного php-mode за глаза.
    кроме этого пожалуй ничем и не пользуюсь… если попадается экзотика, включается vim :)

    для автодополнения — auto-complete.el cx4a.org/software/auto-complete показалось наименьшим злом

    Из рюшечек — tabbar.el c группировкой по major mode, fill-column-indicator.el для отбивки 80 столбца, да и всё в принципе
  • Просто о Хиндли-Милнере
    +4
    Подробно алгоритм описан в статье Р.Душкина «Модель типизации Хиндли — Милнера и пример её реализации на языке Haskell» в 5-м выпуске журнала «Практика функционального программирования»
  • Стэнфорд организует бесплатный онлайн-курс по ИИ
    +5
    Курсы Университета Беркли:
    http://webcast.berkeley.edu/series.html
    Из прослушанных особо понравились:
    CS162 Operating Systems Programming
    C10 Physics for Future Presidents
  • Стэнфорд организует бесплатный онлайн-курс по ИИ
    +15
    Хочу отметить, что у Стенфорда дофига курсов есть в электронном виде. Они состоят из лекций, заданий и справочных материалов. Все бесплатны, заходи и смотри.

    Также и другие американские вузы выкладывают свои материалы в сеть.
    Например, я дистанционно прошел два курса:
    1) Harvard CS 75 Bulding Dynamic Websites: cs75.tv/2010/fall/
    Мне было весьма интересно. Это практический экскурс по основным веб-технологиям. Мне, как маркетологу, он был полезен, чтобы лучше понимать веб-дев и общаться со спецами на одном языке. Во время курса я сделал сайт по заказу пиццы. Курс будет интересен разработчикам, которые не сталкивались с вебом, но хотели бы попробовать.

    Примечательно, что в курсе совсем нет теории, сплошь практики. Например, во время лекции препод показывает разницу между post и get запросами редактируя соответствующий файлик на живом сервере.

    2) Yale Game Theory: oyc.yale.edu/economics/game-theory/contents/sessions.html
    Думаю, особо рассказывать смысла нет, потому что это не тематика Хабра. Курс забавный, но очень простой.
  • Репозиторий с задачами на Ruby
    +1
    … отсутствие официальной документации несколько замедляет процесс обучения.

    Не могу понять о чём вы говорите. Официальная документация есть www.ruby-doc.org/
    А ешё есть книга, вышедшая недавно на русском языке Язык программирования Ruby/.
    И ещё есть вот прекрасная книга на английском языке: Metaprogramming Ruby: Program Like the Ruby Pros.
    Ну и раз уж речь идёт о лучших решениях, то стоит упомянуть и это издание: Ruby Best Practices.
  • Google Chrome 12 (Stable)
    +2
    Есть такой файлик Local State.

    Windows XP: (/Users/[your user name]/Library/Application Support/Google/Chrome/Local State).
    Windows 7 / Vista: (C:\Users\[USERNAME]\AppData\Local\Google\Chrome\Local State)
    Linux: ~/.config/google-chrome/Local State

    там в поле "last_known_google_url": надо поставить "http://www.google.com/"
  • А еще в Visual Studio есть External Tools…
    +2
    Открываем вимом исходник, позиционируя курсор на то же место, где он стоит в студии:
    Arguments:
    --servername VS_2008 --remote-silent "+call cursor($(CurLine), $(CurCol))" "+normal zz" $(ItemPath)

    Теперь по порядку:
    --servername VS_2008 --remote-silent позволяет не запускать каждый раз новую копию Vim, а открывать файл в уже запущенном. VS_2008 — это просто идентификатор, можно поменять на любой. У меня разные студии открывают каждая свой Vim.
    "+call cursor($(CurLine), $(CurCol))" позиционирует курсор.
    "+normal zz" делает так, чтобы строка с курсором была посередине экрана.

    Бонус: если в Solution Explorer выбрать проект и вызвать Vim — откроется на редактирование файл проекта. Часто бывает удобно.
  • Пайпы, the pythonic way
    +16
    Сомнительный запашок у получающегося кода.

    Перегрузка операций (любых) — не самый лучший способ построения каскадов генераторов.
    Из-за этой перегрузки в записи возможны досадные ошибки.

    Понятность снижается (а должна бы увеличиваться).
    Оператор | может встречаться и в привычном контексте битовых операций.
    Здесь же придется внимательно смотреть: это pipe или нет?
    Если, скажем, numpy перегружает операторы для матриц — там ясна предметная область и не происходит
    её перекрытия со стандартной семантикой. Если складываются два числа — они делают это по правилам элементарной арифметики. Две матрицы — тоже ничего нового.
    В sqlalchemy для SQL запросов перегружаются все битовые операции.
    При этом биты для чисел и запросы для SQL разведены по разным углам, очень редко пересекаясь в коде. По выражению практически всегда легко понять, где кто.
    Здесь же | работает как битовый для чисел и pipe в стиле bash если самый правый операнд оказался типа Pipe.
    Семантика разная, и две семантики легко могут пересекаться. Это неприятно.

    Еще одно: эту штуку крайне легко сломать.
    import pipe
    
    class L(object):
        def __init__(self, v):
            self.v = v
    
        def __or__(self, r):
            return 'abra'
    
    print L(range(5)) | pipe.as_list
    

    Вроде бы класс L вполне невинен. Только, на беду, содержит оператор __or__, приоритет которого выше чем у
    __ror__. Нехорошо…

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

    Сугубо личное мнение. Если кто не согласен — навязывать свое мнение не буду.
    Раньше мне тоже нравились подобные полеты мысли: чем замудрённей — тем интересней.
    Сейчас скорее признаю предлагаемый код unpythonic.
  • Кодировки
    +1
    Как еще одно дополнение к данной фишке - в vim можно создавать свои меню и если добавить в .vimrc следующие строки:
    set wildmenu
    set wcm=<Tab>
    menu Encoding.koi8-r :e ++enc=koi8-r ++ff=unix<CR>
    menu Encoding.windows-1251 :e ++enc=cp1251 ++ff=dos<CR>
    menu Encoding.cp866 :e ++enc=cp866 ++ff=dos<CR>
    menu Encoding.utf-8 :e ++enc=utf8 <CR>
    menu Encoding.koi8-u :e ++enc=koi8-u ++ff=unix<CR>
    map <F8> :emenu Encoding.<TAB>


    То по нажатию F8 можно будет выбрать из меню, в какой кодировке редактировать текущий файл. По-моему, очень удобная фича.
  • PyUNO — быстрое незначительное редактирование xls-отчета из Python
    UFO just landed and posted this here
  • Чем опасны дешёвые GPS-глушилки
    +1
    vrtp.ru/
    Ищите здесь, там конкретные рецепты есть, но предупреждаю, речь пойдет об генераторе наносекундных импульсов — для ЭМГ-оружия это критично.
  • Культурные различия. Общение с американскими коллегами
    +12
    на эту тему есть довольно хорошая книга Линн Виссон «Русские проблемы в английской речи»