Pull to refresh
95
0
Матвеев Алексей Сергеевич @HomoLuden

Developer

Send message
Кстати, вместо goto: Exit можно использовать defer statement. Он срабатывает когда оборачивающая функция завершается.

Поэтому в самом начале функции run() можно создать анонимную функцию и положить ее в список defer

func (r *room) run() {
  defer func() {
    // delete room
    delete(allRooms, r.name)
    delete(freeRooms, r.name)
    roomsCount -= 1
    log.Print("Room closed:", r.name)
  }()

///....
}

После этого делать просто:

if len(r.playerConns) == 0 {
  return
}
Из своего опыта скажу следующее:
1. Тесты контроллеров, как правило, не окупают себя — они пишутся дольше всего и наиболее чувствительны к изменением тестируемого кода. Лично по мне — в рельсах лучше максимально отказаться от тестов контроллеров (оставить только там где это необходимо), а писать интеграционные тесты — т.е. именно слать запросы get, put, post, delete и т.д. на нужные адреса, либо кликать по ссылкам.
Вы же не тестируете каждую вьюху? Хотя такая возможность тоже есть.
2. Лучше всё же shared examples. Решается просто — весь общий код пишется, собственно, в него, а нужные переменные передаются через let:
it_behaves_like "protected controller" do
  let(:method) { 'hello' }
end

По мне, основное и главное свойство тестов (помимо того что они тестируют нужный функционал) — это их читаемость.
Непонятные тесты, которые дают 100% покрытия — не тот результат, к которому бы я стремился. Понятные читаемые тесты, тестирующие большинство ситуаций + самые критичные места — это моя цель.
Я, конечно, не в курсе какие микросхемы стоят у MrYuran, но с навигацией по докам я могу помочь.

Однонаправленные изоляторы:



Выбираете подходящую микросхему, например Si8631BB-B-IS — изолятор на 2.5 кВ, два прямых и три обратных канала, скорость до 150 Мбит/сек, низкий уровень на всех выходах по умолчанию и т.д.
Далее переходите сюда и на вкладке Documentation ищете подходящую pdf-ку

двунаправленные изоляторы


Даташит тут

для прямой замены оптрона


Выбираете какой нравится и кликаете здесь на подходящую pdf-ку

со встроенным DC/DC-контроллером


Даташит на двухканальные здесь, на четырехканальные здесь
Несколько раз покупал ТУТ (один раз) и ТУТ (3 раза) «белые» 8-филаментовые.
Из них три вообще не мерцают (сфотографировал в сравнении с 75-ваттной ЛН)
image и image
а одна мерцает image
Причем самое неприятное, что у того же самого поставщика (по второй ссылке), и в такой же коробке.
Продавец без разговоров Full Refund, но все равно неприятно.
Как грибы после дождя уже появляются приложения для отключения шпионских модулей:

DestroyWindowsSpying: http://rutracker.org/forum/viewtopic.php?t=5054236
DoNotSpy10: http://pxc-coding.com/portfolio/donotspy10/
Novicorp Remove Windows 10 Spying: http://wintoflash.com/download/en/
Windows 10 Privacy Fixer: https://wiiare.in/windows-10-privacy-fixer/
Windows 10 Tracking Disable Tool: https://github.com/10se1ucgo/DisableWinTracking

И, скорее всего, это ещё не всё. Правда, большинство не имеет открытого исходного кода.
Хотелось бы предупредить тех, кто собирается использовать этот фильтр.
На офф. сайте есть более свежая версия — www.x-io.co.uk/open-source-imu-and-ahrs-algorithms — в которой, судя по всему, есть ошибка в формуле шага градиентного спуска (источник).

Как есть
// Gradient decent algorithm corrective step
s0 = -_2q2 * (2.0f * q1q3 — _2q0q2 — ax) + _2q1 * (2.0f * q0q1 + _2q2q3 — ay) — _2bz * q2 * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (-_2bx * q3 + _2bz * q1) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + _2bx * q2 * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);

s1 = _2q3 * (2.0f * q1q3 — _2q0q2 — ax) + _2q0 * (2.0f * q0q1 + _2q2q3 — ay) — 4.0f * q1 * (1 — 2.0f * q1q1 — 2.0f * q2q2 — az) + _2bz * q3 * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (_2bx * q2 + _2bz * q0) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + (_2bx * q3 — _4bz * q1) * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);

s2 = -_2q0 * (2.0f * q1q3 — _2q0q2 — ax) + _2q3 * (2.0f * q0q1 + _2q2q3 — ay) — 4.0f * q2 * (1 — 2.0f * q1q1 — 2.0f * q2q2 — az) + (-_4bx * q2 — _2bz * q0) * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (_2bx * q1 + _2bz * q3) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + (_2bx * q0 — _4bz * q2) * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);

s3 = _2q1 * (2.0f * q1q3 — _2q0q2 — ax) + _2q2 * (2.0f * q0q1 + _2q2q3 — ay) + (-_4bx * q3 + _2bz * q1) * (_2bx * (0.5f — q2q2 — q3q3) + _2bz * (q1q3 — q0q2) — mx) + (-_2bx * q0 + _2bz * q2) * (_2bx * (q1q2 — q0q3) + _2bz * (q0q1 + q2q3) — my) + _2bx * q1 * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f — q1q1 — q2q2) — mz);



Как должно быть
s0= -_2q2*(2*(q1q3 — q0q2) — ax) + _2q1*(2*(q0q1 + q2q3) — ay) + -_4bz*q2*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx) + (-_4bx*q3+_4bz*q1)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my) + _4bx*q2*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);

s1= _2q3*(2*(q1q3 — q0q2) — ax) + _2q0*(2*(q0q1 + q2q3) — ay) + -4*q1*(2*(0.5 — q1q1 — q2q2) — az) + _4bz*q3*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx) + (_4bx*q2+_4bz*q0)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my) + (_4bx*q3-_8bz*q1)*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);

s2= -_2q0*(2*(q1q3 — q0q2) — ax) + _2q3*(2*(q0q1 + q2q3) — ay) + (-4*q2)*(2*(0.5 — q1q1 — q2q2) — az) + (-_8bx*q2-_4bz*q0)*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx)+(_4bx*q1+_4bz*q3)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my)+(_4bx*q0-_8bz*q2)*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);

s3= _2q1*(2*(q1q3 — q0q2) — ax) + _2q2*(2*(q0q1 + q2q3) — ay)+(-_8bx*q3+_4bz*q1)*(_4bx*(0.5 — q2q2 — q3q3) + _4bz*(q1q3 — q0q2) — mx)+(-_4bx*q0+_4bz*q2)*(_4bx*(q1q2 — q0q3) + _4bz*(q0q1 + q2q3) — my)+(_4bx*q1)*(_4bx*(q0q2 + q1q3) + _4bz*(0.5 — q1q1 — q2q2) — mz);



Ээх, велосипеды.
pixi.js возьмите, там и 20 тысяч спрайтов спокойно будут тянуться :)
www.goodboydigital.com/pixijs/bunnymark/ — у меня фпс начинает всаживаться (с 60 до 57 фпс, но все же) на где-то 30к, насколько помню, меньше 25 кадров в секунду — это 50к зайцев.
Crossroads вроде как тоже уже мертв (и еще). А ZeroMQ перезагружают и переписывают на С (проект nanomsg).
UnitPay. Думаю, что unitpay это представитель этого агрегатора.
Опробовано много — только эти порадовали. Комиссии небольшие, есть возможность переложить их на платящего :)
Работают с физиками.
Хорошая документация и тесты для проверки работы системы с вашей стороны.
а где взять opencm3?
Внесу свои 5 копеек:
В программе Naza Assistant можно включить два дополнительных режима полета IOC (интелектуальные режимы) — Course Lock и Home Lock. Их переключение назначается на тумблер S2 (Off-CL-HL). Упрощенно эти режимы означают следующее:
Course Lock — при включении коптер записывает направление «вперед» и, в дальнейшем, при использовании данного режима управление будет работать по этому запомненному напрвлению носа коптера.
Home Lock — при включении коптер таке записывает координаты точки взлета (Home) и при активации этого режима в какую бы сторону не был направлен нос коптера при нажатии правого стика на себя коптер будет лететь на вас, от себя — от вас. Полезно если потеряли ориентацию коптера в пространстве.
Еще немного добавлю про безопасность — очень рекомендую для начала поставить защиту пропеллеров. Это поможет сберечь как пропы, так и разнообразную собственность и части тела в случае нештатной ситуации. Вес защита добавит небольшой (около 70 грамм ) и на времени полета скажется не сильно. Правда с защитой фантик будет более чувствителен к ветру. Так же стоит помнить о том, что не следует летать над людьми — всякое может произойти и падающий сверху 1кг пластика и электроники не добавит приятных ощущений наблюдателям.
И напоследок позволю себе не согласиться насчет FC40. Да, это первый фантик, но с обновленным полетным контроллером Naza-M V2 и управлением на частоте 5,8ГГц. Соответственно можно использовать любую камеру с Wi-Fi на борту без опасений внезапного улета фантика в сторону исторической родины.
Меньшая батарея FC40 компенсируется ее существенно меньшей стоимостью и распространенностью в хоббийных магазинах, так как там стандартный разъем XT-60. Во втором фантике батарея проприетарная и стоит весьма недешево. Также есть возможности установки в первый фантик двух батарей (как снаружи корпуса на подвесах, так и внутри корпуса с минимальными переделками) что дает около 15 минут полета при полной загрузке. Основной минус FC40 это отсутствие телеметрии в штатном варианте и дальность дейстивя Wi-Fi камеры. С последним народ борется путем использования Wi-Fi экстендеров — до 300-350 метров удается поднять дальность.
Собственно я сам летаю сейчас на FC40. Правда модернизирован он в хлам: установлен подвес Tarot T2-D, камера GoPro Hero 3+ BE, видеотрансмиттер 500mW на 2.4ГГц, телеметрия DJI iOSD mini, приемник и монитор 7". Батарею пользую 2700mAH. На подходе апгрейд аппаратуры управления — дальность видеолинка сейчас до 1км, а вот управление я терял на 400 метрах. Благо failsafe отработал как по учебнику.
Да ну? Как раз это в последнюю очередь надо. Умный дом должен начинаться с умного сортира:

1) автоматическая вентиляция
2) Защита от протечек и перекрытие воды когда квартира ставится на охрану.
3) слежение за температурой стояки и подключение бакового нагревателя автоматом
4) логи температуры воды, для озолупливания коммунальщиков.
5) автоматический ароматизатор/освежитель

А также со входной двери:

1) автоответчик на домофон и вынос домофона в телефон (через сотовый мост) или на комп.
2) видеоглазок пишущий всех кто шарится возле двери и сливает это на сервер.
3) кодовый замок (вообще шик такую экзотику ни один домушник не вскроет)
4) трансляция прогноза погоды и обстановки за бортом в прихожую, чтобы сразу по погоде одеться.
5) трансляция состояния всех датчиков а также токовых потребителей на входную группу, чтобы с первого взгляда оценить все ли выключено, не забыт ли где то утюг и тыды.

Освещение в последнюю очередь идет:

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

Вот это все реально облегчает и упрощает жизнь, а главное легко реализуемо в обычной квартире без тотального дестроя всего и вся.
Сколько стоит принтер в Росси?
Интересно было бы взглянуть внутрь железки, посмотреть, что там за радио-модуль установлен. 5 мВт на 433 МГц с дешёвым китайским передатчиком (который АМ использует) пробивает 10 этажей (с крыши до первого этажа леснечной площадки), а при наличии прямой видимости бьёт примерно на 1 км. В качестве антенны кусок провода ~16см.

Я правильно понимаю, что API не имеет какой-либо авторизации? Т.е. вставив сюда несколько картинок с URL 192.168.0.168/api.htm?ch=X&cmd=2 где X принадлежит [0,31], у владельцы этих устройств, не сменивших IP и открывших статью, включится весь свет? :)
Я бы рекомендовал шустрый, гибкий и регулярно обновляемый HOTween вместо медленного и устаревшего iTween.
Связка www.acestream.org/ + www.trackit.pm/ фактически тоже самое только вэб и к сожалению тоже ни каких мобайлов и смарт тв (
UFO landed and left these words here
UFO landed and left these words here
Винтажный пускатель ПАЕ серии позволит вам справиться с любой нагрузкой! Сплав современных технологий, и проверенных временем решений!

простите, не удержался :)
Чем будет принципиально отличаться модуль на более мощных потребителей?

Information

Rating
3,855-th
Location
Саратов, Саратовская обл., Россия
Date of birth
Registered
Activity