А, понятно. Мне такое не встречалось: я всё время свожу аргументы print к одному. Возможно, правда, я их начал сводить именно по той причине, что вы здесь написали; не помню.
3. Избегайте использования прямых вызовов print(). Если требуется отладочный вывод, дайте возможность пользователю задать свой собственный print_callback в __init__-е: …
4. Используйте from __future__ import print_function в целях увеличения переносимости кода. Таким образом, print() станет функцией и код будет переносим между Python 2 и Python 3.
Если использовать print только для отладочного вывода, то простого правила «всегда писать скобки после print» достаточно для переносимости. Мне никогда не приходило в голову передавать print как функцию куда‐либо: для этого есть logging (имею ввиду передачу экземпляров logging.Logger, если имеющийся настраиваемый глобальный Logger чем‐то не нравиться). И вместо print_callback тоже есть logging.
Есть предназначенные именно для таких случаев clock_gettime(CLOCK_MONOTONIC_RAW) (>=linux-2.6.28, ниже CLOCK_MONOTONIC) и mach_absolute_time() (Mac OS X). В отличие от обычных, эти часы никогда не убывают и не имеют никакого отношения к мировому или местному времени: man clock_gettime:
CLOCK_MONOTONIC
Часы, которые не могут быть настроены и показывают монотонный ход времени отсчитываемой с некой неопределённой начальной точки. Эти часы не подвержены скачкам системного времени (например, системный
администратор вручную изменил время), но на них влияет постепенная подгонка, выполняемая adjtime(3) и NTP.
CLOCK_MONOTONIC_RAW (начиная с Linux 2.6.28; есть только в Linux)
Похожи на CLOCK_MONOTONIC, но предоставляют прямой доступ к аппаратным часам, которые не подводятся NTP или постепенной подгонкой, выполняемой adjtime(3).
APC Back-UPS CS умеет рассказывать, насколько он загружен. Ippon Smart Power pro тоже, Back Power pro — не знаю. Также не знаю, есть ли возможность это посмотреть в поставляющемся с Ippon ПО или с ПО от APC, но под Windows.
У меня Ippon Smart Power pro 2000 ухитрился сломаться на второй день использования: просто БУМ и выходит из строя блок питания, а бесперебойник притворяется, что ничего не случилось¹. Поменял в магазине на такой же, но теперь между ним и компьютером стоит APC (тот же Back-UPS CS, но 650VA) в режиме сетевого фильтра (выход «SURGE ONLY»).
¹ Но его выдаёт вздутие на корпусе, на боковой стенке слева, ближе к лицевой панели, чуть ниже стыка верхней и нижней частей корпуса. Если кто разбирал, может скажет, что там.
Так подсветка синтаксиса markdown много где есть. На регулярных выражениях она точно определена в Vim (Vim просто не умеет подсветку без регулярных выражений).
Просто надо смотреть более общие проекты: редакторы (Vim, katepart, Sublime, …) и библиотеки (pygments, google code prettify, …). Правда, для существующего проекта вряд ли что‐то, кроме проверенных регулярных выражений, можно оттуда выдернуть. Библиотеки подсветки для C/Objective-C вы ведь смотрели?
ascii.io/a/4965: asciiio+powerline. Кратко: мусор вместо разделителей и неправильное определение месторасположения курсора.
ascii.io/a/4968: asciiio+powerline+term_truecolor: совершенно неправильная работа с длинными строками[1], неправильные цвета[2], неправильное положение курсора (он находится после красной l)[2]. Ну и известные проблемы с русским[3] вместе с какими‐то проблемами с переносами[3]. И знаки процента вроде тех, что zsh показывает, если вывод команды не пуст, но не заканчивается на символ новой строки[4]. Я их в реальности не видел.
Кто‐нибудь объяснит, почему ссылку на github нужно выдирать из другого URL, являющегося частью скрипта, загружаемого по URL на странице ascii.io/docs/record? И почему нельзя было сделать это пакетом для pip, устанавливаемом с помощью pip install --user git+git://github.com/sickill/ascii.io-cli? Pip знает о том, куда надо деть исполняемый файл гораздо лучше, чем скрипт с get.ascii.io.
Вы про второй случай? Затем, что если использовать вариант «переименовать старый файл, записать на его место новый, удалить переименованный старый», то вы нарвётесь на проблемы с символическими ссылками (файл перестанет быть символической ссылкой). Ещё таким образом можно убрать какие‐нибудь атрибуты файла (к примеру, A: запрещает изменение информации о времени доступа к данному файлу)¹. В большинстве случаев проблему можно обойти, но обычно проще делать именно так: копия, затем перезапись.
¹ Я говорю именно про A, а не про что‐нибудь более известное (вроде прав на запись), именно потому что что‐нибудь более известное более известно (т.е. об этом проще вспомнить, когда вы будете писать код для обхода проблемы).
Вы просто нажимаете «OK» — и ваш код уже в базе! Более того, она тут же сохранилась на жёсткий диск, чтобы не потерять данные в случае какого-либо сбоя.
Мне кажется, или в вашем коде в случае сбоя во время сохранения можно потерять всё, потому что файл перезаписывается?
Логичным было бы взять тот же SQLite, где о таких вопросах уже подумали. Или поступать как некоторые редакторы (как минимум, Vim; впрочем, это не единственный вариант): сохранять файл рядом (главное: в той же файловой системе) под другим именем, а затем заменять старый файл на новый. Альтернативный от того же Vim: делать копию старого файла, переписывать старый файл, удалять копию.
Это мода, а не официальный курс. По сравнению с VimL, Python быстр, Python поддерживает больше возможностей, Python прост. Тенденция перезда дополнений на Python началась задолго до того, как я написал свой RFC с новыми интерфейсами и, кажется, ещё до того, как я добавил vim.bindeval. Говорить об официальном курсе следует только после того, как в стандартную поставку включат дополнения для общего пользования¹ на нём, а этого, как мне кажется, не произойдёт.
¹ Автодополнение для Python, находящееся в стандартной поставке, требует наличия поддержки Python. То же самое относится к Ruby (но дополнение соответственно на Ruby).
И ещё: не «они». Есть один разработчик (я), который решил улучшить поддержку любимого языка (Python). Если найдётся другой разработчик — будет улучшена поддержка другого языка. Вероятно, это будет lua. Сам Брам в силу отсутствия времени на улучшение поддержки какого‐либо языка был вынужден выбирать из двух вариантов: первое, улучшить поддержку Python, второе, не улучшать ничего вообще. «Завязывания» нету: VimL по‐прежнему единственный язык, необходимо присутствующий во всех сборках Vim. Python по‐прежнему может быть отключён.
В этом варианте строка «git» повторяется 0¹ раз, а в варианте автора количество повторений удалось довести до трёх. Такое демонстративное пренебрежение божественной системой контроля версий оскорбляет её фанатов.
Я, до того как написал анонс беты vim-7.4 (то есть, пока не возникла необходимость узнать, что именно нужно писать в анонсе), тоже был не в курсе. Но, чтобы у людей не возникло недоумения как у вас, в начале списка изменений было написано «(указаны измения с версии 7.3.000)» — зная, что ещё десять минут назад я сам не знал о таком правиле, предупредить ситацию легче лёгкого.
Вы, видимо, немного не в курсе, что считается «изменением в версии 7.4». А именно этими изменениями считаются все изменения сделанные в патчах 7.3.001 и более поздних вплоть до релиза. В самой первой версии 7.3 указанной вами функциональности не было, она появилась только в версии 7.3.074.
И, главное, нет других вариантов: альтернативная документация (vimdoc.sf.net) устарела, моя версия онлайн‐документации (vimpluginloader.sf.net) имеет те же проблемы (в дополнение к тому, что, как оказалось, некоторые якоря отсутствуют, из‐за чего я решил использовать vimhelp.appspot.com, а с format.vim, который, собственно, и генерирует документацию, разобраться потом; иначе я бы уже имел wikipedia‐подобные якоря).
Мои проблемы были исправлены, соответственно документация на appspot заменена на мою. Formatvim теперь использует wiki‐подобные якоря. Если кто‐то хочет использовать моё дополнение, то скрипт, использующийся мною для создания справки на sourceforge.net, лежит здесь.
print
» достаточно для переносимости. Мне никогда не приходило в голову передаватьprint
как функцию куда‐либо: для этого естьlogging
(имею ввиду передачу экземпляровlogging.Logger
, если имеющийся настраиваемый глобальныйLogger
чем‐то не нравиться). И вместоprint_callback
тоже естьlogging
.Ко всем остальным пунктам сложно прицепиться.
clock_gettime(CLOCK_MONOTONIC_RAW)
(>=linux-2.6.28, нижеCLOCK_MONOTONIC
) иmach_absolute_time()
(Mac OS X). В отличие от обычных, эти часы никогда не убывают и не имеют никакого отношения к мировому или местному времени: man clock_gettime:¹ Но его выдаёт вздутие на корпусе, на боковой стенке слева, ближе к лицевой панели, чуть ниже стыка верхней и нижней частей корпуса. Если кто разбирал, может скажет, что там.
Просто надо смотреть более общие проекты: редакторы (Vim, katepart, Sublime, …) и библиотеки (pygments, google code prettify, …). Правда, для существующего проекта вряд ли что‐то, кроме проверенных регулярных выражений, можно оттуда выдернуть. Библиотеки подсветки для C/Objective-C вы ведь смотрели?
ascii.io/a/4968: asciiio+powerline+term_truecolor: совершенно неправильная работа с длинными строками[1], неправильные цвета[2], неправильное положение курсора (он находится после красной l)[2]. Ну и известные проблемы с русским[3] вместе с какими‐то проблемами с переносами[3]. И знаки процента вроде тех, что zsh показывает, если вывод команды не пуст, но не заканчивается на символ новой строки[4]. Я их в реальности не видел.
pip install --user git+git://github.com/sickill/ascii.io-cli
? Pip знает о том, куда надо деть исполняемый файл гораздо лучше, чем скрипт с get.ascii.io.¹ Я говорю именно про A, а не про что‐нибудь более известное (вроде прав на запись), именно потому что что‐нибудь более известное более известно (т.е. об этом проще вспомнить, когда вы будете писать код для обхода проблемы).
Логичным было бы взять тот же SQLite, где о таких вопросах уже подумали. Или поступать как некоторые редакторы (как минимум, Vim; впрочем, это не единственный вариант): сохранять файл рядом (главное: в той же файловой системе) под другим именем, а затем заменять старый файл на новый. Альтернативный от того же Vim: делать копию старого файла, переписывать старый файл, удалять копию.
vim.bindeval
. Говорить об официальном курсе следует только после того, как в стандартную поставку включат дополнения для общего пользования¹ на нём, а этого, как мне кажется, не произойдёт.¹ Автодополнение для Python, находящееся в стандартной поставке, требует наличия поддержки Python. То же самое относится к Ruby (но дополнение соответственно на Ruby).
И ещё: не «они». Есть один разработчик (я), который решил улучшить поддержку любимого языка (Python). Если найдётся другой разработчик — будет улучшена поддержка другого языка. Вероятно, это будет lua. Сам Брам в силу отсутствия времени на улучшение поддержки какого‐либо языка был вынужден выбирать из двух вариантов: первое, улучшить поддержку Python, второе, не улучшать ничего вообще. «Завязывания» нету: VimL по‐прежнему единственный язык, необходимо присутствующий во всех сборках Vim. Python по‐прежнему может быть отключён.
¹ Или 1, но только для некоторых дополнений.
clipboard=unnamed
иclipboard=unnamedplus
.