Доброго часу, Хабр!

Купа часу пройшло з того моменту, як я написав свою першу статтю, і вже майже рік з того моменту, як прийшла в голову ідея для другої. В силу багатьох обставин (в першу чергу – ліні і забудькуватості), ця ідея так і не була реалізована раніше, але зараз я зібрався, написав весь цей матеріал і готовий представити його вашій увазі.

Почну з невеликої вступної. Будучи студентом 4-го, на той момент, курсу бакалаврату, я вивчав курс «Комп'ютерна графіка». Багато там було різних цікавих (і не дуже) завдань, але одне прямо особливо запало мені в душу: інтерполяцію кубічними сплайнами із заданими першими похідними на кінцях інтервалу. Користувач повинен був задавати значення перших похідних, а програма — вважати і виводити на екран интерполяционную криву. Особливість і основна складність завдання полягає в тому, що задаються саме перші похідні, а не другі, як у класичній постановці сплайн-інтерполяції.
Як я її вирішував, і до чого воно в підсумку прийшов, я як раз і викладу в цій статті. І так, якщо за описом завдання ви не зрозуміли ні в чому її сенс, ні в чому складність, не переживайте, все це я також постараюся розкрити. Отже, поїхали.

А, ні, стривайте один момент. Ось вам два числових ряду:
a) 2, 4, 6, 8, ?
b) 1, 3, ?, 7, 9

Які числа повинні стояти на місці питань і чому? Ви дійсно впевнені у своїй відповіді?

Читати далі →

Як відомо, важливою частиною боротьби з кіберзагрозами є дослідження шкідливих файлів, ніж у нас займаються вірусні аналітики — відважні хлопці (і дівчата!) з Anti-Malware Team. На підставі свого досвіду вони регулярно створюють спеціальні тренажери, CrackMe, які початківці аналітики можуть використовувати для перевірки своїх знань.

Не так давно, ми анонсували конкурс CrackMe, що проходив у рамках event-платформи CoLaboratory. Тепер, коли конкурс завершився і всі рішення ухвалені, ми можемо розглянути завдання докладніше.

image

УВАГА: Якщо ви не встигли взяти участь у конкурсі, але тим не менш хочете спробувати свої сили — не читайте інформацію під катом. Там ми опишемо алгоритм рішення завдання. Завантажити свіжі завдання CrackMe можна здесь.

Читати далі →

Нейронні мережі для початківців. Частина 2



Ласкаво просимо у другу частину керівництва по нейронних мереж. Відразу хочу принести вибачення всім, хто чекав другу частину набагато раніше. З певних причин мені довелося відкласти її написання. Насправді я не очікував, що у першій статті буде такий попит і що так багато людей зацікавить ця тема. Взявши до уваги ваші коментарі, я спробую надати вам якомога більше інформації і в той же час зберегти максимально зрозумілий спосіб її викладу. У даній статті, я буду розповідати про способи навчання/тренування нейромереж (зокрема метод зворотного поширення) і якщо ви з якихось причин ще не прочитали першу частину, настійно рекомендую почати з неї. В процесі написання цієї статті, я хотів розповісти про інших видах нейромереж і методи тренування, однак, почавши писати про них, я зрозумів що це піде врозріз з моїм методом викладу. Я розумію, що вам не терпиться отримати як можна більше інформації, проте ці теми дуже великі і потребують детального аналізу, а моїм основним завданням є не написати чергову статтю з поверхневим поясненням, а донести до вас кожен аспект порушеної теми і зробити статтю максимально легким в освоєнні. Поспішаю засмутити любителів «покодить», так як я все ще не буду вдаватися до використання мови програмування і буду пояснювати все «на пальцях». Досить вступу, давайте тепер продовжимо вивчення нейромереж.

Читати далі →

Олімпіада МФТІ по електроніці для школярів

В цьому році вперше відбудеться Олімпіада МФТІ електроніці для школярів 5-11 класів! Що чекає учасників? Складні завдання, практична робота зі складання схем, призи та рекомендації для вступників!



Завдання для прикладу: знайти загальний опір ділянки кола, побудувати таблицю істинності для схеми

Всі подробиці про олімпіаду ви можете знайти в соціальній мережі для абітурієнтів Abitu.Net за адресою: http://abitu.net/event/1970


Олімпіада складається з двох етапів:
  • Онлайн-етап: 16 грудня — 1 березня 2017 року.
  • Очний етап: кінець березня 2017 року

Читати далі →

Машинне навчання — це легко

У даній статті мова піде про машинному навчанні в цілому та взаємодії з датасетами. Якщо ви початківець, не знаєте з чого почати вивчення і вам цікаво дізнатися, що таке «датасет», а також навіщо взагалі потрібен Machine Learning і чому останнім часом він набирає все більшу популярність, прошу під кат. Ми будемо використовувати Python 3, так як це досить простий інструмент для вивчення машинного навчання.

Читати далі →

Простий і швидкий алгоритм генерації ландшафту

Доброго часу доби, Хабровчане! У цій статті я хочу розповісти про простий і швидкий спосіб генерації ландшафту. Перш ніж ми приступимо до розбору самого алгоритму, хотілося б зазначити, що по відношенню до генерації ландшафту мною даний алгоритм на просторах мережі помічений не був, однак подібний алгоритм для генерації рівнів був описаний в статті, посилання на яку буде в кінці.

В якій ситуації зручний алгоритм

Нещодавно зіткнувся із завданням: написати просту стратегію з тривимірним ландшафтом. Так як я в даний момент володію маленьким досвідом програмування на мові С++, мої спроби написати «diamond-square» закінчилися помилками на рівному місці (посилання на статтю з «diamond-square» також буде в кінці). Потрібний простий у написанні алгоритм, що не дає реалістичний ландшафт, так що даний метод допоможе в першу чергу новачкам.

Алгоритм і результат

Перш ніж описувати сам алгоритм поділюся його результатами:

image

Читати далі →

Класичні парсер-комбінатори на Python

Парсером називається частина програми, яка з лінійної послідовності простих даних будує більш складні структури даних з урахуванням деякої граматики.

Функціональні мови програмування дозволяють описувати функції вищих порядків, які приймають в якості аргументів і повертає як результат інші функції.

Парсер-комбінатори – відома техніка створення парсера, яка використовує можливості функціональних мов програмування для динамічного побудови більш складних парсерів з простих за правилами деякої граматики.

Читати далі →

Генератор випадкових чисел без програмування і навіть комп'ютера: чим здивувати юного програміста?

Зараз, коли Arduino продовжує тріумфальний хід по планеті, навряд чи когось здивуєш схемами на макетній платі. Білі беспаечные макетні плати вже стали обов'язковим елементом наборів для гиків. І все-таки я вирішила спробувати зацікавити юних програмістів з літньої школи GoToCamp: провести для них майстер-клас з основ цифрової схемотехніки, закінчується складанням цікавого пристрою – генератора випадкових чисел.

При натисканні на кнопку, на індикаторі висвічується випадкове число. В чому ж тут випадковість, звідки вона береться? Відразу розкрию секрет. Цифри генеруються по порядку: 0, потім 1, 2, і так далі. Хитрість ось у чому: дуже висока частота імпульсів. Вони видаються так швидко, що цифри зливаються в одну на індикаторі. І абсолютно неможливо вгадати цифру!
Далі ви прочитаєте про те, як влаштований такий генератор, і як зібрати його самостійно.

Читати далі →

Як в Java вистрілити собі в ногу з лямбды і не промахнутися

Іноді можна почути такі розмови: жодних принципових змін в Java 8 не сталося і лямбды це старі добрі анонімні класи щедро посипані синтаксичним цукром. Як би не так! Пропоную сьогодні поговорити, у чому відмінність лямбд від анонімних класів. І чому потрапити собі в ногу стало все-таки складніше.

Читати далі →

Нейронні мережі для початківців. Частина 1

image

Привіт всім читачам Habrahabr, в цій статті я хочу поділитися з Вами моїм досвідом у вивченні нейронних мереж і, як наслідок, їх реалізації з допомогою мови програмування Java, на платформі Android. Моє знайомство з нейронними мережами сталося, коли вийшло додаток Prisma. Воно обробляє будь-яку фотографію, з допомогою нейронних мереж, і відтворює її з нуля, використовуючи вибраний стиль. Зацікавившись цим, я кинувся шукати статті і «туторіали», в першу чергу, на Хабре. І на мій превеликий подив, я не знайшов ні одну статтю, яка чітко і поетапно розписувала алгоритм роботи нейронних мереж. Інформація була розрізненою і в ній були відсутні ключові моменти. Також, більшість авторів кидається показувати код на тому чи іншому мові програмування, не вдаючись до детальних пояснень.

Тому зараз, коли я досить добре освоїв нейронні мережі і знайшов величезну кількість інформації з різних іноземних порталів, я хотів би поділитися цим з людьми у серії публікацій, де я зберу всю інформацію, яка знадобиться вам, якщо ви тільки починаєте знайомство з нейронними мережами. У цій статті я не буду робити сильний акцент на Java і буду пояснювати все на прикладах, щоб ви самі змогли перенести на будь-який потрібний вам мову програмування. У наступних статтях я розповім про своєму додатку, написаному під андроїд, яке пророкує рух акцій або валюти. Іншими словами, усіх бажаючих поринути у світ нейронних мереж і спраглих простого і доступного викладу інформації або просто тих, хто щось не зрозумів і хоче підтягнути, ласкаво просимо під кат.

Читати далі →