?

Log in

node.js

Буквально на днях один доктор по части программирования прописал показал мне забавную штуку под названием node.js. Хотя за пару дней она выросла у меня в глазах из забавной штуки в серьезный инструмент разработки.

Основная фича - это то, что это движок (на основе V8 от гугла), который позволяет писать серверную часть веба не на унылом говне пхп, а на яваскрипте, который немного более ближе к полюбившемуся си и не содержит в своем синтаксисе ебучих баксов на каждом шагу. А также поддерживает мощный механизм калбеков и асинхронную работу с файлами, соединениями (вспоминаем libevent) и т.п. Имеет простой механизм написания биндингов на любимой сишке и имеет оные и под работу БД, и под мемкешед и т.д., а также дохуя много модулей типа роутинга урл, шаблонизаторов...

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

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

upd: "По поводу хостинга, есть тот же Heroku, и там есть бесплатные аккаунты"

PTAGS Tags;:

Жаббер ботес 2

В прошлом посте был показан пример того, как можно накотать простого жаббер бота за полчаса, юзая HsXMPP.
Но мне захотелось, дабы он умел делоть что-либо полезное (для меня, конечно же). Идея зародилась немного ранее и заключалась в следующем:
- есть прекрасная конференция, где живет бот, котрый загадывает всякую чушь, дает поцказки, открывая по одной букве, начисляет баллы за правельный ответ.
- в инете гуляет база вопрос/ответ в формате .sql для этой викторины
- надо накатать бота который будет смотреть вопросы другого бота, искать в базе ответ, кидать ответ пользователю (или прям в конфу, что более палевно)
Собственно реализацияCollapse )

PTAGS Tags;:

Жаббер ботес

Чтобы немного отдохнуть от тяжелых трудовых будней решил накодеть простенького жаббер ботеса. Фишкой ботеса стала возможность анонимизации. Тобешь любой желающий, напесав боту в преват заветную фразу, получает возможность песать от имени бота в конференцию.
Так как на ассемблере такое кодеть довольно таки лень, был содран прикольный модуль для хаскеля HsXMPP, который превращает разработку бота в развлечение. Правда, как и многие модули, этот затребовал какойто биндинг к ADNS, но правки пары строк оказалось достаточно, чтоб отучить его от столь вредной привычки.
под катом кодесCollapse )

Авторан на холяву

Довольно давно написал эту статью, в которой описал методы автозапуска, найденные во время ресерча подсистем smss, csrss ОС Windows XP SP2.
Предполагалось, что довольно большая группа учасников осилят написать статьи, дабы выпустить некоторое подобие е-зина, но многие забили или отложили это дело до более светлых времен. Соответственно е-зина не получилось и было решено выкладывать материал по мере поступления.
Вобщем, статья доступна на virustech.org, где вроде как опять открыли регистрацию для нормальных людей (есле вы долбоеб жертва педагогической запущенности, не добавляйте модераторам проблем, не регистрируйтесь).

PTAGS Tags;:

Глюк хексрейза

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

пример некорректного декомпилаCollapse )

PTAGS Tags;:

OpenCV

Довольно давно слышал про это прекрасную библиотеку для обработки изображений и видио (распознавание всякое, работа с несколькими камерами, обработка с использованием всякех эффектов). Но вот сегодня всеже решил сам попробовать поработать с этой штукой. Скачал, установил, посмотрел семплы (кстате, очень впечатляют), скачал книжку и решил накодеть чото. Гдето с год назад работал с изображениями средствам матлаба, но это не то, на си с использованием сабжа намного комфортней. Получилось простая херь, которая при неподвижно зафиксированной камере делоет из того, что движецо, прозрачные объекты, видио сохраняецо в файл:

#pragma comment(linker,"/ENTRY:MyMain")
#include "highgui.h"
#include "cv.h"

//
//Считать кадр и скопировать его.
//
IplImage* CapWithCopy(CvCapture* cp)
{
    IplImage* cap, *rez;
    cap = cvQueryFrame(cp);
    rez=cvCreateImage(cvGetSize(cap),cap->depth,cap->nChannels);
    cvCopyImage(cap,rez);
    return rez;
}

void MyMain(void) {
    CvCapture* capture=cvCreateCameraCapture(0);
    
    CvSize size = cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
        (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
    cvSetCaptureProperty(capture,CV_CAP_PROP_FPS,25);
    CvVideoWriter *writer = cvCreateVideoWriter("asd.avi",CV_FOURCC('X','V','I','D'),25,size);
    
    cvNamedWindow("Example1");

    IplImage *freeze,*cur;

    //
    //Сохранить фон
    //
    freeze=CapWithCopy(capture);
    
    //
    //Цикл чтения/обработки кадров
    //
    while(1,1){
        cur=CapWithCopy(capture);

        char c=cvWaitKey(1);
        if (c==27) break;

        //
        //Все что изменяется на фоне будет с 25% прозрачностью
        //
        cvAddWeighted(cur,0.25,freeze,0.75,0.0,cur);

        //
        //Есле один кадр, то фпс бля тупит и получаецо все в 3 раза быстрее :)
        //
        cvWriteFrame(writer,cur);
        cvWriteFrame(writer,cur);
        cvWriteFrame(writer,cur);
        cvShowImage("Example1",cur);
        cvReleaseImage(&cur);
    }
    cvReleaseVideoWriter(&writer);
    cvReleaseCapture(&capture);
    //cvWaitKey(0);
    ExitProcess(0);
}

P.S. Чем подсветить код тут?

PTAGS Tags;:

Обсудив с несколькими людьми схожести компьютерных и природных околовирусных вопросов, решил кинуть сюда свое видение вопроса, копнув чуть глубже нежеле "и компьютерный и природный верос заражает жертву, делая её источником себе подобного гуана".
Начиная со строения каждой из рассматриваемых сущностей, можно заметить, что как компьютерный так и природный вирус можно рассматривать как некий контейнер информации, от которой зависит поведение вируса, строение, способность заразить ту или иную сущность. Для компьютерного вируса - это набор команд, выполнение которых приводит к распространению инфекции, для природного - набор нуклеиновых кислот, геном, который может быть интегрирован в геном клетки жертвы, делая её источником инфекции.
Оба класса вирусов могут иметь или не иметь механизмы защиты своего кода - наличие оболочки у зрелого природного веруса, крипто у его компьютерного аналога. Кроме того оба типа вирусов могут мутировать.
Если рассмотреть упрощенный механизм заражения биовируса, можно также увидеть сходства. Первым делом должно произойти определение рецепторами на поверхности вируса специфических структур на поверхности клетки, что схоже с тем, что делает компо-вирус при поиске жертвы (типа FindFile(*.exe)). После этого происходит абсорбция вируса (OpenFile), проникновение компонентов вируса в клетку с последующим изменением её генома (внедрение кода вируса).
Можно провести и околовирусные аналогии. Антивирус в организме - иммунитет; фаервол - пилюли, блокирующие протеины виря, ответственные за присоединение к клетке, проникновение в неё и т.п.; базы АВ - вакцина, представляющая из себя кучку дохлых семплов.
Всё это к тому, что много чего в программенге, в технике пытаюцо спиздить скопировать у природы, так как это штука с интерфейсами и механизмами, которые отлаживались дольше, нежеле любая поделка человека. И правельно делоют, что пытаюцо :)

Почти всегда

Почти всегда разговор с девушкой - это трёп, лишенный всяческого смысла. Вчера, нопример, спорел с одной из представительнец противоположного пола. Получилось чото типа:
Я: - блаблабла почти всегда блаблабла
Она: - ПОЧТИ!!!11одинодин А значит не всегда.
Вот тут и происходет наёб, "почти всегда" превращается в "не всегда". Вроде и мелочь, но если прикинуть, то серъезная подмена понятий.  "почти всегда" - это "почти в 100% случаев", то есть в 100%-Х% случаев, где Х<<50%. А вот "не всегда" может быть сказано и при 1% и при 0,000001%, вобщем если есть хотя бы один прецендент.
Ну и железное возражение девушке:
Я: - "почти всегда" - далеко не то же самое, что "не всегда"
Она: - думай как хочешь.

АХТУНГ!! ГОТОВЫХ ИСХОДНИКОВ ТУТ НЕ БУДЕТ, КАК И ИХ ЧАСТЕЙ.
Как-то недавно пришлось столкнуцо на практеке с подменой выдачи поисковых систем. Как любой лентяй, который не знает чо это такое и как обычно осуществляецо - загуглел тему + вырыл пару бинарников и исходнеке зевсо-недотроя.
Гугл выдал стотью из мего-журнала ][, в которой был описон совершенно дерьмовый подход, работающий по принципу "редирект на фид с подстановкой кейворда", что палевно и походу малоэффективно. Вскрытие бинарей показало, что в них скопипижженный код с хакеро-стотьи, слегка доточенный под конкретные нужды авторов. Остаецо зевсо-трой, в котором обнаруживается подмена на уровне wininet(а сталобыть только в ИЕ), а на сокетах - только граббер фтп.
Вобщем-то, это говорит о том, что толковое решение надо делоть самостоятельно.
Требование я себе поставел одно - все должно выглядеть максимально беспалевно. Это сразу отбрасывает метод "редирект на фид с постановкй кейворда", т.к. лично я насторожился бы, есле бы нажал на ссылку, которая ведет на вики, и начал увлекательное редирект-путешествие по фидам. Сталобыть подмена должна работать уже на этапе загрузки того же гугла, заменяя оригинальные результаты на то, что указанно в фиде или платной выдаче другого поисковика. Это приводит ко вполне логическому выводу, что следует ловить посылку запроса и аналезировать, является ли это поисковым запросом в гугл.
Что из себя представляет блок фида? По сути это набор таких параметров как "новый заголовок", "новое описание", "новая ссылка", "ссылка на которую реально должен произойти переход". Для примера "TV", "The best tv in the world", "http://tv.com", "http://feed/?q=tv&partnerid=X&feednum=1".
Проблема номер 1. Как бы мы это не заменяли, результирующий размер страницы изменяется, при чем не всегда в меньшую сторону, что приводит нас к единственной разумной(без излишнего гемороя) реализации:
1) получить страницу сразу же при посылке запроса
2) привести её из chunked вида в нормальный
3) подменить контент
4) добавить поле Content-Length, куда пихнуть новый размер
5) отдать в обработчике реква(ну или WSA версии, это не важно)
Решив эту проблему сталкиваемся с тем, что ссылка, которая должна торчать в подмененной странице отлична от той, на которую реально должен попасть жертво-юзер. Это возможно разрулить 2мя способами:
1) добавить onclick, который будет бросать юзера на фид
2) изменить айпи в обработчиках getaddrinfo(IE), gethostbyname(FF) + пофиксеть запрос.
Я решил делоть второй вариант. Т.к. первый более палевен - светится фид в адресной строке пока не произойдет редирект на ссыль, указанную в результатах поиска, а также поле рефферер запроса установленно в состояние "google", что довольно часто чекают фид-скрипты.
Второй же вариант, будучи реализованным, приводет к тому, что у пользователя в заголовке постоянно та ссылка, на которую он кликнул + заодно с подменой адреса скрипта в запросе фиксится реферер на чото типа ourfakesearchengine.com/?q=TV, указанное в админке партнерки.
После того, как решается эта проблема, возникает исчо одна, которая проявляется в ИЕ, но не проявляется в ФФ, что может ввести в заблуждение. В ФФ мы получаем страницу, фиксим, отдаем в перехватчике рекв. В ИЕ мы получаем страницу, фиксим и нихуйа не отдаем, потому что перехватчик нифига не получает управления, при чем не изза того, что кто-либо снял наш хук или юзает левую АПИ. Происходит это в связи с тем, что сокеты работают в асинхронном режиме, в обработчике сенда мы выбираем все данные из сокета, а осёл читает только из сокета, который выберается селектом, а селект в свою очередь выберает тот сокет, в котором есть что почитать. Фиксится небольшим перехватчиком селекта :))
Собственно это основная идея и проблемы, возникающие при её осуществлении. Хоть все это и страшно с виду, на практеке все решается ведением пары списков  - списка открытых сокетов (по всем перехватчикам от getaddrinfo до closesocket) и списка подменяемых ссылок (с момента получения фида и до первого перехода по ссылке)

PTAGS Tags;:

переход на вин7

Сегодня снес нахуй висту, поставел вин7 ультимейт х64. Работает оно шустрей пока что, весь софт нормально установился, кроме, пожалуй, запиленного под висту софта для ноута (но это, думаю поправимо). Также не радует невозможность переключения пуска в классический вид (который без ебанутого прокручивания).
В общем покачто не жалею. +получена возможность поколупать х64 преложения, повертеть этот дробленный кернел семерки.

аддед: невозможно под олей (которая первой версии) чото подебажеть, даж до ентрепоинта не доходит дело :\ попробую вторую бету зафтро. не получицо - прийдецо перейти на виндбг