• Vim и переключение раскладок: о наболевшем
    0
    А какое у вас DE? xkb-switch с какого-то момента перестал работать в Unity, а когда я перешел на Gnome 3, то оказалось что и в нем тоже. Некоторое время жил с такой штукой.

    function SetUSLayoutGnome()
    silent !qdbus org.gnome.SettingsDaemon.Keyboard /org/gnome/SettingsDaemon/Keyboard org.gnome.SettingsDaemon.Keyboard.SetInputSource 0
    endfunction


    Но сейчас по большей части ушел на Атом, потому что vim, если его использовать как IDE, обрастает каким-то жутким количеством костылей и теряет ту простоту, из-за которой им и приятно пользоваться.
  • “Nano-Framework” для автоматизации добавления скриптов в .{bash/zsh}rc
    0
    Быстрый поиск не дал результатов и я написал свою поделку.


    http://dotfiles.github.io/

    Ну серьезно. Тонны всего уже написано, менеджеры конфигураций, плагинов для bash,zsh,vim и прочего.
    Все в олпенсорсе и многое в репах дистрибутивов.

    Как вы можете помочь проекту

    Лопату принести? Просто после 37 строчек постить Patreon это уже ни в какие ворота.
  • Не «Танками» едиными – скучаем с пользой в стиле DIY
    0
    Там много SMD кондёров. Нанографитовая сверхтеплопроводная изоляционная сэндвич-плёнка может быть.

    Из старых ADSL модемов делали универсальные мини-ПК на линуксе:
    http://hri.sourceforge.net/ (Hardware Recycling Initiative)
    но заглохло там всё, наверное ардуины подешевели.

    Анализатор СВЧ диапазона в корпусе и с экраном телефона Nokia 3410:
    http://www.rlocman.ru/shem/schematics.html?di=63334
  • Космическая ручка
    0
    Ну тут вопрос шашечек :)

    Эта вполне пригодится на случай космоса или дождя. А для простого ежедневного письма мне больше нравятся гелевые заправки для паркеровских ручек. Сейчас пишу простой стальной Parker Jotter с гелевым стержнем Schmidt — пишет гораздо приятнее родных паркеровских гелевых, тоньше линия.

    А обычной шариковой писать много не могу (хоть и космической) из-за усилия. Гелевая гораздо приятнее.

    www.cultpens.com/acatalog/Schmidt-P8900-Super-Bowl-Refill-Fine.html
  • Программирование под Android для начинающих. Часть 1
    0
    Первый вопрос перед изучением программирования под Андроид должен быть — зачем? Потому что сейчас как бы не 2008-й год. Если не дай бог для игр, то есть куча конструкторов, из которых эти игры сейчас собираются как комп из запчастей, изучать для этого жабу и Андроид — совершенно пустая трата времени.
  • Оптимизируем VPS за 5$ (512MB RAM / 1 CPU) так, что сайт на wordpress выдерживает нагрузку в 42,735,587 хитов в день
    +14
    nginx + php-fpm намного меньше апача будут есть
  • Как сделать холдер для телефона своими руками
    +11

    И опять я как стоматолог буду мутить воду с нетипичными материалами. Посмотрите в сторону пластмасс холодной полимеризации. Некоторые будут прозрачны. а некоторые будут иметь пикантный розовый цвет)) Цена — рублей 300 за 150 грамм порошка + 100 грамм растворителя. Обзор пластмасс
  • Эпилог Оперы
    +2
    А ещё можно так:
    opera://flags/#activation-order-tab-cycling
  • Эпилог Оперы
    +6
    Я не совсем понял, что имелось в виду под «скроллинга курсорами клавиатурными». В любом случае, все используют только часть существующей функциональности, поэтому эти 9 плагинов реализуют только те фичи оперы, которыми я активно пользовался, которые были «в пальцах» и их отсутствие сильно раздражало.

    Из нюансов перехода — пришлось повозиться с настройками общесистемных шрифтов (linux, fontconfig): Opera и Chromium что-то химичат с шрифтами, каждый по-своему, поэтому в них всё более-менее нормально отображалось, а Firefox, как выяснилось, чётко следует общесистемным настройкам, без самодеятельности. В принципе это скорее хорошо, только вот я с удивлением обнаружил, что у меня общесистемные настройки fontconfig ни к чёрту, и пришлось повозиться.
    Экспорт/импорт закладок и RSS, само собой.
    Ну и пользователям OperaMail вероятно смотреть в сторону Thunderbird.

    Плагины:
    • Brief (RSS-читалка, альтернативы Bamboo и NewsFox) — не так удобно, как встроенная в Opera, но жить можно
    • Customizable Shortcuts — настройка горячих клавиш
    • FireGestures — мышиные жесты
    • Greasemonkey — userjs
    • NoSquint — настройка default zoom
    • Private Tab — приватные вкладки
    • RSS Icon for Brief — иконка для RSS в адресной строке (почему-то не всегда срабатывает, возможно нужно будет поискать альтернативу)
    • Super Start — экспресс панель
    • Tab Utilities Phoenix — настройки и управление табами

    Основной недостаток всей это радости — количество настроек у некоторых плагинов просто пугает, иногда даже кажется, что у всей оперы было меньше настроек, чем у плагинов файрфокса.

    Что понравилось — набор плагинов для сетевой гигиены у файрфокса на порядок круче:
    • Adblock Plus — реклама/privacy/malware
    • NoScript — навороченный комбайн защищающий от нескольких типов атак
    • RequestPolicy — контроль межсайтовых запросов (лучше ставить бету 1.0)
    • Cookie Monster — контроль кук с посторонних сайтов
    • RefControl — контроль передачи Referer: при переходе с одного сайта на другой
    • HTTPS Everywhere — форсирование использования https где возможно
  • Поговорим про… фонарики?
    +9
    Давно закупаюсь китайскими фонарями, в основном для двух целей — походных и как фара на велосипед, так что имею некоторый опыт.

    Первый был UltraFire WF-501B, для начала подошел, однако потом — сплошлое разочарование. В походах быстро нагревался и разряжался, свет очень неравномерный, засвеченный центр и тусклые края. Когда поставил на велосипед — убил его. Из-за тряски фонарь стал постоянно переключать режимы, а затем и вообще умер. Точнее умерла кнопка, долго мучался и решил просто купить новый. В общем не рекомендую.

    Второй был такой. При всей своей дешевизне, отличный фонарь. Жил дольше всех как в различных полазках, переживая падения и повышенную влажность подземелей, так и на велосипеде. Дико нравится возможность фокусировки, от рассеянного большого пятна, до точечно сфокусированного, ночью пробивающего на квартал вперед (друзья в шоке). В общем рекомендую, если хочется дешево и хорошо, особенно версию без режимов типа «мигания», купил себе еще 2 таких прозапас. Однако тоже боится тряски.

    Третий был UltraFire TH-T60 взял на пробу. Выглядит как первый, однако сборка куда более качественная и мощность побольше. Пока что живой, пользовался немного, но устраивает. Плохого пока ничего не могу сказать, мало испытывал «в поле».

    Недавно решил попробовать взять на велосипед отдельную фару, задолбался мучаться с креплениями. Выбор пал на MarsFire M03. У него 4 большие батарейки в отдельной сумочке (длина провода позволила удобно закрепить их под седлом) и целых 3 (!) cree-светодиода. Включаются последовательно от 1 до 3 и мигание. Мощность даже одного такая, что отлично освещает дорогу вокруг, а когда включаешь все три — ночью настает настоящий день, люди оборачиваются, и можно отвечать мудакам на тазах, светящим тебе в глаза ксеноном во дворе. Очень мощная штука, заряда хватает на несколько ночных поездок, заряжается проводом даже не снимая с велосипеда. Если хотите велофару — must have.

    Были еще какие-то фонари, но быстро умирали и сейчас не вспомню модели. Может немного сумбурно написал, сорри, можно спрашивать, если что-то интересно.
  • Устанавливаем любой Linux дистрибутив на Digital Ocean
    +7
    Вы временами lowendbox.com просматривайте, там есть хорошие предложения от известных провайдеров, временами :)
    за 10$ в год вполне можно урвать что-то интересное
  • UFO just landed and posted this here
  • Прокачка debian/ubuntu сервера для маленьких
    +2
    Мне кажется, для тестовых целей есть vds за $10-15 (за год!). Например (тут, о панели и плюшках тут ).
    Искренне не понимаю почему тут пиарят сильно более дорогой и гораздо более лаговый* DO (глючность вылезает, когда на DO мониторинг ставишь, так они вполне ничего)

    *)если кому-то интересен конкретный аргумент (с логами и т.д), пишите в ЛС. Я принципиально публично не выкладываю такие веши.
  • Бесплатные звонки в США и Канаду с любого SIP устройства
    0
    Кстати, получить бесплатно американский номер можно и с помощью www.callcentric.com/. Там же можно получить и бесплатный iNUM. Их услугами пользуюсь давно, очень доволен: и номера дают бесплатно, и переадресация звонков на другого SIP-оператора выполняется легко и бесплатно… да и вообще срвисов кучу предоставляют бесплатно. Единственное, почему основным своим SIP-оператором держу Zadatma — у них тарифы на звонки по России/Украине выгоднее.
  • Сам себе сотовый роуминг. Создание GSM гейта на asterisk + донгл от сотового оператора
    +2
    Я сначала подумал, что вы предлагаете хитрым образом организовать локальную БС в роуминге.
    А так — интересно, конечно, но усилия не стоят того.

    В мегафоне, подключив мультифон, можно:

    1) возить с собой симку — получать смс, отправлять ussd запросы если нужно (т.к. напрамер, даже при подключении SMS+ смс от банков приходить не будут в смс+, только на сим-карту)

    2) через мультифон подключить номер как trunk к любой IP PBX и принимать звонки на компьютер, либо форвардить по IP за копейки на любой локальный мобильный страны пребывания

    3) не тратить время на все вышеупомянутые настройки, не нужно питание компа и интернет ))

    4) ну и плюс номер один и тот же остается :)

    Разумеется, возможно только с мегафоном. У мтс и билайна нет аналогов.
  • Базовые стили и полезные CSS-сниппеты
    +34
    О, боже мой, сколько фейспалма.
    <html lang="en-US">
    Зачем lang="en-US"? Вроде же на хабре пишем. Вряд ли тут большинство делает сайты на американском английском.

    Почему написано
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    
    вместо нормального HTML5
    <meta charset="utf-8">?
    

    Зачем в
    <link rel="stylesheet" type="text/css" href="styles.css">
    
    добавили ненужный type="text/css"?

    Ещё не все пользуются jQuery, а rel="icon" для нормальных браузеров входит в rel="shortcut icon", потому что rel — список ключевых слов, разделённых пробелами.

    Сброс стандартных стилей тоже глупость, надо их не сбрасывать, а писать свои стандартные. А то дойдёт до того, что <ol> кроме как нумерованных списков не используется, но он один раз сбрасывается, потом переопределяется. Зачем усложнять, когда можно просто не делать ничего лишнего?

    И верстальщик с таким будет сталкиваться постоянно, например, с <b>, который вдруг не делает текст полужирным, каким он должен быть по своему прямому предназначению.

    Фильтры IE для градиентов лучше не использовать — они слишком грузят браузер, да ещё сбрасывают сглаживание текста ClearType, что сразу выглядит отвратительно. Если градиент не должен тянутся (например как на кнопке, которая всегда одной или примерно одной высоты), то проще и короче сделать градиент картинкой. Поддерживается всеми браузерами. Автоматизируется на раз-два.

    А вот как раз для трансформаций фильтры IE могут подойти, но в примере их нет.

    @font-face прекрасно выдаются теми же генераторами, особенно заморачиваться незачем.

    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
    

    Ограничивать возможность масштабирования через maximum-scale=1 и user-scalable=no очень плохо. Если вас не припёрло по определённым причинам и вы не реализуете масштабирование сами, так делать ни в коем случае не надо.

    Почему-то не упомянут другой хак: если сайт не рассчитан под узкие экраны, тогда можно прописать в значении width ширину, на которую рассчитан сайт. Он тогда будет лучше масштабирован и реагировать на повороты.

    Если указать при этом ширину 1024, то на айпаде в ландшафтной ориентации будет попадание пиксель в пиксель, и не возникнет полосок от спрайтов и подобных артефактов.

    .float-left и .float-right просто facepalm.jpg.

    *, *:before, *:after {
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        box-sizing: border-box;
    }
    

    Звёздочка здесь — просто стрельба из пушки по воробьям.

    -o-text-overflow уже давно не нужен.

    -ms-text-overflow никогда не был нужен.

        white-space: -pre-wrap;      /* Opera 4-6 */
        white-space: -o-pre-wrap;    /* Opera 7 */
    

    Opera 4–7? Серьёзно?

    Зачем переводить в чёрно-белые цвета для печати, если у пользователя вполне может быть цветной принтер? Что за комплекс бога? С чего взяли, что это нужно?
  • Что должен знать начинающий Perl разработчик о перловой инфраструктуре
    +3
    unobtrusive&fast oop — Moo
    event loops & parallel programming — AE (AnyEvent), Coro + EV, fork, threads
    number crunching — PDL
    c/c++ extenstion — Inline::C, Inline::CPP
    gui — Prima, Wx, Gtk2
    video&graphics: OpenGL, GStreamer, SDL
    images — Imager, ImageMagick
  • Подборка сервисов для расширения возможностей вашего Dropbox
    +1
    Может кому-то покажется не в тему, но есть ещё sellboxhq.com — продажа контента из своего дропбока
  • Создание кроссбраузерной оболочки для пользовательских скриптов
    +15
    (Сильно недостаточно советов.)
    try{
    // код скрипта
    } catch(e){console.error(e)}
    

    Хотелось бы дополнить, что это нужно в Fx и Opera, а Chrome и без того даёт качественные сообщения и ссылки на строку ошибки.
    С учётом Fx лучше писать такую обёртку:
    (function(){
    var u ='undefined'
    	, win = typeof unsafeWindow !=u ? unsafeWindow: window;
    //... далее, код, не требующий контроля ошибок
    try{
    //...код с контролем ошибок
    }catch(er){
    	win.console.log("~~ER_global: "+ er +' (line '+(er.lineNumber||'')+')')}; //для оповещения об ошибках в Fx
    })()
    

    Совет 2-й: раз уж пишем функцию-обёртку, почему бы не использовать её:
    (function(win, u, noConsole, FAST){ //всякие нужные константы
    //...тело скрипта
    })(typeof unsafeWindow !='undefined'? unsafeWindow: window,'undefined',1,1);
    


    Совет 3-й: используйте метаданные не только в одном месте:
    (function(){var alienFrame = /(plusone\.google\.com|userscripts\.org)/.test(location.host)
    	, currMetaTx = !alienFrame && function(s){return(s=
    //если Firefox+GreaseMonkey, требуется удалить "/*" перед "<!", чтобы читались многострочные данные!
    /*<![CDATA[*//*
    // ==UserScript==
    // @name HabrAjax
    // @version 0.82_2012-03-27
    // @namespace spmbt.kodingen.com/index.htm
    // @author spmbt0
    // @description Cumulative script with over 20 functions for Fx-Opera-Chrome-Safari
    // @include http://habrahabr.ru/*
    // @include https://plusone.google.com/*
    // @include http://userscripts.org/scripts/source/*
    // @exclude http://habrahabr.ru/api/*
    // @resource meta 121690.meta.js
    // @update 0.82 механизм плагинов и модулей через CustomEvent (Fx6+, Chrome, Safari)
    // @update 0.815 совместимость со скриптом переключателя режимов "Все блоги - Избранные" (HabrAllHub)
    // @icon data:image/gif;base64,R0lGODlhIAAgAMMBAG6Wyv///2+NtIucstfY2b/FzpSmvY+QkM3Nzunp6fLy8qGwweDg4MbFxa2trrm6uiwAAAAAIAAgAAAE/xDISau9OM/AOe2edoHBBwqiRZodmrKhRLqXYFfrdmLCQBQGWk62swgOiERAQQgChs9iRZBMKDgEFGn...
    // ==/UserScript==
    */s//]]>
    )}	//-вернёт false, если не продолжать; 'false' (строку) - если Fx; иначе - строки метаданных
    	, u ='undefined'
    	, isUsfW = typeof unsafeWindow !=u
    	, win = isUsfW ? unsafeWindow: window
    	, isFxGmS = win !==window
    	, isFxScr = typeof GM_getMetadata !=u
    	, readMeta = function(s, isFxScr){ //парсинг многострочного текста по мета-директивам
    		if(typeof s !='string') //очистка оболочки функций, выделение мн-стр-комментария
    			s = typeof s=='function'
    				? ((/\*/.test(function(){/**/}+1) ? s : s(!1) )+'')
    						.replace(/(^[\s\S]*\*\/\/\*\r?\n?|\r?\n?\*\/s[\s\S]*$)/gm,'')
    				: (typeof s !=u && s!==null && s.toString ? s.toString() :''); //здесь же- 'xml'
    		var metaD ={}, j =0;
    		if(s==='false' && isFxScr){ //isFxScr - получать ли данные средствами Scriptish
    			metaD = GM_getMetadata();
    			for(var i in metaD){ //приведение к нормальному виду
    				if(metaD[i].length ==1)
    					metaD[i] = metaD[i][0];
    				j++;
    			}
    		}else{
    			var meta = s.split('\n'), aa, a2;
    			for(var i=0, mL = meta.length; i < mL; i++){
    				if(( aa = /^.*?\/\/\s*@([\S]+)\s(\s*)(.*)/g.exec(meta[i]) )){
    					a2 = aa[3] !==undefined && aa[3] || aa[2];
    					if(metaD[aa[1]]===undefined)
    						metaD[aa[1]] = a2;
    					else{
    						if(! (metaD[aa[1]] instanceof Array))
    							metaD[aa[1]] = [metaD[aa[1]]];
    						metaD[aa[1]].push(a2);
    					}
    					j++;
    				}else
    					if(!/^.*?\/\/\s*[\-=]*\s*\/?\s*UserScript\s*[\-=]*\s*$/i.test(meta[i]))
    						metaD[j++] = meta[i];
    			}
    		}
    		metaD._length = j; //число ключей хеша
    		return j >1 && metaD || undefined; //хеш директив + нум.список простых строк + _length -чис.простых строк или und., если не найдено
    	},
    	metaD = readMeta(currMetaTx, isFxScr); //теперь можно читать метаданные в этом хеше (кроссбраузерно!)
    

    простите, если «многобукв». В общем, по коду заголовка вы догадались где искать пример этой фичи.

    Совет 4-й. Советует использовать в связке с советом 3 не GreaseMonkey (ещё раз, НЕ GreaseMonkey!) а Scriptish. Потому что для GreaseMonkey в этой фиче — принципиально неустранимая некроссбраузерность (я, кажется, об этом писал в статье, но не уверен, может быть лежит в черновиках).

    Совет 5-й. Получайте кроссбраузерно внешние метаданные — от самого скрипта, от других скриптов, от анонсов скриптов на ваших серверах. Пример кода смотрите там же, откуда он взят для совета 3, ибо было бы ещё почти столько же.

    Совет 6-й. Если в коде вы сделали синтаксическую ошибку, легко обнаружить её поможет только Хром. Запустите неработающий скрипт в Хроме, это путь к спасению, он укажет путь к просветл пропущенной запятой.

    Совет 7-й. Метаться в Хром иногда лениво, поэтому озаботьтесь хорошим механизмом трассировки, она очень-очень пригодится. Уже имеется win.console.log, но это длинно и не очень удобно. Делаем так:

    var wcl = function(){ //консоль как метод строки или функция, с отключением по noConsole ==1
    	if(win.console && !noConsole)
    		win.console.log.apply(console, this instanceof String
    			? ["'=="+this+"'"].concat([].slice.call(arguments)) : arguments);
    };
    String.prototype.wcl = wcl;
    
    (впрочем, это полезно и в простых скриптах).
    Что получили? Можем писать

    'myVar'.wcl(myWar);
    

    Почему так? Потому что их будет много, без меток трассировочные значения будут все на одно лицо. ЗАчем там '=='+...? Чтобы лучше видеть. Зачем в апострофах? Чтобы лучше находить в коде по ctrl-F. (И теперь видно, зачем здесь константа noConsole из совета 2?)

    Совет 8-й. Содержите кроссбраузерную функцию кроссдоменного обмена по postMessage, она отличается от функции для простых скриптов. (А в Хроме она и для внутридоменного понадобится.) Я об этом обещал написать, скоро напишу, статья готова, а реализацию можно увидеть опять же, в том же источнике примеров.

    Совет 9-й. (Думаю, ещё не сучно.) Используйте легковесную библиотеку, не поддерживающую IE, если не собираетесь (с большой вероятностью, думается, это так) поддерживать юзерскрипты там. Zepto, AtomJs, Backbone или что-то небольшое своё — оно всегда пригодится — работа с DOM, с событиями, массивами, хешами. Впрочем, примеров и образцов нет. В моих примерах есть, но очень примитивное ядро на 2-3 К, не советовал бы брать за основу.

    Совет 10-й (продожение 9-го). Среди полезных исполльзуемых функцих, кроме работы с DOM, будут и:
    подгрузка стилей:
    addRules: function(css){
    	if(typeof GM_addStyle != "undefined"){ GM_addStyle(css);
    	}else if(typeof PRO_addStyle != "undefined"){ PRO_addStyle(css);
    	}else if(typeof addStyle != "undefined"){ addStyle(css);
    	}else{
    		var heads = document.getElementsByTagName("head");
    		if(heads.length){
    			var node = document.createElement("style");
    			node.type = "text/css";
    			node.appendChild(document.createTextNode(css));
    			heads[0].appendChild(node);
    	}}
    }
    
    ,
    подгрузка сторонних скриптов (кода многовато на все случаи, приводить не буду),
    специфическое ожидание целевого условия по таймеру (очень частая функция), для примера ищите execCallback в HabrAjax,
    генерация User Event и CustomEvent — полезная техника,
    показ подсказок по наведению мыши (примеров нет),
    открывание ссылок в фрейме, если нужно для задачи,
    группа функций работы с настройками вашего скрипта.

    Вот это — я понимаю, полезные советы, вполне достаточные для работы с юзерскриптами…

  • Восстановление расфокусированных и смазанных изображений. Практика
    0
    Да, чуть покопался и нашёл на сайте ImageMagick статью с примерами:
    www.imagemagick.org/Usage/fourier/fft_math/

    В общем, всё можно делать, так сказать, «штатными» средствами :).