объявлять функцию внутри функции — это не очень хороший стиль программирования
Можно поподробней? Например:
def joinPaths(*args):
def preparePathPart(part): # prepare path parts to be joined by join method
# trim slashes from the end
# etc
def joinParts(paths, delimiter='/'): # another function inside of a function, join works only with prepared data
return args.join(delimiter)
return joinParts( map(args, preparePathPart) )
>>> joinPaths('/etc/', 'init.d/', 'some.conf')
'/etc/init.d/some.conf'
P.S. это просто синтетический пример на python-like псевдо-языке
Я не понимаю, какие конкретно могуть быть проблемы с тем, что я тут использовал аж 2 функции внутри joinPaths
Ровно то же самое я делаю не только на Python, но и на PHP/JS/Ruby/Go. Ни у меня, ни у моих коллег за долгие годы не было с этим никаких проблем. Более того, я считаю, что такая внутренняя декомпозиция хорошо структурирует функцию внутри самой функции. Неплохо было бы увидеть хорошее объяснение, почему это плохой стиль.
> Я много раз делал что-то похожее. Конечно не с такими нагруженными проектами.
У нас сайтик в Top 50 alexa.com по России. Более 1 млн уников в сутки. Когда я говорю про какую-то задачу, которую мне необходимо реализовать на нашем скромном хайлоаде и какой-нибудь разработчик местных витрин для «Рога и копыта» говорит мне, что это просто и он 100 раз так делал хочется взять и… похвалить
> Уверен для специалистов этого профиля — эта задача вполне тривиальная
Извините, но вы понятия не имеете о чем вы говорите
У вас проблема не в запросе, а в подходе к решению задачи. Вы ее пытаетесь решать в лоб вместо того, чтобы решать ее правильно.
У вас есть конкретная задача «Необходимо посчитать количество пользователей, которые хотя бы раз писали на форум в течение дня за последний месяц». Звучит очень просто, верно? Перефразирую, чтобы было более понятно ДБА: необходимы каунтеры постов в день по каждому юзеру за месяц.
То есть нужно получить user_id, date, posts_cnt.
Но, вы отталкиваетесь от текущей реализации структуры БД. На самом деле с ней нет никаких проблем кроме одной, в вашем случае, вы не можете выполнить задачу, стояющую перед вами не прибегая к таким вот запросам. Каст DATE(fp.created) убивает индекс по fp.created, например. Если у вас хотябы 10 миллионов постов в базе, вы в глубокой ****. Что делать? Всё просто — при инсерте поста в базу подготавливайте данные заранее:
INSERT INTO forum_posts SET post = 'post text', created = NOW(), user_id = 'user id'
Помните, «необходимы каунтеры постов в день по каждому юзеру»?
Получите:
INSERT INTO user_posts_by_date SET user_id = 'user id', `date` = CURDATE(), posts_cnt = 1 ON DUPLICATE KEY UPDATE posts_cnt = posts_cnt +1
несложно догадаться, что date + user_id должен быть unique. Можете еще партицирование по месяцам сделать
Тогда ваш запрос превратится в:
select * from user_posts_by_date where `date` between 2013-01-01' and 2013-02-01'
это будет выполняться В РАЗЫ быстрее не говоря о том, что это более наглядно.
Ставлю смайлики. Первое дело в моём ССВ было «нарисовал ССВ», оно получило небольшое еле улыбающийся смайлик, более важные дела вроде «сходил в бассейн» (после нескольких лет непосещения и откладывания на потом), отмечаю большими и широко улыбающимися смайлами. То есть, рейтинг не по сложности (ну правда — сходить в бассейн ведь не сложно совсем), а по важности для себя, так, поход в бассейн и реализация интеграции с платежной системой (2 часа vs 2 недели разработки) получили одинаковый рейтинг, т.к. и то и другое важно в равной степени, хотя и находятся в разных плоскостях.
А на чем деньги зарабатывать, если у вас всё бесплатно? Я вот боюсь пользоваться вашим сервисом, потому что не понимаю, откуда у вас деньги, а поэтому думаю, что вы скоро закроетесь, а зачем мне пользоваться сервисом, который скоро закроется?
Вы пишете, что механизм продвижения должен быть заложен изначально, но и механизм монетизации тоже должен быть заложен изанчально иначе такие как я просто не будут пользоваться сервисом.
Леди и Джентльмены, это — Чубакка. Чубакка — это вуки с планеты Кашиик, но Чубакка живёт на планете Эндор. Подумайте об этом, в этом нет смысла! С чего бы вуки ростом два с половиной метра жить в Эндоре с 60-сантиметровыми эвоками? В этом нет смысла!
Но что ещё более важно, вы должны спросить себя, а при чём тут данное дело? Да ни при чём, леди и джентльмены, это не имеет никакого отношения к данному делу. В этом нет никакого смысла!
Взгляните на меня, я адвокат, защищающий крупную звукозаписывающую компанию, и я веду речь о Чубакке. Какой в этом смысл? Леди и джентльмены, я несу бессмыслицу, во всём этом вообще нет смысла!
Итак, запомните, когда вы, сидя в этой комнате, взвешиваете и сопрягаете декларацию независимости, есть ли в этом смысл? Нет, в этом нет смысла!
Итак, леди и джентльмены, если Чубакка живёт на Эндоре, вы обязаны вынести оправдательный приговор. Спасибо, ваша честь, я закончил.
За такой код денег вам точно никто не даст, а статья чуть менее чем полностью состоит из не очень качественного кода, рекламы сайта своей компании и попрошайничества.
PS научитесь хотябы автолоадом пользоваться для начала :)
Можно поподробней? Например:
P.S. это просто синтетический пример на python-like псевдо-языке
Я не понимаю, какие конкретно могуть быть проблемы с тем, что я тут использовал аж 2 функции внутри joinPaths
Ровно то же самое я делаю не только на Python, но и на PHP/JS/Ruby/Go. Ни у меня, ни у моих коллег за долгие годы не было с этим никаких проблем. Более того, я считаю, что такая внутренняя декомпозиция хорошо структурирует функцию внутри самой функции. Неплохо было бы увидеть хорошее объяснение, почему это плохой стиль.
У нас сайтик в Top 50 alexa.com по России. Более 1 млн уников в сутки. Когда я говорю про какую-то задачу, которую мне необходимо реализовать на нашем скромном хайлоаде и какой-нибудь разработчик местных витрин для «Рога и копыта» говорит мне, что это просто и он 100 раз так делал хочется взять и… похвалить
> Уверен для специалистов этого профиля — эта задача вполне тривиальная
Извините, но вы понятия не имеете о чем вы говорите
Хотя… че это я? Не покупайте никогда машину — это самое плохое вложение денег в вашей жизни.
2) Silverlight 5 [x]
3) Аккаунт ВКонтакте [x]
Похвально, но… сильверлайт и аккаунт ВКонтакте???!!! Это несерьёзно! :(
У вас есть конкретная задача «Необходимо посчитать количество пользователей, которые хотя бы раз писали на форум в течение дня за последний месяц». Звучит очень просто, верно? Перефразирую, чтобы было более понятно ДБА: необходимы каунтеры постов в день по каждому юзеру за месяц.
То есть нужно получить user_id, date, posts_cnt.
Но, вы отталкиваетесь от текущей реализации структуры БД. На самом деле с ней нет никаких проблем кроме одной, в вашем случае, вы не можете выполнить задачу, стояющую перед вами не прибегая к таким вот запросам. Каст DATE(fp.created) убивает индекс по fp.created, например. Если у вас хотябы 10 миллионов постов в базе, вы в глубокой ****. Что делать? Всё просто — при инсерте поста в базу подготавливайте данные заранее:
INSERT INTO forum_posts SET post = 'post text', created = NOW(), user_id = 'user id'
Помните, «необходимы каунтеры постов в день по каждому юзеру»?
Получите:
INSERT INTO user_posts_by_date SET user_id = 'user id', `date` = CURDATE(), posts_cnt = 1 ON DUPLICATE KEY UPDATE posts_cnt = posts_cnt +1
несложно догадаться, что date + user_id должен быть unique. Можете еще партицирование по месяцам сделать
Тогда ваш запрос превратится в:
select * from user_posts_by_date where `date` between 2013-01-01' and 2013-02-01'
это будет выполняться В РАЗЫ быстрее не говоря о том, что это более наглядно.
Вы пишете, что механизм продвижения должен быть заложен изначально, но и механизм монетизации тоже должен быть заложен изанчально иначе такие как я просто не будут пользоваться сервисом.
Но что ещё более важно, вы должны спросить себя, а при чём тут данное дело? Да ни при чём, леди и джентльмены, это не имеет никакого отношения к данному делу. В этом нет никакого смысла!
Взгляните на меня, я адвокат, защищающий крупную звукозаписывающую компанию, и я веду речь о Чубакке. Какой в этом смысл? Леди и джентльмены, я несу бессмыслицу, во всём этом вообще нет смысла!
Итак, запомните, когда вы, сидя в этой комнате, взвешиваете и сопрягаете декларацию независимости, есть ли в этом смысл? Нет, в этом нет смысла!
Итак, леди и джентльмены, если Чубакка живёт на Эндоре, вы обязаны вынести оправдательный приговор. Спасибо, ваша честь, я закончил.
> ответ на вопрос жизни вселенной и всего такого — 42
или
> как пропатчить KDE2 под FreeBSD — Нафига козе баян?
Есть ли что-то подобное?
PS научитесь хотябы автолоадом пользоваться для начала :)
— У нас facebook заблокировали.
— О, ну тогда конечно, проходите!
:)