Как открыть проект VS2008 в VS2005
Я пользуюсь старой доброй Visual Studio 2005 и .Net 2.0. Но иногда в мои руки попадают проекты сделанные в 2008-й и открывать их 2005-ая отказывается. Немного поэкспериментировав, нашёл простой рецепт:
- делаем резервную копию файла_проекта.csproj;
- открываем файл_проекта.csproj в вашем любимом текстовом редакторе (да, это обычный xml-файл);
-
если у вас не установлен .Net 3.5, удаляем все теги Reference, внутри которых есть тег
<RequiredTargetFramework>3.5</RequiredTargetFramework>; -
заменяем строку
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
на
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> - сохраняемся, открываем проект в VS2005 и радуемся!
Как получить версию текущей сборки в .Net?
Очень просто:
using System.Reflection;
...
string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
PEP8 коротко и по-русски
PEP8 - это стилевые правила для кода на языке Python.
- используйте 4 пробела для отступа и не используйте табы, не смешивайте их
- максимальная длина строки 79 символов; для разрыва строки используйте отступы или бэкслеш
- функции верхнего уровня и определения классов отделяйте двумя пустыми строками
- определения методов внутри класса отделяйте одной пустой строкой
- дополнительные пустые строки используйте для логической группировки методов
- кодировка файлов должна быть Latin-1, а в Питоне 3 и выше - utf-8
- каждый импортируемый модуль с новой строки
- порядок импортов: стандартные модули, third-party модули, локальные модули приложения
- пустая строка между каждой группой импортов
- избегайте лишних пробелов внутри скобок; перед запятыми, точкой с запятой и двоеточиями
- избегайте лишних пробелов перед скобками с аргументами функций и скобками с индексами
- избегайте больше чем одного пробела между операторами (= - + итд)
- используйте одиночный пробел для выделения операторов
- избегайте пробелов вокруг '=', который используется для параметров по-умолчанию и keyword аргументов
- обновляйте комментарии вместе с кодом
- пишите комментарии по-английски
- избегайте имён из одиночных l, O, I
-
для модулей и пакетов используйте короткие
всестрочныеимена -
для классов используйте
СловаНачинаютсяЗаглавнымиимена -
для функций используйте
слова_с_подчёркиваниями(илисмешанныйРегистресли так получилось исторически) -
для методов используйте
слова_с_подчёркиваниямиимена -
для внутренних методов и переменных
_подчёркивание_перед_словом -
для проверки на
Noneиспользуйтеisилиis not, не используйте операторы сравнения - используйте исключения основанные на классах -- наследованные от Exception
- используйте методы класса string вместо строковых функций
- используйте ''.startswith() и ''.endswith() вместо вырезки из строк для проверки префиксов и суффиксов
- используйте isinstance() для проверки типа
- не сравнивайте булевы переменные с True и False
HeliconJet is out!
HeliconJet — это модуль IIS, который поможет сэкономить траффик и повысить производительность сервера. Его основные features: HTTP compression, server-side caching и client-side caching. Сжимать и кешировать HeliconJet умеет статический и динамический контент. Приятное отличие — гибкость в настройке с помощью GUI или текстового конфига.
Я принимал (и принимаю) участие в разработке модуля, тестов для него, инсталляции. Видимо буду и поддерживать на форуме.
RewriteCond и %{SERVER_PORT}
Нашёл в apache интересную и неочевидную особенность. Имеем конфиг:
ServerName company.com
Listen 8080
Listen 8081
...
RewriteCond %{SERVER_PORT} 8080
RewriteRule .* bar.html
Правило RewriteRule никогда не отработает! Условие в RewriteCond будет всегда ложно. %{SERVER_PORT}, как видно из логов mod_rewrite, всегда возвращает 80. Сначала я подумал, что нашёл в apache баг. Но посмотрев исходники, понял, что багрепортером апача мне не быть. Серверная переменная %{SERVER_PORT} содержит не номер порта, на который пришёл запрос (что в общем вполне логично и ожидаемо), а номер порта из ServerName! Немного исправит положение ServerName company.com:8080. Но как отличать запросы, которые пришли на порт 8081?
Выяснил ещё, что в режиме FastCGI сервер IIS 7 не понимает чанковые запросы, т.е.
Transfer-Encoding: chunked. А именно в режиме FastCGI рекоммендуют запускать php5.
Django 1.0 released!
Последние три дня в инете какая-то истерия по поводу выхода браузера Google Chrome. Тысячи статей и отзывов написно, найдены уже баги и проблемы с безопасностью. Но на мой взгляд самая главная новость начала осени -- это релиз замечательного фреймворка Django. Три года разработки, 350 000 строк кода, 4000 коммитов, 2000 багфиксов! Всех поздравляю! Ура!
Coldplay: Viva la Vida
Поклонником Coldplay являюсь уже давно. Их первые три альбома знаю почти наизусть. И вот наконец послушал их последний альбом -- Viva la Vida, который оказался для меня очередным замечательным музыкальным открытием.
Где-то подслушивается влияние U2, а на мой очень субъектвный слух слышится ещё и особое оптимистичное настроение последнего альбома Sigur Ros.
Советую всем послушать и порадоваться.
В какой последовательности апач обрабатывет свои конфигурационные секции.
Начнём без долгих прелюдий. Источник - Configuration Sections из документации апача и его исходники, т.к. в документации не отражены разные тонкости.
Прикаждом запросе конфигурационные секции апача применяются так: сначала сливаются (соединяются, merge)
директивы из конфигурации сервера (httpd.conf) и директивы из конфигурации виртуального хоста (в соответствующеё секции <VirtualHost>), и объединённая конфигурация (merged configuration) исполняется. Затем соединяются директивы из конфигурационных секций типа Directory, Files, файлов .htaccess, и полученная объединённая конфигурация исполняется.
Допустим, что апач обрабатывает запрос http://servername/a/b/index.html, в результате которого будет выдан файл
/www/servername/a/b/index.html. Вот итоговая последовательность применения конфигурационных секций:
Соединяются конфигурации
- httpd.conf
-
<VirtualHost></VirtualHost>
Выполняется соединённая конфигурация
Соединяются конфигурации
<Directory /www/servername/>...</Directory><VirtualHost><Directory /www/servername/>...</Directory></VirtualHost>/www/servername/.htaccess
<Directory /www/servername/a/>...</Directory><VirtualHost><Directory /www/servername/a/>...</Directory></VirtualHost>/www/servername/a/.htaccess
<Directory /www/servername/a/b/>...</Directory><VirtualHost><Directory /www/servername/a/b/>...</Directory></VirtualHost>/www/servername/a/b/.htaccess
<Directory ~ | DirectoryMatch ^/www/servername/>...</DirectoryMatch><VirtualHost><Directory ~ | DirectoryMatch ^/www/servername/>...</DirectoryMatch></VirtualHost><Directory ~ | DirectoryMatch ^/www/servername/a/>...</DirectoryMatch><VirtualHost><Directory ~ | DirectoryMatch ^/www/servername/a/>...</DirectoryMatch></VirtualHost><Directory ~ | DirectoryMatch ^/www/servername/a/b/>...</DirectoryMatch><VirtualHost><Directory ~ | DirectoryMatch ^/www/servername/a/b/>...</DirectoryMatch></VirtualHost><Files | Files ~ index.html>...</Files>в порядке как они записаны в конфиге<VirtualHost><Files | Files ~ index.html>...</Files></VirtualHost>в порядке как они записаны в конфиге<Location | Location ~ >...</Location>в порядке как они записаны в конфиге<VirtualHost><Location | Location ~ >...</Location></VirtualHost>в порядке как они записаны в конфиге
Выполняется соединённая конфигурация
Linus Torvalds, Just for fun
Прочитал сам о рекомендую всем. Книга Линуса Торвальдса "Just for fun". О том, как Торвальдс написал Линукс, и о том, что это для него значит.
