Меня всегда веселят .NET-разработчики, которые говорят, что они всё знают про строки. Не, ну есть и такие, которые действительно всё знают. Но обычно я с лёгкостью накидываю несколько вопросов, после которых мой собеседник теряет значительную долю уверенности в собственных знаниях. Предлагаю вам список из нескольких достаточно простых вопросов на знание типа System.String.
вторник, 25 июня 2013 г.
Вопросы на знание строк в .NET
среда, 19 июня 2013 г.
Материалы по Git
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/git/links/.
Основные: Интерактивные обучалки:
Просмотр истории коммитов в Git
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/git/log/.
Изучение истории коммитов — важная составляющая работы с репозиторием. Увы, ввиду ветвления с этой историей не всегда просто разобраться. Обычно я для этой цели пользуюсь различными визуальными оболочками, но не всегда есть такая возможность. Временами приходится пользоваться средствами консоли, а именно командой git log. Основы работы с этой командой можно почитать в чудесной книге ProGit.
git log имеет множество различных полезных параметров. Рассмотрим несколько примеров их использования.Древовидный вид
git log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --allВыводим полный граф коммитов c сокращёнными хешами, ссылками на коммиты и относительной датой. Используемый формат: синий сокращённый хеш коммита, зелёная дата, белые сообщение и автор, жёлтые ссылки на коммит.
четверг, 6 июня 2013 г.
Использование изменяемых структур в свойствах классов
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/dotnet/mutable-structures-as-property/.
все совпадения абсолютно случайны.
Занимался я как-то раз улучшением кода проекта. И наткнулся вот на такие строчки:
public class Image
{
public Rectangle Bounds;
}
«Ай-яй-яй! Публичное поле в классе, как же нехорошо-то! Нужно срочно превратить его в свойство!» — подумал я. И превратил:
public class Image
{
public Rectangle Bounds { get; set; }
}
Сделал я такое невинное изменение и сразу пошёл дальше рефакторить — ведь ещё такое количество кода нуждалось в улучшении! Ну а в конце решил я запустить на всякий случай Unit-тесты. Какого же было моё удивление, когда половина тестов упала. «Да как же так! Ведь я особо-то ничего и не менял!» Ну, поехали разбираться.
понедельник, 3 июня 2013 г.
Заворачиваем C#-класс в COM
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/dotnet/wrap-cs-in-com/.
Пусть у нас имеется C#-класс, который делает что-нибудь полезное, например:
public class Calculator
{
public int Sum(int a, int b)
{
return a + b;
}
}
Давайте создадим для этого класса COM-интерфейс, чтобы его функциональность можно было использовать в других местах. В конце посмотрим на использование этого класса в среде Delphi.
Занимательное о шрифтах в .NET
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/dotnet/fonts/.
Сегодня мы поговорим о замечательном классе Font. Иногда при работе с шрифтами возникают некоторые вопросы, которые не настолько очевидны, как хотелось бы. Рассмотрим несколько из них.
Q: Как опознать моноширинный шрифт?
A: Это не такой простой вопрос. Если немного погуглить, то можно найти следующий совет: описываем у себя в проекте класс LOGFONT и используем метод ToLogFont для конвертации шрифта в соответствующий объект. После этого (согласно легенде) в поле lfPitchAndFamily первый бит должен определять моноширинность шрифта. Так вот, это враньё, в современном мире поле всегда будет равно нулю. Когда-то где-то этот способ работал, но сейчас не работает. В реальности приходится использовать не очень красивое, но весьма эффективное решение типа такого:
// graphics — заранее созданный экземпляр класса Graphics
public static bool IsMonospace(Font font)
{
return Math.Abs(graphics.MeasureString("iii", font).Width -
graphics.MeasureString("WWW", font).Width) < 1e-3;
}
Вызов R-скрипта с аргументами из консоли
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/terminal-arguments/.
Для выполнения R-скрипта из консоли нам понадобится помощь утилит Rscript.exe и Rterm.exe. Разница между ними состоит в том, что Rscript.exe в результате выполнения выдаст нам только результат работы R-скрипта, а Rterm.exe выдаст полный лог R-сессии (включая стартовое приглашение к работе и все исполняемые команды). Если быть до конца честными, то Rscript.exe по сути вызывает Rterm.exe с специальными аргументами (об этом немного ниже). Рассмотрим пример запуска скрипта с аргументами командной строки:
Rterm.exe --no-restore --no-save --args 100 image <script.R >output.txt Rscript.exe script.R 100 image >output.txt
Разберём эти команды чуть подробней.
LaTeXTemplates.com — подборка LaTeX-шаблонов
Обнаружил в интернете свежую бесплатную подборку LaTeX-шаблонов: www.latextemplates.com. По шаблонам организована удобная навигация, для каждого доступен предварительный просмотр с кратким описанием. На текущий момент имеются следующие категории: академические журналы, статьи, задания, книги, календари, постеры для конференций, сопроводительные письма, резюме, эссэ, деловые письма, лабораторные книги, лабораторные отчёты, разное, презентации, диссертации и титульные листы.
Увы, это на все случаи жизни шаблонов не сделаешь. Для написания русской кандидатской диссертации пришлось делать собственный: Russian-Phd-LaTeX-Dissertation-Template.
Ручное размещение полей структуры в C#
Начнём с задачки. Имеется структура:
struct MyStruct
{
public Int16 Value;
}
Требуется научится получать младший байт поля Value. Но сделать это нужно так, чтобы обеспечить максимально возможную производительность.


