Заворачиваем 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-шрифты, все наиболее часто используемые пакеты подключены. Помимо шаблона диссертации, проект также включает шаблоны автореферата, презентации и черновика для промежуточных наработок.
Читать дальше


Pro .NET Benchmarking



Learn how to measure application performance and analyze the results! Use this in-depth guide to correctly design benchmarks, measure key performance metrics of .NET applications, and analyze results. This book presents dozens of case studies to help you understand complicated benchmarking topics. You will avoid common pitfalls, control the accuracy of your measurements, and improve performance of your software. Author Andrey Akinshin has maintained BenchmarkDotNet (the most popular .NET library for benchmarking) for five years and covers common mistakes that developers usually make in their benchmarks. This book includes not only .NET-specific content but also essential knowledge about performance measurements which can be applied to any language or platform (common benchmarking methodology, statistics, and low-level features of modern hardware). With this book, you will learn: Be aware of the best practices for writing benchmarks and performance tests Avoid the common benchmarking pitfalls Know the hardware and software factors that affect application performance Analyze performance measurements Apress Amazon US Amazon CA Amazon UK Amazon DE Amazon FR Amazon ES Amazon JP Springer Google Books O’Reilly GoodReads ResearchGate GitHub (Examples) Content The book contains nine chapters: Chapter 1 “Introducing Benchmarking” This chapter contains some basic information about benchmarking and other performance investigations, including benchmarking goals and requirements. We will also discuss performance spaces and why it’s so important to analyze benchmark results. Chapter 2 “Common Benchmarking Pitfalls” This chapter contains 15 examples of common mistakes that developers usually make during benchmarking. Each example is pretty small (so, you can easily understand what’s going on), but all of them demonstrate important problems and explain how to resolve them. Chapter 3 “How Environment Affects Performance” This chapter explains why the environment is so important and introduces a lot of terms that will be used in subsequent chapters.
Читать дальше


Об авторе



Андрей Акиньшин — программист, автор постов и статей про математику и программирование, частый спикер на конференциях (100+ выступлений). Он мейнтейнер BenchmarkDotNet (самая популярная библиотека для написания .NET-бенчмарков) и perfolizer (инструменты для перфоманс-анализа); автор Pro .NET Benchmarking (книга о практиках замеров производительности). Андрей — performance lead в JetBrains Rider (кроссплатформенная .NET IDE, основанная на платформе IntelliJ и ReSharper). Он также председатель программного комитета конференции DotNext, бывший Microsoft .NET MVP, серебрянный медалист ACM ICPC. Андрей имеет степень к.ф.-м.н., занимается научным проектом в Институте математики СО РАН в сфере математической биологии и теории бифуркаций. Раньше работал постдоком в Институте Вейцмана.
Читать дальше