#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");
}
возможно инновация и небольшая но почему то мне кажется для людей с хотя бы средней скоростью работы с клавиатурой данное меню может серьёзно упростить работу. я же пользуюсь чем то похожим почти постоянно: iDo mode для emacs (screencast) на протяжении нескольких лет. Насколько хорошо реализована эта идея в Ubuntu? — посмотрим… На мой взгяд если там есть (нетривиальная но супер важная) возможность прервать текущий ввод и продолжить ввод новой подстроки — тогда таки ДА, это супер вещь!
Пользуясь случаем, рекламирую мой юзер-скрипт, который преобразует код, подсвеченный в Source Code Highloghter, в HTML, который нормально отображается в скайпе.
Теперь, если писать кому-то отрывки кода в скайпе, то его будет намного удобнее читать.
>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. скрипт откуда-то пизжен, но откуда непомню.
>Вы никогда не будете писать класс, а потом думать, чем бы ему заняться. То есть, цепочка всегда начинается от поведения.
Извините, не удержался :):
«Я уверен, что ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой. Тоже самое и с программированием: сначала вы должны начинать развивать алгоритмы, и только в конце этой работы приходите к тому, что вы в состоянии сформулировать четкие и непротиворечивые интерфейсы. Именно из-за этой неразберихи в ООП так популярен рефакторинг — из-за ущербности парадигмы вы просто обречены на переписывание программы, уже в тот самый момент, когда только задумали её спроектировать в ООП-стиле».
Cedet мне не пошел если честно. Показался слишком overbloated и не совсем удобным. По это же причине в свое время отказался от MuMaMo. Отнюдь не отрицаю, что я просто не умею их готовить :)
В результате остановился на следующей
python: python-mode + flymake для проверки синтаксиса/кодинг стандарта + yasnippet + ropemacs, если нужен рефаХторинг
javascript — голый js2.el,
html — html-mode + html-font
для php обычного php-mode за глаза.
кроме этого пожалуй ничем и не пользуюсь… если попадается экзотика, включается vim :)
Курсы Университета Беркли: http://webcast.berkeley.edu/series.html
Из прослушанных особо понравились:
CS162 Operating Systems Programming
C10 Physics for Future Presidents
Хочу отметить, что у Стенфорда дофига курсов есть в электронном виде. Они состоят из лекций, заданий и справочных материалов. Все бесплатны, заходи и смотри.
Также и другие американские вузы выкладывают свои материалы в сеть.
Например, я дистанционно прошел два курса:
1) Harvard CS 75 Bulding Dynamic Websites: cs75.tv/2010/fall/
Мне было весьма интересно. Это практический экскурс по основным веб-технологиям. Мне, как маркетологу, он был полезен, чтобы лучше понимать веб-дев и общаться со спецами на одном языке. Во время курса я сделал сайт по заказу пиццы. Курс будет интересен разработчикам, которые не сталкивались с вебом, но хотели бы попробовать.
Примечательно, что в курсе совсем нет теории, сплошь практики. Например, во время лекции препод показывает разницу между post и get запросами редактируя соответствующий файлик на живом сервере.
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/"
Открываем вимом исходник, позиционируя курсор на то же место, где он стоит в студии:
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 — откроется на редактирование файл проекта. Часто бывает удобно.
Перегрузка операций (любых) — не самый лучший способ построения каскадов генераторов.
Из-за этой перегрузки в записи возможны досадные ошибки.
Понятность снижается (а должна бы увеличиваться).
Оператор | может встречаться и в привычном контексте битовых операций.
Здесь же придется внимательно смотреть: это 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.
Как еще одно дополнение к данной фишке - в 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 можно будет выбрать из меню, в какой кодировке редактировать текущий файл. По-моему, очень удобная фича.
Теперь, если писать кому-то отрывки кода в скайпе, то его будет намного удобнее читать.
userscripts.org/scripts/review/114459
Тестировалось в Хроме.
зачем переводить имена файлов?
Я использую 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. скрипт откуда-то пизжен, но откуда непомню.
Извините, не удержался :):
«Я уверен, что ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой. Тоже самое и с программированием: сначала вы должны начинать развивать алгоритмы, и только в конце этой работы приходите к тому, что вы в состоянии сформулировать четкие и непротиворечивые интерфейсы. Именно из-за этой неразберихи в ООП так популярен рефакторинг — из-за ущербности парадигмы вы просто обречены на переписывание программы, уже в тот самый момент, когда только задумали её спроектировать в ООП-стиле».
(с) Степанов (автор STL)
типа такого? :)
В результате остановился на следующей
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 столбца, да и всё в принципе
http://webcast.berkeley.edu/series.html
Из прослушанных особо понравились:
CS162 Operating Systems Programming
C10 Physics for Future Presidents
Также и другие американские вузы выкладывают свои материалы в сеть.
Например, я дистанционно прошел два курса:
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
Думаю, особо рассказывать смысла нет, потому что это не тематика Хабра. Курс забавный, но очень простой.
Не могу понять о чём вы говорите. Официальная документация есть www.ruby-doc.org/
А ешё есть книга, вышедшая недавно на русском языке Язык программирования Ruby/.
И ещё есть вот прекрасная книга на английском языке: Metaprogramming Ruby: Program Like the Ruby Pros.
Ну и раз уж речь идёт о лучших решениях, то стоит упомянуть и это издание: Ruby Best Practices.
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/"
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 — откроется на редактирование файл проекта. Часто бывает удобно.
Перегрузка операций (любых) — не самый лучший способ построения каскадов генераторов.
Из-за этой перегрузки в записи возможны досадные ошибки.
Понятность снижается (а должна бы увеличиваться).
Оператор | может встречаться и в привычном контексте битовых операций.
Здесь же придется внимательно смотреть: это pipe или нет?
Если, скажем, numpy перегружает операторы для матриц — там ясна предметная область и не происходит
её перекрытия со стандартной семантикой. Если складываются два числа — они делают это по правилам элементарной арифметики. Две матрицы — тоже ничего нового.
В sqlalchemy для SQL запросов перегружаются все битовые операции.
При этом биты для чисел и запросы для SQL разведены по разным углам, очень редко пересекаясь в коде. По выражению практически всегда легко понять, где кто.
Здесь же | работает как битовый для чисел и pipe в стиле bash если самый правый операнд оказался типа Pipe.
Семантика разная, и две семантики легко могут пересекаться. Это неприятно.
Еще одно: эту штуку крайне легко сломать.
Вроде бы класс L вполне невинен. Только, на беду, содержит оператор __or__, приоритет которого выше чем у
__ror__. Нехорошо…
Не все возможные занятные выкрутасы стоит использовать.
Сугубо личное мнение. Если кто не согласен — навязывать свое мнение не буду.
Раньше мне тоже нравились подобные полеты мысли: чем замудрённей — тем интересней.
Сейчас скорее признаю предлагаемый код unpythonic.
То по нажатию F8 можно будет выбрать из меню, в какой кодировке редактировать текущий файл. По-моему, очень удобная фича.
С Надей встали мы под душ
Вдруг приперся Надин муж
То ли мне одеть Надежду
То ли мне надеть одежду
С консолью, отладкой и прочими вкусностями.
Брать тут: code.google.com/p/farnet/