Управление умным домом с помощью голосовых команд
Talk to your home-Wireless Raspberry Pi Gateway — управление умным домом через телефон голосом. Как с русским немного не понятно, но всё вроде бы открыто для хакинга.
Talk to your home-Wireless Raspberry Pi Gateway — управление умным домом через телефон голосом. Как с русским немного не понятно, но всё вроде бы открыто для хакинга.
Есть например датчик который находится в одном месте, и есть управлющее устройство, управляющее например освещением, находящееся в другом месте. Какой способ связи использовать? Радиосигнал/bluetooth etc. Поделитесь вашими соображениями на этот счет, ссылки на готовые решения сильнейше приветствуются.
Вышли из строя несколько конденсаторов на матери, нужно перепаять, только вот не знаю какую марку конденсаторов взять? Стояли конденсаторы фирмы capxon, на форумах пишут что самая отстойная марка конденсаторов. Какая марка самая хорошая?
Изначально даный пост предназначался для habrahabr, но местные модераторы его не пропустили без объяснения причин:
Увы, ваш топик «Тёмные углы C и C++» не был одобрен и не попал в общую ленту. Причин этому может быть много, но просим не терроризировать службу технической поддержки, так как там вашу статью даже не видели. Расстраиваться тоже не стоит - попробуйте опубликовать что-нибудь еще.
С уважением, Хабрахабр
В связи с этим выкладываю его сюда.
Я, как и многие из вас, работаю программистом. Официально моя должность не привязана к какому-либо конкретному языку программирования, что, кстати говоря, прекрасно, ведь для каждой задачи должны быть свои инструменты. Но довольно часто выбора просто нет (например, из-за особенностей реализации той или иной платформы), в связи с чем подавляющее большинство моих проектов пишутся на C++.
Я не гуру C++. Я не могу похвастаться тем, что с уверенностью распознаю любую шаблонную конструкцию данного языка или возьму и вспомню, что возвращает какая-то редко используемая мной функция из стандартной библиотеки без помощи документации.
Думаю, вы со мной согласитесь, что C++ — язык с очень высоким порогом вхождения. Серьёзно! Я изучаю этот язык уже больше 3 лет, и практически каждую неделю открываю в нём что-то новое и удивительное. Именно об этом «новом и удивительном» и пойдёт речь в данной статье.
За то время, пока я изучал C++, у меня потихоньку накапливались интересные задачки, сниппеты и просто необычные куски кода, которыми я делился с коллегами по работе и знакомыми. У нас даже появилась своего рода традиция — каждый рабочий день с того момента, как я пришёл в компанию, я выкладывал по две новых задачки, которые мы старались по возможности обсудить в перерывах. Постепенно их набиралось всё больше и больше, пока, наконец, я не стал забывать некоторые из них. Именно в тот момент я решил предпринять попытку составления сборника так называемых «тёмных углов» C и C++. Я собрал воедино все те куски кода, что видел до сих пор, дополнил их цитатами из различных стандартов и продолжил копить свою «коллекцию». Изначально моей целью было собрать вместе всего 100 задачек, но я и оглянуться не успел, как их стало уже 200, 300 и вот теперь 400. На самом деле, их даже больше, но на данном этапе я решил ограничиться именно этим количеством.
Итак, представляю Вашему вниманию книгу «C and C++ Dark Corners». Конечно, назвать её книгой можно с натяжкой, ведь это, как я уже и сказал, сборник интересных и для кого-то малоизвестных мест C и С++.
Не откладывайте её в сторону после пары-тройки вопросов, ответы на которые Вы уже итак знаете — я уверен, что хоть какие-то из них заставят Вас задуматься, а ответы на другие могут удивить и даже шокировать.
В качестве примера приведу несколько вопросов из книги:
97. Что попадёт в stdout в результате выполнения след. кода и почему?
#include <iostream>
#include <memory>
#include <boost/smart_ptr/scoped_ptr.hpp>
class Foo
{
public:
~Foo() { std::cout << "Foo::~Foo() \n"; }
};
class Bar : public Foo
{
public:
~Bar() { std::cout << "Bar::~Bar() \n"; }
};
class Baz : public Bar
{
public:
~Baz() { std::cout << "Baz::~Baz() \n"; }
};
int main()
{
std::cout << 1 << '\n';
{
Foo* instance = new Baz;
delete instance;
}
std::cout << 2 << '\n';
{
std::shared_ptr<Foo> instance(new Baz);
}
std::cout << 3 << '\n';
{
std::shared_ptr<Foo> instance(false ? new Bar : new Baz);
}
std::cout << 4 << '\n';
{
boost::scoped_ptr<Foo> instance(new Baz);
}
std::cout << 5 << '\n';
{
std::unique_ptr<Foo> instance(new Baz);
}
std::cout << 6 << '\n';
{
std::auto_ptr<Foo> instance(new Baz);
}
}
A: Первый случай уже обсуждался ранее – здесь UB в чистом виде (как правило, это приводит к тому, что не будет вызван деструктор производного класса).
Второй случай выдаст на экран следующее:
Baz::~Baz()
Bar::~Bar()
Foo::~Foo()
Почему? Что произошло? Ведь мы же ясно видим, что деструкторы у данных классов не являются виртуальными. Или это один из частных случаев UB? На самом деле, тут всё вполне законно и должно работать так, как указано выше. Посмотрим в документацию к std::shared_ptr и boost::shared_ptr:
http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr
Proper delete expression corresponding to the supplied type is always selected, this is the reason why the constructors are implemented as templates using a separate parameter Y.
http://www.boost.org/doc/libs/1_51_0/libs/smart_ptr/shared_ptr.htm
This constructor has been changed to a template in order to remember the actual pointer type passed. The destructor will call delete with the same pointer, complete with its original type, even when T does not have a virtual destructor, or is void.
Третий случай выдаст:
Bar::~Bar() Foo::~Foo()
Почему? Ведь мы только что обсуждали поведение std::shared_ptr! Что тут не так? Вспомните поведение тернарного оператора в C++ — он требует, чтобы второй и третий его операнды были одинакового типа. Более того, каст от базового к производному касту без лишних действий не выполнить, в отличие от обратной ситуации:
#include <iostream>
class Base
{
};
class Derived : public Base
{
};
int main()
{
Base* first;
Derived* second;
Base* foo = second; // Ok
Derived* bar = first; // Error: invalid conversion from 'Base*' to 'Derived*'
}
Наткнуться на данный момент, связанный с тернарным оператором, можно также и в подобном случае:
#include <iostream>
#include <typeinfo>
template <typename T, typename U>
auto foo(bool b, T t, U u)-> decltype(b ? t : u)
{
return b ? t : u;
}
int main()
{
auto _1 = foo(true, 0, 'c');
std::cout << typeid(_1).name() << '\n';
auto _2 = foo(false, 0, 'c');
std::cout << typeid(_2).name() << '\n';
}
Переменные _1 и _2 будут одного и того же типа – int.
Именно поэтому Baz в данном случае будет приведён к Bar.
4, 5 и 6 случаи ничем не отличаются от первого – здесь UB. Надо помнить, что поведение std::shared_ptr отличается от остальных умных указателей.
43. Зачем может понадобиться писать так
#define DO_JOIN(FOO, BAR) DO_JOIN1(FOO, BAR)
#define DO_JOIN1(FOO, BAR) FOO##BAR
вместо
#define DO_JOIN(FOO, BAR) FOO##BAR
A: Потому что препроцессор отработает конкатенацию не так, как того ожидал программист, в том случае, если в качестве аргумента(-ов) мы передадим в макрос DO_JOIN другой макрос:
#include <iostream>
#define DO_JOIN(FOO, BAR) DO_JOIN1(FOO, BAR)
#define DO_JOIN1(FOO, BAR) FOO##BAR
#define MY_MACRO 5
int main()
{
std::cout << DO_JOIN(1, MY_MACRO) << '\n';
}
Output:
15
#include <iostream>
#define DO_JOIN(FOO, BAR) FOO##BAR
#define MY_MACRO 5
int main()
{
std::cout << DO_JOIN(1, MY_MACRO) << '\n';
}
error: unable to find numeric literal operator 'operator"" MY_MACRO'
Получается, макрос MY_MACRO не успел раскрыться, в результате чего была попытка провести конкатенацию с 1 и MY_MACRO, что, разумеется, привело к ошибке.
ISO/IEC 14882:2011
16.3.1 Argument substitution [cpp.subst]
1 After the arguments for the invocation of a function-like macro have been identified, argument substitution takes place. A parameter in the replacement list, unless preceded by a # or ## preprocessing token or followed by a ## preprocessing token (see below), is replaced by the corresponding argument after all macros contained therein have been expanded. Before being substituted, each argument’s preprocessing tokens are completely macro replaced as if they formed the rest of the preprocessing file; no other preprocessing tokens are available.
44. Что попадёт в stdout в результате выполнения след. кода?
#include <iostream>
#include <stdexcept>
struct Foo
{
Foo() { std::cout << "Foo::Foo()" << std::endl; }
~Foo () { std::cout << "Foo::~Foo()" << std::endl; }
};
void foo()
{
Foo bar;
throw std::runtime_error("Error");
}
int main ()
{
foo();
}
A: Зависит от реализации.
// 1
Foo::Foo()
// 2
Foo::Foo() Foo::~Foo()
ISO/IEC 14882:2011
15.3 Handling an exception [except.handle]
9 If no matching handler is found, the function std::terminate() is called; whether or not the stack is unwound before this call to std::terminate() is implementation-defined (15.5.1).
Например, в документации к gcc сказано, что раскрутки стека не произойдёт:
The stack is not unwound before std::terminate is called.
Сборник выкладывается на бесплатной основе, желающим помочь каким угодно образом буду безумно признателен и благодарен. По любым вопросам, рекомендациям и пожеланиям Вы можете обращаться на мой электронный ящик nikita.trophimov@gmail.com. Буду рад услышать абсолютно любое мнение по данному поводу.
В книге ещё много чего можно и даже нужно дорабатывать. Обещаю, что если сообщество проявит хоть какой-то интерес к данному проекту, я продолжу развивать его согласно Вашим предпочтениям и пожеланиям, дополнять новыми задачками и исправлять ошибки. У меня есть много мыслей по поводу улучшения «C and C++ Dark Corners» — среди них добавление тематических разделов, workaround'ы для различных компиляторов и т.д. Главное, чтобы этот интерес был не только с моей стороны.
Жду Ваших положительных и отрицательных отзывов, рекомендаций и, конечно, новых задачек.
Внимательно ознакомьтесь с тем, что указано во «введении», и приятного чтения!
Посоветуйте годных манов, доков, etc.
Школьный друг спрашивает. Чувак инженер-электронщик, но специально не кодил. Предполагаем самые базовые понятия о кодинге на сях под контроллеры и все.
Я бы посоветовал что-нибудь типа «прочитай java language specification & java virtual machine specification», но боюсь для новичка это прозвучит как издевательство.
Хотелось бы каких-нибудь юзер-френдли манов чтобы понять азы на уровне, достаточном для поступления на java junior developer (web).
Туда же - маны по SQL, Hibernate, Spring, алгоритмам, ну что там короче обычно от джуниоров хотят.
Отчаянно кастуются люди, которые реально обучали начинающих яверов. (если знаете кого, припишите каст в каментах). Начнем с sudo cast maxcom.
Посоветуйте сайт с сабжем.
Геймификация, автоматическое тестирование для популярных языков, адекватная система классификации задач всячески приветствуется.
В общем и целом, на федоре (у меня Rawhide) Ш такое Г потому, что они собирают freetype без патентованных алгоритмов, и субпиксельного сглаживания там нет как класса.
Мой рецепт счастья таков: 1) берем freetype версии 2.5, там действительно «почувствуйте разницу» (мне повезло, что оно в дистрибутиве есть сразу, под более старые дистры всегда можно утащить srpm из rawhide)
2) пересобираем RPM с опцией --with subpixel_rendering
3) выставляем субпиксельное сглаживание и плюемся на радугу
4) вставляем в /etc/fonts/conf.d/ файлик вида 10-lcd-filter.conf со следующим содержимым:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<edit mode="assign" name="lcdfilter">
<const>lcdlight</const><!-- кому не нравится, ставьте lcddefault или lcdlegacy -->
</edit>
</match>
</fontconfig>
5) все! ШГ нет, и никакую убунту ставить не нужно.
С версией 2.5, между прочим, никакое Infinality не нужно, и так все пучком.
Ребята, поделитесь классными информативными рсс-подписками. Тематика не важна, просто пара-тройка ваших любимых лент с хорошим соотношением шум/важная и интересная информация.
Мне нравятся lwn и opennet, но как-то маловато, читать нечего.
Настроил сегодня себе и написал статью в wiki ubuntu.ru
http://help.ubuntu.ru/wiki/свободный_драйвер_видеокарт_amd#аппаратное_ускорен...
p.s: там же ниже и про снижение температуры добавил. у меня было 60+, а стало 50+ грудусов.
Пробуем, проверяем и обсуждаем :)
Напишите если заставите работать ускорение с встроенным в google chrome flash-player-ом. У меня получилось только с системным.
В рамках GSoC 2013 Albert Vaca разрабатывает протокол для взаимодействия между рабочим столом KDE и различными устройствами пользователя.
Проект находится на ранней стадии разработки. Демонстрационное видео показывает текущие возможности приложения для Android, а именно:
Для желающих принять участие в тестировании подготовлен apk, код доступен в git-репозитории KDE.
Хотя для первоначальной работы и тестирования был выбран Android, разработчики не планируют останавливаться только на этой платформе и приглашают всех заинтересованных принять участие в разработке.
>>> Подробности
SUBJ. Уточнения:
То что нашел маны на freedesktop хуже чем поваренная книга по QtIF.
Тут вот какое дело — я программист-плюсовик, но никогда этому делу не учился, знания получал исключительно методом тыка и подглядыванием в код старших товарищей.
Как следствие в моих знаниях большое количество пробелов, да и те знания, которые есть, возможно неполные или даже некорректные.
Хотелось бы почитать что-то краткое, внятное, строгое и исчерпывающее.
Можете что-то посоветовать?
Перемещено mono из talks
Господа, вопрос короток.
Какие именно книги нужно изучить, чтобы понять базу электротехники, радиолюбительства, you name it.
Сразу цель: собирать бытовую автоматику. Механических роботов в том числе.
Если есть какие-то хорошие ресурсы, которые отвечают именно на этот вопрос, прошу ссылок (позволит не перечислять названия учебников, а отделаться ссылочкой).
Желательно, учебники, туториалы, итп. Ориентироваться по справочникам, в которых ничего не понимаешь - это жесть..
Поступить на физфак не предлагать :-)
Пасиба заранее
Здравствуй ЛОР,
Хочу представить результат своего копания в настройках Bespin.
Что мы имеем:
Еще скришоты:
http://img812.imageshack.us/img812/8301/bespin2.png
http://img24.imageshack.us/img24/2801/bespin3.png
С первого взгляда Bespin понравился (как замена QtCurve), однако есть шероховатости. Особенно бесит баг с непонятной чёрной рамкой окна. Поставил ширину границ окна =2px, чтоб не мозолило глаза.
И попутно вопрос: подскажите-ка как сделать табы в приложениях как тут: http://th3r0b.deviantart.com/art/Numberone-350884227 ?
Ваши истории успеха с Bespin приветствуются. Дискасс.
>>> Просмотр (1366x768, 442 Kb)
Вышла стабильная версия программы для проектирования печатных плат (EDA) KiCAD. Для скачивания доступны зеркало 1 и 2.
Stable
Testing
Отдельно хочется отметить, что очень много изменений внесено русскими разработчиками, и вносилось бы, однако, есть проблемы. Есть набор патчей и утилит от Qi-Hardware и всякие сторонние предложения, но в апстрим увы их не вносят. Патч на eeshema, который позволяет вызывать её из командной строки (это нужно, например, для работы с Git) и онлайн-сервис для загрузки библиотек из сети, отложили до введения SWEET в Eeshema. Время прошло, а воз по ныне там.
Русские пользователи kicad в основном пользуются форумом на electronix.ru.
>>> Подробности
Собственно сабж. Есть истории успеха? Да, я видел этот (http://aspensmonster.com/2012/12/07/steam-for-linux-beta-on-64-bit-debian-tes...) гайд, но не хочется в конце получить убитые зависимости или другие побочные эффекты. Особенно волнует работа с AMD видеокартой.
PS: У меня amd64. Из-за этого и боюсь поломать зависимости
Привет всем! Вот собираюсь устраиваться на новую работу, там нужны более профессиональные навыки чем на предыдущей. Отправил тестовое задание, все понравилось, кроме мелочей таких как проверка на самого себя в конструкторе копирования и т.п. у кого есть ссылочки на какие либо материалы по данной теме, что бы ничего не забыть, правильный тон программирования и т.п.?
Visual Graph Editor 2 это легкий кроссплатформенный визуальный редактор графов на Qt, предназначен для быстрого и удобного создания, редактирования и сохранения графов и анализа проблем, связанных с графами.
Предоставляет возможность изменить граф в трех основных плоскостях (сверху, спереди, сбоку) и просмотреть его в трехмерном режиме.
Для анализа представлены методы для расширения функциональности программы через JavaScript-подобный язык и RPC (передача данных через XML по протоколу HTTP).
Автор будет рад любой конструктивной критике, новым запросам по поводу функционала и курса развития программы. На данный момент рассматривается тотальный пересмотр имеющихся возможностей, рефакторинг кода, лучшее из данной версии будет перенесено в следующие.
P.S. На сайте имеется архив со скомпилированной версией под Windows, где есть переводы на 3 языка (английский, русский, украинский), примеры использования скриптов для анализа графов при помощи расширенного языка QtScript совместно с VGE2 (Visual Graph Editor 2) API. Также, там же, можно обнаружить пример (пока не полностью отлажен) использования RPC из браузера.
Из планов следует отметить отказ от существующего механизма RPC в сторону SOAP, JSON-RPC 2.0 и JSON-WSP. Расширения API для скриптов. Интеграция редактора и отладчика скриптов в редактор. Более мягкая интеграция с системной темой OS/DE — разные варианты оформления GUI под Windows, Linux/BSD/Solaris (GTK/GNOME theme, Qt/KDE theme) и Mac OS X.
>>> Подробности
Необходимо поставить в Qt'шном приложении иконку, неплохо было бы ее брать из темы, но как узнать правильное название иконки? Т. е. нужен мне «+», логично что это «add», в Faenza и Gnome Colors - так, но вот в Hicolor я такого не нашел. Как быть? Есть ли какая-то спецификация?
Как сделать чтобы работало и под оффтопиком? Можно как-то добавить fallback иконки, на случай если нужных не будет или запущено из под максимальной расширенной?
← назад | следующие → |