Последние посты доступны только в английской версии блога

Заворачиваем C#-класс в COM

.NET C# COM

Пусть у нас имеется C#-класс, который делает что-нибудь полезное, например:

public class Calculator
{
    public int Sum(int a, int b)
    {
        return a + b;
    }
}

Давайте создадим для этого класса COM-интерфейс, чтобы его функциональность можно было использовать в других местах. В конце посмотрим на использование этого класса в среде Delphi.

Читать дальше


Занимательное о шрифтах в .NET

fonts .NET C#

Сегодня мы поговорим о замечательном классе 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 R-strings R-operators

Давайте поговорим о конкатенации строк. Новички в 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-functions

В R очень много разных полезных функций. И многие большие вещи можно сделать весьма быстро, написав очень мало кода. На официальном сайте есть замечательная шпаргалка на английском языке: R reference card. В сети есть несколько вольных урезанных переводов, но они не очень удобные. Ниже вашему вниманию представляется русифицированная модифицированная версия обзора основных функций R. Команды снабжены ссылками на online-мануал.

Читать дальше


Шаблон диссертации в LaTeX

LaTeX Phd Templates

Написать диссертацию — дело нелёгкое. А оформить её ещё сложнее. Благо, есть LaTeX, который может нам в этом помочь. Но для начала было бы здорово обзавестись шаблоном, на основе которого можно было бы сразу приступить к написанию научной работы. Я такого шаблона не нашёл, поэтому решил сделать его сам, возможно кому-то пригодится: https://github.com/AndreyAkinshin/Russian-Phd-LaTeX-Dissertation-Template. В шаблоне используется моя любимая кодировка UTF-8. Список литературы генерируется BibTeX-ом, а в отдельной папке аккуратно сложены всевозможные библиографические UTF-8-стили. Используются красивые PSCyr-шрифты, все наиболее часто используемые пакеты подключены. Помимо шаблона диссертации, проект также включает шаблоны автореферата, презентации и черновика для промежуточных наработок. Читать дальше