Все потоки
Поиск
Написать публикацию
Обновить
1109.84

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Синхронизация структуры базы данных между приложениями

Время на прочтение9 мин
Количество просмотров11K

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

Чаще всего используется простой подход — создание набора SQL-скриптов для модификации структуры БД от версии к версии. Конечно, есть такой мощный инструмент, как Red gate, но он во-первых небесплатный, во-вторых не решает проблему полной автоматизации обновления.


Технология migrations, впервые появившаяся в ОРМ Hibernate и реализованная в Linq, очень хороша и удобна, но подразумевает стратегию разработки структуры БД code first, что весьма трудоемко для уже существующих проектов, а использование в БД триггеров, хранимых процедур и функций делает задачу перехода на code first практически невыполнимой.


В данной статье предлагается альтернативный подход к решению этой задачи, использующий хранение эталонной структуры БД в XML-файле и автоматическую генерацию SQL-скрипта на основе сравнения эталонной и существующей структуры. Итак, начнем...

Читать дальше →

Как обучать вычислительному мышлению?

Время на прочтение35 мин
Количество просмотров22K

Перевод поста Стивена Вольфрама (Stephen Wolfram) "How to Teach Computational Thinking".
Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации



Содержание


Вычислительное будущее
Что такое вычислительное мышление?
Знакомство с Wolfram Language
А что насчет…
Основы
Куда может вписаться вычислительное мышление?
Что дети могут делать?
Во главе с детьми
Что такое вычисления и программирование?
Как все это будет происходить?


Вычислительное будущее


Вычислительное мышление станет определяющей характеристикой будущего, и именно поэтому так важно преподавать его детям уже сейчас. Вокруг формирования математического мышления у детей традиционно ведется много споров, однако эта проблема меркнет в сравнении с важностью обучения вычислительному мышлению.

Поиск по дереву методом Монте-Карло и крестики-нолики

Время на прочтение4 мин
Количество просмотров18K

Так вышло, что для получение автомата по программированию бедным первокурам задали одну интересную задачу: написать программу, которая ищет по дереву методом Монте-Карло.


Читать дальше →

Kotlin, компиляция в байткод и производительность (часть 2)

Время на прочтение11 мин
Количество просмотров26K


Это продолжение публикации. Первую часть можно посмотреть тут

Содержание:


Циклы
When
Делегаты
Object и companion object
lateinit свойства
coroutines
Выводы
Читать дальше →

Kotlin, компиляция в байткод и производительность (часть 1)

Время на прочтение12 мин
Количество просмотров36K


О Kotlin последнее время уже очень много сказано (особенно в совокупности с последними новостями c Google IO 17), но в то же время не очень много такой нужной информации, во что же компилируется Kotlin.
Давайте подробнее рассмотрим на примере компиляции в байткод JVM.

Это первая часть публикации. Вторую можно посмотреть тут

Процесс компиляции это довольно обширная тема и чтобы лучше раскрыть все ее нюансы я взял большую часть примеров компиляции из выступления Дмитрия Жемерова: Caught in the Act: Kotlin Bytecode Generation and Runtime Performance. Из этого же выступления взяты все бенчмарки. Помимо ознакомления с публикацией, настоятельно рекомендую вам еще и посмотреть его выступление. Некоторые вещи там рассказаны более подробно. Я же больше внимания акцентирую именно на компиляции языка.

Содержание:


Функции на уровне файла
Primary конструкторы
data классы
Свойства в теле класса
Not-null типы в публичных и приватных методах
Функции расширения (extension functions)
Тела методов в интерфейсах
Аргументы по умолчанию
Лямбды

Но прежде чем рассмотрим основные конструкции языка и то, в какой байткод они компилируются, нужно упомянуть о том, как непосредственно происходит сама компиляция языка:
Читать дальше →

Выпуск#3: ITренировка — актуальные вопросы и задачи от ведущих компаний

Время на прочтение2 мин
Количество просмотров3.9K
Эту неделю завершаем подборкой задач и вопросов, которые часто дают на собеседованиях в Facebook. Задачи выбрали разных уровней сложности от «Easy» до «Hard». Условие снова оставили на английском языке. Варианты решений прикрепим в комментарии через неделю. Good luck!

Вопросы:

1. Вы хотите запустить анимацию через полсекунды после нажатия пользователем кнопки. Какой способ сделать это будет лучшим?

2. Приложение для обмена фотографиями отображает системное уведомление, когда пользователь получает фотографию. Ваше приложение должно отображать фотографию, когда пользователь удаляет уведомление. Какое из следующих действий вам необходимо связать с объектом Notification, который вы передаете в Notification Manager?
Читать дальше →

Открытая трансляция из главного зала конференции HolyJS 2017 Piter: Douglas Crockford, Lea Verou и еще кое-кто

Время на прочтение4 мин
Количество просмотров6.6K
Мы продолжаем делиться открытыми трансляциями для желающих принять субботний поток силы! Ранее мы уже открывали трансляции с конференций DotNext 2017 Piter, Mobius 2017 Piter и JPoint 2017 (сейчас доступ к ней закрыт). В этот раз источник силы будет подпитывать JavaScript-разработчиков.

3 июня 2017 в 10 утра (по московскому времени) начнется бесплатная онлайн-трансляция из главного зала HolyJS 2017 Piter!



Первый трек (проходит в главном зале) – самый большой и популярный среди наших участников. Во второй день конференции в первом треке выступят:

  • Алексей Золотых — ES2017 vs Typescript vs Dart. Сравниваем без эмоций
  • Douglas Crockford — Goto There and Back Again
  • Anjana Vakil — Functional Programming in JS: What? Why? How?
  • Алексей Иванов — Внутреннее устройство бандла webpack
  • Владимир Гриненко — Зависимости в компонентном вебе, сделанные правильно
  • Lea Verou — JS UX: Writing code for humans

Помимо этого, с 10 утра и в перерывах между докладами вы сможете посмотреть live-интервью со спикерами и участниками конференции. Не переключайтесь!

Ссылка на трансляцию и подробную программу – под катом.
Читать дальше →

Да, Python медленный, но меня это не волнует

Время на прочтение9 мин
Количество просмотров77K
Разговоры о снижении производительности ради продуктивности.


Я беру паузу в моём обсуждении asyncio в Python, чтобы поговорить о скорости Python. Позвольте представиться, я — ярый поклонник Python, и использую его везде, где только удаётся. Одна из причин, почему люди выступают против этого языка, — то, что он медленный. Некоторые отказываются даже попробовать на нём поработать лишь из-за того, что «X быстрее». Вот мои мысли на этот счёт.
Читать дальше →

Именованные кортежи. Пишем код на Python чище

Время на прочтение6 мин
Количество просмотров133K

В стандартной библиотеке питона содержится специализированный тип "namedtuple", который, кажется, не получает того внимания, которое он заслуживает. Это одна из прекрасных фич в питоне, которая скрыта с первого взгляда.



Именованные кортежи могут быть отличной альтернативой определению классов и они имеют некоторые другие интересные особенности, которые я хочу показать вам в этой статье.

Читать дальше →

Понимание Array.prototype.reduce() и рекурсии на примере яблочного пирога

Время на прочтение4 мин
Количество просмотров21K
У меня были проблемы с пониманием reduce( ) и рекурсии в JavaScript, так что я написал эту статью чтобы объяснить их в первую очередь себе (эй, смотрите, это же рекурсия!). Эти концепции имеют некоторые сходства с приготовлением яблочного пирога. Я очень надеюсь вы сочтёте мои примеры как полезными так и аппетитными.
image
Читать дальше →

Новые «плюшки» компилятора – безопасней, быстрее, совершеннее

Время на прочтение7 мин
Количество просмотров9K

Как говорилось во всеми нами любимом фильме: «Налетай, торопись, покупай живопись». Последняя, конечно, тут ни при чем, а вот «налетать» на новую Бета версию компилятора уже пора. Сегодня я расскажу о том, что нового появилось в пакете Intel Parallel Studio XE 2018 Beta, и в частности, в компиляторной её составляющей. А там действительно много что добавилось, ведь стандарты не стоят на месте — C++14, C++17, Fortran 2008, 2015, OpenMP 4.5 и 5.0, а компилятор должен не только их поддерживать, но и генерировать совершенный, производительный и безопасный код. Кроме этого, новые наборы инструкций AVX512, позволяющие «снимать сливки» с последних процессоров Skylake и KNL, всё больше входят в арсенал современных компиляторов. Но а самое вкусное — новые ключи, которые позволяют получить ещё больше производительности «не напрягаясь». Итак, поехали!
Читать дальше →

Создание софтверного движка 2.5D

Время на прочтение11 мин
Количество просмотров24K
В настоящее время интерес к софтверным движкам, как из игр Quake, DOOM или Duke Nukem 3D практически нулевой. Однако, эти движки имели своё очарование и мне, например, очень нравится графика именно таких вот движков с нереалистичными текстурами на стенах. Конечно, такие текстуры можно накладывать без фильтрации и в OpenGL, получая такой же уровень графики, но всё же, написать собственный софтверный движок было весьма интересно. Движок уровня Quake я написать в своё время не смог, так как не удалось создать редактор 3D карты – я просто не представлял, как вообще рисовать в 3D карту. Да и с большой вероятность текстурирование в произвольном случае в моём исполнении (без ассемблера) было бы очень медленно. Но движок уровня DOOM мне покорился. Основу такого движка я написал в 2002 году, пользуясь книжкой Шикина и Борескова “Компьютерная графика. Полигональные модели”. На базе того движка используя графику из Doom я написал некое подобие игры под MS-DOS на Watcom C. Несколько лет назад я решил вынуть из той игры код движка и переработать его под мои текущие знания языка Си++ и представления о том, как стоило бы устроить этот движок. Ну и заодно перенести этот движок под Windows и дополнить наклонами головы, как в Blood или Duke Nukem. О том, что в результате получилось, я и написал в этой статье.
Читать дальше →

Как поменьше беспокоиться о собственной бездарности

Время на прочтение7 мин
Количество просмотров86K

Только что я столкнулся с еще одним проявлением синдрома самозванца: «Я правда разработчик — или просто хорошо гуглю?»

Далее следовал ответ, в котором я, однако, не увидел главного — поэтому ответить придется мне: слишком уж многие боятся без каких-либо оснований.

Переведено в Alconost

Если информацию легко найти, это не делает человека глупым


Частенько мне доводится слышать одну историю — полагаю, подлинность ее сомнительна, но, как бы там ни было, суть такова. Когда у Эйнштейна попросили номер телефона, он полез его искать и сказал: «Зачем запоминать то, что можно найти менее чем за две минуты?»

Читать дальше →

Ближайшие события

Странности Generic типов Java

Время на прочтение3 мин
Количество просмотров48K

Я множество раз слышал о том, что дизайн Generic типов в Java является неудачным. По большей части претензии сводятся к отсутствию поддержки примитивных типов (которую планируют добавить) и к стиранию типов, а конкретнее — невозможности получить фактический тип параметра в рантайме. Лично я не считаю стирание типов проблемой, как и дизайн Generic-ов плохим. Но есть моменты, которые меня порядком раздражают, но при этом не так часто упоминаются.


1


Например, мы знаем, что метод Class#getAnnotation параметризован и имеет следующую сигнатуру: public <A extends Annotation> A getAnnotation(Class<A> annotationClass). Значит, можно писать вот такой код:


Deprecated d = Object.class.getAnnotation(Deprecated.class);

Тут я решаю вынести Object.class в отдельную переменную и код перестаёт компилироваться:


Class clazz = Object.class;
// incompatible types:
// java.lang.annotation.Annotation cannot be converted to java.lang.Deprecated
Deprecated d = clazz.getAnnotation(Deprecated.class);

Где я ошибся?

Читать дальше →

Обзор изменений в новом мажорном релизе Node 8

Время на прочтение4 мин
Количество просмотров23K

30 мая 2017 года в 23:00 по московскому времени вышел новый долгожданный мажорный релиз Node.js 8.0.0. Именно эта линейка версий за номером 8 в октябре 2017 перейдет в Long Term Support — цикл длительной поддержки. Предлагаю вашему вниманию небольшой обзор того огромного количества изменений и дополнений, вошедших в этот релиз.


  • npm 5 (lock-файл!)
  • V8 5.8
  • Node.js API (N-API)
  • async_hooks
  • WHATWG URL парсер
  • повышение безопасности буфера
  • упрощенная промисификация
  • статичные коды ошибок
  • и многое другое!
Читать дальше →

Must see: видеозаписи митапа MoscowJS 37

Время на прочтение1 мин
Количество просмотров9.1K
image

В четверг, 25 мая, в офисе Avito прошла очередная встреча сообщества фронтенд-разработчиков MoscowJS. Обсуждали отладку анимации, создание WebGL визуализации, сборку webpack’ом и код-ревью. Сегодня публикуем видеозаписи докладов — профессионалам будет интересно. Приятного просмотра!

Сравнение Эльбрус-4С и Эльбрус-8С в нескольких задачах машинного зрения

Время на прочтение9 мин
Количество просмотров46K

В этой статье мы покажем, как работают технологии распознавания образов на Эльбрус-4С и на новом Эльбрус-8С: рассмотрим несколько задач машинного зрения, немного расскажем об алгоритмах их решения, приведем результаты бенчмаркинга и наконец покажем видео.



Эльбрус-8С — новый 8-ядерный процессор МЦСТ с VLIW-архитектурой. Мы тестировали инженерный образец с частотой 1.3 ГГц. Возможно, в серийном выпуске она еще возрастет.

Читать дальше →

ACM ICPC 2017: итоги финала

Время на прочтение3 мин
Количество просмотров8.4K
Вчера в Университете ИТМО встречали команду, которая принесла нам седьмую победу в международном чемпионате ACM ICPC.

Читать дальше →

Что нового нас ждет в Swift 4?

Время на прочтение9 мин
Количество просмотров20K
Читать дальше →

ИТ-конференция «Продвижение»: суббота с пользой

Время на прочтение8 мин
Количество просмотров4.3K
На субботу 3 июня в Москве обещают +11 и лёгкий дождь. Нелётная погода, ну то есть не велосипедная и не особо прогулочная. А душа требует лета, общения, азарта и новых событий. Мы придумали для вас мега насыщенный день в Телеграфе, где пройдёт IT-конференция «Продвижение». Неважно, фанатеете вы от React, занимаетесь дизайном, пытаетесь внедрить Agile или просто считаете себя гиком и книголюбом, — места, нетворкинга и интересных моментов программы хватит всем. Дело за малым — зарегистрироваться и прийти. Ну и почитать подробности под катом.

 
Читать дальше →

Вклад авторов