Хабрахабр:
Нас уже сложно удивить какими-то гаджетами, в особенности ? клавиатурами. Да, выпускаются различные клавиатуры с кнопками, которые представляют собой светодиодные экранчики (Оптимус Максимус от Лебедева), есть всякие резиновые клавиатуры, маленькие клавиатуры, большие клавиатуры. Однако никто этому уже не удивляется. Сейчас же компания Minebea внесла некое разнообразие, выпустив клавиатуру, которая, по сути, представляет собой сенсорный дисплей. Выглядит такая клавиатура, надо сказать, необычно и достаточно привлекательно. Читать дальше →
На днях получил комментарий от Google по поводу того как кодировать Webm для Android и планируется ли делать какие-либо presets, чтобы видео игралось наверняка. Вот что я получил в ответ: Большинство текущих декодеров в Android реализованы программно и поэтому не справятся с воспроизведением HD видео. Мы рекомендуем использовать обычный 360p preset, распространяемый с нашими патчами для ffmpeg. Наши тесты показали, что 480p файлы воспроизводятся на некоторых девайсах. Как только у нас будут готовы 480p presets, мы, как обычно, их выложим. Что за патчи имеют ввиду разработчики? Так как в текущей реализации ffmpeg поддерживаются не все возможности libvpx, команда webm выкладывает патчи, добавляющие presets и полноценную поддержку библиотеки (маппинги команд кодировщика). Последнюю версию патчей можно взять отсюда: http://code.google.com/p/webm/downloads/list 360p пресет, о котором шла речь выше, используется через параметр -vpre ffmpeg -i "$inputFileName" -s 640x360 -vpre libvpx-360p -b 500k -acodec libvorbis -aq 2 -ac 2 -ar 44100 -f webm -threads 12 -y "$finalName"
Реализованное нами в прошлый раз атомарное умножение является примером более общей модели, которую Реймонд назвал ?сделай, запиши,(попытайся снова)?. for (;;) { // берём начальное значение общей переменной, // которую мы собираемся изменять oldValue = sharedVariable; ... берём начальные значения других параметров ... newValue = ... вычисляем новое значение, используя oldValue и копии остальных параметров ... // вместо Xxx может быть Acquire, Release, или ничего if (InterlockedCompareExchangeXxx( &sharedVariable, newValue, oldValue) == oldValue) { break; // запись удалась } ... удаляем newValue ... } // попытаемся снова Мы вычисляем новое значение, и затем вызовом InterlockedCompareExchange записываем его в общую переменную только в том случае, если её значение не изменялось. Если оно изменилось, значит другой поток нас опередил; в этом случае попытаемся выполнить операцию по-новой, с самого начала, ? в надежде, что в следующий раз никто нас не ?подрежет?. Читать дальше →
Во время работы над крупными проектами с множеством макетов и видов объекта даже минимальное изменение в повторяющемся компоненте может потребовать времени. Проход по множеству макетов и подстройка цвета или начертания у подобного повторяющегося элемента может стать изнуряющим делом. Конечно же, если у вас есть подмастерье, выполняющий всю грязную работу за вас, то вы, определённо, везунчик, но что же делать нам, фрилансерам? Неужели нам остаётся лишь сносить эту му?ку? Что ж, теперь нет! Недавно я обнаружил подход, который позволит дизайнерам распрощаться с открытием 23 PSD-файлов только ради смены цвета элемента в шапке. Вместо этого мы можем поступать разумно, как наши коллеги, разработчики, и импортировать внешние файлы при помощи кое-чего с названием ?Variables (Переменные)?. Сие позволит поместить многократно используемый компонент в отдельный файл и просто импортировать его во все макеты. Теперь, когда нам понадобится внести изменение, мы будем просто вносить его в одном месте. Читать дальше →
Не секрет, что работу с профилями пользователей в Django иначе как несчастьем не назовёшь. Все мы сталкивались с монолитностью модели auth.User, неадкеватным набором полей у неё, а также всеми теми ухищрениями, к которым приходилось прибегать. Извращаться приходилось всем: не только пользователям джанги, но и самим её core-разработчикам. Помните, например, как в Django 1.2 внезапно стало возможно использовать в поле username символы собаки (@) и точки? Знаете зачем? Чтобы в качестве логинов можно было использовать адреса e-mail. Нам, простым пользователям, тоже жилось несладко. Для того, чтобы изменить профиль пользователя, добавив ему какие-нибудь интересных полей ? обычная, казалось бы, вещь, да? ? приходилось действовать разными способами. Интересно?
Собственно, захотелось мне посмотреть на Unity. По картинкам и видео ? вроде ничего. Да вот беда. В виртуальной машине его не запустишь ? 3D требует. Сам я KDEшник. Основной ОС на ноутбуке является kubuntu. Ну, думаю, можно поставить второй системой. Свободное место, вроде, есть. Ок. Качаю образ Natty, прожигаю а вот хрен. Оказалось, не работает мой CD-ROM. Ноут уже довольно старенький. Загрузки с флешек в биосе тоже нет. После кратковременной паники было найдено решение. Оказалось, что grub2 научился понимать формат ISO 9660 и может загружать ОС прямо из ISO-образа, расположеного на жестком диске. Как выяснилось далее, не все системы готовы к такому повороту событий. Многие по тем или иным причинам приходят в замешательство при загрузке. К счастью, Ubuntu не является одной из них. Читать дальше →
Отписаться от этой рассылки