Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
Доклад рассматривает тонкости nodejs, а так же преимущества Evented I/O для серверных приложений. Будет предоставлен ряд рекоммендаций по правильному построению архитектуры, модульности, масштабированию, дизайну кода. Краткое введение в технологию программирования "волокнами" (fibers) и ряд других эффективных практик.
В помощь разработчику: мини-анализатор кодаAndrey Karpov
В процессе разработки проекта часто можно столкнуться с одинаковыми паттернами ошибок. Своими или коллег по команде. Думаете, невозможно автоматизировать проверку этих паттернов?
Объекты в ECMAScript | Odessa Frontend Meetup #16OdessaFrontend
Обычно мы задаем объекты литерально, через пару фигурных скобок. С их помощью мы можем моделировать окружающую нас действительность и описывать её в коде. А чем лучше мы знаем этот инструмент, тем более удивительные вещи мы можем творить с его помощью. Барабанов Дмитрий рассматривает объект с точки зрения спецификации EcmaScript. Это дает новую информацию к размышлению: а почему те или иные вещи работают именно таким образом в JavaScript?
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
Доклад рассматривает тонкости nodejs, а так же преимущества Evented I/O для серверных приложений. Будет предоставлен ряд рекоммендаций по правильному построению архитектуры, модульности, масштабированию, дизайну кода. Краткое введение в технологию программирования "волокнами" (fibers) и ряд других эффективных практик.
В помощь разработчику: мини-анализатор кодаAndrey Karpov
В процессе разработки проекта часто можно столкнуться с одинаковыми паттернами ошибок. Своими или коллег по команде. Думаете, невозможно автоматизировать проверку этих паттернов?
Объекты в ECMAScript | Odessa Frontend Meetup #16OdessaFrontend
Обычно мы задаем объекты литерально, через пару фигурных скобок. С их помощью мы можем моделировать окружающую нас действительность и описывать её в коде. А чем лучше мы знаем этот инструмент, тем более удивительные вещи мы можем творить с его помощью. Барабанов Дмитрий рассматривает объект с точки зрения спецификации EcmaScript. Это дает новую информацию к размышлению: а почему те или иные вещи работают именно таким образом в JavaScript?
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Introduction to new technologies present in MySQL which enable developing next gen applications. Technologies like JSON and document store, or microservices. Slides in Russian
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
В MySQL 5.7 появился целый ряд новых возможностей, позволяющих использовать MySQL в приложениях и как хранилище JSON-документов, и как реляционную базу данных.
В этом докладе мы расскажем о поддержке JSON в MySQL 5.7, а также поговорим о том, когда имеет смысл её использовать, и насколько хорошо она работает. Кроме того, мы остановимся на новом протоколе доступа к MySQL, поддерживающем SQL. Помимо этого, мы рассмотрим CRUD-операции и такие дополнительные функции, как асинхронная коммуникация и пайплайнинг (pipelining).
В заключительной части доклада мы расскажем о возможностях MySQL 5.7 в качестве хранилища документов.
Михаил Головко рассказал о принципах устройства и основных возможностях YapDatabase.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Рarse'им бэкенд
Аким Халилов
Вы хотите выучить Backbone? Хотите просто писать клиентский код, не думая о сервере и о том, как все обрабатывать, хранить, бэкапить? Выход есть – храните с помощью Parse. Parse – платформа, которая предоставляет возможность хранения данных без забот о сервере. Хранилище данных, соц. сети, push-notification, cloud code. Что такое Parse и что он умеет, о библиотеке для использования:
- знакомство с JS API и примеры использования;
- начинаем кодить: stub-проект;
- кодим фичи: CRUD + плюшки;
- хостим.
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
3. Возможности
Views - Доступ к базе в стиле UITableViewDatasource и
анимация изменений
Secondary Indexes - Поиск объектов в стиле SQL
Full Text Search - Полнотекстовый поиск на базе FTS модуля
SQLite
Relationships - Механизм, похожий на deletion rules в CoreData
CloudKit - Интеграция с CloudKit (beta)
Whole Database Encryption - Обеспечивается SQLCipher
6. collection key data metadata
movies movie_56757 BLOB BLOB
actors actor_546 BLOB BLOB
genres genre_13 BLOB BLOB
movies movie_95456 BLOB BLOB
Схема данных хранилища
Составной primary key - collection, key
7. @{
@"collection_1": @{
@"key1": @[object, metadata],
@"key2": @[object, metadata],
//...
},
@"collection_2": @{
@"key1": @[object, metadata],
@"key2": @[object, metadata],
//...
}
//...
};
Структура хранилища в виде NSDictionary
8. Основные понятия
База данных - YapDatabase
Подключение - YapDatabaseConnection
Транзакция - YapDatabaseTransaction
9. YapDatabase *database = [[YapDatabase alloc] initWithPath:@"yap_db.sqlite"];
База данных (YapDatabase)
Только один экземпляр YapDatabase может иметь доступ к файлу базы.
10. YapDatabaseConnection *connection = [database newConnection];
Подключение (YapDatabaseConnection)
У одной базы данных может быть несколько подключений.
11. Транзакции
Два основных типа транзакций: YapDatabaseReadTransaction и
YapDatabaseReadWriteTransaction
SQLite транзакции + механизм snaphot & changeset
Полностью соотвествуют ACID
12. Snapshot & Changeset
Snapshot - 64-битное число, которое инкрементируется после
завершения каждой транзакции записи
Changeset - Структура даных, описывающая изменения,
произошедшие в транзакции
13. Потокобезопасность и
параллелизм
Доступ к подключениям может осуществляться из любого
потока. Потокопезопасность возвращаемых объектов не
обеспечивается базой данных.
Каждое подключение имеет свою последовательную очередь
База данных имеет глобальную последовательную очередь
для синхронизации записи
Транзакции чтения могут выполнятся параллельно
Транзакции записи выполняются последовательно и
блокируют транзакции чтения
14. //YapDatabaseReadTransaction - могут быть использованы только для чтения
[connection readWithBlock:^(YapDatabaseReadTransaction *transaction){
object1 = [transaction objectForKey:object1Key
inCollection:collection];
object2 = [transaction objectForKey:object2Key
inCollection:collection];
}];
//YapDatabaseReadWriteTransaction - могут быть использованы для чтения и записи
[connection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction){
object = [transaction objectForKey:objectKey
inCollection:collection];
[transaction setObject:newObject
forKey:newObjectKey inCollection:collection];
[transaction replaceObject:updatedObject
forKey:updatedObjectKey inCollection:collection];
[transaction removeObjectForKey:removedObjectKey inCollection:collection];
}];
CRUD
17. Возможности сериализации
Хранение сущностей сетевой модели данных
Большой выбор сериализаторов - Mantle, JSONModel,
Protobuf, Thrift, Fastcoding, etc
Сжатие - lz4, Snappy
Выборочное шифрование записей
18. Кэширование
Каждое подключение имеет отдельные LRU кэши объектов и
метаданных
Размеры кэшей могут быть настроены в процессе выполнения
Несколько политик кэширования
19. Политики кэширования
YapDatabasePolicyContainment - политика по умолчанию
YapDatabasePolicyCopy - требует от объектов поддержки
NSCopying
YapDatabasePolicyShare
Политики настраиваются раздельно для объектов и метаданных
24. YapDatabaseViewGrouping *grouping = nil;
YapDatabaseViewSorting *sotring = nil;
grouping = [YapDatabaseViewGrouping withRowBlock:groupingBlock];
sotring = [YapDatabaseViewSorting withRowBlock:sortingBlock];
YapDatabaseView *myView = [[YapDatabaseView alloc] initWithGrouping:grouping
sorting:sotring];
Создание и регистрация
Каждое View содержит блок фильтрации/группировки и блок
сортировки.
25. groupingBlock = ^NSString *(NSString *collection, NSString *key,
id object, id metadata){
if ([object isKindOfClass:[Book class]])
return @"books";
if ([object isKindOfClass:[Magazine class]])
return @"magazines";
return nil; // exclude from view
};
sortingBlock = ^NSComparisonResult (NSString *group,
NSString *collection1, NSString *key1,
id obj1, id meta1,
NSString *collection2, NSString *key2,
id obj2, id meta2){
if ([group isEqualToString:@"books"])
return [obj1 compareBookByTitleThenAuthor:obj2];
else
return [obj1 compareMagazineByMonthThenTitle:obj2];
};
Пример блоков группировки и сортировки
Существует несколько типов блоков. Отличаются они только набором
параметров, передающихся внутрь блока.
26. __block id objectForRow = nil;
[connection readWithBlock:^(YapDatabaseReadTransaction *transaction){
objectForRow = [[transaction ext:@"myViewName"] objectAtIndex:indexPath.row
inGroup:@"books"];
}];
//Некоторые другие методы View
(NSUInteger)numberOfGroups;
(NSArray *)allGroups;
(NSUInteger)numberOfItemsInGroup:(NSString *)group;
(NSUInteger)numberOfItemsInAllGroups;
(id)objectAtIndex:(NSUInteger)keyIndex inGroup:(NSString *)group;
Пример использования View
31. - (void)yapDatabaseModified:(NSNotification *)notification
{
NSArray *notifications = [connection beginLongLivedReadTransaction];
NSArray *sectionChanges = nil, *rowChanges = nil;
[[connection ext:@"movies"] getSectionChanges:§ionChanges
rowChanges:&rowChanges
forNotifications:notifications
withMappings:mappings];
if ([sectionChanges count] == 0 & [rowChanges count] == 0){
// Nothing has changed that affects our tableView
return;
}
// Animate tableView updates ...
}
Как YapDatabaseViewMappings помогают
анимировать таблицы?
Результатом будет массив изменений секций и ячеек, которые относятся
к указанному View c применением указанного mapping-a. На их основе
уже можно легко анимировать таблицы и коллекции.
32. Типы Mapping-ов
Статические - набор отображаемых групп и их порядок
определяется в момент создания
Динамические - при создании указываются блоки,
определяющие видимость групп и способ их сортировки
33. //Статический мапинг
staticMappings = [YapDatabaseViewMappings mappingsWithGroups:@[ @"bond movies",
@"batman movies" ]
view:@"movies"];
//Можно инвертировать порядок сортировки элементов в группе
[staticMappings setIsReversed:YES forGroup:@"bond movies"];
//Динамический мапинг
YapDatabaseViewMappingGroupFilter filterBlock = nil;
YapDatabaseViewMappingGroupSort sortBlock = nil;
filterBlock = ^(NSString *group, YapDatabaseReadTransaction *transaction){
return YES; // include all movies groups
};
sortBlock = ^(NSString *group1, NSString *group2,
YapDatabaseReadTransaction *transaction){
return [group1 compare:group2]; // sorted by movie group name
};
dynamicMappings = [[YapDatabaseViewMappings alloc] initWithGroupFilterBlock:filterBlock
sortBlock:sortBlock
view:@"movies"];
Создание Mapping-ов
34. Дополнительные возможности
Динамические секции - если в секции нет записей, она не
отображается
Статические диапазоны - аналог LIMIT & OFFSET в SQLite
Динамические диапазоны
Зависимость ячеек - для соседних ячеек могут быть
автоматически сгенерированы события, даже если связанный
с ячейкой объект не изменился