content top

Законы Мерфи в действии


Дано: Терабайтный винчестер, на котором есть

1. Восемь сбойных секторов.
2. Tiny Tiny RSS, с апачем и MySQL базой в сотню мегабайт.
3. Tiny OPDS, со своей внутренней базой весом тоже около сотни.
4. Полтерабайта порнухи сериалов, фильмов, бэкапов и прочего маловажного барахла.

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

Ответ: Правильно, сто процентов и ни процентом меньше!

Примечание: Кто никому не верит, регулярно делает резервные копии и поэтому ничего не потерял – тот я.

Как вернуть из небытия восемь долларов


Купил я пару недель назад у братьев-китайцев Arduino Nano. Потыкал её, а она в тот же вечер, после пары прошивок перестала определяться. “Сгорела” – подумал я. Обругал китайцев нехорошими словами, кинул плату в стол и переключился обратно на ковыряние полноразмерных Uno и Leonardo.

А давеча читаю Хабр и натыкаюсь на статью FTDI наносит ответный удар. Симптомы отдалённо совпадают с моими. Достаю плату, подтыкаю к компу – и действительно, коварный драйвер от FTDI поменял USB-COM конвертору PID на четыре ноля.

Драйвер FTDI портит неродные чипы

Читаю дальше. В комментах говорят, что чип заводится и из такого состояния, если драйвера установить принудительно. Пробую – работает!

Но мы плевали на его капиталистические замашки!

Можно работать и так, но я ещё скачал FT_Prog, поменял PID обратно и запретил обновлять драйвер.

Морали у этой истории две:

1. Не всё то сгорело, что не определяется.
2. Бороться с пиратством, отрываясь на конечных пользователях – блядство.

P.S. Пока писал, ардуйня подешевела с восьми баксов до $7,43. Как говорил классик “С ебучим темпом инфляции я заебался текст переделывать, так что пусть всё остаётся как было”.

Из говна и палок.


Наколхозил из всякой ардуйни девайс для интервальной съёмки. Что самое интересное – работает.

Цейтрафер, Великий и Ужасный

Теперь надо всё это собрать в какую-нибудь коробочку – и можно идти снимать таймлапсы.

Нетбайнет – всё


Увы, всему хорошему приходит конец. Много лет NetByNet был отличным провайдером, я хвалил их и рекомендовал всем знакомым, но теперь и они скатились в сраное говно. Мудаки и пидарасы из отдела маркетинга взяли верх.

Мудаки и пидарасы из нетбайнета редиректят всё на свою рекламу

Вот такую радость я увидел только что. Ёбаный нетбайнет без объявления войны отредиректил весь http трафик на адрес promo.netbynet.ru, где пытается впарить мне тариф на сто рублей дороже при той же скорости.

А дальше что? Будут баннеры подменять? Мессенджеры подслушивать? Пароли воровать? Данные кредиток пиздить? Блин, придётся всё-таки думать за смену провайдера и буржуинский впн, опять ебля, опять расходы, ни сна ни отдыха измученной душе, а какой был хороший провайдер… (машет рукой, уходит)

Об ГЛОНАСС


Тут вот некоторые особо упоротые, под впечатлением от решения дурачков из правительства позапрещать на российской территории станции коррекции GPS, радостно орут: “И правильно, так и надо, давно пора этот буржуинский жыпысы вообще запретить и заглушить!”. Так я вам сейчас покажу одну картинку, которую показывает мой планшет (единственное устройство в доме с глонассом на борту), если ему показать небо.

Screenshot_2014-05-14-12-56-00

Треугольники – спутники ГЛОНАСС, кружки – спутники GPS. Ещё что-нибудь надо пояснять?

Об GPS


Screenshot_2014-03-23-17-46-12Няши, а это меня параноит или с GPS реально какая-то фигня творится? В последние дни координаты иногда рандомно уплывают на несколько десятков метров в сторону от реального положения и упорно не хотят возвращаться на место. На картинке я реально стою почти у портала, ошибка позиционирования около 70-75м, а GPS test при этом показывает точность определения до нескольких метров. Минут через десять-двадцать всё приходит в норму, через пару часов всё повторяется.

Это какие-то глюки или буржуины к глушению GPS над Россией готовятся?

Оптика в каждый дом


image

Теперь домашние телефоны в Москве подключают по GPON. Всем.

Арбуз


Какой же он огромный! Реально арбуз!

Airbus A380 на МАКС-2013
Airbus A380 на МАКС-2013Airbus A380 на МАКС-2013
Airbus A380 на МАКС-2013Airbus A380 на МАКС-2013

Автопортрет


Гламурные кисы снимают себя в отражении туалетного зеркала.

Я и Ми-28Н "Ночной охотник"

А настоящие маньяки – в отражении оптики Ми-28Н.

Упражнения с дремелем: тесак


Валялся у меня в имении древний-древний покалеченный нож для капусты, ржавый, как совесть депутата. Ещё в прошлом веке ему жестоко обломали остриё.

Старый обломанный нож

Самый простой способ исправить эту беду – сколхозить на обухе скос, “типа дроп-пойнт”.
Беру дремель, срезаю лишнее:

Срезанный обух

Выравниваю и шлифую скос. Зачищаю лезвие. Корщётка для дремеля, к сожалению, осталась в Москве, а здесь её не укупишь, так что самые глубокие повреждения пока вычистить не удалось.

Скос крупно

Шлифую до блеска, поправляю режущую кромку – и нож снова в строю.

Готовый нож

Теперь надо ещё зачистить и пропитать чем-нибудь рукоять – но это уже другая история.

Веб-камера reloaded


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

В качестве бонустрека к посту – цейтрайферная съёмка с вебкама:

Серверная стойка


Куда девать свежесобранный минисервер, чтобы он никому не мешал ночами? Конечно же на кухню, к холодильнику!

Серверная стойка

Внезапно переехал


В этом доме с 1842 по 1894 находилась первая Московская сберегательная касса

Заебавшись ждать, когда хостер наконец-то починит свои серваки, ушёл к другому. Шесть лет назад мажордомо был охуенным хостингом, но за последний год, увы, скатился в совершеннейшее УГ. Я терпел умирание сайтов от малейшей нагрузки, еженедельное выпадение в аут баз данных и даже адовую задумчивость nginx, который, по идее, должен был ускорять доступ, а не замедлять его. Но угробить ФС на сервере, поднимать его почти месяц, да так до сих пор толком и не поднять – это проёб космических масштабов. Прощайте, чуваки, вы умудрились достать даже меня.

Упражнения с дремелем.


Хостер наконец-то очнулся, поэтому продолжим.

Берём старое кольцо, которое мало, пилим его пополам и разжимаем до нужного размера.

Старое кольцо и прочий хлам

Потом берём тупо припой, запаиваем промежуток, обтачиваем и полируем.

Запаянное кольцоЗапаянное кольцо

Конечно, оно потом потемнеет и помутнеет, но ничего – снова заполирую.

Посленовогоднее


А вот такую няшку я приобрёл уже после нового года.

Dremel Multi-Vise

Основание у тисков двойного назначения – умеет быть держателем для дремеля.

Dremel Multi-Vise

content top
(function($) { $.fn.et_shortcodes_switcher = function(options) { var defaults = { slides: '>div', activeClass: 'active', linksNav: '', findParent: true, //use parent elements to define active states lengthElement: 'li', //parent element, used only if findParent is set to true useArrows: false, arrowLeft: 'a#prev-arrow', arrowRight: 'a#next-arrow', auto: false, autoSpeed: 5000, slidePadding: '', pauseOnHover: true, fx: 'fade', sliderType: '' }; var options = $.extend(defaults, options); return this.each(function() { var slidesContainer = jQuery(this).parent().css('position','relative'), $slides = jQuery(this).css({'overflow':'hidden','position':'relative'}), $slide = $slides.find(options.slides).css({'opacity':'1','position':'absolute','top':'0px','left':'0px','display':'none'}), slidesNum = $slide.length, zIndex = slidesNum, currentPosition = 1, slideHeight = 0, $activeSlide, $nextSlide; if (options.fx === 'slide') { $slide.css({'opacity':'0','position':'absolute','top':'0px','left':'0px','display':'block'}); } else { $slide.filter(':first').css({'display':'block'}); } if (options.slidePadding != '') $slide.css('padding',options.slidePadding); $slide.each(function(){ jQuery(this).css('z-index',zIndex).addClass('clearfix'); if (options.fx === 'slide') zIndex--; slideH = jQuery(this).innerHeight(); if (slideH > slideHeight) slideHeight = slideH; }); $slides.css('height', slideHeight); $slides.css('width', $slides.width()); var slideWidth = $slide.width(), slideOuterWidth = $slide.outerWidth(); $slide.css('width',slideWidth); $slide.filter(':first').css('opacity','1'); if (options.sliderType != '') { if (options.sliderType === 'images') { controllersHtml = '
Previous'; for ($i=1; $i<=slidesNum; $i++) { controllersHtml += ''+$i+''; } controllersHtml += 'Next
'; $controllersWrap = jQuery(controllersHtml).prependTo($slides.parent()); } var etimage_width = $slide.width(); slidesContainer.css({'width':etimage_width}); $slides.css({'width':etimage_width}); if (options.sliderType === 'images') { slidesContainer.css({'height':$slide.height()}); $slides.css({'height':$slide.height()}); var controllers_width = $controllersWrap.width(), leftPosition = Math.round((etimage_width - controllers_width) / 2); $controllersWrap.css({left: leftPosition}); } } if (options.linksNav != '') { var linkSwitcher = jQuery(options.linksNav); var linkSwitcherTab = ''; if (options.findParent) linkSwitcherTab = linkSwitcher.parent(); else linkSwitcherTab = linkSwitcher; if (!linkSwitcherTab.filter('.active').length) linkSwitcherTab.filter(':first').addClass('active'); linkSwitcher.click(function(){ var targetElement; if (options.findParent) targetElement = jQuery(this).parent(); else targetElement = jQuery(this); var orderNum = targetElement.prevAll(options.lengthElement).length+1; if (orderNum > currentPosition) gotoSlide(orderNum, 1); else gotoSlide(orderNum, -1); return false; }); } if (options.useArrows) { var $right_arrow = jQuery(options.arrowRight), $left_arrow = jQuery(options.arrowLeft); $right_arrow.click(function(){ if (currentPosition === slidesNum) gotoSlide(1,1); else gotoSlide(currentPosition+1),1; if (options.linksNav != '') changeTab(); return false; }); $left_arrow.click(function(){ if (currentPosition === 1) gotoSlide(slidesNum,-1); else gotoSlide(currentPosition-1,-1); if (options.linksNav != '') changeTab(); return false; }); } function changeTab(){ if (linkSwitcherTab != '') { linkSwitcherTab.siblings().removeClass('active'); linkSwitcherTab.filter(':eq('+(currentPosition-1)+')').addClass('active'); } } function gotoSlide(slideNumber,dir){ if ($slide.filter(':animated').length) return; $slide.css('opacity','0'); $activeSlide = $slide.filter(':eq('+(currentPosition-1)+')').css('opacity','1'); if (currentPosition === slideNumber) return; $nextSlide = $slide.filter(':eq('+(slideNumber-1)+')').css('opacity','1'); if ((currentPosition > slideNumber || currentPosition === 1) && (dir === -1)) { if (options.fx === 'slide') slideBack(500); if (options.fx === 'fade') slideFade(500); } else { if (options.fx === 'slide') slideForward(500); if (options.fx === 'fade') slideFade(500); } currentPosition = $nextSlide.prevAll().length + 1; if (options.linksNav != '') changeTab(); if (typeof interval != 'undefined' && options.auto) { clearInterval(interval); auto_rotate(); } return false; } if (options.auto) { auto_rotate(); var pauseSlider = false; } if (options.pauseOnHover) { slidesContainer.hover(function(){ pauseSlider = true; },function(){ pauseSlider = false; }); } function auto_rotate(){ interval = setInterval(function(){ if (!pauseSlider) { if (currentPosition === slidesNum) gotoSlide(1,1); else gotoSlide(currentPosition+1),1; if (options.linksNav != '') changeTab(); } },options.autoSpeed); } function slideForward(speed){ $nextSlide.css('left',slideOuterWidth+'px'); $activeSlide.animate({left: '-'+slideOuterWidth},speed); $nextSlide.animate({left: 0},speed); } function slideBack(speed){ $nextSlide.css('left','-'+slideOuterWidth+'px'); $activeSlide.animate({left: slideOuterWidth},speed); $nextSlide.animate({left: 0},speed); } function slideFade(speed){ $activeSlide.css({zIndex: slidesNum}).fadeOut(700); $nextSlide.css({zIndex: (slidesNum+1)}).fadeIn(700); } }); } })(jQuery); /////// Shortcodes Javascript /////// /// tooltip /// $et_tooltip = jQuery('.et-tooltip'); $et_tooltip.hover(function(){ jQuery(this).find('.et-tooltip-box').animate({ opacity: 'show', bottom: '25px' }, 300); },function(){ jQuery(this).find('.et-tooltip-box').animate({ opacity: 'hide', bottom: '35px' }, 300); }) /// learn more /// $et_learn_more = jQuery('.et-learn-more .heading-more'); $et_learn_more.click(function(){ if ( jQuery(this).hasClass('open') ) jQuery(this).removeClass('open'); else jQuery(this).addClass('open'); jQuery(this).parent('.et-learn-more').find('.learn-more-content').animate({ opacity: 'toggle', height: 'toggle' }, 300); }); /* ]]> */ -->