...

суббота, 7 сентября 2013 г.

Разбор регулярных выражений


сегодня в 23:28



Хочу просто поделиться недавно найденным сервисом для работы с регулярными выражениями. Да, это еще один сервис. Но у него есть особенность — он позволяет не только составлять регулярные выражения, но и помогает разбирать уже написанные — эдакий regexp-декомпилятор.

Сервис называется Regex101.


Regex101 — сервис, позволяющий деконструировать чужие регэкспы и объяснить функцию каждого оператора. Ссылки на объяснения можно размещать прямо в комментариях к коду для удобства работы в команде. Так же можно протестировать свой код, получая при этом в реальном времени полное объяснение, как обрабатывается искомый запарос. Ну и да, на сайцте есть справочная информация и раздел с вопросами для тех, кто только входит в мир «регулярок».


Кстати, вы можете выбрать стиль регулярных выражений: PHP, javascript, Python. Регулярки можно шарить, что может быть очень актуально для командной разработки.



.






552


17






Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Лунный аппарат LADEE успешно запущен + аккаунт NASA появился в Instagram


Да, сегодня произошло два интересных события, которые стоит упомянуть в одной заметке, поскольку они касаются одной и той же организации, а именно NASA, и к одному и тому же событию, о котором — ниже. Так вот, то, о чем несколько раз писали на Хабре, свершилось: лунный аппарат, который должен заняться исследованием атмосферы Луны и состава пылевых частиц, запущен.


LADEE стартовал с ракетой-носителем Minotaur V сегодня, в 7:27 по московскому времени. Запуск производился с космодрома Уоллопс в США. При этом, как и указывалось ранее, запуск космического корабля транслировался NASA в прямом эфире вот здесь. LADEE, кроме всего прочего, примечателен еще и тем, что на этом аппарате установлена лазерная оптическая система связи, о которой уже писалось. Именно такой тип связи, при условии проведения успешных испытаний, может стать основным в космосе.


Запуск произошел в штатном режиме, по-видимому, проблем никаких не возникло. В общем, все позитивно.


Что касается второй новости, то здесь тоже есть, чему порадоваться/, особенно — любителям социальных сетей, включая Instagram. Именно на этом ресурсе завело свой очередной аккаунт NASA. Агентство уже загрузило несколько историчесикх фотографий Луны, что связано с упомянутым выше запуском лунного аппарата LADEE. Плюс ко всему, выгружены фотография запуска LADEE, и агентство обещает регулярно выкладывать фотографии и видео, относящиеся и к другим проектам исследования космоса/околоземного пространства.


Пока что загружено не очень много фотографий, но это и понятно, ведь не будет же NASA постить все подряд. Посмотреть то, что есть, можно вот здесь (здесь же можно подписаться на обновления аккаунта).


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №73 (1 — 7 сентября 2013)


сегодня в 22:38


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




Веб-разработка




CSS




JavaScripts




Браузеры




Веб-инструменты





  • Prototypo — разрабатываемый сервис для создания собственных шрифтов

  • compileonline.com — компиляция кода практически любого языка

  • Embed Responsively — делает адаптивными сторонние компоненты (YouTube/Vimeo/Dailymotion видео и прочее)

  • Compressnow — компрессор изображений с некоторыми настройками




Новости




Демо




Сайты с интересным дизайном и функциональностью




Дизайн




Подборка бесплатных дизайнерских печенек







Занимательное


Дайджест за прошлую неделю.

Материал подготовили dersmoll и alekskorovin




Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Mailpile — все. Приехали. Кошелек в Paypal заморожен


сегодня в 21:34


Неделю назад Mailpile отчитался об успешном окончании краудфандинговой кампании с бюджетом в 146,725 долларов. А сегодня Brennan Novak, один из авторов проекта, разместил в indiegogo на странице кампании по сбору средств апдейт, в котором сообщил, что бизнес-аккаунт и дебетная карта проекта заблокированы службой безопасности y PayPal.

Напомню,



суть проекта заключается в создании почтового open-source веб-сервера, которое работает на личных компьютерах пользователей и абсолютно защищено от внешней прослушки с помощью стойкой криптографии c поддержкой OpenPGP. Оно создано для пользователей, которые хотят избавиться от проблем, связанных с использованием Gmail, Hotmail и прочих прослушиваемых сервисов. Людям нужно встроенное шифрование, отсутствие рекламы, скорость работы, собственный хостинг, но при этом они хотят сохранить удобство интерфейса, полнотекстовый поиск, теги, аттачменты и другие привычные функции.






Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Конвертируем картинку в ANSI

Не знаю, насколько это будет кому-то интересно, но на днях решил поиграться и сделать следующее:

Дано: Картинка (например, BMP) 640 на 400, шрифт 8 на 16


Надо: Перевести ее в ANSI псевдографику в стандартном режиме 80 на 25 символов, символы и фон могут иметь любой цвет (true color).


image




Здесь стоит оговориться, что «тру» EGA текстовый режим с 16 цветами нам не подойдет, так как получится слишком некрасиво из-за низкого разрешения и большого размера символов. Второй аргумент: задача не стоИт максимально приблизить картинку ее символьному представлению, так как тогда можно было бы уменьшать шрифт, увеличивать разрешение и т.д. Задача — сделать именно такой фильтр, который описан выше.


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


Для реализации нам понадобится какая-нибудь библиотека для работы с графикой, умеющая getpixel и putpixel, то есть считать цвет пикселя с экрана и нарисовать пиксель заданным цветом на экран. Я пользуюсь старенькой, но проверенной библиотекой Allegro (www.allegro.cc), которая легка в обращении, а также позволяет работать в разных ОС (даже в MSDOS!).


Но хватит слов, пора к делу.



const int size_x=640;
const int size_y=400;
const int ascii_x=80;
const int ascii_y=25;


Устанавливаем константы, отвечающие за размер картинки и размер ее текстового представления.



for(int cx=0;cx<ascii_x;cx++)
for(int cy=0;cy<ascii_y;cy++){
int fullr=0;
int fullg=0;
int fullb=0;
int pixels=0;

//find background color
for(int i=0;i<size_x/ascii_x;i++)
for(int j=0;j<size_y/ascii_y;j++){
int col=getpixel(pic,i+cx*size_x/ascii_x,j+cy*size_y/ascii_y);
int r=getr(col);
int g=getg(col);
int b=getb(col);
fullr+=r;fullg+=g;fullb+=b;
pixels++;
}
fullr/=pixels;fullg/=pixels;fullb/=pixels;


Начинаем основной цикл, в котором последовательно находим каждый символ из 80 на 25 матрицы. Следующий цикл — по каждому пикселю той области картинки, которая соответствует на экране данному символу из этой матрицы. Как легко сообразить, область эта составляет 640/80=8 на 400/25=16 пикселей. Здесь полезно вспомнить, что это как раз равно размеру нашего шрифта.


В этом втором цикле наша задача — найти средний цвет, который мы установим в качестве цвета фона нашего ANSI символа. Сделать это очень просто: раскладываем цвет на R, G, B компоненты и вычисляем среднее по каждой из них.



//find ascii and its color
int rms=100000000;

for(int curch=1;curch<256;curch++){ //loop over ASCII table
int charr=0;
int charg=0;
int charb=0;

//find char color
pixels=0; //number of pixels for char
for(i=0;i<size_x/ascii_x;i++)
for(int j=0;j<size_y/ascii_y;j++){
int col=getpixel(pic,i+cx*size_x/ascii_x,j+cy*size_y/ascii_y);
int r=getr(col);
int g=getg(col);
int b=getb(col);

int colch=getpixel(font,i+(curch%32)*8,j+(curch/32)*16);
int rc=getr(colch);
int gc=getg(colch);
int bc=getb(colch);
if(rc!=0&&gc!=0&&bc!=0){ //get actual char pixels only
charr+=r;
charg+=g;
charb+=b;
pixels++;
}
}
if(pixels!=0){
charr/=pixels;charg/=pixels;charb/=pixels;
}


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


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


Стоит также отметить, что число таких пикселей может быть равно нулю (например, символ 32 — пробел). С этим надо быть внимательнее.



//find rms
int currms=0;
for(i=0;i<size_x/ascii_x;i++)
for(int j=0;j<size_y/ascii_y;j++){
int col=getpixel(pic,i+cx*size_x/ascii_x,j+cy*size_y/ascii_y);
int r=getr(col);
int g=getg(col);
int b=getb(col);
int rr=0,gg=0,bb=0;

int colch=getpixel(font,i+(curch%32)*8,j+(curch/32)*16);
int rc=getr(colch);
int gc=getg(colch);
int bc=getb(colch);
if(rc!=0&&gc!=0&&bc!=0){ //char pixel
rr=charr;
gg=charg;
bb=charb;
}
else{ //back pixel
rr=fullr;
gg=fullg;
bb=fullb;
}
currms+=sqrt((r-rr)*(r-rr)+(g-gg)*(g-gg)+(b-bb)*(b-bb));
}

if(currms<rms){ //find minimal rms
findr=charr;
findg=charg;
findb=charb;

findch=curch;
rms=currms;
if(DEBUG)printf("!!!%d %d\n",currms, curch);
}
else
if(DEBUG)printf("%d %d\n",currms, curch);

} //find char


Ну и, наконец, пришли к самой соли. В этом куске кода мы еще раз проходимся по пикселям заданной области картинки и считаем RMS (среднеквадратичное отклонение) всех трех компонент цвета от цвета фона или символа (в зависимости от того, находится ли данный пиксель на фоне или на символе). Суммарный RMS и будет являться критерием того, насколько данный символ хорошо соответствует данной области картинки.


Далее следует вывод на экран (в двух режимах — с фоном и без (пример)), но на нем мы останавливаться не будем, так как там всё самоочевидно.


image


Программу и исходный код можно скачать здесь: dimouse.ru/data/ansiconv.rar (130 Kb).


Как насчет нарисовать это дело в текстовом режиме? Как вы можете увидеть, программа создает файл с результатами (кроме нового bmp) — ascii. Там для каждого символа хранится его значение в ASCII таблице, его цвет и цвет его фона. Я для текстового режима пользуюсь pdcurses.sourceforge.net/ (пишите в комментариях, если знаете что-то лучше!), но эта библиотека, хоть и является враппером над SDL (во всяком случае, виндовая версия — точно), не умеет показывать цвета больше 16: тяжелое наследие древности. Как вы, наверное, помните, PDCurses берет свое начало от знаменитой Interactive Fiction игры Curses. Но один товарищ написал усовершенствование этой библиотеки и выложил здесь: www.projectpluto.com/win32a.htm


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


Программу для чтения ascii можно скачать здесь: dimouse.ru/data/ascii.rar (70 Kb).


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Хорошие идеи светятся во тьме


сегодня в 20:15


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

Кроме анализа описаний подобных штук, вариантов химических составов, я постоянно изучаю видео. Сегодня я представляю вашему вниманию видео, которому скоро исполнится ровно год.



Его название идентично заголовку поста. Это демонстрационная комната для книги. Кабинет-библиотека, который был представлен на ежегодной выставке Weekend Media Festival и стал призером Red Dot.


Книга об идеях, которые определяют наше будущее. Представьте себе комнату, полностью белую. Белые стены, белая мебель, белые стеллажи. Но стоит только погаснуть освещению и зажечься неоновым лампам…Нужная книга начинают светиться в темноте…





Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Трансляция разработки iOS приложения за 48 часов


сегодня в 19:59


Здравствуйте, дорогие читатели Хабра!

Только что начался 48-ми часовой марафон по разработке iOS клиента для биржи Btc-e.com. Сам марфон доступен по ссылке: bdev.tv.


За отведенное на марафон время команда талантливых разработчиков и дизайнеров начнет с нуля и доведет до ума приложение под iOS6+. В программе стрима:



  • Сама разработка приложения

  • Советы начинающим кодерам и дизайнерам

  • Небольшой курс-введение в Objective-C

  • Практическая часть статей «Записки iOS разработчика»

  • Свободное общение с командой, постоянный интерактив

  • Теле-мост в Ванкувер (разработка ведется одновременно на двух полушариях)

  • Смех, интриги, расследования




Наша команда:



Колмогоров «backmeupplz» Никита

Objective-C разработчик, опыт фриланса около двух лет. Автор множества заминусованных на Хабре топиков, просто веселый человек.

Алер «Aler» Денисов

Разработчик игр. В промежутках между основным проектом и развитием студии разработки рекламных игр собирает «друзей» (коллег) для отдыха за созданием чего-нибудь веселого и трансляции всего процесса бессвязного девелопа. За его плечами уже есть несколько популярных стримов: «48», «72 часовой стрим разработки игры под Oculus Rift».


Настя «Mewz» Чиханова

В опыте Насти работа с крупными брендами от Microsoft'а до Рив Гош. Положительный опыт работы на правительство Российской Федерации позволяет делает Настю идеальным работником — поток непонятных пожеланий и сжатые сроки.


Александр "..." Линник

Начинающий iOS разработчик. Пришел покушать вкусных печенек с чаем и научиться некоторым удобным способам программировать: например, посадить миллион мартышек за печатные машинки, и одна из них когда-нибудь, да напишет windows vista… ну вы знаете. Автор идеи с бесплатными печеньками и чаем всем зрителям и разработчикам.


Ждем вас на нашем стриме!





Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Слава эпигонам или Великие против лучших

Я обычно стараюсь писать по делу, но иногда можно и поразмышлять об абстрактном. Не так давно мне в руки попалась неплохая (и, пожалуй, единственная в своём роде) книга 1001 Video Games You Must Play Before You Die, авторы которой взяли на себя титанический труд вычленения лучшей, по их мнению, тысячи игр за всю историю индустрии. Учтены практически все известные платформы, начиная с аркадных машин семидесятых годов и заканчивая Xbox360 и iPhone. Конечно, любой хит-парад (даже если в нём аж 1001 позиция) субъективен, и каждый из нас может с удивлением не обнаружить в нём любимой игры. Ещё авторы явно благоволят последнему десятилетию, которому досталась половина всей книги. С другой стороны, к их чести заявленным форматом «1001» дело не ограничивается, и частенько проскакивают комментарии вроде «эта игра имела такого-то предшественника, а позже аналогичная идея была воплощена в таком-то проекте», по сути расширяющие основной список. Однако мне бросилась в глаза ещё одна особенность, которая, как мне кажется, отражает любые «списки лучших» чего бы то ни было, а именно явное преклонение перед великими работами.

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


Моему поколению, чьё детство и отрочество пришлось на крушение железного занавеса, довелось испытать интересный эффект: хлынувшие из-за границы игры «спрессовались» в единый клубок, и мы не воспринимали их как нечто последовательно развивающееся. Скажем, наши зарубежные сверстники, наигравшись в Super Mario Bros. (1985), наблюдали за лавиной платформеров, растущих как грибы после дождя. Мы же сначала не имели ничего, а потом получили сразу всё, и в этом смысле сантехник Марио был в наших сердцах прямым конкурентом Чипу и Дейлу из одноимённой игры (1990).


Особенно интересно в этом плане изучать ZX Spectrum. Не только потому, что лично я его люблю, а потому что случай совсем чистый: платформа в практически неизменном состоянии прожила примерно 10 лет, к началу 90-х годов все основные коммерческие игры уже вышли (это потом российские программисты подтянутся и создадут несколько шедевров), а каждый уважающий себя синклерист имел громадный каталог игр. Ещё бы, на обычную магнитофонную кассету влезало 10-12 игр, а кассеты легко копировались. На консолях же играли во что придётся (накупить тонну картриджей не каждому по карману было), а на PC время не «спрессовалось», потому что аппаратные возможности за десять лет так сильно изменились, что ставить на одну доску какой-нибудь Alley Cat первой половины восьмидесятых с Dune II (1992) решительно невозможно.


Однако я отвлёкся. Листая книгу, я (ожидаемо) обнаружил там Super Mario Bros., Jet Set Willy и Boulder Dash. Однако не нашёл ни Chip & Dale, ни Darkwing Duck, ни Dynamite Dan, ни Earth Shaker. Для меня это игры той же эпохи, вдохновлённые предшественниками, только интереснее, веселее, разнообразнее. Оставим в стороне Super Mario, у которого масса преданных фанатов, и сосредоточимся на парах Boulder Dash — Earth Shaker и Jet Set Willy — Dynamite Dan.











Boulder Dash Earth Shaker










Jet Set Willy Dynamite Dan

Вторые члены пар лучше первых во всех отношениях, кроме одного. Они не великие. Авторы Boulder Dash придумали великую идею и предложили достаточно скромную реализацию, в которую я пытался играть несколько раз, но так и не смог получить большого удовольствия. Примерно то же можно сказать про Jet Set Willy. Но эпигоны не дремали: не только на долю «Тетриса» и «Арканоида» выпало множество подражаний; пусть и не в том объёме, но и Boulder Dash, и Jet Set Willy породили жанры. Однако открыватель жанра и пик жанра — это не совсем одно и то же.


Если я читаю книгу по истории искусства (любого), всегда бывает интересно знать, кто пробил дорогу тому или иному направлению. Но не в меньшей степени интересно и то, чего же лучшего породило какое-либо время. Не берусь рассуждать о литературе и кино, а вот в играх ситуация почти однозначная: посмотрите любой список вида «лучшие игры 80-х», и вы в действительности увидите «самые великие игры 80-х». Но я же не историк игр; я просто хочу поиграть в самое лучшее и самое необычное, что было создано. В этом смысле мне всё равно, передо мной великий Boulder Dash или пигмейский эпигон Earth Shaker — это одна эпоха, одна платформа (если брать спекрумовский порт Boulder Dash), и именно по лучшим продуктам с точки зрения меня нынешнего, не отягощённого личным переживанием игры в первый Boulder Dash в годы когда ещё и жанра-то никакого не было, я буду оценивать те времена.


Как вы думаете, действительно ли основавшая жанр игра Boulder Dash настолько высоко подняла планку, что именно она до сих пор кочует из списка в список? Или (боюсь покушаться на святое) великий движитель жанра фэнтези профессор Толкиен с первого захода написал такую выдающуюся книгу, что её и в наши дни с громким успехом экранизируют? А как же эпигоны? Хочу рейтинг лучших, а не великих!..


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Сниппеты для Chrome DevTools


сегодня в 16:31


Возможности встроенного в браузер инструмента Chrome Developer Tools можно расширить с помощью сниппетов. Это ускоряет разработку и упрощает рабочий процесс. Хорошая коллекция сниппетов есть на GitHub'е.

Сниппеты в Google Chrome




Подробно о функциях сниппетов можно почитать в официальной документации Chrome. А вот краткая инструкция:

  1. Зайти в «chrome://flags» — Отметить «Enable Developer Tools experiments».

  2. Открыть DevTools: «Settings» — «Developer Tools Experiments» — Отметить «Snippets support».

  3. После перезагрузки во вкладке DevTools «Sources» появится «Snippets», где можно управлять сниппетами:




image

Сниппеты в Firefox




Можно включить поддержку сниппетов и в Firefox:

  1. Меню «Tools» — «Web Developer» — «Scratchpad».

  2. Вставить сниппеты и запустить (Cmd-R / Ctrl-R).

  3. Меню «File»-«Save», затем «File»-«Open Recent» для повторного использования.




JQuerify.js




Включает поддержку jQuery там, где ее нет.

Код сниппета


(function () {

if ( !window.jQuery ) {
var s = document.createElement('script');
s.setAttribute('src', '//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js');
document.body.appendChild(s);
console.log('jquery loaded!');
}

})();







image

А вот и сами сниппеты:


Allcolors.js




Выводит все цвета, использованные в color, background-color, and border-color.

Код сниппета


(function () {
var allColors = {};
var props = ["background-color", "color", "border-top-color", "border-right-color", "border-bottom-color", "border-left-color"];
var skipColors = { "rgb(0, 0, 0)": 1, "rgba(0, 0, 0, 0)": 1, "rgb(255, 255, 255)": 1 };

[].forEach.call(document.querySelectorAll("*"), function (node) {
var nodeColors = {};
props.forEach(function (prop) {
var color = window.getComputedStyle(node, null).getPropertyValue(prop);
if (color && !skipColors[color]) {
if (!allColors[color]) {
allColors[color] = {
count: 0,
nodes: []
};
}
if (!nodeColors[color]) {
allColors[color].count++;
allColors[color].nodes.push(node);
}
nodeColors[color] = true;
}
});
});

var allColorsSorted = [];
for (var i in allColors) {
allColorsSorted.push({
key: i,
value: allColors[i]
});
}
allColorsSorted = allColorsSorted.sort(function (a, b) {
return b.value.count - a.value.count;
});

var nameStyle = "font-weight:normal;";
var countStyle = "font-weight:bold;";
var colorStyle = function (color) {
return "background:" + color + ";color:" + color + ";border:1px solid #333;";
};

console.group("All colors used in elements on the page");
allColorsSorted.forEach(function (c) {
console.groupCollapsed("%c %c " + c.key + " %c(" + c.value.count + " times)",
colorStyle(c.key), nameStyle, countStyle);
c.value.nodes.forEach(function (node) {
console.log(node);
});
console.groupEnd();
});
console.groupEnd("All colors used in elements on the page");
})();







image

Showheaders.js




Удобно выводит HTTP заголовки, используется console.table.

Код сниппета


(function() {

var request=new XMLHttpRequest();
request.open('HEAD',window.location,false);
request.send(null);

var headers = request.getAllResponseHeaders();
var tab = headers.split("\n").map(function(h) {
return { "Key": h.split(": ")[0], "Value": h.split(": ")[1] }
}).filter(function(h) { return h.Value !== undefined; });

console.group("Request Headers");
console.log(headers);
console.table(tab);
console.groupEnd("Request Headers");

})();







image

Dataurl.js




Конвертирует все изображения на странице в Data URL (Работает только на картинках в том же домене, что и сайт).

Код сниппета


(function() {

console.group("Data URLs");

[].forEach.call(document.querySelectorAll("img"), function(i) {
var c = document.createElement("canvas");
var ctx = c.getContext("2d");
c.width = i.width;
c.height = i.height;

try {
ctx.drawImage(i, 0, 0);
console.log(i, c.toDataURL());
}
catch(e) {
console.log(i, "No Permission - try opening this image in a new tab and running the snippet again?", i.src);
}
});

[].forEach.call(document.querySelectorAll("canvas"), function(c) {
try {
console.log(c, c.toDataURL());
}
catch(e) {
console.log(c, "No Permission");
}
});

console.groupEnd("Data URLs");

})();







image

Performance.js




Выводит информацию о window.performance object.

Код сниппета


(function () {

var t = window.performance.timing;
var timings = [];

timings.push({
label: "Time Until Page Loaded",
time: t.loadEventEnd - t.navigationStart + "ms"
});
timings.push({
label: "Time Until DOMContentLoaded",
time: t.domContentLoadedEventEnd - t.navigationStart + "ms"
});
timings.push({
label: "Total Response Time",
time: t.responseEnd - t.requestStart + "ms"
});
timings.push({
label: "Connection",
time: t.connectEnd - t.connectStart + "ms"
});
timings.push({
label: "Response",
time: t.responseEnd - t.responseStart + "ms"
});
timings.push({
label: "Domain Lookup",
time: t.domainLookupEnd - t.domainLookupStart + "ms"
});
timings.push({
label: "Load Event",
time: t.loadEventEnd - t.loadEventStart + "ms"
});
timings.push({
label: "Unload Event",
time: t.unloadEventEnd - t.unloadEventStart + "ms"
});
timings.push({
label: "DOMContentLoaded Event",
time: t.domContentLoadedEventEnd - t.domContentLoadedEventStart + "ms"
});

var navigation = window.performance.navigation;
var navigationTypes = { };
navigationTypes[navigation.TYPE_NAVIGATENEXT || 0] = "Navigation started by clicking on a link, or entering the URL in the user agent's address bar, or form submission.",
navigationTypes[navigation.TYPE_RELOAD] = "Navigation through the reload operation or the location.reload() method.",
navigationTypes[navigation.TYPE_BACK_FORWARD] = "Navigation through a history traversal operation.",
navigationTypes[navigation.TYPE_UNDEFINED] = "Navigation type is undefined.",

console.group("window.performance");

console.log(window.performance);

console.group("Navigation Information");
console.log(navigationTypes[navigation.type]);
console.log("Number of redirects that have taken place: ", navigation.redirectCount)
console.groupEnd("Navigation Information");

console.group("Timing");
console.log(window.performance.timing);
console.table(timings);
console.groupEnd("Timing");

console.groupEnd("window.performance");

})();





image


Formcontrols.js




Выводит в удобном табличном виде данные всех форм на странице.

Код сниппета


(function() {

var forms = document.querySelectorAll("form");

for (var i = 0, len = forms.length; i < len; i++) {
var tab = [ ];

console.group("HTMLForm \"" + forms[i].name + "\": " + forms[i].action);
console.log("Element:", forms[i], "\nName: "+forms[i].name+"\nMethod: "+forms[i].method.toUpperCase()+"\nAction: "+forms[i].action || "null");

["input", "textarea", "select"].forEach(function (control) {
[].forEach.call(forms[i].querySelectorAll(control), function (node) {
tab.push({
"Element": node,
"Type": node.type,
"Name": node.name,
"Value": node.value,
"Pretty Value": (isNaN(node.value) || node.value === "" ? node.value : parseFloat(node.value))
});
});
});

console.table(tab);
console.groupEnd();
}
})();







image

Остальные, не менее полезные сниппеты, смотрите на странице GitHub.





Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Живая бифидопрограмма

image

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

При таком взгляде на программу она оживает, и всё происходящее внутри неё начинает обретать какие-то образы. Распределив все рабочие процессы и задачи по различным «работникам» начинаешь понимать как всё должно работать.


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



Знакомство




Для начала, самый главный член команды — певец. Он горланит песни по нотам, которые ему подсовывают. Естественно, в программе никакие ноты не обрабатываются — это просто замена понятию «музыкальный трек». Певцу можно поручить спеть что-нибудь, попросить остановиться, и попросить петь чуть погромче или потише. Еще, можно положить певцу ноты следующей по списку композиции, чтобы он быстро перешел от одной песни к другой.

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


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


Есть еще одна задача. Когда пользователь добавляет новую папку с музыкой в аудиотеку, эту папку нужно просмотреть и внести информацию о всей найденой музыке в аудиотеку. Этим мог бы заниматься и аудиотекарь, но в этом случае было бы сложно обеспечить одновременное сканирование папок и правильное функционирование аудиотеки. Пускай этим занимается поисковик — он будет накапливать все изменения, которые нужно провести и одним махом передавать их аудиотекарю, чтобы свести задержки при работе с аудиотекой к минимуму.


И последний, самый ответственный персонаж — начальник. Он отвечает за начало работы своей команды и за взаимодействие с пользователем. Он управляет интерфейсом и даёт знать остальным если пользователь чего-то хочет. Нажата кнопка паузы — начальник просит певца остановиться. В очередь добавлена композиция — начальник сообщает об этом сортировщику, и так далее. В нашем случае это скорее всего не понадобится, но еще к начальнику могут обращаться подчиненные если им нужно подсобить в чем-то, с чем они сами справиться не могут. В этом случае начальник может показать кто в команде может помочь.


Кто все эти люди?




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

Вернемся к делу. Надо как-то назвать исполнителей. Я думал о работниках, личностях и минионах, но думаю самым подходящим словом будет «персонаж». Этот термин достаточно обезличен чтобы назвать им и кого угодно. И бездельника и нюню и главного злодея. Каким должен быть персонаж?


Во-первых, он должен обладать некоторой свободой. Такой-же, какой обладают люди в реальной жизни. Своего сотрудника нельзя заставлять делать что-то с помощью физической силы (я за гуманный труд). Поэтому нельзя непосредственно вызывать функции объекта персонажа — это было бы похоже на «кукловодничество», а не на добровольную работу. Вместо этого он должен получать сообщения и реагировать на них по мере возможности. Получается, должны быть предусмотрены методы передачи сообщений.


Во-вторых, на каждого участника процесса должен быть выделен свой поток. Это обеспечит их независимость друг от друга.


В-третьих, чтобы потоки не портили данные при одновременном доступе к ним, необходимо предусмотреть соответствующие средства. Это несколько похоже на взаимодействие процессов в системе и на существующие там проблемы.


О сообщениях




Персонаж последовательно обрабатывает приходящие к нему сообщения. Если сообщений нет, он может простаивать или выполнять какую-нибудь фоновую работу переодически проверяя очередь сообщений.

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


Итак, навскидку я могу разбить сообщения на три группы:


1) Задачи/поручения — кто-то хочет чтобы персонаж выполнил некоторую работу. Пример: когда пользователь жмет «play» начальник просит певца начать исполнение песни.

2) Запросы — персонаж может попросить у своего коллеги передать ему некоторые материалы. Когда просимый (должно быть такое слово) будет готов к передаче, просящий получит от него сообщение с нужными материалами. Пример: когда певцу становится нужна новая композиция он просит её у сортировщика.

3) Уведомления о событиях — может статься так, что деятельность одного персонажа будет зависеть от действий другого. Командиру надо знать когда певец меняет песню, чтобы обновить интерфейс. Для этого командиру нужно попросить певца сообщать о смене песни. А певец, в свою очередь, разошлет уведомительные сообщения всем, кто об этом попросил.


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


Тут я думал расписать все сообщения, которые понимает каждый персонаж плеера, но список получился довольно большой и я решил что это довольно бесполезно. Так что я начну заканчивать.


Заключение




Представленная архитектура позволяет довольно наглядно представить многопоточное приложение. Кроме этого разбиение всех составляющих программы на объекты и исполнители делает структуру программы нагляднее. При командной разработке становится понятнее как разделить обязанности — каждый программист может взять себе по персонажу.

Получается что программа — это всего-навсего комната с несколькими работниками и рабочими материалами. Сбылась мечта программиста. Я могу объяснить как работает программа. Я уверен в том, что если концепцию легко представить, то у неё есть шансы.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Как не нужно освобождать интернет

Добрый день, уважаемые хабровчане. Проснувшись сегодня в четырнадцать часов утра, я обнаружил на хабре две статьи: Правительство США предало интернет. Нам надо вернуть его в свои руки и Как конкретно освободить интернет. Скажу прямо, их посыл меня удивил до такой степени, что я решил создать этот пост, даже не допив утренний чай.

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


image



Что же конкретно нам предлагается в этих двух статьях? Это можно описать тремя словами: «защита всего кое-как». Любые данные в интернете должны быть зашифрованы, но не настолько хорошо, чтобы силовые структуры при большом желании не смогли взломать шифр. Я утверждаю, что это — подход, диаметрально противоположный верному.


Давайте взглянем правде в глаза: значительная (если не большая) часть информации, проходящей через интернет, не приватна, а большая часть приватной информации — не секретна. Лично я могу выйти на главную площадь своего города и с чувством продекламировать 90% своей переписки за последнюю неделю. Ещё 9% — то, что я считаю личным. Я не стану делиться этим со всеми, но я чётко осознаю, что если эти данные окажутся в огромной куче других возможных данных, доступных спецслужбам, то ничего ужасного, плохого или даже просто неприятного не случится. Скорее всего, на них просто не обратят внимания.


Оставшийся процент — это то, что, возможно, следует шифровать. Если предположить, что приведённые мной цифры верны для среднестатистического человека, то «защита всего» на практике означает стократное увеличение издержек, связанных с информационной безопасностью, смысл которого туманен.


Теперь от «всего» перейдём к «кое-как». Брюс Шнайер и автор второй статьи, chainik, сходятся на том, чтобы позволить силовым структурам прицельно дешифровать сообщения «негодяев». Здесь я, во-первых, возьму слово «негодяи» в большие-большие кавычки (придётся сделать это мысленно, потому что я не нашёл, где у хабра кнопочка «увеличить шрифт»). Во-вторых, я позволю себе сослаться ещё на одну статью, посвящённую информационной безопасности: Орудия для государственной измены.



Если ваш алгоритм не позволяет педофилу необратимо испортить свой жесткий диск и избежать наказания, он не поможет людям, находящимся под идеологическим давлением, хранить запрещенные книги. Если ваше приложение-мессенджер не позволит спокойно спланировать теракт на Чемпионате Мира, то оно не поможет активисту рассказать о нарушениях прав человека. Если ваша карта не позволяет браконьерам отлавливать носорогов, не привлекая внимания природоохранных организаций, она не сможет использоваться нацменьшинствами для избегания «чисток». Мощь инструмента определяет саму возможность этих вещей, и это очень, очень давний вопрос о том, в каких целях этот инструмент будет использоваться. И ответом, как обычно, будет «и для тех, и для других».





Основное направление работы государства — гомеостаз, сохранение статус-кво. И возможность прицельного дешифрования в первую очередь обернётся против тех, кто пытается изменить существующий порядок вещей. Против людей, подобных Сноудену и Ассанжу. Попросту говоря — против «политических». На негодяев (без кавычек) попросту не хватит ресурсов.

Доклад окончен.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Набор в кружки 239

image

Скоро стартует набор в кружки знаменитой школы 239 (Санкт-Петербург). Для детей Питера и ЛО, с 6 по 11 класса. Все занятия бесплатные и проводятся ведущими преподавателями в своей области.


Уверен, хабровчанам будут интересны следующие направленности:

Математический центр

Робототехнический центр

It направление

Нанотехнологии (да, в 239 есть своя нанолаборатория)




Запись в кружки осуществляется по письменным заявлениям родителей и по обязательной регистрации на сайте школы с 10 по 15 сентября. Подробнее по ссылке http://239.ru/kruzhok/


Сегодня, 7 сентября с 16 до 18 пройдёт ярмарка, где можно познакомиться с руководителями и участниками кружков. Спб, Кирочная 8а, второй корпус.


PS. Ну и чтобы два раза не вставать.


8 сентября, в воскресенье, состоится открытая лекция ведущего специалиста в области биоинформатики и вычислительной биологии Павла Певзнера. Лекция будет состоять из небольших частей по 15 минут (между ними можно и нужно задавать вопросы) и продлится 2 часа. Видеозапись этой лекции, которую осуществляет Лекториум, станет основой дистанционного курса, стартующего на coursera в конце этого года. Лекция пройдёт на английском языке. Место проведения: актовый зал второго корпуса.


О докладчике: выпускник 239, доктор физико-математических наук, профессор Университета Южной Калифорнии, Университета штата Пенсильвания, Калифорнийского университета в Сан-Диего. Является членом Научного Консультативного совета Института генома (Сингапур) и членом редакционной коллегии журнала по вычислительной биологии — PLOS Computational Biology, победитель первого конкурса мегагрантов 2010 г.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



вышел DivX 10 с поддержкой стандарта сжатия видео HEVC


сегодня в 13:40


Компания DivX представляет новую версию своих программных продуктов с поддержкой нового стандарта сжатия видео HEVC. Загрузить обновленное программное обеспечение можно по ссылке: http://www.divx.com/downloads/divx/1

Напомним, новый стандарт HEVC/H.265 (High Efficiency Video Coding) является приемником хорошо известного, распространенного и популярного сегодня стандарта ISO/IEC 14496-10 MPEG-4 Part 10 H.264/AVC, который обещает повышение степени сжатия видео до 50% при том же качестве, а так же поддержку разрешений 4K и 8K (Ultra HDTV).



DivX в числе первых предлагает пользователям попробовать новый стандарт сжатия. Воспроизведение и создание видео в формате HEVC доступно пока только в контейнере MKV (Matroska) — http://matroska.org/

Программное обеспечение DivX 10 доступно для операционных систем Mac OS X и Windows и включает в себя:


  • DivX Player — проигрыватель, позволяющий уже сейчас воспроизводить HEVC видео в файлах Matroska (MKV), а так же MPEG-4 AVC и MPEG-4 ASP.

  • DivX Web Player — дополнение (plug-in) для веб-обозревателей (Microsoft Internet Explorer, Mozilla Firefox, Google Chrome, Apple Safari и Opera), позволяющее воспроизводить HEVC видео вплоть до 1080p внутри веб-страниц, причем онлайн (по сети). так же поддерживаются обычные форматы MPEG-4 AVC и MPEG-4 ASP.

  • DivX Converter — конвертер видео, позволяющий преобразовать видео в формат HEVC для того чтобы уже сейчас испытать новый формат. к сожалению, пока энкодирование в HEVC заметно длительно по времени (примерно в 2 раза медленнее кодирования x264 very slow profile). Но DivX активно работает над оптимизацией и обещает ускорение кодирования в будущих версиях программного обеспечения.




Более подробная информация о поддержке форматов в программном обеспечении DivX: http://www.divx.com/files/DivX10_format_support.pdf

Так же, DivX уже представила предварительную спецификацию профайлов для HEVC: http://labs.divx.com/system/files/DivX_HEVC_Video_Profiles_DRAFTMay2013.pdf. А это означает, что аппаратная поддержка HEVC видео уже не за горами, и вскоре начнут появлятся первые чипы и устройства, сертифицированные для воспроизведения DivX HEVC. Пока планируется 3 профайла — HEVC 720p, HEVC 1080p и HEVC 4K, но возможно немного позже будет представлен и HEVC 8K.



Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



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



Поняшка в похожем положении, где-то в неопознанном времени, насмерть сбитом, погибшим элементом CR2032

5 сентября, PEgorov написал пост, где представил новый скрипт, для получения видеозаписей с избирательных участков, через обновлённую систему онлайн наблюдения. Днём ранее, я, было начал ковыряться с сайтом трансляций, но сами трансляции на сайте оказались отключены. Сотрудник техподдержки тоже ответил, что трансляция не ведётся, а глубже копать я не стал. И тут появляется пост PEgorov'а. Первая пришедшая в голову мысль — на этот раз взяться и записать все потоки. Шансов успеть можно сказать не было, но тут вторая удача — Fak3 уже успешно работал над этой задачей, мне осталось только взяться за решение проблемы с железными ресурсами…


Но, пожалуй, всё по порядку


Ради чего всё это?

Есть два места, где могут происходить махинации с голосами, непосредственно во время выборов. Это УИКи и Избирком. Если бросить контроль комиссий — подделки имеют шанс происходить там, однако проконтролировать Избирком напрямую невозможно. Но можно выявлять нестыковки том случае, если уики полностью прозрачны, ведь после подсчёта голосов составляется протокол за подписью наблюдателей. И наблюдатели могут его беспрепятственно сфотографировать. Тогда и всплывут фальсификации в Избиркоме. Именно таким сервисом мне пришлось сейчас заняться.


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


Каковы наши цели?

Мы вполне рассчитываем сделать запись со всех московских участков. Если вдруг будет серёзный переизбыток ресурсов и не потребуется дублирование — выйдем из Москвы и будем писать другие участки.


Что пишет и что написал Fak3?

Он пишет клиент и сервер на python, чтобы каждый желающий может запустить скрипт на своей машине и тот, централизованно и согласованно будет записывать трансляцию только с недостающих УИКов. На момент написания этой новости реализована часть для записи, автоматическое распределение должно быть реализовано сегодня.


Где можно взять программу?

Здесь: bitbucket.org/fak3/govstream-cli


Что нужно для работы программы?



  • python 2.7

  • pip




Сколько места нужно для ведения записи?

По приблизительным подсчётам на 24 часовую запись одного участка уйдёт 8гб

Какой нужен канал для ведения записи?

По приблизительным подсчётам, одна камера выдаёт 400-500кбит/с

Для записи одного УИК, потребуется 0.8-1мбит

100 mbit ~80 УИК

1 gbit ~800 УИК


Сколько всего в Москве УИКов, сколько камер?

3611 штук, на каждом по 2 камеры.


Скрипт готов к применению?

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


Как установить программу?

Актуальная инструкция есть в обзоре


Чем можно помочь со скриптом?

Провести ревизию кода и отправлять pull реквесты.


Для чего нужны .meta файлы рядом с видео?

Это данные для проекта считайтесами.рф, который занимается помимо прочего подсчётом посетивших участок людей, чтобы выявлять мёртвых душ.


Если готовы писать — бросьте сообщение в личку. Если нет хабрааккаунта — напишите на image


Нужна помощь




Если у вас есть свободный компьютер или nas.

Если есть свободный канал — подключайтесь к записи выборов 8 сентября.

Если вы хостинг провайдер — выделите толстый канал и ёмкий диск на сутки 8-ого и 3-4 дня после выборов, чтобы мы могли выкачать все записи.


Не бойтесь экспериментировать. Стоит только провернуть пару раз маховичок и он начинает раскручиваться. Мне это нравится, меня это вдохновляет. Присоединяйтесь.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Алгоритм расчета будущей пенсии или пенсионная реформа как способ поддержки малого бизнеса

За последнюю неделю прочитал несколько статьей на Хабре на тему пенсионной реформы, покрутил калькулятор на сайте ПФР где понял, что что-то не сходится.

В общем, решил я подробнее разобраться в калькуляторе. Он, конечно, что-то считает, но имеет, как выяснилось, интересные нюансы. Калькулятор на сайте ПФР отчетливо показывает, что практически нет никакой разницы, сколько процентов идет на накопительную часть пенсии. Однако по простым прикидкам разница должна быть и возможно существенная. Очевидно, что показывать разницу, для ПФР не выгодно и при разработке данного калькулятора они опустили маленькую, но важную деталь, а именно, учесть процент доходности накопительной части пенсии. Но как оказалось, это не единственный интересный момент в методике расчета.



Кстати, в последней статье на эту тему имеются неточности. Во-первых, не 26%, а 22%, а во-вторых, с 2015 года нет ограничения в виде 563 000 руб. максимально облагаемого дохода за год и формула расчета страховой части пенсии несколько другая.


Раньше, из-за ограничения, максимально облагаемой суммы в 563 000 руб. в год, нельзя было рассчитывать на пенсию больше 15568,12 рублей. С 2015 она может быть больше, однако в разы больше может стать только, если вы еще поработаете 5-10 лет после выхода на пенсию.


КО на сайте ПФР подчеркивает: «Таким образом, чем выше зарплата и продолжительнее общий стаж, тем выше будет размер трудовой пенсии по старости!» Ну OK, было бы странным обратное. Но как показывают практические расчеты, более высокая зарплата далеко не всегда дает больший размер пенсии!


Калькулятор на сайте считает пенсию через JavaScript, поэтому ничего не мешает нам детально изучить его алгоритм.


Итак, страховая часть пенсии рассчитывается согласно формуле ПФР СП = (ФВ х КПВ) + (ИПК х СПК х КПВ)

где:



СП – страховая пенсия в году назначения пенсии;

ФВ – фиксированная выплата;

ИПК – индивидуальный пенсионный коэффициент, равный сумме всех годовых пенсионных коэффициентов гражданина и премиальных коэффициентов за стаж;

СПК – стоимость одного пенсионного коэффициента в году назначения пенсии;

КПВ – премиальный коэффициент за выход на пенсию позже общеустановленного пенсионного возраста





Я было уже собрался немного упростить формулу: СП = (ФВ + ИПК х СПК) х КПВ. Однако, внезапно оказалось, что КПВ имеют разные коэффициенты.

Ну ОК, пусть будет так: СП = (ФВ х КПВ1) + (ИПК х СПК х КПВ2)

  • ФВ согласно JS коду калькулятора = 3610.31 какой он будет ко времени выхода на пенсию можно только гадать, предполагаю, что будет больше.

  • КПВ1 и КПВ2 = 1 при условии, что мы не будем перерабатывать и повышается согласно таблице.

  • ИПК это сумма всех ГПК (годовой пенсионный коэффициент)

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




ГПК = (ГЗП/МЗП)x10xК

К – коэффициент, который равен 1 при 0% отчислений на накопительную часть и уменьшающийся при повышении процента отчислений. Рассчитывается он просто: всего на пенсию отчисляется 22% из них 4% просто идет в ПФР, 16% на формирование пенсии. Эти 16% делятся на 6% и 10%, или на 2% и 14%, или целиком 16% идет на формирование страховой части, если вы старше 1967 года рождения.


Итак:


при 6% накопительной части, К = 10/16 = 0,625

при 2% накопительной части, К = 14/16 = 0,875


ГЗП – ваша официальная ГРОСС ЗП за год, т.е. ваша официальная ЗП + 13%


А теперь, внимание. МЗП – это максимальная зарплата с которой ваш работодатель уплачивал страховые взносы. Другими словами, если CEO или кто-то еще в вашей компании имеет огромную зарплату, то ваш ГПК коэффициент будет значительно меньше, ну и соответственно меньше будущая пенсия! Поэтому, если вы всерьез обеспокоены размером будущей пенсии, то следует выбирать компанию, где топы получают ЗП в размере 1 символического рубля, а остальное получают годовыми бонусами. И соответственно если вы ТОП и ваша ЗП самая высокая в компании, то и ваш коэффициент будет максимальным. Отсюда, неожиданно следует, что для размера своей пенсии выгодно быть предпринимателем со своим ИП или ООО.


Но калькулятор ПФР узнать ЗП ваших топов естественно никак не может, поэтому МЗП решили зафиксировать, он рассчитывается как 2,3 среднегодовой зарплаты в РФ в 2013 году (29 907 * 2,3* 12) – 825,4 тыс. рублей. То есть получается, что максимально получаемая ЗП в вашей компании составляет чуть меньше 70 тысяч рублей, вот такой вот нюанс. А это значит, что если вы введете свою ЗП больше максимальной суммы ЗП в вашей компании, то калькулятор ИПК и следовательно всю сумму пенсии должен считать неправильно! Однако, программисты ввели недокументированное ограничение на максимальную ЗП в те же 825,4 тыс. рублей в год. Поэтому, вводя суммы ЗП больше 68783 в калькуляторе, ваша пенсия увеличиваться не будет.


После собранной информации, я в Excel сделал свой калькулятор для расчета пенсий, скачать можно здесь. Вот несколько примеров, того, что получилось:


Вариант 1




Исходные данные:


  • Ваша ЗП получаемая на руки равна 50000 рублей.

  • Ваша ЗП самая высокая в вашей компании, то есть вы скорее всего ИП или владелец ООО.

  • Вы решили под накопительную часть доверить 2%. Доходность накопительной части стабильно держится на уровне 8% годовых.

  • Ваш планируемый стаж работы 35 лет и вы не собираетесь перерабатывать после выхода на пенсию.



Итог:



Ваша пенсия составит 31 593,57р. Из них 21 345,25р. страховая часть и 10 248,32р. накопительная часть.

При этом за все время работы вы перечислите в ПФР 4 746 000,00р., а в итоге, за расчетный период 19 лет, получите от них 4 866 717,00р. то есть даже больше чем отдали.


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


Вариант 2




Все условия остаются как варианте 1, единственное, что меняется, это процент на накопительную часть, который установим равным 6.


Итог:



Ваша пенсия составит 47 023,07р. Из них 16 278,12р. страховая часть и 30 744,95р. накопительная часть.

За все время работы вы перечислите в ПФР 3 796 800,00р., а в итоге, за расчетный период 19 лет, получите от них 3 711 411,36р. Чуть меньше, но не намного, однако смотрите дальше.


Вариант 3




Снова, те же условия, что и в варианте 1, за исключением того, что вы являетесь рядовым сотрудником большой компании и например у CEO компании зарплата равна 300 тысяч рублей.


Итог:



Ваша пенсия составит, всего 16 814,45р. Из них 6 566,13р. страховая часть, а накопительная часть останется той же, 10 248,32р.

При этом за все время работы вы перечислите в ПФР ту же сумму, что и в первом варианте, это 4 746 000,00р., а за расчетный период в 19 лет, получите от них всего 1 497 077,64р. Можно заметить, что это несколько меньше чем вы перечислили им, не находите? А ведь так работает большинство граждан в стране.


Вариант 4




Те же условия, что и в предыдущем варианте, только в накопительную часть идет 6%


Итог:



Ваша пенсия составит 36 466,56р. Из них 5 721,61р. страховая часть, а накопительная часть значительно возрастет и составит 30 744,95р.

При этом за все время работы вы перечислите в ПФР 3 796 800,00р., а в итоге, за расчетный период 19 лет, получите от них 1 304 527,08р. Очевидная разница сохраняется.


Над остальными вариантами предлагаю поэкспериментировать самостоятельно.


Замечу лишь, что у страховой части пенсии есть порог, который при 35 лет стажа и без переработок составляет 21 345,25р. при 2% отчислений на накопительную часть и 16 278,12р. при 6%. То есть, начиная с определенной суммы, рост страховой части прекращается и вы начинаете просто так отдавать деньги в ПФР.


Ну и напоследок, позволю немного пофантазировать:


Допустим, что государство позволило нам самим распоряжаться пенсионными накоплениями.


Итак, мы получаем ЗП в 50000 рублей + 22% на пенсию. На эти 22% процента мы открываем пополняемый вклад в супернадежном банке под не слишком большие, но стабильные 7% годовых. Итого, за 35 лет у нас должна образоваться сумма в 20 619 412,77 р. на счету + ежегодно начисляемый процент в размере 1 443 358,89 р., что дает 120 279,91 рублей в месяц на пенсию и мы еще оставим внукам наследство в 20 миллионов рублей. Конечно такого никогда не будет, однако никто нам не мешает зарабатывать больше и самостоятельно откладывать эту, не слишком большую сумму, на счет в банке. В целом, наше будущее в наших руках.


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: