среда, 10 января 2018 г.

Обновление с nodejs

Работаю с nodejs и ее require("vm").
Ничего не трогаю, все работает уже несколько лет. И заметил странность - при создании функции с именем уже существующей, старая функция не перезаписывается, а остается, т.е. новая не вызовется.
т.е. в песочнице
function aa() {console.log("aa!");}
...
function aa() {console.log("bb!");}

при вызове aa - будет aa!

Решение - обновился до текущей версии 8 - проблема исчезла. Иногда обновления полезны

пятница, 31 марта 2017 г.

{ [Error: socket hang up] code: 'ECONNRESET' }

Итак вы используйте nodejs (в качестве клиента -http.request) и получаете эту ошибку - отчего?

Для начала нужно вспомнить что такое этот самый продвинутая и современная платформа nodejs.

nodejs - это современная, продвинутая, асинхронная платформа.

Асинхронная - не равно многопоточной. В асинхронной системные действия делаются многопоточно, а затем пользовательские (серверные) действия выполняются последовательно из стека задач.

Т.е. когда выполняется один JS-код на сервере, другой код ждет (и нервно курит). Идеально - что время выполнения кода = 0мс.

Но время выполнения кода (а особенно кода JS - это я вам как разработчик на C/C* говорю) - очень отлично от 0мс.

Теперь рассмотрим ваш неудачный код на nodejs, в котором вы используйте http request для получения данных с сайта, а потом их обрабатываете и получаете иногда (постоянно) ошибку "socket hand up".

Дело в том, что это означает что код вашей обработки запроса превышает таймаут сервера, с которого вы получаете свои данные. Клиент (т.е. вы) не читаете и не закрываете сокет(Socket) (потому что вы ждете это сделать асинхронно в потоке стека задач). И отрубает вас. Об этом, вы кстати, узнаете после того как выполните текущий код.

Решение?
1. Ускорить выполнение кода :)
2. Распаралелить задачу запросов и обработки - через отдельные триды/процессы
3. Использовать другие технологии

понедельник, 8 февраля 2016 г.

Дорогая математика на дешевых хостингах

Сижу, я давеча, думаю о своем, и тут на почту - шмяк письмо, мол Превышение лимита на использование CPU. Хостинг от REG-ru порадовал - причем сайтик на нем крохотный, с небольшой посещалкой.

Смотрю предложенные варианты - и вижу было в среднем 1-2% CPU в день, сейчас уже 10-14 и среднее за неделю упорно движется к порогу 7%.

Причем самое интересно посещаемость - вообще не изменилась за неделю. Ничего нового. Даже вирусов. Секция самые долгие запросы - у них вообще бред, показывают что самый долгий запрос - это скачивания файла - причем тут CPU?

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

И тут как осенило, я ж скрипт поправил - там нужно было действие одно делать - а регулярку влом было писать и сделал супер-пупер скриптом, типа:
for($x=0;$x < 1000; x++ )
for($y=0;$y < 1000; y++ )
...
И эта конструкция, которая на тьфу решалась даже на этом сервере - оказывается сильно грела процессор. Такая вот фигня

среда, 6 мая 2015 г.

OpenSSL SSL_connect returned 0

Произошла неприятная вещь, старый класс который доставлял информацию по HTTP(S) каналу отказался работать с некоторыми сайтами.

При изучении оказалось, что SSL_connect возвращает 0, спецификация говорит мол все плохо, но не совсем смотрите getError и будет вам....

Но SSL_ERROR офигительно познавательная ошибка.

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

Проблема была в том, что в ssl.h, ни в tls.h не было такой функции. Обновил openSSL. функции появилось, но все равно не заработало.

Поменял   ctx = SSL_CTX_new(TLSv1_2_client_method()) - заработало.

Отдельный привет, openSSL - на странице доступной по запросу openssl windows, версия 1.01 говорит, что там библиотеки и для Cbuilder в том числе (ну есть один проект где используется билдер). Библиотек конечно-же нет. Но напомню implib -a ssleay32.lib ssleay32.dll  творит чудеса.

воскресенье, 18 января 2015 г.

Фриланс

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

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

Решил зарегистрироваться на  odesk'е. В конце декабря, сайт постоянно колбасило и не мог заполнить профиль - постоянно ошибка. Написал тикет - сказали есть проблема. В январе (числа 12, эх) все же удалось.

Заполнил профиль, прошел первый тест (другие не давались выдавало 500 ошибку), отправил на Review свой профиль. И не прошел. Причем лично знаю, что там работают люди которые в программирование хуже меня на очень много. Собственно я с ними работаю на основной работе и по их рекомендации узнал о odesk'е. Вот так.

среда, 13 ноября 2013 г.

Выбираю себе домашний комп

Первый комп мой был персоналкой, P-90 по-моему.
Его я постепенно апгрейдил до второго пня, поменяв все, кроме HDD, (просто докупал более объемный и увеличивал их количество).

Затем пришлось жить отдельно от родителей, и я купил себе первый ноут - его можно было таскать из комнаты в комнату. Потом появился ADSL инет и ноут припарковался на рабочий стоол. К нему был докуплена полноценная клавиатура, и само-собой мышка (ненавижу тачболы).
Затем появился монитор :) Чтобы экран был больше, а не жалкие 15".

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

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

Ну и домохозяйки, окажутся правы, которые показывали на монитор и говорили "компьютер, процессор и т.п."

понедельник, 3 июня 2013 г.

Оптимизация кода - ускорение приложения

Ранее (вернее до вчерашнего дня) я под ускорением приложения подразумевал оптимизацию кода.
Например заместо for(int i=0;i писал for(int i=0;s[i];i++) ...
Ну и так далее, оптимизировал циклы и прочее, часто использовал указатели на char *, нежели пользовался стандартными функциями str.
Но все изменилось вчера, собрал небольшой, но вычислительный код на машинке под Lin64.
Компилил само-собой g++, и скорость на только что свежой тачке с толи с 4, толи 8 ядерным процессором показала практически туже что и на моем рабочем компьютере - винXP32, трехлетней выдержки.

Что за нах? Подумал и поискал в инете, нашел кучу ключей и собрал уже с ключами -m64 -Ofast -flto -march=native -funroll-loops, разница была в десять(10) раз!!!

Вот такая хреновина...