Продолжаем изучение методов многомерной оптимизации, и следующий на очереди — метод роя частиц осуществляющий поиск глобального минимума.

Программирование *
Искусство создания компьютерных программ
Spring и JDK 8: Вы все еще используете @Param и name/value в Spring MVC аннотациях? Тогда статья для Вас
Здравствуй, Хаброчитатель!
Разрабатывая учебный проект по Spring Boot 2 решил поэкспериментировать с @Param
в запросах Spring Data JPA, а точнее c их отсутствием:
@Transactional(readOnly = true)
public interface UserRepository extends JpaRepository<User, Integer> {
@Query("SELECT u FROM User u WHERE LOWER(u.email) = LOWER(:email)")
Optional<User> findByEmailIgnoreCase(@Param("email") String email);
List<User> findByLastNameContainingIgnoreCase(@Param("lastname") String lastName);
}
(про магию, как работает второй метод есть в старой публикации По следам Spring Pet Clinic).
Убрав @Param
можно убедится, что Spring прекрасно работает и без них. Я слышал про параметр в компиляции, который позволяет не дублировать названия в аннотациях, но я ничего не специального не делал, поэтому решил покопать поглубже подебажить.
Если Вы еще пользуетесь аннотациями из заголовка статьи, Spring Boot и JDK 8, прошу под кат:
UPDATE: аннотации @PathVariable
и @RequestParam
все еще часто нужны, чтобы приложение работало корректно. Но их атрибуты value/name
уже не обязательны: соответствие ищется по именам переменных.
Знакомство с простейшей нейронной сетью и ее пошаговая реализация
Вдохновившись этой книгой, я хочу пройтись по ней пошагово- а именно по практической ее части — написанию кода простейшей нейронной сети.
Эта статья для тех, кто хочет заниматься нейронными сетями и машинным обучением, но пока с трудом понимает эту удивительную область науки. Ниже будет описан самый простой скелет кода нейронной сети, чтобы многие поняли простейший принцип построения и взаимодействия всего того, из чего состоит эта нейронная сеть.

Устранение рекурсии в Python
Привет, Хабр! Представляю вашему вниманию перевод статьи "Removing a recursion in Python, part 1" автора Эрика Липперта (Eric Lippert).
На протяжении последних 20 лет я восхищался простоте и возможностям Python, хотя на самом деле никогда не работал с ним и не изучал подробно.
В последнее время я присмотрелся к нему поближе — и он оказался действительно приятным языком.
Недавний вопрос на StackOverflow заставил меня задуматься, как преобразовать рекурсивный алгоритм в итеративный, и оказалось, что Python довольно подходящий язык для этого.
Проблема с которой столкнулся автор вопроса заключалась в следующем:
Видео докладов с FunTech ML-meetup

В прошлую субботу мы провели бэкенд митап по машинному обучению. В программе было 5 докладов от спикеров из ВКонтакте, Yandex.Taxi, Conundrum, FunCorp и Mail.ru Group. Под катом видео выступлений и ссылки на презентации.
Сжатие указателей в Java

В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23.
Холиварный рассказ про линтеры
Линтеры помогают приводить код к единому стилю и избегать ошибок. Правда, только в том случае, если вы готовы к страданиям, а не отмахиваетесь в конце концов «pylint: disable», только чтобы оно отстало. Какой должен быть линтер, и почему таки не обойтись Pylint, знает Никита Соболев (sobolevn), который понимает и любит линтеры настолько, что даже свою компанию назвал так, чтобы их не расстраивать — wemake.services.
Ниже текстовая версия доклада на Moscow Python Conf++ про линтеры, как их делать правильно и как не нужно. В выступлении было много интерактива, онлайна и общения с аудиторией. Спикер по ходу дела проводил опросы и старался переубедить слушателей: смотрел на тренд, и как в дебатах, пытался выровнять соотношение и поменять общественное мнение. Какая-то часть с опросами попала в расшифровку, но не вся, поэтому для полноты картины прилагается видео.
Перенос веб-сервиса на Яндекс.Облако с AWS
В конце прошлого года Яндекс запустил новый продукт для разработчиков — Яндекс.Облако, который предоставляет вычислительные мощности и сопутствующие сервисы для обработки и хранения данных. В этой статье я расскажу о том, как мы оценивали перенос одного из наших проектов на Облако, о его особенностях и тарифах.

Spring Annotations: магия AOP

Сегодня мы научимся волшебству аннотаций на примере использования Spring Annotations: инициализация полей бинов.
Julia, Градиентный спуск и симплекс метод
Продолжаем знакомство с методами многомерной оптимизации.
Далее предложена реализация метода наискорейшего спуска с анализом скорости выполнения, а также имплементация метода Нелдера-Мида средствами языка Julia и C++.
Внутренние и вложенные классы java. Часть 3
Локальные классы
<<< Часть 1
<<< Часть 2
Локальный класс — это вложенный класс, объявленный внутри другого класса и некоторого блока кода этого класса, то есть объявленный между фигурными скобками {}. Этот блок может быть статическим блоком, циклом, телом if и т.д.
Можно объявить вложенный класс внутри блока кода, например метода, конструктора или блока инициализации. Он будет называться локальным вложенным классом. Чаще всего локальные классы объявляются внутри тела метода.
Локальный класс объявленный внутри блока кода другого класса не является членом класса, к которому относится блок, а принадлежит самому блоку, точно так же, как обычная локальная переменная. Такие классы недоступны за пределами внешнего класса, поскольку нет никаких способов обращения к ним, но их экземпляры – это обычные объекты, которые позволяется, например, передавать в качестве аргументов или возвращать из методов.
Время жизни локального внутреннего класса, это время пока существует хотя бы одна ссылка на него. Такой класс существует внутри блока кода и время его жизни ограниченно этим блоком.
Напишем пример:
/*Учебный пример №12 */
package localclasses;
/**
*
* @author Ar20L80
*/
public class OuterStaticInit {
static
{
class LocalInit{
LocalInit(){
System.out.println("From static iniz");
}
}
LocalInit localInit = new LocalInit();
System.exit(0);
}
public static void main(String[] args) {
System.out.println("From main");
}
}

В нашем примере локальный класс «просуществовал» только в области локальной статичной инициализации. Тело «main» не было вызвано. Единственный модификатор, который допускается применять в объявлении локального класса, – это final, предотвращающий, как обычно, возможность расширения класса. Члены локального класса могут быть объявлены как закрытыми, так и открытыми. К ним применяются модификаторы, которые применимы к обычному классу.( java 8)
Еще раз повторим коротко: Локальный класс – это класс, объявленный в блоке Java кода.
Обычно локальный класс определяется в методе, но он также может быть объявлен в инициализаторе экземпляра класса, в конструкторе класса.
/**
* Учебный пример №13
* @author Ar20L80
*/
public class OuterLocal {
OuterLocal(){
// начало блока конструктора
/*объявление локального класса в конструкторе OuterLocal*/
class LocalInnerClass {
LocalInnerClass(){}
}
/* создаем экземпляр в том же блоке*/
LocalInnerClass localObj = new LocalInnerClass();
// окончание блока конструктора
}
Поскольку все блоки Java кода находятся внутри определения класса, то все локальные классы вложены в окружающие классы. К локальному классу применяются правила обычной локальной переменной. Область видимости такого класса — это область видимости окружающего его блока.
/**
* Учебный пример №14
* @author Ar20L80
*/
public class OuterLocal {
OuterLocal(){
/*объявление локального класса в конструкторе OuterLocal*/
class LocalInnerClass {
LocalInnerClass(){}
}
/* создаем экземпляр в том же блоке*/
LocalInnerClass localObj = new LocalInnerClass();
}
public static void main(String[] args) {
// LocalInnerClass localObj = new LocalInnerClass(); не можем создать объект локального класса
// вне области видимости содержащего его блока
}
}
Свойства локального класса:
Подобно вложенным нестатическим классам, локальные классы связаны с окружающим экземпляром и имеют доступ ко всем членам, включая private члены окружающего класса. Локальный класс нельзя объявить с каким-либо модификатором доступа, кроме как static final.
/*Учебный пример пример №15 */
public class OuterStaticLocal {
OuterStaticLocal(){
// static class Local{} ошибка не может быть статичным
}
}
Потому что, модификаторы доступа для членов класса мы можем применять только к членам класса. Эти модификаторы не доступны для объявления локальных переменных или классов, находящихся в блоке и не являющиеся членами класса.
/**
* Учебный пример №16
* @author Ar20L80
*/
public class OuterLocal2 {
OuterLocal2(){
final class LocalInnerClass {
LocalInnerClass(){}
}
}
}
Как и нестатические вложенные классы, и по тем же причинам, локальные классы не могут иметь static поля, исключение составляют константы, объявленные как static final.
/**
* Учебный пример №17
* @author Ar20L80
* тут я вернул переменную локального класса через iTemp внешнего класса
*/
public class OuterClass {
private int iTemp;
OuterClass(){
// объявим внутри конструктора класс
/* здесь мы не можем использовать private, public
применительно к локальному классу*/
final class LocalInnerClass01{
/* сам локальный класс может содержать
как private, так и public */
private static final int INT_FIN = 10;
LocalInnerClass01(){
iTemp = Return_INT_FIN();
}
int Return_INT_FIN(){
return INT_FIN;
}
}
class LocalInnerClass02{
// public static int i=11; ошибка не может быть не константой внутри
// локального вложенного класса
}
/* создаем локальные объекты локальных классов в том же конструкторе*/
LocalInnerClass01 localInnerClass1 = new LocalInnerClass01();
LocalInnerClass02 localInnerClass2 = new LocalInnerClass02();
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
System.out.println(outerClass.iTemp ); // = 10
//OuterClass.LocalInnerClass1 innerObject = outerClass.new LocalInnerClass1(); ошибка - это не
// внутренний класс, а локальный. И мы не имеем к нему доступа.
}
}
Применение:
Основное применение локальные классы находят в тех случаях, когда необходимо написать класс, который будет использоваться внутри одного метода. Создание локального класса – способ не загромождать пространство имен.
Если класс определяется в теле метода, то его называют локальным внутренним классом. Пример доступа к переменным внешнего класса из локального внутреннего класса:
В разработке — каждый сам за себя. Но иногда это приводит в тупик

Я чёртовы сутки просидел над таской. Нужно было спроектировать самостоятельный модуль, а людям с тяжелой формой перфекционизма нельзя давать задачи на проектирование.
У меня была неделя — целая бесконечность, которой мне не хватило. Снова и снова я перебирал в голове варианты использования того, что должен сделать, но картинка идеального модуля не клеилась. Всегда находился кейс, который хорошо показывал: такой дизайн — говно. Я думал, играл на гитаре, пробовал писать, тупил в монитор, гуглил, играл с детьми, снова думал — голова всегда была занята дурацким модулем.
В последний день я был на пределе, потратил двадцать часов на работу не вылезая. И вот — вечер воскресенья, я безумно хочу спать, но всё ещё сижу и пытаюсь придумать подходящее название для какого-то класса в своём псевдокоде, чей дизайн, конечно же, отправиться на помойку сразу, как только я его закончу, потому что он слишком неидеальный. За несколько часов до дьюдейта у меня не было ничего, кроме убитой поисками недели.
В понедельник утром я отправил пулл реквест. Его приняли с восторгом. Но способ, на который я пошел… вот уж никогда не думал, что отважусь на такое.
Набор на магистерскую программу JetBrains на базе Университета ИТМО
Приглашаем выпускников бакалавриата получить актуальные знания в области программирования и компьютерных наук.

Ближайшие события
Динамическая локальная экспозиция

В данной статье я представлю пару идей о динамической локальной экспозиции в HDR рендеринге. У Барта Вронски уже есть отличная статья на эту тему и я очень рекомендую ее прочитать прямо сейчас, если вы еще этого не сделали; идеи здесь, в большей степени, основаны на его статье. В конце я включил несколько других замечательных ссылок.
Low/High Dynamic Range
В старые добрые времена (1990-е) игры рендерились непосредственно в отображаемом LDR (узкий динамический диапазон) формате (гамма пространство, 8 бит). Это было просто и дешево, но, с другой стороны, значительно мешало созданию действительно фотореалистичной картинки.
В настоящее время, особенно с появлением PBR (physically-based rendering), игры рендерятся с гигантским динамическим диапазоном в линейном пространстве с более высокой точностью. С таким движением к фотореализму приходит реальная проблема: как мы можем отобразить HDR изображение в LDR?
Фишки VS Угрозы технологии контейнеризации

Как всегда, развитие технологии и рост её популярности сопровождаются выявлением различных способов нестандартного использования, в том числе и вредоносного. В этой статье мы также рассмотрим угрозы безопасности процесса разработки, связанные с использованием контейнеров, и поговорим о том, почему процессы DevOps следует трансформировать в DevSecOps.
3-ий Тест Тьюринга: условия участия и призы победителям

Под катом – условия для участников и описание призов для победителей.
Устройство компилятора Swift. Часть 3

Продолжаем изучать компилятор Swift. Эта часть посвящена Swift Intermediate Language.
Если вы не видели предыдущие, рекомендую перейти по ссылке и прочитать:
Конференция BLACK HAT. Уроки выживания при DDOS-атаке 300 Гбит / с. Часть 2
Интересным в этой атаке было то, что нас не решились атаковать прямо, а пошли по цепочке наших провайдеров. Они принялись атаковать upstream-провайдеров, расположенных выше CloudFlare, и источник атаки действительно находился в Лондоне. Сначала я не был в этом уверен, но поскольку Spamhaus тоже находился в Лондоне, возможно, хакер тем самым хотел поставить их в постыдное положение. Как я говорил, техническим вдохновителем атаки вроде бы был подросток из Лондона, возможно, таким образом он мог более эффективно отследить эффект своей атаки. На этом слайде показан маршрут BGP трафика, который включал в себя максимум 30 транзитных узлов next-hop.

Я скрыл расширения адресов лондонского провайдера широкополосной связи, последний hop – это один из IP-адресов Spamhaus, их было несколько в нашей сети. Вы видите, как маршрутизировался трафик, по приведенным данным сложно определить точный путь, однако он был направлен к нашему оборудованию в Лондоне, куда попал спустя 17 миллисекунд после прохождения пограничного IP-адреса нашей сети, которая работала в Лондоне.
Julia и метод покоординатного спуска
Метод покоординатного спуска является одним из простейших методов многомерной оптимизации и неплохо справляется с поиском локального минимума функций с относительно гладким рельефом, поэтому знакомство с методами оптимизации лучше начинать именно с него.
Поиск экстремума ведется в направлении осей координат, т.е. в процессе поиска изменяется только одна координата. Таким образом, многомерная задача сводится к одномерной.
Введение в программирование: простой 3D-шутер с нуля за выходные, часть 2
- Часть первая: отрисовка стен
- Часть вторая: населяем наш мир + оконный интерфейс
Как я и говорил, я всеми силами поддерживаю желание в студентах делать что-то своими руками. В частности, когда я читаю курс лекций по введению в программирование, то в качестве практических занятий я оставляю им практически полную свободу. Ограничений только два: язык программирования (С++) и тема проекта, это должна быть видеоигра. Вот пример одной из сотен игр, которые сделали мои студенты-первокурсники:
К сожалению, большинство студентов выбирает простые игры типа 2Д платформеров. Я пишу эту статью для того, чтобы показать, что создание иллюзии трёхмерного мира ничуть не сложнее клонирования марио броз.
Вклад авторов
alizar 4446.2ru_vds 4222.8olegchir 3644.4badcasedaily1 3035.0haqreu 2951.0tangro 2672.2nmivan 2585.0kesn 2578.0MaxRokatansky 2523.0DmitrySpb79 2296.0