Добрый день уважаемый хабрачитатель! Вчера мне крупно не повезло с сервисом iMessages. Причем я думаю что стоит предупредить о таком странном поведении или спросить у знатоков что же это было.
Читать полностью »
Архив за 12 июля 2014 - 2
Компания Samsung Display хотела бы продавать дисплеи AMOLED в больших количествах не только компании Samsung Electronics
2014-07-12 в 15:00, admin, рубрики: Новости, метки: новостиВ сети появились сведения, что компания Samsung Display, выпускающая дисплеи AMOLED для мобильных устройств производства Samsung Electronics, заинтересована в поставках этой продукции и другим заказчикам.
"Серебряный дождь" объяснил, почему ему нужно больше денег от подписчиков. Причём от тех, кто уже оплатил подписку на какой-то срок в том числе (я надеюсь, что СД хватит выдержки не поднимать цену принудительно).
Я, хотя не требую отстранения Путина от власти, являюсь приверженцем политики "пусть цветёт сто цветов". В том числе и Дождь. В том числе и с дураками-SMMщиками (как мы видим на примере ВГТРК и Геббельса идиотизм исполнителя встречается везде).
Данным постом хочу представить IT-сообществу свой давний проект: PHP фреймворк «ZExt».
В результате многолетней работы в различных проектах у меня накопилась библиотека, так сказать, всяческих полезностей, облегчающих повседневный труд программиста. Некоторые компоненты данного фреймворка являються частями корпоративного фреймворка компании viboom.ru в которой я проработал продолжительное время создавая эти компоненты. От руководства компании было полученно согласие на публикацию части исходного кода фреймворка. В последнее время я провёл определённую работу по «причёсыванию» фреймворка и теперь готов его представить сообществу в надежде, что вы найдёте чего либо полезное для себя в компонентах фреймворка.
Читать полностью »
Простое удалённое управление с компьютера роботом
2014-07-12 в 14:11, admin, рубрики: arduino, processing, робототехникаПредисловие или зачем извращаться?
Здравствуй! Я сидел вечером 11 июня, смотрел фильм. Неожиданно для себя я обнаружил, что мне написала незнакомая мне ранее женщина с предложением сделать робота для их нового квеста. Суть заключается в том, что нужно разгадывать головоломки, исследовать тайники, правильно применять подсказки, использовать доступные вещи и в итоге добывать ключи и открывать двери… От меня требовалось сделать робота, управляемого с компьютера с помощью отдельной программы. У мебя были сомнения по поводу 2 вещей: успею ли я и как именно сделать беспроводную передачу данных (беспроводной передачей данных я занимался до этого только на NXT)? Взвесив все за и против я согласился. После этого я стал думать над передачей данных. Поскольку требовалось сделать робота быстро, то вспоминать и доосваевать, например, дельфи не было времени, поэтому возникла идея сделать модуль который будет заниматься отправкой команд. От компьютера требуется просто посылать данные в СОМ-порт. Этот способ странный, но наиболее быстрый. Его я и хочу описать здесь. Так же я приложу 3 программы которые помогут сделать радиоуправляемую машинку.
Сборка передатчика и его программа.
Я сделал модуль для компьютера из FTDI Basic Breakout 5/3.3V от DFrobot, довольно распространённого микроконтролера ATMEGA 328P-PU с загрузчиком Arduino и радиомодуля на основе микросхемы nRF24L01. По-сути это просто Arduino Uno с радиомодулем. Что есть, то есть. У радиомодуля есть особенность, которую я не сразу заметил: входное напряжение должно быть в диапазоне от 3 до 3.6 вольт (хотя подача на него 5 вольт его не убьёт, но работать не будет), верхняя граница логической единицы составляет 5В. Это означает то, что для подключения радиомодуля к меге не нужен преобразователь уровней между 3.3В и 5В, а вот стабилизатор на 3.3В установить нужно. У FTDI есть встроенный стабилизатор, от него я и подпитал радиомодуль.
Так выглядит сам модуль (внутри и в сборке) :
Программа состоит из инициализации, стартового сообщения и обработки команд из программы управления. Так было в моём случае. Основные команды библиотеки Mirf:
#include <SPI.h>
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <nRF24L01.h>
Эти библиотеки нужны для работы радиомодуля
Mirf.csnPin = 4 — задаёт номер пина, отвечающего за «разрешение общаться» радиомодуля и МК
Mirf.cePin = 6 — задаёт номер пина, отвечающего за режим работы радиомодуля (приёмник/передатчик)
Mirf.spi = &MirfHardwareSpi — настраивает линию SPI
Mirf.init() — инициализирует радиомодуль
Mirf.payload = 1 — размер в байтах одного сообщения (поумолчанию 16, максимум 32)
Mirf.channel = 19 — задаёт канал (0 — 127, по умолчанию 0)
Mirf.config() — задаёт параметры передачи
Mirf.setTADDR((byte *)«serv1») — переводит радиомодуль в режим передатчика
Mirf.setRADDR((byte *)«serv1») — переводит радиомодуль в режим приёмника
Mirf.send(data) — отправляет массив типа byte
Mirf.dataReady() — сообщает об окончании обработки принятых данных
Mirf.getData(data) — записать принятые данные в массив data
Mirf.setTADDR((byte *)«serv1») — переводит радиомодуль в режим передатчика
Mirf.setRADDR((byte *)«serv1») — переводит радиомодуль в режим приёмника
Mirf.send(data) — отправляет массив типа byte
Mirf.dataReady() — сообщает об окончании обработки принятых данных
Mirf.getData(data) — записать принятые данные в массив data
Прилагаю код программы передатчика.
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <nRF24L01.h>
char active;
byte data[1];
void setup()
{
Serial.begin(19200);
Mirf.csnPin = 4;
Mirf.cePin = 6;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = 1;
Mirf.channel = 19;
Mirf.config();
Mirf.setTADDR((byte *)«serv1»);
//сигнальное сообщение о начале работы
data[0]=7;
Mirf.send(data);
delay(200);
}
void loop()
{
if (Serial.available()) //Если данные готовы к считыванию
{
active=Serial.read(); // Запись данных в переменную
}
if (active=='2')
{
data[0]=2;
}
if (active=='3')
{
data[0]=3;
}
if (active=='4')
{
data[0]=4;
}
if (active=='5')
{
data[0]=5;
}
if (active=='6')
{
data[0]=6;
}
Mirf.send(data); //Отсылаем данные
while(Mirf.isSending()); // Ждём пока данные отсылаются
}
Программа управления.
Есть одна интересная штука — Processing. Синтаксис такой же как в Arduino, только вместо void loop() там расположился void draw(). Но она становилась ещё более интересной в моей ситуации с библиотекой processing Serial, которая позволяет работать с сериал-портом. Прочитав уроки на сайте Spurkfun`а, я поигрался с миганием светодиода на подключенной к компьютеру ардуинке по клику мышки. После этого я написал программу управления роботом с клавиатуры. Прилагаю код управления с помощью стрелок. В нём, в принципе, ничего необычного нет.
import cc.arduino.*;
Serial myPort;
PFont f=createFont(«LetterGothicStd-32.vlw», 24);
void setup()
{
size(360, 160);
stroke(255);
background(0);
textFont(f);
noCursor();
String portName = «XXXX»; // Сюда нужно написать имя вашего порта
myPort = new Serial(this, portName, 19200);
}
void draw() {
if (keyPressed == false)
{
clear();
myPort.write('6');
println(«6»);
}
}
void keyPressed()
{
// 10 — enter
// 32 — probel
// 37/38/39/40 — keys
clear();
fill(255);
textAlign(CENTER);
//text(keyCode, 180, 80);
switch(keyCode)
{
case 37:
text(«Edem vlevo», 180, 80);
myPort.write('1');
break;
case 38:
text(«Edem pryamo», 180, 80);
myPort.write('2');
break;
case 39:
text(«Edem vpravo», 180, 80);
myPort.write('3');
break;
case 40:
text(«Edem nazad», 180, 80);
myPort.write('4');
break;
default:
text(«Takoy kommandi net», 180, 80);
myPort.write('6');
break;
}
}
Программа приёмника.
Инициализация этой программы отличается от инициализации программы передатчика буквально одной строчкой. Ключевая команда в бесконечном цикле Mirf.getData(data). Дальше полученная команда сравнивается с числами, которым соответствуют какие-либо действия робота. Ну а дальше робот действует точно по командам. Прилагаю код программы приёмника машинки.
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <nRF24L01.h>
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT); //LED
Mirf.csnPin = 10;
Mirf.cePin = 9;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = 1;
Mirf.channel = 19;
Mirf.config();
Mirf.setRADDR((byte *)«serv1»);
}
void loop()
{
byte data[1];
if(!Mirf.isSending() && Mirf.dataReady())
{
Mirf.getData(data);
Serial.println(data[0]);
}
switch (data[0])
{
case 1:
motors(-100, 100); // поворачиваем влево
break;
case 2:
motors(100, 100); // едем прямо
break;
case 3:
motors(100, -100); // поворачиваем вправо
break;
case 4:
motors(-100, -100); // едем назад
break;
default:
motors(0, 0); // стоим
break;
}
delay(50);
}
Заключение.
Что из этого всего вышло:
www.youtube.com/watch?v=K5ekFyph82U
Этого робота я сделал для «Клаустрофобии». Они проводят квесты в реальности в разных городах, и как раз для одного из таких квестов организаторам понадобился радиоуправляемый робот-сапер. Мне понравилось. Это, конечно, ущербно, т.к. на фоне управления с помощью встроенных в ноутбук средств связи, но зато своё, сделанное весьма быстро и без особых проблем. Надеюсь эта статья поможет сделать нечто подобное, а, может, даже сложнее. Тут уж кому что захочется.
Графические модели в машинном обучении. Семинар в Яндексе
2014-07-12 в 13:06, admin, рубрики: Алгоритмы, Блог компании Яндекс, математика, машинное обучениеНесмотря на огромную популярность аппарата графических моделей для решения задачи структурной классификации, задача настройки их параметров по обучающей выборке долгое время оставалась открытой. В своем докладе Дмитрий Ветров, рассказал об обобщении метода опорных векторов и некоторых особенностях его применения для настройки параметров графических моделей. Дмитрий – руководитель группы Байесовских методов, доцент ВМК МГУ и преподаватель в ШАДе.
План доклада:
- Байесовские методы в машинном обучении.
- Задачи с взаимозависимыми скрытыми переменными.
- Вероятностные графические модели
- Метод опорных векторов и его обобщение для настройки параметров графических моделей.
Сама концепция машинного обучения довольно несложная – это, если говорить образно, поиск взаимосвязей в данных. Данные представляются в классической постановке набором объектов, взятых из одной и той же генеральной совокупности, у каждого объекта есть наблюдаемые переменные, есть скрытые переменные. Наблюдаемые переменные (дальше будем их обозначать X) часто называются признаками, соответственно, скрытые переменные (T) — это те, которые подлежат определению. Для того, чтобы эту взаимосвязь между наблюдаемыми и скрытыми переменными установить, предполагается, что у нас есть обучающая выборка, т.е. набор объектов, для которых известны и наблюдаемые и скрытые компоненты. Глядя на нее, мы пытаемся настроить некоторые решающие правила, которые нам позволят в дальнейшем, когда мы видим набор признаков, оценить скрытые компоненты. Процедура обучения приблизительно выглядит следующим образом: фиксируется множество допустимых решающих правил, которые как правило задаются с помощью весов (W), а дальше каким-то образом в ходе обучения эти веса настраиваются. Тут же с неизбежностью возникает проблема переобучения, если у нас слишком богатое семейство допустимых решающих правил, то в процессе обучения мы легко можем выйти на случай, когда для обучающей выборки мы прекрасно прогнозируем ее скрытую компоненту, а вот для новых объектов прогноз оказывается плохой. Исследователями в области машинного обучения было потрачено немало лет и усилий для того, чтобы эту проблему снять с повестки дня. В настоящее время, кажется, что худо-бедно это удалось.
Читать полностью »
Metal, новый графический API для iOS 8
2014-07-12 в 12:00, admin, рубрики: game development, iOS, unity3d, wwdc, разработка под iOS, шейдерыНаступают чудесные времена для графики на iOS 8!
На недавней WWDC компанией Apple был представлен новый графический API под названием Metal, отличительной особенностью которого стала высокая эффективность, низкий уровень издержек и оптимизация под чип A7. Это предоставляет разработчикам возможность воспользоваться всеми аппаратными преимуществами устройств на iOS и добиться намного большего уровня реалистичности, детализации и интерактивности в играх, чем когда бы то ни было.
В данный момент процесс реализации поддержки Metal уже запущен, а пока мы бы хотели рассказать вам кое-что об этой технологии и объяснить, почему же это так круто.
Читать полностью »
У Micron готовы первые в отрасли «монолитные компоненты» DDR3 SDRAM плотностью 8 Гбит
2014-07-12 в 11:02, admin, рубрики: Новости, метки: новостиКомпания Micron Technology объявила о выпуске «монолитных компонентов» DDR3 SDRAM плотностью 8 Гбит. Чипы выпускаются по наиболее передовой, 25-нанометровой технологии производства DRAM, освоенной на предприятии.
Появление монолитных компонентов DDR3 плотностью 8 Гбит, как утверждается, позволит выпускать более привлекательные по цене модули памяти большой емкости для систем, интенсивно работающих с большими объемами данных. В частности, новые компоненты позволят сделать массовыми модули RDIMM объемом 32 ГБ. К областям их применения отнесены системы, выполняющие анализ данных и поиск, обеспечивающие работу социальных сетей.
Поиск гамильтонова цикла в большом графе (задача коммивояжера). Часть 3
2014-07-12 в 10:40, admin, рубрики: Алгоритмы, задача коммивояжёра, ПрограммированиеВсем доброго времени суток!
В этом небольшом посте я продолжу тему, которую поднимал в своих старых двух постах
Часть 1
Часть 2
А именно, расскажу о небольшой идее, которая недавно пришла мне в голову, и которая помогает решить поставленную задачу немного лучше.
Так что добро пожаловать под хабракат
Читать полностью »
Это я, почтальон Печкин!
2014-07-12 в 10:30, admin, рубрики: Геоинформационные сервисы, заправки, логистика, почта россии, приложения для android, приложения для iphone, Разработка под android, разработка под iOSПринес посылку для вашего мальчика... Наверное эту крылатую фразу из любимого мультфильма помнят все. Она мне вспоминается всегда, когда я сталкиваюсь с почтой или тогда, когда требуется что-то куда отправить. Не скажу, что это всегда доставляет мне удовольствие. Даже продвинутые сервисы доставки с курьерами иногда просто удручают. Я уже не говорю о логистических компаниях и всеми «любимой» Почтой России. Но вдруг у меня возникла шальная мысль как все это поправить, с которой хочу поделиться с Хабром.