Меня всегда веселят .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
. Но сделать это нужно так, чтобы обеспечить максимально возможную производительность.
Шаблон диссертации в LaTeX
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/education/phd-template/.
Написать диссертацию — дело нелёгкое. А оформить её ещё сложнее. Благо, есть LaTeX, который может нам в этом помочь. Но для начала было бы здорово обзавестись шаблоном, на основе которого можно было бы сразу приступить к написанию научной работы. Я такого шаблона не нашёл, поэтому решил сделать его сам, возможно кому-то пригодится: https://github.com/AndreyAkinshin/Russian-Phd-LaTeX-Dissertation-Template. В шаблоне используется моя любимая кодировка UTF-8. Список литературы генерируется BibTeX-ом, а в отдельной папке аккуратно сложены всевозможные библиографические UTF-8-стили. Используются красивые PSCyr-шрифты, все наиболее часто используемые пакеты подключены. Помимо шаблона диссертации, проект также включает шаблоны автореферата, презентации и черновика для промежуточных наработок.
Рекомендации по созданию постера
В интернете есть много разной информации про то, как нужно делать хорошие презентации. А вот про создание постеров почти ничего нет. Мне недавно довелось присутствовать на одной постер-сессии. Некоторые постеры мне очень понравились, а над некоторыми ещё нужно работать и работать. И я решил сформулировать некоторые небольшие рекомендации для тех, кто собирается сделать хороший постер.
Операторы +=, -= в R
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/compound-assignment/.
Продолжаем писать полезные операторы для языка R. В большинстве современных языков есть операторы +=, -= и т.п., они делают синтаксис более лаконичным. А давайте и в R определим подобные операторы, чтобы вместо
x <- x + 3 y <- y - 2
x %+=% 3 y %-=% 2
Множественное присваивание в R
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/multiple-assignment/.
R — мощный и лаконичный язык. С помощью коротких инструкций можно сделать очень многое. Но давайте сделаем R ещё лаконичнее.
Чего мне всегда не хватало в R — так это множественного присваивания. Из-за отсутствия этой возможности приходится иногда писать не совсем красивый код для получения результата функции, который должен распределиться по нескольким переменным:
А вот было бы здорово если бы такие вещи можно было записывать в одну строчку, например так: Нет ничего проще!R Syntax Highlighter — раскрашиваем R-код на вашем сайте
Работаем с rgl на Shiny
Shiny — это замечательный пакет, который позволяет развёртывать веб-страницы на основе R-скриптов. rgl — это замечательный пакет, который позволяет строить в R красивые интерактивные трёхмерные графики. А ещё более замечательным является тот факт, что эти пакеты можно совместить, получив в результате интерактивный трёхмерный график для вашего сайта. О том, как это сделать, рассказывает и показывает Jeff Allen в своём посте. Вы можете сразу посмотреть результат на двух примерах: arbitrary 3d points и color plots. Исходный код доступен на GitHub.
Progress bar в R
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/progress-bar/.
Давайте поговорим о долгих расчётах, ведь они не так редко встречаются в мире вычислений. Когда вы запускаете скрипт, который будет заведомо долго работать, то приятно смотреть на состояние прогресса. Эта информация поможет прикинуть время до конца вычислений («осталось ещё 30%, я успею выпить чашку кофе») или просигнализировать о бесконечном цикле («1438% выполнено, что-то пошло не так...»). Давайте научим наш скрипт сообщать пользователю о проценте выполненных работ.
stringr — работаем со строками
Rprofile — кастомизируем рабочее окружение
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/rprofile/.
Давайте поговорим о задании окружения в R. Для этой цели имеется два волшебных файла:
- Rprofile.site — глобальный файл настроек для всех сессий. Путь в Windows:
c:\Program Files\R\R-x.y.z\etc\Rprofile.site
, путь в Linux:/etc/R/Rprofile.site
. - .Rprofile — локальный файл настроек для текущей сессии. Лежит в домашней директории пользователя.
- .First <- function() { ... } — функция, которая запускается в начале R-сессии
- .Last <- function() { ... } — функция, которая запускается в конце R-сессии
Конкатенация строк в R
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/string-concatenation/.
Давайте поговорим о конкатенации строк. Новички в R пытаются пробовать стандартную конструкцию
"a" + "b"
colorfulVennPlot — рисуем цветные диаграммы Венна
Давайте разберёмся с тем, как он работает.
Рисуем комиксы в стиле xkcd
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/xkcd/.
Многие слышали о таком замечательном комиксе, как xkcd. Это веб-комикс от Рэндела Манро о романтике, сарказме, математике и языке. Для некоторых комиксов есть переводы на русский. Для поиска и просмотра ваших любимых комиксов в R есть отдельный пакет: RXKCD. Давайте установим этот пакет и подключим его:
install.packages("RXKCD") library("RXKCD")
searchXKCD("someone is wrong") getXKCD(386)
А теперь помимо стандартных комиксов научимся рисовать свои!
Cairo — делаем графики гладкими
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/cairo/.
R обладает богатейшим функционалом по формированию различных графиков. К сожалению, иногда графики получается не настолько красивыми, как бы нам хотелось. Давайте нарисуем график синуса: Если вы хорошо вглядитесь в это изображение, то увидите, что функция получилась не совсем гладкой. Дело в том, что стандартное графическое устройство не поддерживает anti-aliasing. Но не стоит грустить! Нам поможет Cairo!
R-ссылки
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/links/.
Английские полезные R-ресурсы:
- R-project — официальный сайт
- CRAN — официальный репозиторий пакетов
- Bioconductor — ещё один репозиторий пакетов
- R graph gallery — графическая галерея R
- Inside-R — замечательно R-сообщество
- Full manual — полные оригинальные спецификации
- R Cookbook — разные полезные R-сниппеты для решения типовых задач
- Quick-R — краткий обзор языка
- Try R — online-обучалка основам языка
- R Wiki — небольшая вики про язык R
- R Seek — поиск информации про R
- R Journal — журнал про R
- Google's R Style Guide — стандарты оформления R-кода от Google
- R by example — подборка примеров использования R
- R FAQ — официальный FAQ
- Functional programming — учимся функциональному программированию на R
- crantastic — ещё одно R-сообщество
- omegahat — ещё один R-репозиторий
- ProgrammingR.com — и ещё один полезный сайт
- fractalswithr — фракталы на R
Инструментарий для R
- RStudio — прекрасная IDE для работы в R. Тут можно на русском подробно почитать про работу с этим замечательным программным продуктом.
- Pretty R — online-сервис, который умеет красиво раскрашивать R-код.
- Sweave, knitr — замечательные пакеты, которые позволяют встраивать R-скрипты в LaTeX-документ
- Shiny — пакет, позволяющий развёртывать интерактивные web-приложения на основе R-скрипта (с графиками, элементами управления и т.п.)
- StatET — плагин для Eclipse для написания на языке R
- RPy — используем R из Python-а
- R markdown — разметка простых документов на основе R
Функции в R
Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/functions/.
В R очень много разных полезных функций. И многие большие вещи можно сделать весьма быстро, написав очень мало кода. На официальном сайте есть замечательная шпаргалка на английском языке: R reference card. В сети есть несколько вольных урезанных переводов, но они не очень удобные. Ниже вашему вниманию представляется русифицированная модифицированная версия обзора основных функций R. Команды снабжены ссылками на online-мануал.