Заворачиваем C#-класс в COM
Пусть у нас имеется C#-класс, который делает что-нибудь полезное, например:
public class Calculator
{
public int Sum(int a, int b)
{
return a + b;
}
}
Давайте создадим для этого класса COM-интерфейс, чтобы его функциональность можно было использовать в других местах. В конце посмотрим на использование этого класса в среде Delphi.
Читать дальшеЗанимательное о шрифтах в .NET
Сегодня мы поговорим о замечательном классе 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
Давайте поговорим о конкатенации строк. Новички в R пытаются пробовать стандартную конструкцию
"a" + "b"
Но их постигает неудача — R так не работает. Оператор плюс — это арифметическая операция, её нельзя применять к строкам. В R полагается использовать функцию paste:
paste (..., sep = " ", collapse = NULL)
paste0(..., collapse = NULL)
Множественное присваивание в R
R — мощный и лаконичный язык. С помощью коротких инструкций можно сделать очень многое. Но давайте сделаем R ещё лаконичнее.
Чего мне всегда не хватало в R — так это множественного присваивания. Из-за отсутствия этой возможности приходится иногда писать не совсем красивый код для получения результата функции, который должен распределиться по нескольким переменным:
x <- solve(matrix(c(2, 0, 0, 3), ncol=2), c(1, 1))
x1 <- x[1]
x2 <- x[2]
А вот было бы здорово если бы такие вещи можно было записывать в одну строчку, например так:
с(x1, x2) %=% solve(matrix(c(2, 0, 0, 3), ncol=2), c(1, 1))
Нет ничего проще!
Читать дальшеОператоры +=, -= в R
Продолжаем писать полезные операторы для языка R. В большинстве современных языков есть операторы +=, -= и т.п., они делают синтаксис более лаконичным. А давайте и в R определим подобные операторы, чтобы вместо
x <- x + 3
y <- y - 2
мы могли бы писать:
x %+=% 3
y %-=% 2
Рисуем комиксы в стиле xkcd
Многие слышали о таком замечательном комиксе, как xkcd. Это веб-комикс от Рэндела Манро о романтике, сарказме, математике и языке. Для некоторых комиксов есть переводы на русский. Для поиска и просмотра ваших любимых комиксов в R есть отдельный пакет: RXKCD. Давайте установим этот пакет и подключим его:
install.packages("RXKCD")
library("RXKCD")
Давайте поищем какой-нибудь комикс, а затем нарисуем его. Функция searchXKCD выдаст нам список всех комиксов, в описании которых встречается заданная фраза. А getXKCD выдаст нам полную информацию о комиксе по заданному номеру (включая рисование картинки).
searchXKCD("someone is wrong")
getXKCD(386)
А теперь помимо стандартных комиксов научимся рисовать свои!
Читать дальшеФункции в R
В R очень много разных полезных функций. И многие большие вещи можно сделать весьма быстро, написав очень мало кода. На официальном сайте есть замечательная шпаргалка на английском языке: R reference card. В сети есть несколько вольных урезанных переводов, но они не очень удобные. Ниже вашему вниманию представляется русифицированная модифицированная версия обзора основных функций R. Команды снабжены ссылками на online-мануал.
Читать дальшеШаблон диссертации в LaTeX
Написать диссертацию — дело нелёгкое. А оформить её ещё сложнее. Благо, есть LaTeX, который может нам в этом помочь. Но для начала было бы здорово обзавестись шаблоном, на основе которого можно было бы сразу приступить к написанию научной работы. Я такого шаблона не нашёл, поэтому решил сделать его сам, возможно кому-то пригодится: https://github.com/AndreyAkinshin/Russian-Phd-LaTeX-Dissertation-Template. В шаблоне используется моя любимая кодировка UTF-8. Список литературы генерируется BibTeX-ом, а в отдельной папке аккуратно сложены всевозможные библиографические UTF-8-стили. Используются красивые PSCyr-шрифты, все наиболее часто используемые пакеты подключены. Помимо шаблона диссертации, проект также включает шаблоны автореферата, презентации и черновика для промежуточных наработок. Читать дальше