PostgreSQL
coub
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
powershell
python
ubuntu
vim
virtualbox
анекдот
блог
игры
интересно
стихи
цитаты
Немного почитать о нем можно так :h ctrl-q
Node.js + MySQL FOUND_ROWS()
February 10, 2014
Столкнулся с багой оригинального характера. Когда написал свою первую прокладку под mysql сильно радовался тому, что все работает и довольно привычно-удобно. Но оказывается я страшный лошара. В этой самой прокладке есть метод foundRows который должен возвращать (и это иногда работает!) количество рядов в запросе без учета LIMIT (см. FOUND_ROWS()). Загвоздка в том что FOUND_ROWS() сработает только для того запроса который был перед ним в пределах одного коннекта. То есть сначала запрос на select с лимитом и следующим обязательно должен быть select found_rows() примерно так
А теперь внимание вопрос для третьего класса средней школлы..Как поделить три яблока на четверых чтобы каждый получил по яблоку и никто не получил по лицу. Как же это решить? Я не нашел удобного толкового решения. Callback hell забарывает и на код становится жутко глядеть. Решение есть, смотрим тут Pooling connections. То есть если необходимо по каким-то причинам строго последовательно выполнять запросы, то из пула специально берем отдельный коннект и пользуемся им. Выглядеть это будет примерно так:
Стоит обратить внимание на секцию настроек "Pool options" хотя бы чтобы научиться регулировать количество соединений connectionLimit.
Вообще доделать конечно надо ради интереса, но по-хорошему надо переезжать уже на Sequelize или что-то такое.
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10; SELECT FOUND_ROWS();В ситуации с асинхронными запросами, когда используется только один коннект, при приличной паралельной загрузке между этими двумя запросами вполне может проскочить другой запрос и FOUND_ROWS() начнет "врать". По сути очередь будет выглядеть так
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10; # пример "проскочившего" запроса SELECT * FROM tbl_name_2 WHERE id=12; SELECT FOUND_ROWS();И вот уже FOUND_ROWS() возвращает совершенно не то что нужно. Для создания тестовой загрузки проекта можно пользоваться Apache ab например вот так
# 900 раз запросить страницу с 10 конкурентными запросами ab -c 10 -n 900 http://cocainum.info/post/301/В моей ситуации во время такого тестирования мелкие запросы как раз влезали между запросами с лимитом и запросами подсчета рядов. В результате пейджинг думал что страниц у него ровно одна штука и исчезал со всех своих страниц как класс, пока шла нагрузка с конкурентными запросами.
А теперь внимание вопрос для третьего класса средней школлы..
pool.getConnection(function(err, conn) {
conn.query( 'SELECT SQL_CALC_FOUND_ROWS * FROM tab1 LIMIT 100,10', function(err, rows) {
conn.query('SELECT FOUND_ROWS() as cnt', function(err, rows){
// получаем общее кол-во строк
// ...
// освобождаем соединение
conn.release();
});
});
});
В прокладке я это реализовал, но пока что выглядит все это жутко, надо либо свыкнуться с этой мыслью, либо придумать что-то лучше. Пока переделанную версию выкладывать смысла нет по-моему.
Стоит обратить внимание на секцию настроек "Pool options" хотя бы чтобы научиться регулировать количество соединений connectionLimit.
Вообще доделать конечно надо ради интереса, но по-хорошему надо переезжать уже на Sequelize или что-то такое.
Зачем нужен Grunt?
February 08, 2014
О том что такое Grunt и зачем он нужен в общих чертах расскажет статья "Grunt для тех, кто считает штуки вроде него странными и сложными".
Бьюсь об заклад, вы наверняка уже что-то слышали про Grunt. Что ж, Grunt — это, по сути, планировщик задач. Grunt может делать все эти задачи за вас. Стоит лишь установить его, что, кстати, не так уж и сложно, и эти операции будут происходить автоматически, так, что вам про них даже не придётся вспоминать.© frontender.info
Пишем качественный код на jQuery
February 08, 2014
Решил открыть тег ссылки, потому что перетягивать все на свете устанешь (да и вообще как-то не комильфо без необходимости по-моему), в закладках браузера потеряется а тут хоть как-то.. в общем это лирика.
Статья "Пишем качественный код на jQuery" освещает очевидно-понятно какие вопросы. К прочтению не то что обязательно, но может быть очень полезно.
Статья "Пишем качественный код на jQuery" освещает очевидно-понятно какие вопросы. К прочтению не то что обязательно, но может быть очень полезно.
Качественный код – это прежде всего быстрые приложения и сайты без лишнего мусора. В конце концов, быстрая отрисовка страниц и улучшенное реагирование принесут вашим пользователям более позитивный опыт взаимодействия.© frontender.info
Хочу учить Python Что почитать?
December 19, 2013
Очередной справочник с интересными (и не очень) ссылками.
- codeacademy - курс для начинающих на знаменитой академии с уклоном в веб-технологии как я понимаю.
- checkio.org сногсшибательная обучающая "игра". Нужно понимать английский, но оно того стоит. Очень здорово сделано.
- Learn Python The Hard Way, 3rd Edition книга или даже гайд по обучению. Английский язык. За сравнительно небольшие деньги можно выкупить видеоверсию и книгу в .pdf
- Пост на хабре (и ещё один, прямо вчерашний) специально посвященный этой же теме, там тоже тонна ссылок + неплохой вступительный текст, спасибо авторам
- Let's Learn Python - Basics небольшой вводный видеокурс на английском
- Python Django tutorial видеокурс по Django, относительно свежий, начало в январе 2013
- Официальный tutorial Гвидо ван Россума
- Useful python functions интересная заметка
Vim: как редактировать несколько строк одновременно
December 19, 2013
А теперь по порядку что тут такое происходит![]()
- Печатаем какую-то строку в режиме insert (i)
- Переходим в режим normal (Esc) устанавливаем курсор на нашу строку и делаем так yy7p. То есть просто дублируем строку 7 раз.
- Входим в режим визуальный блок Ctrl+q и тянем курсор вниз на все наши строчки. Теперь есть вариант: выбрать ввод после символа под курсором (нажать A), или перед символом (нажать I)
- Вводим собственно то, что должно быть напечатано во всех выбранных строках.
- Нажимаем Esc
Немного почитать о нем можно так :h ctrl-q