Technologique
663 subscribers
144 photos
3 videos
42 files
949 links
Deeply involved developers about various aspects, tendencies & conceptions of programming technologies, FLOSS, Linux, security, cloud infrastructures & DevOps practices, distributed systems, data warehousing & analysis, DL/ML, web3, etc.
Author: @andrcmdr
Download Telegram
Forwarded from Платформа
Один из многочисленных примеров, как Linux может изменить вашу жизнь.

Молодая девушка из Индии Vaishali Thakkar сломала ногу и не могла ходить 3 месяца, из-за этого она установила Linux и начала изучать Python. Теперь она Linux-инженер в Oracle. vk.cc/4VRbG3
Forwarded from Geeks
"Жизнь, по подписке" - статья о том, как "экономика вскладчину" (shared economy) изменяет нашу повседневную жизнь: сейчас уже и билеты на самолёт покупать не нужно, - достаточно заплатить стартапу за "месячную подписку на билеты", и летать безлимитно. В качестве другого примера, почему за shared economy будущее, автор также приводит то, что, по статистике, машины используются эффективно только 4% времени, - всё остальное время они стоят на парковках. Ну и под конец, автор задаёт главный вопрос данности "экономики вскладчину": а нужна ли вам частная собственность вообще? По мне так сама идея "жить полностью по подписке" является идеализированной, хотя многое действительно становится доступнее посредством shared economy. http://techcrunch.com/2016/03/18/life-by-subscription/
Идеальное рабочее пространство! И server rack на нижнем этаже дома! 😄

Стефан Грабер, разработчик из Канады, работающий в компании Canonical, мэйнтейнер LXC (Linux Containers)

https://www.youtube.com/watch?v=NomqUIC_Uzs

http://www.linux.com/news/special-feature/linux-developers/817168-linux-kernel-developer-work-spaces-video-stephane-graber-lxc

Полное собрание - воркспейсы 30-и Linux разработчиков ядра и его окружения за 30 недель:
http://www.linux.com/news/special-feature/linux-developers
https://docs.docker.com/v1.6/
Обнаружил почти забытую интересность библиотеки jQuery в коде сайта доументации Docker, а именно в реализации меню.
Мне вот непонятно и интересно, как jQuery удаляет (через вызов .off() ) обработчик события элемента/ноды, установленный ранее (вызовом .on() ), когда сам хэндлер реализован как анонимная неименованная функция!? По внутреннему коду функции!?
Я ради интереса запустил отладку и залез в нутро библиотеки через Chromium DevTools и прогоняя jQuery на WebStorm
base.js:33
взять листинг обработчиков событий первого элемента меню:
var mass = window.document.querySelectorAll("li.dd_menu")[0];
getEventListeners(mass);
все три обработчика безымянные и просто так через вызов removeEventListener() их привязку не удалить у элемента, т.к. указание имени обработчика вторым параметром функции обязательно
e - это объект с параметрами вызова передаваемый анонимной функции, function (e) {}, в момент вызова
а подобные трюки
mass.removeEventListener('mouseout', arguments.callee, false)
можно выполнять только в контексте вызова (namespaces/scopes/closures) внутри анонимной функции для последующего её удаления как обработчика события
внедрив подобную строчку кода c малодокументированным вызовом arguments.callee я выяснил много деталей
искомый обработчик это
jQuery110205145879534538835.handle - может называться иначе
или коротко
f(e) - это имя функции, которая существует только в момент возникновения (всплывания, bubbling) события и её вызова
и тут уже по коду становится более ясно - хэндлеры, делегаты...
https://github.com/jquery/jquery/blob/master/src/event.js#L197
https://decadecity.net/talks/what-has-jquery-ever-done-for-us#event-handlers
но до конца разобраться в тонкостях работы механизма событий и обработчиков в jQuery очень непросто
я понимаю что неименованные функции в качестве хэндлера это плохой структурный антипаттерн проектирования, но jQuery реализована в именно таком стиле - это скорее оптимизация для ускорения работы библиотеки и предотвращения утечек памяти, хотя может просто экономят байты на именах для компактности...
но как удалить неименованный хэндлер с элемента без jQuery?
или чистым ванильным JS уже никто не пользуется?
на StackOverflow говорят что никак - просто не надо так писать код 😆😂
PS: помню был интересный проект по запуску jQuery на Node,js для целей парсинга HTML страниц 😄

Полезные ссылки:
https://vk.com/doc10903696_195353516
https://addyosmani.com/resources/essentialjsdesignpatterns/book/
https://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/
https://habrahabr.ru/post/239863/
собственно из-за чего вся история:
Forwarded from Andrew Bednoff
запарился с этой навигацией по меню docs.docker.com вручную - хер найдёшь то что нужно!
я поражаюсь фронтэнд дизайнерам - если сделпли такое меню, так запилите кнопку "развернуть всё"!
короче, нервы сдали, сделал простенький букмарклет - пусть разворачивает мне менюшки для поиска по ним
😄👍
Forwarded from Andrew Bednoff
javascript:
var mass = window.document.querySelectorAll("button");
for (var i=0; i<=mass.length-1; i+=1) { mass[i].click() }
Forwarded from Andrew Bednoff
добавил в greasemonkey - теперь при открытии доков оно разворачивается само 😱😂
сколько же радости доставляют подобные мелочи в системе! 😄
Forwarded from Andrew Bednoff
у меня в запасе есть ещё пара недавних хаков для версии документации <=1.6
Forwarded from Andrew Bednoff
javascript:
var mass = window.document.querySelectorAll("li.dd_menu");
$('li.dd_menu').off('mouseenter mouseleave');
for (var i=0; i<=mass.length-1; i+=1) { mass[i].click() }
Forwarded from Andrew Bednoff
или ещё короче с jQuery
Forwarded from Andrew Bednoff
javascript:
$('li.dd_menu').off('mouseenter mouseleave');
$('li.dd_menu').click();
надеюсь это поможет ещё кому-нибудь как и мне для навигации и поиска в меню документации docs.docker.com
https://pp.vk.me/c7005/v7005908/1b193/S79TqKRyULY.jpg

Небольшое исправление букмарклетов для версии документации >1.6
сообщением ниже👇
ещё короче с jQuery 😄😆😂👍
Andrew Bednoff
javascript: var mass = window.document.querySelectorAll("button"); for (var i=0; i<=mass.length-1; i+=1) { mass[i].click() }
javascript:
var mass = window.document.querySelectorAll('button[data-control]');
for (var i=0; i<=mass.length-1; i+=1) { mass[i].click() }