Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Инструменты разные нужны, инструменты разные важныRoman Dvornov
В мире фронтенда уже существует большое количество инструментов: как браузерных, так и консольных. Но достаточно ли этих инструментов? Мне кажется, что нет. Веб-приложения становятся все больше и сложнее, и многое остается вне нашего поля зрения. Потому фреймворки и приложения должны предоставлять дополнительные инструменты, упрощающие разработку и улучшающие понимание того, что же происходит у них там — «под капотом». В ходе доклада я расскажу о таких инструментах: какими они могут быть, какие задачи могут решать, что необходимо для их создания.
CodeFest, Новосибирск, 28 марта 2015
http://www.youtube.com/watch?v=HMTc3DERw5c
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
С ростом кодовой базы становится все более очевидной необходимость использования компонентного подхода, когда каждая логическая часть обособлена. Если говорить про JavaScript, то в нем есть области видимости, опираясь на которые можно соорудить изолированные компоненты. Но в CSS нет подобных механизмов, поэтому и придумываются Shadow DOM (Web Components) и различные методики вроде БЭМ.
Но что если взглянуть на проблему под другим углом? Адаптируя подходы, что уже используются для других задач, можно получить куда больше выгоды, чем просто изолированные стили!
FrontendConf, Москва, 21 мая 2015
WSD, Санкт-Петербург, 20 июня 2015
Запись трансляции: https://youtu.be/V7bnSOwuO4M?t=1h31m33s
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Инструменты разные нужны, инструменты разные важныRoman Dvornov
В мире фронтенда уже существует большое количество инструментов: как браузерных, так и консольных. Но достаточно ли этих инструментов? Мне кажется, что нет. Веб-приложения становятся все больше и сложнее, и многое остается вне нашего поля зрения. Потому фреймворки и приложения должны предоставлять дополнительные инструменты, упрощающие разработку и улучшающие понимание того, что же происходит у них там — «под капотом». В ходе доклада я расскажу о таких инструментах: какими они могут быть, какие задачи могут решать, что необходимо для их создания.
CodeFest, Новосибирск, 28 марта 2015
http://www.youtube.com/watch?v=HMTc3DERw5c
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
С ростом кодовой базы становится все более очевидной необходимость использования компонентного подхода, когда каждая логическая часть обособлена. Если говорить про JavaScript, то в нем есть области видимости, опираясь на которые можно соорудить изолированные компоненты. Но в CSS нет подобных механизмов, поэтому и придумываются Shadow DOM (Web Components) и различные методики вроде БЭМ.
Но что если взглянуть на проблему под другим углом? Адаптируя подходы, что уже используются для других задач, можно получить куда больше выгоды, чем просто изолированные стили!
FrontendConf, Москва, 21 мая 2015
WSD, Санкт-Петербург, 20 июня 2015
Запись трансляции: https://youtu.be/V7bnSOwuO4M?t=1h31m33s
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
При разработке интерфейсов для API, неизбежно сталкиваешься с несколькими проблемами. Во-первых, мы не знаем заранее, как будет выглядеть сервис или сайт со встроенными Картами. Важно обеспечить его будущим пользователям наилучший результат — даже если у разработчиков, использующих наш API, вообще нет в команде дизайнера. Во-вторых, проблемы могут возникнуть при адаптации дизайна для разных устройств и размеров экранов. В докладе мы поговорим о том, как и с помощью чего делаются прототипы, и зачем они нужны разработчикам и дизайнерам. А самое главное, разберёмся с адаптивным поведением элементов управления картой, рассмотрим схему работы менеджера контролов. Также мы кратко обсудим другие варианты реализации этого механизма и объясним, почему они не подошли нам.
Модули threading, queue и concurrent.futures. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль asyncio. Модуль multiprocessing.
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
И снова встроенные коллекции: кортеж, список, множество, словарь - обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
В докладе говорится о проектировании архитектуры API — начиная с того, о ком должен думать разработчик в начале работы, и до секретов «безболезненного» рефакторинга. От общей культуры формирования интерфейсов до правки багов и поддержки обратной совместимости. А также пара слов о документации — фасаде любого API.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
При разработке интерфейсов для API, неизбежно сталкиваешься с несколькими проблемами. Во-первых, мы не знаем заранее, как будет выглядеть сервис или сайт со встроенными Картами. Важно обеспечить его будущим пользователям наилучший результат — даже если у разработчиков, использующих наш API, вообще нет в команде дизайнера. Во-вторых, проблемы могут возникнуть при адаптации дизайна для разных устройств и размеров экранов. В докладе мы поговорим о том, как и с помощью чего делаются прототипы, и зачем они нужны разработчикам и дизайнерам. А самое главное, разберёмся с адаптивным поведением элементов управления картой, рассмотрим схему работы менеджера контролов. Также мы кратко обсудим другие варианты реализации этого механизма и объясним, почему они не подошли нам.
Модули threading, queue и concurrent.futures. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль asyncio. Модуль multiprocessing.
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
И снова встроенные коллекции: кортеж, список, множество, словарь - обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
В докладе говорится о проектировании архитектуры API — начиная с того, о ком должен думать разработчик в начале работы, и до секретов «безболезненного» рефакторинга. От общей культуры формирования интерфейсов до правки багов и поддержки обратной совместимости. А также пара слов о документации — фасаде любого API.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Видео: https://www.youtube.com/watch?v=IUtbbN9aevU
Веб-приложения становятся все больше и сложнее, так что многое остается вне нашего поля зрения. Поэтому фреймворки и приложения должны предоставлять дополнительные инструменты, упрощающие разработку и понимание того, что же происходит у них там — «под капотом». В ходе доклада я расскажу о таких инструментах: какими они могут быть, какие задачи решать, что необходимо для их создания.
SPA Meetup, 28 февраля 2015, Москва, Авито
Семинар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Mail.ru Group
Дмитрий рассказал о преимуществах, недостатках и основных сценариях использования нативного кода при написании кроссплатформенных приложений. Спикер рассказывает о разнообразных подводных камнях, которые неизбежно возникают при работе с NDK, и показывает интересные хаки и неочевидные возможности решения возникающих проблем.
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
3. Разработка под iOS
• Инструменты
• Основные типы данных
• Управление памятью
• UIKit (UIView + UIViewController + UI..)
∞
• Жизненный цикл приложения
• Фундаментальные шаблоны в iOS
6. Xcode
• Основная среда разработки
• Обновляется не особо часто
• Желателен большой экран
• Последняя версия Xcode 4.2.1 (4.3b)
• Развивается в странную сторону ;)
• Есть альтернативы, но они не могут
полностью заменить Xcode
8. Interface Builder
• WYSIWYG редактор в Xcode
• Позволяет делать быстрое
прототипирование
• Встроен в Xcode
• Позволяет отвязать представление от
кода
• Желателен большой экран
• В паре с Xcode использует много
памяти
10. iOS Simulator
• Незаменим для разработки
• Использует ресурсы компьютера
• Позволяет эмулировать различные
внешние воздействия
• И все же, не физическое устройство
12. Instruments
• Показывют события приложения
• Загрузка CPU, Объем памяти, Сетевая
Активность, Утечки памяти, Расход
батареи, UI Automation
• И многое многое другое
• Помогает там, где другие инструменты
бессильны
14. Типы данных
• Ну ооочень много
• Типы данных из C никуда не делись
• Есть и Objective-C (просто typedef)
int NSInteger
float NSUInteger
bool CGFloat
double ...
char
...
15. Структуры
Только базовые, которые понадобятся при
разработке
CGPoint // x,y
CGSize // width, height
CGRect // origin(CGPoint)
// size(CGSize)
UIEdgeInsets // top, left, bottom, right
16. Структуры
Для структур - чаще всего есть целая туча
C-функций
CGPointMake(CGFloat x, CGFloat y)
CGSizeMake(CGFloat width, CGFloat height)
CGRectMake( ... )
CGRectContainsPoint( ... )
CGRectIntersection( ... )
CGRectInset( ... )
34. Методы или
селекторы?
SEL sel = @selector(addObject:);
NSMutableArray * arr =
[NSMutable array];
[arr performSelector:sel
withObject:@"Cool"];
[arr addObject:@"Cool"];
35. Методы или
селекторы?
Селектор - это просто имя
SEL sel = @selector(addObject:);
Его можно создать на этапе выполнения
SEL sel =
NSSelectorFromString(@"addObject:");
36. Методы или
селекторы?
Метод - это скомпилированный код
- (void)myCoolMethod:(id)params {
NSLog(@"Hell'O World");
}
Чаще всего название метода и селектор, при
помощи которого он вызывается, совпадают
37. Методы или
селекторы?
Метод всегда знает про селектор, при
помощи которого он был вызван
- (void)myCoolMethod:(id)params {
// Почти всегда
// Здесь будет выведено
// myCoolMethod:
NSLog(NSStringFromSelector(_cmd));
}
38. Методы или
селекторы?
Если нету никакого контекста, то можно
для простоты считать, что
Метод == Селектор
50. Работа с памятью
Это просто!
releas autoreleas
retain e e
alloc
copy new
deallo
c
51. Работа с памятью
• Объект живет, если на него есть хоть
одна ссылка
• На каждый объект может быть
несколько ссылок
• Как только количество ссылок на
объект равно нулю, он удаляется из
памяти
52. Работа с памятью
Жизнь замечательных объектов
alloc
Создание
в ручном режиме
new
53. Работа с памятью
Жизнь замечательных объектов
alloc release
Жизнь
autorele
retain
ase
new
copy
54. Работа с памятью
Жизнь замечательных объектов
alloc release
dealloc
autorele
retain
ase
new
Уничтожение
copy
"автоматически"
55. Работа с памятью
Жизнь замечательных объектов
Вызывать метод dealloc в ручную,
нельзя!
Если вы, все же, это сделали, то
перечитайте еще раз Memory
Management.
56. Работа с памятью
Жизнь замечательных объектов
Метод Изменение Количество
alloc +1 1
new +1 1
copy +1* ∞
retain +1 ∞
release -1 ∞
autorelease -1* ∞
dealloc 0 1
57. Работа с памятью
Создание
Метод Изменение Количество
alloc +1 1
new +1 1
copy +1* ∞
retain +1 ∞
release -1 ∞
autorelease -1* ∞
dealloc 0 1
58. Работа с памятью
Жизнь
Метод Изменение Количество
alloc +1 1
new +1 1
copy +1* ∞
retain +1 ∞
release -1 ∞
autorelease -1* ∞
dealloc 0 1
59. Работа с памятью
Жизнь замечательных объектов
Метод Изменение Количество
alloc +1 1
new +1 1
copy +1* ∞
retain +1 ∞
release -1 ∞
autorelease -1* ∞
dealloc 0 1
60. Работа с памятью
Жизнь замечательных объектов
Балансируем вызовы методов, которые
увеличивают количество ссылок, и
уменьшают их.
+1+1+1-1-1+1-1-1+1-1 = 0
62. Работа с памятью
Жизнь замечательных объектов
Если все делаем правильно, то у нас
всегда будет хватать памяти
63. Работа с памятью
Жизнь замечательных объектов
Не вызывать методов - тоже баланс :)
- (void)setWindow:(UIWindow*)w {
if (w != nil) {
_window = w;
} else {
NSLog(@"Не-не-не, Д.Б.!");
}
}
64. Работа с памятью
Жизнь замечательных объектов
А теперь по честному
- (void)setWindow:(UIWindow*)w {
[_window autorelease];
_window = [w retain];
}
65. Работа с памятью
Жизнь замечательных объектов
А теперь по честному
- (void)setWindow:(UIWindow*)w {
[_window autorelease];
_window = [w retain];
}
- (void)dealloc {
[_window release];
[super dealloc];
}
66. Работа с памятью
Жизнь замечательных объектов
И еще один пример
UIView * v =
[[[UIView alloc] init] autorelease];
UIView * v2 = [[UIView alloc] init];
[v addSubView:v2];
[v2 release];
67. Работа с памятью
Жизнь замечательных объектов
И еще один пример
UIView * v =
[[[UIView alloc] init] autorelease];
UIView * v2 = [[UIView alloc] init];
[v addSubView:v2];
[v2 release];
// Жив ли здесь v2 ?
71. Automacic Reference
Counting
• Позволяет избавиться от лишнего кода
• Меньше кода - больше разработки ;)
• Избавляет от головной боли
• Добавляет зубную боль ;)
http://longweekendmobile.com/2011/09/07/objc-
automatic-reference-counting-in-xcode-explained/
77. UIView
• Все, что отображено на экране
наследуется от UIView
• Каждый view может быть контейнером
для других view
• addSubview:
• removeFromSuperview
84. UIViewController
Основные задачи
• Загрузка (и выгрузка) вьюх
• Связь вьюх и модели
• Управление UI приложения
• Реагирование на изменение
ориентации экрана
• Реагирование на memory warnings