среда, 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) раз!!!

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

четверг, 13 декабря 2012 г.

Многострочный INSERT в VARCHAR поле

Сегодня портировали базу в IBM DB2, встряли на insert'ах в текстовые поля: varchar'ы и blob'ы, решение простое - нужно квотировать символы #10 и #13 как '||chr(10)||' и chr(13) соотвественно, чтобы весь insert был в одну строку. Без единого разрыва, как говорится

пятница, 5 октября 2012 г.

вперёд

Создаем новый проект, сделано 99%, до окончательного пуска осталось от пары недель до бесконечности, это для тех кто понимает.

Надеюсь все срастется, проект реально неплох.

понедельник, 10 сентября 2012 г.

Как сортировкать массивы в PHP по нескольким полям

Задался тут вопросом как сортировать в PHP массивы по нескольким ключам, поискал (не сильно долго в инете) ничего не нашел, а потому придумал свой вариант.

Все очень просто, и делается за три прохода:
1. Пробегаете ваш массив и одновременно создаете новый (tmp), где ключ - ключ в исходном массиве, а значение склейка ключей. Например для строковых $a.'-'.$b.'-'.$c, а для числовых можно воспользоваться умножением.
2. Сортируете полученный массив sort или rsort
3. Создаете новый массив пробегая по отсортированному tmp, создавая массив по заданному значению из tmp и значению из исходного массива.

Это возможно лишь потому, что PHP при создании нового элемента массива элемент точно добавляется в конец, в Perl это бы не прокатило. Там он бы попал по хешу для сортировки. Да и сортировать в Perl'е гораздо легче, следует лишь указать любую пользовательскую функцию перед sort. Да и Perl круче PHP, но пост совсем не про это....

пятница, 7 сентября 2012 г.

Firebird & x64 & Linux

А вернее Suse, значит на сервер наш администратор поставил deleveper пакеты Firebird и мы там ж, стали компилить наш проект. Он скомпилилися (ну вернее скомпилился после указания пару флагов компилятору про точность - но это gcc и сам отлично показывал).

Но затем при некой выборке из БД, выдавал какую-то ересь, причем полезли в дебри заголовочных файлов isbase.h нашли там ISC_INT64.

Для спецов скажу - там не учитывается x64 режим, нужно ставить еще define на просто int.

Для не спецов скажу - это пиздец товарищи когда ставишь delevoper пакет ожидаешь что он не будет содержать ошибки.

вторник, 7 августа 2012 г.

Случайно переключился с cp1251 на cp866 набрав слово "его".
Задумался над смыслом кодировки....

четверг, 2 февраля 2012 г.

Нашел на баш.орг.ру :)


< emilevictor> .... почему? я не понимаю. если я делаю указатель x и присваиваю ему 0, то почему *x - не 0?
< ciaranm> emilevictor: указатель указывает на адрес, в данном случае 0x0. а *x - это данные по этому адресу, скорее всего равные "segmentation fault"


:)

понедельник, 30 января 2012 г.

между делом

Помогал инет-знакомому сделать кой-какой модуль на Flash (давно уже, где-то год назад), тот наконец-то проект запустил генеалогическое древо семьи своими руками.

Знайте - там есть частичка меня :)

понедельник, 23 января 2012 г.

Центрирование при зуме(zoom) или зачем нужна математика

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

Реализовывал все это наш новенький программист. Он из тех, кто считает, что вузы нафик не нужны (кстати недавно узнал, что вуз теперь не аббревиатура, а потому пишется не заглавными), так вот он долго втыкал в функцию центровки объекта по средине экрана.
Скажем: off1 = x*sw*kof - scrX/2, затем думал.
Думал от прошлой среды то понедельника, вернее говорит еще все выходные думал и выдал на формулу:
off1 = (sw*kof1*off2+sw*kof1*scrX/2 - (scrX/2)*sw*kof2)/(sw*kof2)
На мой вопрос, а можно ли ее сократить - ответил, что нет.

Новая формула для центрирования при изменения масштаба сейчас такая: offX = (newkof*offX + (newkof-oldkof)*screenX/2)/oldkof;

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

среда, 2 ноября 2011 г.

Незнал

У Perl:

my @arr;
push @arr,'element';


В PHP:

$arr = array();
$arr[] = 'element';


Вот такой push в PHP

пятница, 14 октября 2011 г.

Почему и нет?

Вот удивляюсь почему в Perl нет унарных правых циклов?

Ну как бы красиво смотрелось print("Daesh molodeshz!") for($i=0;$i<10;$i++);

Почему унарные условия есть, а циклы (те-же яйца только в профиль) нету?

Чтож за убожество писать for($i=0;$i<10;$i++) {print("Daesh molodeshz!")}

среда, 11 мая 2011 г.

Алкоголь - это зло

И точка.

И такое чувство что я это уже писал...

пятница, 8 апреля 2011 г.

PHP – гавно

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

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

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

Но язык – ужас, одним словом – выкидыш от C и Perl. Но простой и легкий. Как ежик – как и все PHP-программисты.

пятница, 11 февраля 2011 г.

Жизнь и Хмель

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

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

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

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

Думал сегодня чего-нить дописать, и понял максимум - что смогу - это эту запись в блог.
Зато Мариночка так страстно поцеловала на прощание ;)