Архив за 26 мая 2014

Обучение с помощью лекций неэффективно, говорят учёные

Учащиеся классов, в которых читали обычные лекции, на 55% чаще проваливают экзамен, чем учащиеся классов, где применялись активные техники преподавания, пусть даже в минимальной форме. Таковы результаты нового исследования, опубликованного в журнале Proceedings of the National Academy of Sciences.

Первые университеты в мире были основаны в Западной Европе в середине 11 века, и с тех пор почти тысячу лет чтение лекций перед аудиторией остаётся основной формой преподавания учебного материала. Но многие преподаватели считают, что обучение становится более эффективно при вовлечении студентов в активную деятельность: работу в группах, ответы на вопросы.
Читать полностью »

Сегодня я сделал небольшой сниппет кода для себя и решил поделиться с сообществом его содержимым и историей его создания.

Я довольно долго рылся в интернетах для того чтобы найти хоть что-то похожее на то, что мне нужно, но интернет до сих пор с такой задачей не сталкивался видимо или никто не решился создавать подобный виджет. Наверное никому не надо было.

Для начала озвучу чего мне так хотелось:
Мне нужен слайдер — аналог регулятора громкости, совмещенный с прогресс-баром. Эдакий компонент управления мощностью чего-либо, совмещенный с одновременной индикацией этой мощности. Иногда мощность может превышать установленный предел в 100% — необходимо отображать этот уровень и правильно высчитывать процент. Иногда мощность может заходить ниже нуля ( не знаю может ли — но я на всякий случай предусмотрел такую возможность) и этот уровень тоже надо отображать. Более того, то устройство, которое мы регулируем может быть инертным и разгоняться не с той скоростью, с которой мы выставляем значение. Если вы нажали кнопку форсажа на самолете — то двигатели выйдут на форсажный режим через некоторое время. То есть надо отдельно задавать значение прогрессбара и также отдельно получать-устанавливать текущее значение ползунка слайдера.

Может быть я и фиговый искатель, но в итоге психанул — решил сделать свой:
Здесь ссылка на результат, а под катом описание процесса
Читать полностью »

Ассоциация независимых издателей музыки Worldwide Independent Network (WIN) распространила заявление о шантаже со стороны YouTube. В заявлении WIN утверждается, что YouTube угрожает удалить записи независимых артистов, если инди-лейблы не подпишут контракт на участие в неком будущем сервисе. Предложенные Google финансовые условия для инди-лейблов неприемлемы.

Читать полностью »

Чуть ли не каждое меню, прорисованное дизайнером в макете, имеет чуть иное отображения для текущего пункта меню, на котором в данный момент находится пользователь. Это элементарные приемы для повышения юзабилити. Чаще всего такие активные пункты меню стараются как то выделить цветом.
Читать полностью »

Такие часы плохо подходят для атаки по времениВ библиотеке OpenSSL есть довольно любопытная функция с многообещающим именем CRYPTO_memcmp(). Комментарии к ней объясняют, что обычная memcmp() обладает фатальным недостатком™ – время ее работы зависит не только от размера сравниваемых блоков, но и от их содержимого, а это может помочь атакующему осуществить так называемую атаку по времени.

Аналогичные функции есть в ряде других проектов — поиск по запросу constant time memcmp дает несколько тысяч результатов.

Не будем подвергать сомнению необходимость использования функции CRYPTO_memcmp(), а вместо этого рассмотрим, решает ли она поставленную ей задачу.
Читать полностью »

в 20:00, , рубрики: Без рубрики

Существует множество готовых решений для реализации RESTFul API на Yii framework, но при использовании этих решений в реальных проектах понимаешь что все красиво выглядит только на примерах с собачками и их хозяевами.

Возможно, за время подготовки и написания статьи она немного потеряла актуальность с выходом Yii2 со встроенным фреймворком для создания RESTful API. Но статья по прежнему будет полезна для тех, кто пока не знаком с Yii2, или для тех, кому необходимо быстро и просто реализовать полноценное API для уже существующего приложения.

Для начала приведу список некоторых возможностей, которых мне очень не хватало для полноценной работой с серверным API при использовании существующих расширений:

  1. Одна из первых проблем с которой я столкнулся — сохранение различных сущностей в одной таблице. Для получения таких записей уже не достаточно просто указать имя модели как это предлагается, например тут. Один из примеров такого механизма — таблица AuthItems, которая используется фреймворком в механизме RBAC (если кто-то не знаком с ним — есть замечательная статья на эту тему). В ней содержатся роли, операции и задачи которые определяются флагом type, и для работы с этими сущностями через API мне хотелось использовать url не такого типа:

    GET: /api/authitems/?type=0 - получение списка операций
    GET: /api/authitems/?type=1 - получение списка задач
    GET: /api/authitems/?type=2 - получение списка ролей

    а такого:

    GET: /api/operations - получение списка операций
    GET: /api/tasks - получение списка задач
    GET: /api/roles - получение списка ролей

    Согласитесь, второй вариант выглядит очевиднее и понятнее, тем более для человека не знакомого с фрейморком и устройством RBAC в нем.

  2. Вторая немаловажная возможность — механизм поиска и фильтрации данных, с возможностью задавать условия и комбинировать правила. Например, мне хотелось иметь возможность выполнить аналог такого запроса:
    SELECT * FROM users WHERE (age>25 AND first_name LIKE '%alex%') OR (last_name='shepard');
    

  3. Порой не хватает возможности создания, обновления, удаления коллекций. Т.е. изменение n-ого количества записей одним запросом опять же используя поиск и фильтрацию. Например, зачастую требуется удалить или обновить все записи, попадающие под какое-либо условие, а использовать отдельные запросы слишком накладно.
  4. Еще одним важным моментом была возможность получать связанные данные. Например: получить данные роли вместе со всеми её задачами и операциями.
  5. Конечно невозможно хоть сколько-нибудь комфортно работать с API не имея возможности ограничить количество получаемых записей (limit), сместить начало выборки (offset), и указать порядок сортировки записей (order by). Так же не плохо бы иметь возможность группировки (group by).
  6. Важно иметь возможность для каждой из операций проверять права пользователя (метод checkAccess все в том же RBAC).
  7. Ну и наконец, все это дело нужно как-то тестировать.

В результате анализа примерно такого списка «хотелок» и появился на свет мой вариант реализации API на этом замечательном фреймворке!
Читать полностью »

в 18:39, , рубрики: Без рубрики

Когда категории, на которой планировал выступать, не будет, а экзамены не загорами. 


Предисловие

Так вышло, что в этом сезоне я серьёзно занимался только микро-сумо: начал делать робота в июле 2013 года, закончил к концу марта 2014. Соревнования представляют собой обычное робосумо, но масса робота не должна превышать 100 грамм, а сам робот в стартовом положении должен помещаться в кубик 5 см * 5 см * 5 см. Выставлял его только на одних соревнованиях 6 апреля, там он был единственным роботом.


Black Python соревнуется с двусторонним скотчем.

Поскольку в Санкт-Петербурге на данный момент только 2 робота данного класса, то в майские соревнования не включили этот вид состязаний. А так как выступить хотелось, то я решил сделать по-быстрому лайнтрейсера, благо за 5 лет увлечением робототехники их было штук 10 (не считая сделанных из лего). 


Читать полностью »

Компания Fractal Design представила компьютерные корпуса Core 3500, Core 3500W, Core 2500 и Core 150, образующие серию Core X5. К общим особенностям всех четырех моделей производитель относит наличие съемных корзин для накопителей и возможность установки СВО.

Корпуса для ПК Fractal Design Core 3500 и Core 3500W окрашены в черный цвет

Модели Core 3500 и 3500W рассчитаны на платы типоразмера ATX, E-ATX (шириной до 295 мм), microATX и mini-ITX, и относятся к категории mid tower. Различие между ними заключается в отсутствии или наличии окна в боковой стенке.

Когда AES(☢) = ☠ — криптобинарный фокус

Специалиста по реверс-инжинирингу Анжа Альбертини (Ange Albertini) из компании Corkami в шутку спросили: можно ли сгенерировать картинку JPEG, которая после обработки шифром AES опять превратится в валидный JPEG. Анж принял вызов, а по результатам исследования опубликовал презентацию с объяснением, как это делается с разными форматами.
Читать полностью »

Онлайн компьютерные игры с момента своего появления стали отличным поводом, чтобы завести новых друзей. Ничто так не сближает людей, как общий захват замка или убийство босса. Читать полностью »