вторник, 19 ноября 2013 г.

Релиз OpenSUSE 13.1

Сегодня вышел новый релиз популярного дистрибутива OpenSUSE 13.1.

Интересные нововведения:



  • Linux 3.11
  • GCC 4.8
  • обновлен systemd
  • X Server 1.14.0
  • GStreamer 1.0
  • KDE 4.11
  • GNOME 3.10

Более подробно о новшествах релиза под катом.


понедельник, 12 августа 2013 г.

Установка Quake 3 Arena в Linux

Скорее всего это я тормоз, но вдруг кто не знает. Всеми горячо любимую Quake 3 Arena можно установить в Linux без всякого wine.

Для этого с сайта http://ioquake3.org/get-it/ качаем Engine и Data installer. Запускаем их по очереди с рутовыми правами:

sh ioquake3-1.36-7.1.x86_64.run
sh ioquake3-q3a-1.32-9.run


После этого копируем из виндовой версии игры (можно взять, например, тут: http://oldgames.ru/game/731.html) файл pak0.pk3, который лежит в папке baseq3, в /usr/local/games/quake3/baseq3.

Теперь запускаем /usr/local/bin/ioquake3 и наслаждаемся.

P.S.: С размерами окна все не очень радужно, на фулскрин у меня запустилось только в первый раз, но если поиграть с настройками разрешения, то можно подогнать почти в фулскрин)

10 причин почему ваш проект должен использовать Dojo Toolkit

Dojo Toolkit это одновременно самый мощный и наименее используемый JavaScript фреймворк. В то время, как почти каждый JavaScript фреймворк или тулкит обещает сделать все на свете и даже больше, Dojo Toolkit предоставляет наиболее убедительные аргументы в доказательство своей функциональности. В этом посте будут описаны многие важные возможности Dojo Toolkit, а также будет рассказано, почему вы должны использовать его в своем следующем проекте.

четверг, 20 июня 2013 г.

Быстрое переключение на любой рабочий стол

Одним из новшеств GNOME Shell стало динамическое создание рабочих столов. Теперь их количество ограничено только вашими потребностями, а в силу принципа "одно приложение - один рабочий стол" при активной работе воркспейсов становится много (например, сейчас на рабочем компе у меня их 7) и переключатся между ними с помощью комбинации Ctrl+Alt+Arrow становится сложно. По умолчанию, мы можем задать хоткеи для 4 рабочих столов. Под катом я расскажу как задать хоткеи для произвольного числа рабочих столов.

понедельник, 3 июня 2013 г.

Собираем все контакты в одном месте

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

У меня три основных электронных способа связи с внешним миром:
  • Skype
  • ICQ
  • VK
В данной статье я хочу рассказать как связать все контакты и переписку из этих трех способом связи в одном приложении. Таким приложением выступит замечательный клиент Pidgin.


четверг, 16 мая 2013 г.

Головоломный JavaScript


Головоломный JavaScript

Время от времени в сети мне попадаются различные WTF примеры на JavaScript. Часто на первый взгляд они выглядят безумно, но на самом деле просты и логичны, поэтому я решил попробовать их собирать и разбирать. Кроме очевидного профита в виде более глубого понимаю языка это еще и отличные вопросы для собеседований)

Чтобы было интереснее я буду прятать ответ и решение под спойлер.

1. Так что помните, дети, всегда подставляем системы счисления!

Для начала простой, но прикольной пример. Что вернут такие вызовы parseInt?

parseInt('fuck');
parseInt('fuck', 16);
Узнать ответ
parseInt('fuck');     // NaN
parseInt('fuck', 16); // 15

Как работает parseInt: он посимвольно проверяет переданную строку на соответствие указанной вторым аргументом системе счисления и если находит некорректный символ, то завершает работу. По умолчанию, система счисления считается десятичной, при условии, что переданная строка не начинается с 0. В десятичной системе счисления символ ‘f’ недопустим и функция заканчивается свою работу не найдя ни одной цифры. А вот в шестнадцатиричной системе символ ‘f’ допустим и соответствует десятичному числу 15. Символ ‘u’ не допустим и функция завершает свою работу.


2. Может кто подскажет?

Чему равно такое выражение?

"Why am I a " + typeof + "";
Узнать ответ

“Who am I a number”

Оператор “+” обладает большим приоритетом чем “typeof”, поэтому указанная запись эквивалентна следующей:

“Why am I a ” + (typeof (+ “”)).

Унарный “+”” выполняет привидение к числу, поэтому “typeof” от результата его выполнения - это number.


3. Кто больше?

Ну и кто больше?

[1, 2, 4]         <  [1, 2, 5]
[1, 2, 'd']       <  [1, 2, 5]
[1, 2, ['d', 5]]  <  [1, 2, [20, 5]]
[1, 2, 5]         == [1, 2, 5]
[1, 2, 5]         <= [1, 2, 5]
[1, 2, 5]         >= [1, 2, 5]
Узнать ответ
[1, 2, 4]         <  [1, 2, 5]        //true
[1, 2, 'd']       <  [1, 2, 5]        //false
[1, 2, ['d', 5]]  <  [1, 2, [20, 5]]  //false
[1, 2, 5]         == [1, 2, 5]        //true
[1, 2, 5]         <= [1, 2, 5]        //true
[1, 2, 5]         >= [1, 2, 5]        //true

Согласно спецификации ECMAScript 5 для выполнения операции сравнения аргументы, которые не являются примитивами, должны быть привидены к примитивам (если кому интересно, то пункт 11.8.5 “Алгоритм сравнения абстрактного отношения”). Сначала JavaScript пробует преобразовать аргумент к числу с помощью метода valueOf и только когда это не удается приводит к строковому типу (изначально я хотел написать здесь про естественность сравнения чисел, и что когда мы говорим, что слово А больше слова Б, то имеем в виду длину. Но из беседы с коллегой выяснилось, что это не правда. Когда мы сравнимаем два слова мы инстанцируем связанные с ними образы и сравнимаем их. И только если образов не нашлось, то сравниваем слова не как метки образов, а именно как набор букв). Для массивов метод valueOf не определен и поэтому они сравниваются как строки:

"1,2,4" < "1,2,5" //true
"1,2,d" < "1,2,5" //false

Но все вышесказаное верно только для операций сравнения. В случае оператора “==”” привидение к примтивам осуществляется только если один из аргументов примитив, а во всех остальных случаях оператор “==” возвращает true только если оба аргумента ссылаются на один объект (пункт 11.9.3 “Алгоритм сравнения абстрактного равенства”), что в нашем случае не так.

Следует заметить, что для объектов сравнение работать не будет, т.к. их дефолтный toString возвращает [object Object].

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

!(arr1 < arr2)&&!(arr1 > arr2)

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

var arr1 = [],
    arr2 = [],
    res,
    start,
    end,
    len = 600000;

for(var i=0; i<len; i++){
    arr1[i] = i;
    arr2[i] = i;
   // if(i == len-100) arr2[i] = i+1; //чтобы делать не равные массивы
}

//проверим, что массивы создались
console.log(arr1.length, arr2.length);

//наш метода
start = new Date();

res = !(arr1 < arr2)&&!(arr1 > arr2);

end = new Date();

console.log(end.getTime() - start.getTime(), res);

//классический циклический
start = new Date();

for(var i=0; i<len; i++)
    res &= (arr1[i] === arr2[i]);

end = new Date();

console.log(end.getTime() - start.getTime());

Разница поражает: 123мс на 2015мс в пользу привидения типов!

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


понедельник, 22 апреля 2013 г.

IE10 и input

 Из серии "Заметки на полях", вдруг кому пригодится.

Верстка не моя сильная сторона, но на меня свалилась бага в IE10, решения которой в рунете не нашлось. Спешу поделится очередными хаками для очередного IE.

Компания из Редмонда опять пошла своим путем и вместо улучшения рендеринга добавила новые прибамбасы в input. Теперь они сами дорисовывают input-ам кнопки очистки поля (Clearing Text):


и кнопку показа пароля (Verifying Password):



К счастью MSDN сам же рассказывает как это выключить:

sel::-ms-clear {
    display: none;
}

и

sel::-ms-reveal {
    display: none;
}

где sel - это селектор нужного элемента, т.е. по хорошему это просто input.

P.S.: в добавок ко всему данная "фича" воспроизводится не во всех IE10 и прямой зависимости от точной версии и номера билда не обнаружено.

понедельник, 15 апреля 2013 г.

GNOME Shell Extensions

GNOME Shell введенный вместе с GNOME3 крайне спорная штука. Если первые два поколения гнома копировали оконные интерфейс Windows, то третий в корне сменил интерфейс, но сделал это намного удачнее чем метрокафель. Да, он стал намного прожорлевее из-за красивостей и того, что написан на JavaScript, но зато он стал гибкой платформой для пользовательских виджетов. За счет того, что это JavaScript, писать их легко и приятно + легко интегрировать с другими с веб-страницами. За счет этого факта было реализовано хранилище расширений, которое позволяет устанавливать новые дополнения одним кликом в браузере: extensions.gnome.org.

Приведу небольшой список дополнений, которые использую сам.

пятница, 12 апреля 2013 г.

openSUSE, Node.js и libv8

Из серии "Заметки на полях", вдруг кому пригодится.

После дежурного обновления системы неожиданно развалился мой сервер на node.js. При запуске пишет следующую ошибку:

node: symbol lookup error: node: undefined symbol: _ZN2v86LockerC1EPNS_7IsolateE

Текущие версии пакетов в репах:

libv8: 3.17.16.0-140.1
nodejs: 0.8.18-21.1

Путем перебора установлено, что корректно работает следующее сочетание версий:

libv8: 3.12.19.1-1.9.1
nodejs: 0.6.19-1.1.2

Теперь, во избежание новых капризов, обновления заблокировал.

P.S.: чтобы пост был не таким скучным, результат вставки лога ошибки в поиск Яндекса:


вторник, 9 апреля 2013 г.

Влад III Валашский

Мумифицировавшийся трупик старого сайта переехал с народа на укоз. Не особо приятно, но в целом пофиг и не это главное. При просмотре не сломалось ли чего обнаружил несколько заметок, которые не относятся к школьному юмору, а претендуют на небольшое историческое исследование. Прошу строго стиль не судить, писалось это лет 7 назад, а править стилистику сейчас не хочется. Итак, первая из двух заметок "из детства", которые хочу вам представить:

Влад III Валашский

Все знают Дракулу, многие знают Влада Цепеша, но мало тех, кто знает Влада III Валашского...
  
Все знают, или хотя бы уже догадались, что это один и тот же человек. Бесспорно правда то, что это всё имена одного и того же человека, но правильнее было бы выразится, что это три ипостаси одного и того же человека. Для полноты портрета попытаемся понять каждую сущность в отдельности. 


пятница, 22 марта 2013 г.

Облегчаем себе жизнь в консоли

Вводная статья про Dojo пишется тяжело, собственно, всегда самое сложно это начать, поэтому позволю себе в очередной раз немного отвлечься.

Сегодня я хочу рассказать о мелочах, которые способны значительно облегчить вашу работу с консолью Linux. Вероятно кому-то из вас все эти вещи покажутся очевидными и давно известными, но все мы о чем-то когда-то не знали.



среда, 13 марта 2013 г.

Красота спасет мир

reStructuredText

Уважаемый @rcassum в свойственной питонистам манере делать геморрой на ровном месте все автоматизировать решил не пользоваться красивым UI и создавать свой написальщик файлов. Поскольку на работе я успешно использую для написания Reference Guide язык разметки reStructuredText, то тоже решил немного поиграться с автоматизацией.

Утилита для превращения RST в HTML нашлась легко: в бездонных репозитория openSUSE существует пакет python-docutils, который содержит утилиты для превращения RST во все основные текстовые форматы. Кроме консольной утилиты нашелся и графический редактор ReText. Но у обоих утилит обнаружился большой недостаток: по сути отсутствует подсветка синтаксиса. Специально для таких эстетов нашлась библиотека Pygments, которая предоставляется пакетом python-Pygments. Повозившись немного с питоном в попытках сотворить собственный скрипт, который связал бы все вместе, махнул рукой и взял рабочий проект на базе Sphinx.



среда, 27 февраля 2013 г.

TeamViewer

Наверно, ни для кого не секрет, что ничто так не пробуждает желание работать, как валяние дома на больничном)

Для удаленной работы есть куча приспособлений, но со всеми в моем случае были какие либо траблы. SSH и VNC требуют создание какого-то безопасного соединения типа openVPN, а это лишняя морока с админами. Chrome Remote Desktop почему-то не заработал, наверно, потому, что я не люблю Chrome) Но недавно я открыл замечательную программу TeamViewer.

Полноценная удаленная работа с пробросом всех горячих клавиш. Есть клиенты под все ОС, включая мобильные. Из замеченных недостатков дискриминация Linux. Как и многие другие производители ребята не стали замарачиваться с нормальным клиентом и завернули в Wine. Работает нормально, но по приятности уступает виндовому клиенту + стабильная линуксовая версия младше виндовой и поэтому для корректной работы нужно ставить старую виндовую.

Кроме удаленной работы можно скачивать\закидывать файлы с удаленной машины. Несколько раз выручало, когда один фильм досмотрел по дороге на работу, а другой забыл закинуть)

P.S.: а, ну и главное: http://www.teamviewer.com. Хотя Яндексом, наверно, все умеют пользоваться

вторник, 26 февраля 2013 г.

В начале был narod...

Моя прошлая личная страничка умерла на столько давно, что никто уже и не помнит что такое burashka-lcme.narod.ru


В тоже время графоманство желание публиковать какие-то свои большие мысли с целью их структурирования никуда не делось. Профессиональная гордость Web Front-end Developer-а требовала блога написанного от и до самостоятельно. Желательно без всяких CMS, т.к. от заглядывания в кишки Joomlы и WordPress-a становилось дурно. Но верстать мне на столько же грустно, на сколько весело писать на JavaScript, а дизайнера во мне столько же сколько фотошопа в моих фотографиях, поэтому создание своей странички все откладывалось и откладывалось. И вот теперь сидя на больничном в канун свого ДР я решил, что надо быть проще и взял просто блог. Даже шаблон особо менять не стал, а то выйдет опять такое же коричневое нечто как было в первый раз)

О чем же я собираюсь здесь писать? Обещаю всякую мимолетную ерунду о жизни писать в соцсети, туда же скорее всего отправятся и фотографии. Здесь же постараюсь писать вещи с намеком на полезность:
  • что-нибудь интересное по JavaScript;
  • личные открытия в общении с openSUSE;
  • про незаслуженно заигноренный на просторах нашей Родины js-фреймворк Dojo
и, если повезет, расскажу про такую замечательную штуку, как APS Custom UI.