Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
В помощь разработчику: мини-анализатор кодаAndrey Karpov
В процессе разработки проекта часто можно столкнуться с одинаковыми паттернами ошибок. Своими или коллег по команде. Думаете, невозможно автоматизировать проверку этих паттернов?
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)IT-Доминанта
Матвеенко Сергей - Ведущий разработчик / Positive Technologies / Россия, Санкт-Петербург
Декларативное программирование на Python, метаклассы, YAML и прочие неприятности.
Популярные применения. Подводные камни.
http://www.it-sobytie.ru/events/2040
Основные функциональные возможности системы SignMeUp - автоматизация управления инструкторами автошкол с возможностью записи на занятия через Интернет.
В помощь разработчику: мини-анализатор кодаAndrey Karpov
В процессе разработки проекта часто можно столкнуться с одинаковыми паттернами ошибок. Своими или коллег по команде. Думаете, невозможно автоматизировать проверку этих паттернов?
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)IT-Доминанта
Матвеенко Сергей - Ведущий разработчик / Positive Technologies / Россия, Санкт-Петербург
Декларативное программирование на Python, метаклассы, YAML и прочие неприятности.
Популярные применения. Подводные камни.
http://www.it-sobytie.ru/events/2040
Основные функциональные возможности системы SignMeUp - автоматизация управления инструкторами автошкол с возможностью записи на занятия через Интернет.
План выступления:
1. Зачем?
1. Проектированием хранилищ данных занимается почти каждый.
2. В начале проекта сложно представить, какие новые требования появятся через месяц. (КО напоминает)
3. "Много думать" - бессмысленно, все равно все поменяется.
4. Нужна схема, которую можно будет легко расширять и перетасовывать.
5. Дерево объектов - искомая структура.
2. Примеры деревьев (иерархических структур):
1. Организационная диаграмма.
2. Файлы и папки на диске
3. Файлы и папки - отличная метафора, от которой мы и будем плясать. На диске успешно хранится все, что нужно. Аналогично любые данные хорошо укладываются в дерево.
4. Пример №1
1. Традиционное проектирование. Рисуем UML-диаграмму: новость, каталог новостей, иерархия разделов каталога, страны, к которым принадлежат разделы, описания стран.
2. Выражаем то же самое в виде дерева объектов "статья", "папка", "страна".
3. Такое дерево реализуется примитивнейшей структурой классов - класс Node и его наследники.
1. Как следствие, для моделирования иерархической структуры диаграмма классов не подходит.
5. Полезные операции в дереве объектов:
1. Найти объект по пути. Путь - это последовательность ребер. Полный аналог пути к файлу.
1. Объект может иметь осмысленный путь - это удобно для пользователя.
2. Выбрать все объекты заданных типов, находящиеся в указанной ветви дерева.
1. Одна и та же операция позволяет выбрать все новости про заданную страну или все новости из указанной категории.
3. Наследование свойств вниз по дереву:
1. Конфигурационные настройки.
2. Роли пользователей.
6. Переход от дерева к ориентированному графу
1. Дерева (один родительский узел) не всегда достаточно.
2. Пример - новость может принадлежать нескольким разделам сразу.
3. Надо позволить узлу иметь нескольких родителей - получаем ориентированный граф.
4. Не должно быть циклов
1. Циклы создают проблемы.
2. В них нет никакого смысла для целей хранения данных.
7. Объект Relation - на диаграмму классов, моделирующих дерево добавляем новый класс: parent, child, name.
1. name - имя отношения, которое можно использовать при по
* XSLT в качестве языка шаблонов.
* XML для передачи модели в MVC.
* ObjectXPathNavigator помогает совместить типизированные модели и XML.
* Внедряем ASPX веб-формы в MVC.
Слайды одноименного доклада с конференции "C++ Russia 2018". В докладе речь идет о том, насколько C++ мешает и насколько C++ помогает в разработке акторного фреймворка для C++.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Компилируемые в реальном времени DSL для С++corehard_by
В последнее время в промышленной разработке особую популярность обретают предметно-ориентированные языки программирования (Domain-Specific Lanugages, DSL). Они драматически упрощают разработку и дают возможность “программировать” не только инжеренерам, но и пользователям прикладных программ. В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
В последнее время в промышленной разработке особую популярность обретают предметно-ориентированные языки программирования (Domain-Specific Lanugages, DSL). Они драматически упрощают разработку и дают возможность “программировать” не только инжеренерам, но и пользователям прикладных программ. В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
Как говорил один человек, нет данных — нет проблемы. Но проблема в том, что в современном мире данные есть, и их много . Ещё в современном мире очень любят данные отображать, например, на карте — только это не всегда хорошо получается.
Из доклада вы узнаете о типичных ошибках передачи данных на карту и простых способах этих ошибок избежать.
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
В докладе говорится о проектировании архитектуры API — начиная с того, о ком должен думать разработчик в начале работы, и до секретов «безболезненного» рефакторинга. От общей культуры формирования интерфейсов до правки багов и поддержки обратной совместимости. А также пара слов о документации — фасаде любого API.
34. DRY/DIE
Do not Repeat Yourself
Do not Repeat Yourself
Duplication Is Evil
Andy Warhal
35. S Single responsibility principle
O Open/closed principle
L Liskov substitution principle
I Interface segregation principle
D Dependency inversion principle
40. Dependency inversion principle
Модули верхних уровней не должны
зависеть от модулей нижних уровней.
Модули должны зависеть от абстракций.
Абстракции не должны зависеть от
деталей. Детали должны зависеть от
абстракций.
SOLID
41. Принципы - это тест
http://www.flickr.com/photos/jason_coleman/325107937/
42. Размер имеет значение
http://www.asergeev.com/pictures/archives/compress/2011/936/20s.htm
45. Сильная связность
GeoModule
Application
CountryFinder
+GetCountry()
Countries
GeoDataLayer
+LoadCountry()
public Country GetCountry( int id )
{
return geo.Countries.Finder.DataLayer.LoadCountry( id );
}
47. God class
http://www.nrk.no/kultur-og-underholdning/1.7321778
48. Закон Деметры
Метод М объекта О может обращаться:
• К самому объекту О
• К параметрам метода М
• К любому объекту, созданному методом М
• К методам и свойствам объекта О
• К глобальным переменным
49. Закон Деметры
Можно:
name = this.Name();
code = this.Phone.CountryCode; // Простой агрегат
Нельзя:
return geo.Countries.Finder.DataLayer.LoadCountry( id );
59. Observer
Subject <<interface>>
+observers IObserver
+Attach(o: IObserver) *
+Detach(o: IObserver) +Update()
+Notify()
ConcreteSubject ConcreteObserver
public void Notify() {
foreach( var o in observers)
o.Update();
}
60. Каталоги паттернов
• «Design patterns. Elements of Reusable
Object-Oriented Software»
• Portland Pattern Repository (c2.com/ppr/)
• PatternShare (www.patternshare.org)
• etc.
61. DDD
Domain Driven Design*
* Проблемно-ориентированное проектирование
62. Проблемная область
В каждом маленьком ребенке Каждый новенький ребенок
И мальчишке, и девчонке Вылезает из пеленок
Есть по двести грамм взрывчатки И теряется повсюду
Или даже полкило! И находится везде!
Должен он бежать и прыгать Он всегда куда-то мчится
Все хватать, ногами дрыгать, Он ужасно огорчится,
А иначе он взорвется, Если что-нибудь на свете
Трах-бабах – и нет его! Вдруг случится без него!