Полезные акселераторы Visual Studio

30 мар. 2010 г. | | |

F12 - переходит к объявлению класса, метода, переменной и т.д.
Shift-F12 - найти все ссылки
F2 - рефакторинг "Rename method"
Ctrl-R, Ctrl-M - рефакторинг : извлекает выделенный фрагмент кода в отдельный метод
Ctrl-K, Ctrl-C - комментирует выделенный фрагмент кода
Ctrl-K, Ctrl-U - раскомментировать выделенный закомментированный фрагмент кода
Ctrl-E, Ctrl-D - форматирование кода. Например, при вставке кода с синтаксическими ошибками студия не сможет нормально отформатировать вставленный кусок. После устранения ошибок Ctrl-E, Ctrl-D позволяет автоматически расставить все отступы, пробелы и переводы строк согласно текущим настройкам по форматированию кода (Tools->Options->Text Editor->C#->Formatting).
Ctrl+] - перемещение между скобками, комментариями и другими парными элементами ({}, (), /**/, #region/#endregion, ...). Например, если курсор находится на открывающейся скобке, то Ctrl+] переместит его на соответствующую ей закрывающуюся, и наоборот.
Ctrl+C - копирует выделенный текст :), при отсутствии выделения копирует в буфер обмена текущую строку.
Ctrl+L - удаление текущей строки
Ctrl-M, Ctrl-M - сворачивает/разворачивает регион кода, в котором находится курсор (это может быть метод, namespace, комментарий и т.п.)
Ctrl-M, Ctrl-O - Collapse to Definitions
Ctrl-Shift+Space - вызывает intellisense suggestions window на текущем элементе

Создаем ярлык (Shortcut) приложения на рабочем столе, в пуске на C#

15 мар. 2010 г. | | |

Создать ярлык приложения очень просто. Для этого нам понадобится библиотека Interop.IWshRuntimeLibrary, которую нужно подключить в референсы проекта (в SolutionExplorer выбираем нужный проект, правой кнопкой по References->Add Reference, во вкладке COM находим "Windows Script Host Object Model" и клацаем ОК):

И так, подготовительный этап пройден.
Добавим в проект класс, который будет заниматься созданием ярлыков. У меня он именуется ShortcutManager. Состоять он будет из одного статического метода CreateShortcut:

public class ShortcutManager
{
public static void CreateShortcut(string linkName, string apppath, string iconpath, ShortcutLocation location, string hotkey)
{
object shortPath = null;
// Определяем место, где будет создан ярлык
switch (location)
{
case ShortcutLocation.DESKTOP:
{
shortPath = (object)"Desktop";
}; break;
case ShortcutLocation.START_MENU:
{
shortPath = (object)"StartMenu";
}; break;
case ShortcutLocation.COMMON_DESKTOP:
{
shortPath = (object)"AllUsersDesktop";
}; break;
default: shortPath = (object)"Desktop"; break;
}

WshShell shell = new WshShell();
// Получаем полный адрес ярлыка
string link = Path.Combine(((string)shell.SpecialFolders.Item(ref shortPath)), linkName + @".lnk");
// Создаем объект ярлыка
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(link);
if (!hotkey.Equals(String.Empty))
{
// Назначаем горячую клавишу
shortcut.Hotkey = hotkey;
}
// Описание ярлыка
shortcut.Description = linkName;

shortcut.IconLocation = iconpath;
//Указываем рабочую папку
shortcut.WorkingDirectory = Path.GetDirectoryName(apppath);
// Указываем путь для программы
shortcut.TargetPath = apppath;
// Вызываем метод Save(), который и создаст ярлык
shortcut.Save();
}
}

ShortcutLocation - это Enum, содержащий возможные варианты размещения ярлыка:

public enum ShortcutLocation
{
DESKTOP,
COMMON_DESKTOP,
START_MENU
}

Для примера ярлык может быть создан на рабочем столе текущего пользователя, на общем рабочем столе и в пуск->программы.
В качестве входных аргументов CreateShortcut должен получить название ярлыка (linkName), полный путь к приложению, для которого создается ярлык (apppath), полный путь к иконке, которая будет установлена на ярлык (iconpath), размещение ярлыка (location), горячая клавиша (сочетание клавиш hotkey).
Пример использования CreateShortcut:

Shortcut.ShortcutManager.CreateShortcut("Sample Shortcut", Application.ExecutablePath, Application.ExecutablePath, ShortcutLocation.DESKTOP, String.Empty);

Полный код примера можно скачать тут.

Закрытие torrents.ru

19 февр. 2010 г. | | |

Делегирование домена крупнейшего российского торрент-трекера было приостановлено по решению прокуратуры, сообщила пресс-служба регистратора доменных имен в зоне .ru "Ру-Центр".

Torrents.ru - крупнейший российкий Bit-Torrent-трекер, ищеющий более чем 4 миллионами активных пользователей и около миллиона торрентов, 18 февраля 2010 года закрыт по требованию прокуратуры.

Администрация трекера отмечает, что не получала никаких уведомлений о прекращении делегирования домена torrents.ru и не знает о причинах такого решения.

Работа домена будет приостановлена до тех пор, пока не закончится разбирательство трекера с правоохранительными органами. В "Ру-Центр" направлен соответствующий запрос, однако, весьма вероятно, что выяснение обстоятельств займет некоторое время, в течение которого адрес torrents.ru будет недоступен.

В настоящее время он перенаправляет на "зеркало" сайта по адресу rutracker.org, где размещено сообщение о сбое и инструкции для работы с новым адресом. На этом домене уже работает форум трекера.

18 февраля, то есть вчера, на стартовой страницы сайта torrents.ru весел совет как теперь всем быть дальше: «Мы вынуждены были в срочном порядке сменить доменное имя на rutracker.org. Технически, это означает что для продолжения обмена информацией вам необходимо сменить адреса трекеров в уже скачанных торрент-файлах с bt.torrents.ru на bt.rutracker.org, (вместо bt может быть bt2, bt3 и bt4) либо скачать эти торрент файлы заново (в них уже будет новый адрес трекера). Все остальные ссылки на форуме будут изменены автоматически, однако возможно вам потребуется заново ввести логин и пароль при входе на форум, чтобы броузер запомнил новый адрес». Сегодня же трекер вобще не доступен :(

Помним, скорбим.


SQLite Vs MS SQL CE

17 февр. 2010 г. | | |

Небольшая сравнительная характеристика двух embedded-бд.

  • + SQLite мальнкий размер БД (пустая база весит несколько килобайт против нескольких сот килобайт ms sql ce)
  • + SQLite - кроссплатформенная бд.
  • - MS SQL CE - лимит файла БД в 4 Гб против 1 Tb у SQLite
  • - MS SQL CE - нет триггеров, представлений (на этом моменте хочется заплакать:( )
  • - MS SQL CE - уступает по скорости SQLite
  • - SQLite - нет типа boolean
  • - SQLite - провайдеры linq to sqlite только платные, бесплатный недопиленный (не позволяет работать с представлениями)
  • + SQLite - опенсорсный проект, MS SQL CE - закрытый исходный код

О безопасноти входных данных

4 февр. 2010 г. | | |


Не забывайте о том, что входные данные - всегда небезопасны. Не доверяйте пользователям, особенно если это касается веб-приложений!
(картинка отсюда http://www.xkcd.ru/327 )

Лучше быть первым, чем правым?

24 янв. 2010 г. | | |

Еще одна моя заметка о разработке ПО, опубликованная в блоге http://www.ht.ua/blog/making_soft/
С повсеместным распространением интернета перед нами открылось море новых возможностей, начиная от развлечений до новых возможностей для бизнеса. Для разработчиков открылось не только новое поле деятельности, но и новый способ распространения своих продуктов. Доставка продукта конечному пользователю через интернет - быстро, удобно, дешево. К тому же интернет позволяет программисту более легко исправить версию продукта с ошибкой на версию продукта без ошибки - всего лишь обновить файл на сервере и все! Не надо думать о том, что на складе лежат коробки с CD-дисками программы, на которых эта дурацкая ошибка! В случае распространения продукта через интернет пользователь всегда получит самую свежую версию.
В условиях экономической конкуренции целью компаний, выпускающих продукты в одной нише, является завоевание большего количества клиентов. Как это сделать? От чего это зависит? Правильный маркетинг? Не только. Представьте, что ваш конкурент месяц назад выпустил продукт, разрекламировал его, занял какую-то долю клиентов. Вы знаете, что его продукт не идеален, содержит ошибки, а ваша программа - без единой ошибки (конечно, это из ряда фантастики :) ). И вот вы готовите к выпуску свой продукт, а ваш конкурент - выпускает исправления своей программы. Вы организуете маркетинговую компанию, но... Но рынок-то уже занят конкурирующим продуктом. Как вы думаете, что пользователю будет легче - скачать и установить обновления или полностью перейти на новый продукт?
И вот тут замечается плохая тенденция.

... разработчики утверждают, что пользователи просто хотят скорее получить ПО, нежели обрести его безукоризненную версию. ... Лучше быть первым, чем правым.[1]
А так ли это? Насколько лучше быть первым, чем правым? Ведь преспокойно можно заработать репутацию компании, выпускающей некачественный продукт. С другой стороны, есть возможность заполучить больше ни о чем не подозревающих пользователей. На мой взгляд, такая тактика выпуска "неидеального ПО" уместна только в том случает, если ошибка не значительна, если ее себестоимость не велика по сравнению с задержкой выпуска продукта. Под себестоимостью ошибки я понимаю сумму неудобств, которые предоставит эта ошибка пользователю, и время, которое будет потрачено на исправление этой ошибки. Самые легкие ошибки - это опечатки :) Порой на них можно закрыть глаза (только тссс!). Примером некритичной ошибки так же может служить возникновение сбоя в программе, если у пользователя установлено какое-то редко встречающееся приложение, которое чудным образом конфликтует с вашим. Вы потратите гораздо больше сил и времени на поиск и устранение проблемы, чем выиграете от этого. Сколько процентов ваших клиентов пользуются этим редко встречающимся приложением? 1%? или 2%? Только не подумайте, что я призываю оставить этого пользователя на произвол судьбы. Нет, нет и нет. Просто такую ошибку вы можете исправить позже, когда у вас не будет более приоритетных задач. Конечно, выпуск продукта, в котором возникает fatal error при нажатии на кнопку сохранить, если у клиента драйвер видеокарты не от компании ATI - это большой грех :). Такого нельзя допускать ни в коем случае. Эту ошибку следует исправить.
Таким образом, все решает цена вопроса - не всегда оказывается уместной поговорка "семь раз отмерь, один раз отрежь", иногда "лучше быть первым, чем правым".

[1] С.Макконнелл. "Профессиональная разработка программного обеспечения"