Category: it

Category was added automatically. Read all entries about "it".

main

Люди в Сети хорохорятся, типа, да мы эти запреты - одной левой.

Я бы не был таким оптимистом. Дело в том, что Сеть изначально проектировалась как военный проект, и предполагаемый противник считался ВНЕШНИМ. Это очень важный момент. Изначальная архитектура сети предполагала, что внешний противник может вывести некие узлы и каналы, или заслать шпиона который некоторые каналы будет прослушивать.
В случае Роскомнадзора, противник ВНУТРЕННИЙ и имеет все инструменты противника внешнего ПЛЮС некоторые иные, весьма эффективные. Архитектура сети не расчитана на такого противника, который может высылать болезненные штрафы юзерами и запрещать провайдерам предоставлять им услуги.
Если бы изначальная задача была - противодействие как внешнему так и внутреннему врагу, то архитектура сети была бы иная, там гораздо больше использовались бы штука типа Тора и стеганография.
Выборочное использования ВПН, Тора и стеганографии в условиях настоящей архитектуры Сети - мало помогает, потому что Роскомнадзор может легко находить ту небольшую группу пользователей, которая активно применяет эти инструменты, и мочить их НЕ-ТЕХНИЧЕСКИМИ способами (штрафы, отключения от провайдеров, черные списки для запрета новых подключений к провайдерам).
Вот если бы изначально ВСЕ люди пользовались Тором, тогда власти было бы сложнее выщемить активистов. Если ВСЕ пользуются стеганографией, поди найди того кто скрывает действительно важные данные.
Так что не все так радужно, для киберактивистов.
main

как не возненавидеть профессию программиста

понял, что для меня доставляет фан только одна методология, все остальное в моей профессии - ад, тоска и ужас.

https://en.m.wikipedia.org/wiki/Cowboy_coding

на украинском про это тоже есть

https://uk.m.wikipedia.org/wiki/Партизанське_програмування
main

Параллельные вычисления в однопоточном Javascript

Имитируем многопоточное вычисление условий в операторе ИФ

(Имитируем, потому что, насколько я понимаю, это только на уровне логики программы тут у нас все идет параллельно и поэтому иногда первый промис быстрее второго, иногда наоборот, а на уровне исполнения - JS движок исполняет все в одной треде. Для того, чтобы была настоящая, честная много-поточность, можно использовать https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers, там действильно задачи будут распределяться по ядрам процессора равномерно).

Пример ниже запускается в Нодной консоли

var p1 = new Promise(function(resolve, reject) {
  setTimeout( resolve, Math.random() * 4000 + 1000, " One is done");
});
var p2 = new Promise(function(resolve, reject) {
  setTimeout( resolve, Math.random() * 4000 + 1000, " Two is done");
});

p1.then(function(a) {console.log(a);});
p2.then(function(a) {console.log(a);});

Promise.race([p1, p2]).then(function(value) {console.log("race complete: " + value);});

setTimeout(function() {console.log("Program quit\n");}, 6000)
main

Написал новый плагин для Хрома: wordsToClipboard

Короче, у вас есть некий список строк в настройках плагина.

У меня это немецкие буквы-умляюты (маленькие и большие; я не люблю немецкую раскладку клавы, а умляуты нужны иногда, и мне неохото запоминать трики с кодами умляутов, или переназначать клавиатуру - раньше делал, но надоело),

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

Когда пишешь письмо, чтобы запейстить слово, просто кликаешь в Хроме контекстное меню, ну они там все и будут показаны, в отдельном меню. Выбираешь то что надо, и с этой секунды слово в буфере обмена. Можно пейстить, причем не только в Хроме, а и в Ворде например. Хром просто хранит список и меню.

Удобно для паролей, тем более что есть фича скрывающая пароли как в настройках плагина, так и в самом контекстном меню.



Установка из Хром Стора (никаких особых разрешений оно не требует, ставится в пару кликов)

https://chrome.google.com/webstore/detail/wordstoclipboard/iajejafioibbknkcppodkddobehfdcoe

Код на Гитхабе для желающих добавить новую фичу или зафиксить баг:
https://github.com/orleanz/words-to-clipboard
main

Нужно будет настроить аггресивное кэширование в Энджинэксе ....

мой приватный Гео-айпи сервер - это Node+Mongo стоящие за nginx (как и принято у начинающих хипстеров, чай не пэхапе с апачем)

Нужно будет настроить Энджинекс так, чтобы он все запросы на получение геоданных кэшировал эдак на год, и не тревожил бы большу Ноду, когда приходит запрос на такой же айпишник как уже был

Вот я только не уверен - кэш Энджинекса - персистентный? переживает рестарт-ребут?
main

Написал простой скрипт для Node.js который собирает статистику friend of a friend (FoF)

.... для произвольного ЖЖ юзера, и тем самым позволяет любому человеку (у которого есть Нода на машине) узнать, какие ЖЖ юзеры были зафренжены максимальным кол-вом его собственных френдов, но еще не зафренжены им самим. Как бы ненавязчивые кандидаты на зафренд, чисто по статистике. (Внимание - в статистике могут оказаться неприятные люди!).

Кому надо, пользуйтесь на здоровье: https://github.com/orleanz/fof

155 строчек на асинхронном джаваскрипте

Пользоваться так: просто запускаете скрипт в командной строке, скажем

$ node index.js avva

скрипт начинает скачивать френдлисты френдов указанного юзера (avva), и по ходу дела показывает топ 20 еще не зафренженных Аввой юзеров, которые пользуются популярностью среди его (Аввеных) френдов. Вместо имя avva может быть ваш ЖЖ никнейм, разумеется.

Скрипт фигачит запрос на ЖЖ сервер каждый 2 секунды, так что это все занимает некое время.

Например, для аввы, после получения первых 48-ти френдлистов, получена такая статистика, цитата

Processing user 'vvagr' (#48 of 579)
Got list of vvagr's friends: 342 users
So far, top missing users are:
egmg(21), sapfo(21), abstract2001(18), catherina(18), 33(17), afeliya(17), kmaka(17), antigona(16), greenbat(16), shaltai_boltai(16), gagin(15), cook(15), bozi(15), sap(15), asy(15), xura(15), mustafa(15), akov(15), katichka(14), vyastik(14)

В скобочках показано, например, что юзера egmg зафрендили 21 юзер аввы, но сам авва его еще не зафрендил. И дальше, по убыванию числа зафрендивших. Показываются только текущие Топ 20. Если дождаться до конца работы скрипта, топ может измениться, разумеется.

Have fun! Если кто захочет, может усовершенствовать скрипт, исходники в Гитхабе.
main

Играем в куклы

Originally posted by nponeccop at Играем в куклы
http://thedeemon.livejournal.com/96870.html



По-моему, это метафорическая иллюстрация к программированию вообще.

1. Пользователю наплевать на технические аспекты

Потребителю, программы, в-общем, всё равно, как она устроена внутри, лишь бы выполняла функции

2. ТруЪ-решения и наколенные

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

3. Refuctoring после увольнения ключевого сотрудника

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

5. Лишние зависимости

Оказалось, что готовых хвостов в продаже нет, но есть головы по приемлемой цене. И голову от хвоста никак не отрезать, потому что и волосы распадутся, т.к. удерживаются не столько резинкой, сколько пластиком головы (кто вырывал волосы куклам в садике, знает). Более того даже если отрежешь - лысые головы никому не нужны, т.е. выгоды никакой

6. Почему компании часто предпочитают смерть проекта открытию исходного кода

Потому что все увидят кукольные головы внутри, и это будет ущербом для репутации компании. Чтобы открыть код, надо сначала нанять команду, которая если не переделает хвост на нормальный, то хотя бы отрежет кукле внутри хотя бы полголовы, чтобы никто не догадался.

7. Необходимость стартапу быть пластичным и выпускаться как можно раньше

Могло оказаться так, что изначально планировалось сделать как раз куклу - конкурента для Барби, с особо мягкими волосами как ключевой фишкой. Но со временем выяснилось, что куклы не нужны, но лошадки вот пользуются спросом, и надо срочно куклу переделывать на лошадку. Естественно, лучше запуститься хотя бы так, а потом когда дойдут руки, убрать голову, всё равно надо быть специалистом чтобы додуматься.

8. Любовь к определённым приёмам

Могло оказаться так, что директору или ведущему разработчику очень нравились блондинистые волосы, и он тулит их во все проекты, даже если это не нужно. Да чё, классный же цвет!

9. Любовь к стабильности и запрет рефакторинга

Несмотря на то, что голова смотрится дико, если делать новый хвост, может оказаться, что волосы не удастся с первой попытки хорошо закрепить, и покупатели начнут жаловаться на то, что лошадь лысеет. А со старым решением она заведомо не лысеет, т.к. жалоб на это нет! Поэтому что-то делать с головой запрещено.

10. Почему нельзя давить на разработчика по срокам

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

А вот почему нельзя вот таким образом ускорить программы на Петоне?

1. Вводим конвенцию - некоторые функции (назовем их условно "быстрыми")
могут иметь специальные аннотации, скажем, перед названием функции пишем специальный коммент

# THIS_SHIT_MUST_BE_FUCKING_FAST
def myFunc():

2. Аналогичным образом, через специальные комменты, помечаем типы переменных и типы, возращаемые "быстрыми" функциям. Помеченный типы - могут быть не произвольными, а из числа некоторого допустимого списка, грубо говоря, то что обычно нужно, без извращений. Bread and butter. Числа, булеаны, строки, тьюплы.

3. Напускаем на таким образом проаннотированный код - специальный препроцессор, который смотрит, возможно ли такой код (только в "быстрых" функциях) преобразовать в валидный C-код. Если невозможно, печатается соов. жалобное сообщение, с попыткой описать почему именно невозможно (в самом просто случае- забыли указать тип переменной)

4. Если п.3 увенчивается успехом, препроцессор запускает соотв. компиляцию, которая выпекает добротные сишные либы, которые делают то что сказано делать в функциях

5. Исходный код заменяется на модицифицированный - оригинальный Петоновский код сохраняется в теле функций, но в начале функции добавляется if FAST_MODE: (вызов быстрой бинарной либы)

6. Программисту осталось теперь только при желании поставить флаг FAST_MODE = True и вуаля, Петоновская прога начнет работать со скоростью Си на тех функциях, где это надо, если не учитывать небольшой оверхед для загрузки быстрой либы.

Почему такого нет? Или я опять, как обычно, велосипед изобретаю?

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

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

Придумал еще два полезных Букмарклета!

Сначала думал, что нужно писать Хромовскую Экстеншен для этого, но потом понял что достаточно Букмарклета

(Предыдущий Букмарклет, который открывает звёздочки паролей, смотри тут http://orleanz.livejournal.com/1828956.html )

Итак, что делают мои новые Букмарклеты? Вы будете смеяццо, но они вводят в соотв. поля имейл и (бросовый) пароль.

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

Первая кнопка-букмарклет запейщивает захардкоденный имейл в АКТИВНОЕ ПОЛЕ (там где сейчас стоит курсор ввода с клавы. В терминах DOM это document.activeElement ).

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

Это всё. Ну, и третья кнопка, о которой упоминалась выше, тоже может использваться (чтобы убедиться, для параноиков, что вторая кнопка сработала правильно).

Кнопки эти можно сделать маленькими, скажем, назвать первую E (от слова емейл), вторую P (пароль), третью S (stars).

Код для кнопки имейла
javascript:  var inp=document.getElementsByTagName("input"); for (var i=0;   i<inp.length; i++) if (inp[i] == document.activeElement) inp[i].value = "name@domain.org"; void 0;

Код для кнопки пароля
javascript:  var inp=document.getElementsByTagName("input"); for (var i=0;   i<inp.length; i++) if (inp[i] == document.activeElement && inp[i].type == "password") inp[i].value = "password123"; void 0;


Разумеется, в коде выше name@domain.org и mypassword123 нужно заменить на ваши специфические значения.

(Как создавать кнопки-букмарклеты - см. предельно ясные инструкции в http://orleanz.livejournal.com/1828956.html )

Have fun.