Дается математическое обоснование S.O.L.I.D принципов с помощью логики Хоара, из которого следует, что S.O.L.I.D верны не только для ООП, но и для статического полиморфизма, но и для императивного программирования вообще.
- Более детальный анализ алгоритма вычисления чисел Фибоначчи
- Определения O(⋅), преимущества и недостатки их использования для оценки времени работы алгоритмов
- Определения Ω(⋅),Θ(⋅),o(⋅), общие правила сравнения скорости роста стандартных функций
- Графики нескольких часто используемых функций
- Скорости часто используемых функций на практике, заключение
Дается математическое обоснование S.O.L.I.D принципов с помощью логики Хоара, из которого следует, что S.O.L.I.D верны не только для ООП, но и для статического полиморфизма, но и для императивного программирования вообще.
- Более детальный анализ алгоритма вычисления чисел Фибоначчи
- Определения O(⋅), преимущества и недостатки их использования для оценки времени работы алгоритмов
- Определения Ω(⋅),Θ(⋅),o(⋅), общие правила сравнения скорости роста стандартных функций
- Графики нескольких часто используемых функций
- Скорости часто используемых функций на практике, заключение
- Определение чисел Фибоначчи, скорость роста
- Общая формула, экспоненциальная скорость роста
- Наивный алгоритм и анализ его времени работы
- Более быстрый алгоритм и анализ его времени работы, заключение
Азбука информатики в загадках и ребусах. ФилвордАнатолий Мячев
Оригинальные числовые ребусы в области информатики для развития и тренировки логического и математического мышления.
А также креативности и компетентности при использовании калькулятора ребусов для создания и решения ребусов, в том числе с применением дополнительных условий и ограничений.
Нас окружает мир сетей, мобильных устройств, сайтов, облаков. Чтобы работать с этим миром, придумано невероятное количество технологий и языков программирования. Есть ли среди них место для языков Си/Си++? Стоит ли тратить время на их изучение, стоит ли использовать их в своих проектах? Не пора ли этим языкам на пенсию? Эти темы в своем докладе обсудит Андрей Карпов, активно участвующий в жизни сообщества Си++-программистов. Забегая вперед можно утверждать - языки Си/Си++ живее всех живых. Андрей расскажет о развитии языка и новых возможностях, появившихся в Си++11. Многие возможности существенно облегчают работу программиста и сокращают объем кода.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
- Определение чисел Фибоначчи, скорость роста
- Общая формула, экспоненциальная скорость роста
- Наивный алгоритм и анализ его времени работы
- Более быстрый алгоритм и анализ его времени работы, заключение
Азбука информатики в загадках и ребусах. ФилвордАнатолий Мячев
Оригинальные числовые ребусы в области информатики для развития и тренировки логического и математического мышления.
А также креативности и компетентности при использовании калькулятора ребусов для создания и решения ребусов, в том числе с применением дополнительных условий и ограничений.
Нас окружает мир сетей, мобильных устройств, сайтов, облаков. Чтобы работать с этим миром, придумано невероятное количество технологий и языков программирования. Есть ли среди них место для языков Си/Си++? Стоит ли тратить время на их изучение, стоит ли использовать их в своих проектах? Не пора ли этим языкам на пенсию? Эти темы в своем докладе обсудит Андрей Карпов, активно участвующий в жизни сообщества Си++-программистов. Забегая вперед можно утверждать - языки Си/Си++ живее всех живых. Андрей расскажет о развитии языка и новых возможностях, появившихся в Си++11. Многие возможности существенно облегчают работу программиста и сокращают объем кода.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический анализ: вокруг Java за 60 минутAndrey Karpov
Статический анализ всё больше воспринимается как неотъемлемая часть процесса разработки качественного программного обеспечения. Разумеется, у этой технологии уже есть свои сторонники и противники, но, несмотря на это, тема статического анализа всё более актуальна и требует детального рассмотрения. Рассмотрим, что такое статический анализ, как он применяется и как влияет на качество и надёжность кода. Поговорим о важности раннего обнаружения ошибок и дефектов уязвимости. Рассмотрим существующие инструменты для Java, такие как Sonar Java, FindBugs и анализатор встроенном в среду разработки IntelliJ IDEA. Расскажем историю, почему несмотря на уже существующие инструменты, мы решили разработать PVS-Studio для Java, как мы это делали и что в итоге получилось. В конце затронем вопрос интеграции статических анализаторов кода в большие старые проекты. Другими словами, как увидеть 100500 срабатываний и не упасть духом.
Generics were added to the Java language more than 10 year ago. But do you really understand them?
We’ll discuss:
What is heap pollution?
How does the compiler translate generics?
Why it’s not allowed to create parametrized array (List<string>[])
What are bridge methods, can we reach them?
Type erasure rules
Difference between List, List<object>, List<?>
Why it’s not allowed to add Integer to List<?>
Why it’s not allowed to parameterize exception classes?
What’s wrong with Collections.max signature: <t><?>> T max(Collection<?> coll);
Code that should be compiled, but can’t be compiled and vice versa
How to write good API using generics and wildcards
And other generic puzzlers
Николай Паламарчук "Functional Programming basics for PHP developers"Fwdays
Functional Programming becomes very popular nowadays. What is it? Is it a hype or panacea? Should you deal with it as a PHP programmer? Let's find out!
Алексей Чернигин — Магия метапрограммирования на примере Boost.GeometryYandex
Разрабатывая своё API, мы стараемся скрывать сторонние используемые библиотеки в реализации, чтобы не усложнять жизнь пользователям дополнительными зависимостями. Для этого приходится писать различные обёртки над библиотечными структурами данных и алгоритмами, делать внутри них конвертацию между форматами, согласовывать интерфейсы, создавать библиотечные объекты на основе наших собственных и выполнять другие избыточные действия. Благодаря своей шаблонной архитектуре библиотека Boost.Geometry способна работать с нашими структурами данных так же эффективно, как и со своими собственными, сводя накладные расходы на адаптацию к минимуму. Я расскажу о техниках современного метапрограммирования, которые используются в Boost.Geometry и делают возможной интеграцию алгоритмов этой библиотеки c нашими собственными структурами данных.
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
разработка серверов и серверных приложений лекция №3etyumentcev
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
2015 12-05 Александр Шиповалов - Инструмент для тестирования Sikuli scriptHappyDev
This document provides an overview of SikuliX, an automation tool that uses image recognition to control and interact with graphical user interfaces. It describes the main classes in SikuliX including App, Region, Screen, Offset, Math, Similarity, and Pattern. Methods for these classes are also outlined for performing actions like opening applications, finding regions on the screen, mouse and keyboard input, and image matching.
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...HappyDev
This document discusses common browser vulnerabilities that can allow hackers to access user data. It covers topics like cross-site scripting (XSS), cross-site request forgery (CSRF), unvalidated redirects, clickjacking, and cross-origin resource sharing (CORS) configuration issues. The document provides examples of how these vulnerabilities can be exploited, such as hijacking user sessions after login or changing user account details without consent. Proper validation of user input and access controls are necessary to prevent unauthorized access to user data and accounts.
2. Тюменцев Евгений
14 лет преподаю
ИМИТ, ФКН ОмГУ
ИТ-компании
Школа программиста
10 лет разрабатываю ПО
разработчик, архитектор
PM, в подчинении до 70 чел.
О себе
6. Что могут студенты?
Что было 4,5 с – время отклика
страницы
70 тыс. ошибок на 1 млн.
страниц
30 с - время поиска по тексту
объявления
БД более 200 таблиц
7. Что могут студенты?
Что стало
800 мс – время отклика
страницы
< 1 ош. на 10 тыс. страниц
Однушка в нефтах
Матрешка до 700 т.р.
11. Принцип подстановки Лисков
Функции, которые используют
ссылки на объекты базовых
классов, должны использовать
объекты производных классов,
ничего не зная о них.
14. Выводимость
Пусть L – множество формул, B – формула.
Тогда L B⊦ , если B∃ 1, B2, …, Bn , что
1.Bn – это B,
2.Bi – это
либо формула из L,
либо аксиома,
либо общезначимая
формула,
либо формула полученная
16. Об авторе
1969 г. An Axiomatic Basis for Computer
Programming
1971 г. Procedures and Parameters: An
Axiomatic Approach
1980 г. премия Тьюринга
1990 г. Медаль “Пионер компьютерной
техники”
2000 г. рыцарский титул за заслуги в
области образования и компьютерной
техники, премия Киото
Чарльз Хоар
28. Повторное использование кода — методология
проектирования компьютерных и других систем,
заключающаяся в том, что система (компьютерная
программа, программный модуль) частично либо
полностью должна составляться из частей, написанных
ранее компонентов и/или частей другой системы, и
эти компоненты должны применяться более одного
раза (если не в рамках одного проекта, то хотя бы
разных).
Повторное использование
https://ru.wikipedia.org/wiki/Повторное_использование_кода
29. А можно ли по-другому?
Выводимость прямо предписывает строить
новые тройки из предыдущих!
30. Когда происходит повторное
использование?
Если нужно внести изменение в
существующее приложение, то мы пытаемся
повторно использовать свой же собственный
код, чтобы получить тоже приложение, но с
новой функциональностью.
33. Матрицы
class matrix {
int size;
double *body;
public:
matrix(int s): size(s) {
body = new double[s*s];
}
void transform() {
…
}
double det() const {
…
}
};
34. Матрицы: добавляем matrix()
class matrix {
int size;
double *body;
public:
matrix(int s): size(s) {
body = new double[s*s];
}
void transform() {
…
}
double det() const {
…
}
};
class matrix {
public:
matrix(): size(0), body(0) {
}
};
35. Придется изменять методы
class matrix {
int size;
double *body;
public:
matrix(): size(0), body(0) {
}
matrix(int s): size(s) {
body = new double[s*s];
}
void transform() {
if(!body) throw exception();
…
}
double det() const {
if(!body) throw exception();
…
}
};
36. Что случилось
Инвариант класса matrix: size > 0
Конструктор matrix() нарушил инвариант: size = 0
Предусловия методов изменились с size > 0 на size ≥ 0, но
{size ≥ 0} det {Q} не выводится из {size > 0} det {Q}
Следовательно, надо изменять сами методы
37. Конструкторы по умолчанию
Конструктор должен устанавливать
инвариант класса
Конструкторы по умолчанию часто этого не
делают
Стоит несколько раз подумать, прежде чем
использовать конструктор по умолчанию
39. Нерассказанные факты об императивном
программировании
oopguide.ru
Разработка серверов и серверных
приложений
actorsmodel.ru
Мы пишем книги
40. с/к Разработка серверов и серверных
приложений (все желающие)
Студентам 2 курса ИМИТ: выполнение
курсовых работ
Принять участие в разработке библиотеки
для построения асинхронных,
высоконагруженных приложений
Приглашаю