Popular Tags:

OxyPlot tricks

22.05.2015 at 19:54

Начал использовать библиотеку OxyPlot. Буду в этой статье копить полезные моменты по работе с ней.

Добавление вертикальных линий.

public void AddVerticalLine(PlotModel model)
{
	var annotation = new OxyPlot.Annotations.LineAnnotation()
	{
		Type = OxyPlot.Annotations.LineAnnotationType.Vertical,
		X = 50,
		Color = OxyColors.Blue,
		LineStyle = LineStyle.Solid
	};
	Data.Annotations.Add(annotation);
}

Есть много других видов аннотаций.

Добавление логарифмической оси Y

logAxis = new OxyPlot.Axes.LogarithmicAxis();
logAxis.Position = AxisPosition.Left;
logAxis.Base = 10;
logAxis.MinorStep = 1;
logAxis.AbsoluteMaximum = 10000;
logAxis.AbsoluteMinimum = 0.01;
Plot.Model.Axes[1] = logAxis;

Делать в обработчике события Loaded

Ограничение скроллинга

model.Axes[0].AbsoluteMaximum = maxX;
model.Axes[0].AbsoluteMinimum = minX;

Перерисовывание графика

Plot.InvalidatePlot(true);
read more

Простой способ создать PDF на C#

12.05.2015 at 21:03

На одном проекте возникла необходимость реализовать создание несложного отчета в PDF. Делал я это с помощью библиотеки itextsharp. Библиотека позволяет создавать PDF различными способами, самым простым мне показалось ручное рисование. Вот как это делается:

Создание документа

var document = new iTextSharp.text.Document();
using (var writer = PdfWriter.GetInstance(document, new FileStream("result.pdf", FileMode.Create)))
{
	document.Open();

	// do some work here

	document.Close();
	writer.Close();
}

Рисование линий

writer.DirectContent.MoveTo(35, 780);
writer.DirectContent.LineTo(430, 780);

Добавление картинки

var logo = iTextSharp.text.Image.GetInstance(new FileStream(@"Resources\logo.jpg", FileMode.Open));
logo.SetAbsolutePosition(440, 758);
writer.DirectContent.AddImage(logo);

Добавление текста

helvetica = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 12);
helveticaBase = helvetica.GetCalculatedBaseFont(false);
writer.DirectContent.BeginText();
writer.DirectContent.SetFontAndSize(helveticaBase, 12f);
writer.DirectContent.ShowTextAligned(iTextSharp.text.Element.ALIGN_LEFT, "Hello world!", 35, 766, 0);
writer.DirectContent.EndText();

Документация

itextsharp – порт java библиотеки itext, API у них совпадает. read more

Способы организации хранения данных в распределенных системах

11.10.2014 at 11:15

В книге Семь баз данных за семь недель обратил внимание на то, как отличается подход к распределенному хранению данных в различных БД.

MongoDB

Данные реплицируются на несколько серверов. Читать актуальные данные и писать можно только на главном сервере. Если главный сервер недоступен – происходят выборы нового главного. Им становится тот сервер, на котором более актуальные данные. read more

Генерация текста с помощью цепи Маркова на F#

16.09.2014 at 17:59

Продолжаю изучать F#. В прошлый раз я написал парсер хабра, теперь на основе него буду писать генератор текста.

Алгоритм генерации

На входе в алгоритм – текст, в нашем случае – спарсенные с хабра статьи. Весь текст разбивается на последовательности из трех слов. Каждое новое слово в генерируемом тексте подбирается на основе двух предыдущих следующим образом: берутся все тройки, которые начинаются с этих слов и из них выбирается случайная. read more

Рецензия. MATLAB Succinctly

08.09.2014 at 04:00

Matlab
Очередная книга из серии Succinctly.
MATLAB – это сокращение от Matrix Laboratory. Эта программа предназначена для математических вычислений. Заточена именно для работы с матрицами.
Основные темы книги:

  • Пользовательский интерфейс
  • Типы данных
  • Основы синтаксиса
  • Массивы и матрицы
  • Скрипты
  • Построение графиков
  • ООП

Все эти темы раскрыты достаточно подробно для того, чтобы приступать к работе. read more

AttachedProperty

03.09.2014 at 05:17

Это подвид DependencyProperty, которые объявляются в одном классе, а значения устанавливаются для экземпляров другого класса. Один из самых распространенных примеров – Grid.Row и Grid.Column, которые устанавливаются для контролей, вложенных в грид.

Особенности

  • Класс, в котором объявлено AttachedProperty не обязательно должен наследоваться от DependencyObject.
  • Классы, для экземпляров которых устанавливается значение AttachedProperty, должны быть унаследованы от DependencyObject.
read more

DependencyProperty

02.09.2014 at 19:41

DependencyProperty – механизм WPF, позволяющий означить свойства визуальных контролей через XAML. Многие свойства, используемые в XAML разметке – на самом деле DependencyProperty.

Использование

DependencyProperty нужны для:

  • Data Binding. Биндинг возможен только для DependencyProperty.
  • Анимаций.
  • Стилей и триггеров.
  • Они появляются в окне свойств контрола в Visual Studio

Создание DependencyProperty

Класс, содержащий DependencyProperty, должен быть унаследован от DependencyObject. read more

Парсер хабрахабра на F#

25.08.2014 at 16:53

Tachikoma
Продолжаю изучать F#. Сегодня расскажу о первой программе – парсере хабра.
Для парсинга я выбрал один хаб – “Информационная безопасность”.
Страницы этого хаба имеют вид http://habrahabr.ru/hub/infosecurity/pageN/ где N – номер страницы.
Парсить HTML я буду с помощью библиотеки HtmlAgilityPack.

Сначала подготовим несколько служебных функций:

let validPath (path : string) =
  Array.fold (fun (acc:string) item -> acc.Replace(item, '_')) path (Path.GetInvalidFileNameChars())

Эта функция преобразует строку в корректное имя файла, заменяя невалидные символы. read more

Рецензия. F# Succintly

15.08.2014 at 05:13

fsharp
Одна из книг серии Succintly от компании Syncfusion. Это серия коротких (около 100 страниц) книг по различным технологиям. Предназначены для ознакомления с технологией. Книги бесплатны и доступны в форматах pdf и mobi.
F# Succintly описывает базовый синтаксис языка:

  • Функции
  • Операторы
  • Рекурсию
  • Списки
  • Сопоставление с образцом (pattern matching)
  • Типы
  • Интерфейсы
  • Классы
  • Приведение типов

Все эти вещи раскрыты достаточно подробно, чтобы приступать к программированию. read more

Шпаргалка по F#

08.08.2014 at 07:13

Начал изучать F# и решил набросать шпаргалку. Буду дополнять по мере изучения.

Базовый синтаксис

Отступы значимы. Причем отступы должны быть пробельными – табуляция не подойдет.
Определить переменную:

let sampleInteger = 176

Определить функцию:

let func1 x = x*x + 3  

Функции могут быть вложенными.
Функция всегда возвращает результат последнего вычисления.

let add3ints x y z = 
let add2ints x y = 
    x + y
  add2ints x (add2ints y z)

System.Console.WriteLine(add3ints 1 2 3)
System.Console.ReadLine()

Операции со списками

Создание списка:

let mylist = [1; 2; 3; 4; 5]

Получение нового списка путем преобразования старого:

let multipliedList = List.map (fun x -> x * 3) mylist

Фильтрация списка:

let biglist = List.filter (fun x -> x > 7) multipliedList

Оператор |позволяет использовать функции в Linq стиле. read more