Pull to refresh
14
0
romy4 @romy4

Пользователь

Send message

Закрыл для себя этот вопрос давным-давно.


Спор „пробелы против табов“ имел под собой хоть какие-то логические основания, когда IDE не умели с ними работать: надо было нажимать много раз пробел или бекспейс (при использовании пробелов), выравнивание ломалось при смене размера таба (при использовании табов).
Сейчас IDE умеют работать с табами, а люди до сих пор не научились.


Главный плюс табуляции — семантичность. Это символ, специально созданный для отступов.
Когда вам нужно поставить ссылку, вы же пишете <a href="…">, а не <span onclick="…"?
Наверняка, каждого более-менее технически подкованного человека бесит, когда в ворде отступ параграфа сделан не отступом параграфа, а пробелами (скачайте пару первых попавшихся рефератов). Но при этом такая же ситуация у себя в коде людей не бесит :-)
Разный стиль параграфов


Все остальные аргументы теряют свою важность перед смыслом: размер файла, можно конфигурировать ширину, выглядит одинаково — вы серьёзно?


Самый разумный и естественный метод отступов — это смарт-табуляция: табы для отступов, пробелы для выравнивания:
Иллюстрация смарт-табуляции


Если среда разработки не понимает смарт-табуляцию и не может автоматически понять, где вставить табуляцию, а где пробел, то грош ей цена, такой среде.
Вот скриншот из настроек джетбрейновской Идеи:
Настройка табуляции в стилях кодирования


https://github.com/maximal/tab
https://www.emacswiki.org/emacs/SmartTabs

Работает. Но они одновременно хороши и плохи.
Плюсы:
  1. Безвредны. Совсем. Можно даже беременным и новорожденным
  2. Предельно селективны. Убивают только конкретную мишень. Хороших не трогают
  3. Сами размножаются, устраивая кровавую баню и массовые захоронения бактериям-мишеням
  4. Можно лечить прямую кишку, капая его в нос. Вирус же. Сам расползется.

Минусы:
  1. Селективны. Легко не попасть в штамм, если лупить вслепую. Никакого эффекта не будет
  2. Бактерии тоже эволюционируют и могут адаптироваться к болезни фаговой


Я успешно использовал смесь фагов Пиобактериофаг поливалентный на беременной жене. Высеяли стафиллококк в моче. Все сдохло за неделю. Заодно началось обострение хронического тонзиллита. Значит начал валить гноеродную флору на миндалинах.
Диаграммы последовательностей — в PlantUML, гистограммы — в LibreOffice Calc, а вот такие — в yEd.
Чтобы ограничить ресурсы с помощью cgroup не обязательно заводить отдельное окружение (lxc-контейнер). Достаточно завести свою группу, выставить ей нужные лимиты и приписать свой процесс туда. Пример:

$ cgcreate -g memory:/myGroup
$ echo $(( 500 * 1024 * 1024 )) > /sys/fs/cgroup/memory/myGroup/memory.limit_in_bytes
$ echo $(( 5000 * 1024 * 1024 )) > /sys/fs/cgroup/memory/myGroup/memory.memsw.limit_in_bytes

$ cgexec -g memory:myGroup myProgramm

Утилиты для работы входят в пакет libcgroup-tools (для CentOS). При желании таким же макаром можно прописать ограничения для системных пользователей или групп.

Собственно контейнера lxc по такому принципу и работают.
Если в Linux запросить выделение большого блока памяти с помощью malloc(), то вместо того, чтобы выделить память в куче, стандартная библиотека C задействует механизм анонимного отображения. Слово «большой», в данном случае, означает величину в байтах большую, чем значение константы MMAP_THRESHOLD. По умолчанию, это величина равна 128 кБ, и может контролироваться через вызов mallopt().

Столкнулся с несколько другим поведением. Программа выделяла много памяти блоками по несколько мегабайт. В процессер работы, если блок становился маловат он удалялся, а вместо него выделялся чуть большего размера. В windows все работало как надо, а в ubuntu конце концов заканчивалась вся оперативная память (все 32 гигабайта). Дело было в фрагментации адресного пространства и в том что системе не возвращаются «свободные» сегменты адресов, они остаются замапленными на физическую память. Переделал выделение памяти на анонимный mmap, тогда все нормализовалось.
Я предложил бы подумать об использовании std::packaged_task:
— он стандартный. Голова о том как эмулировать variadic templates болит только у авторов стандартной библиотеки
— он может хранить результат (включая выброшенное исключение). Есть возможность ожидать результат выполнения — std::future
Вот вам как это делает гугль: developers.google.com/webmasters/ajax-crawling/docs/getting-started
при желании можете поискать как это делают другие поисковики (но лично мне кажется, что примерно так же).
Что касается шаблонизатора — не имеет никакого значения какой он, поскольку HTML берётся с сервера уже готовый, в обход клиентской инфраструктуры.
Я вижу, мало кого смущает, что этот приём — жуткий баян, известный как минимум с 1998 г. В этом году была выпущена книга Джеффа Элджера (Jeff Alger) «C++ for real programmers» (перевод надмозга — «Библиотека программиста C++»). У меня есть её русская версия в бумажном виде, в которой на странице 134 идёт описание функторов под заголовком, не поверите, «Функторы».

Не знаю, почему сия замечательная книга так непопулярна, хотя её содержание и стиль изложения позволяют назвать её шедевром, место которого на полке — аккурат рядом с «C++ modern design» любимого нами Александреску. Там про умные указатели столько всего написано, про работу с памятью, сборку мусора… Вещь!
Я не буду с Вами спорить, т.к. Вы все правильно говорите :-) С правдой спорить не хочется.

Безусловно как для главной страницы такой запрос — это смертоубийство, но мое имхо, что главная страница должна практически всять генериться из кеша, т.к. отдаваться максимально быстро. И запросы с большими джоинами — точно не для главной, т.к. сервер БД повторит учать вашего сервера двухдневной давности.

И, правильно, такие вещи можно решать на уровне архитектуры системы при разработке.
Как по мне вполне нормальный выход — это держать summary table табличку, которая и будет содержать последние 10 (или сколько там нужно) комментариев для последних (если нужно только для последних, т.к. может и для всех :-) ) страниц новостей.

И обновлять эту табличку триггерами, которые навешиваются на добавление/удаление комментариев/новостей.

И кверить только эту табличку. И результаты запроса в мемкеш, чтобы кверить как можно реже.
ну, я уже предлагал в своих статьях… по MySQL написанных ранее.
Сейчас небольшой завал на рпботе, но если будет интересно сообществу, то напишу.
Просто немного уже надоело читать про педжинейшины.

Ну а по поводу запроса. Я упоминал у себя в статьях об этой технике, так что там смотрите подробности почему так лучше. ну а запрос, так уж и быть набросаю

Вместо этого запроса
SELECT SQL_NO_CACHE * FROM items WHERE (price>5) OR (price=5 AND height>0) OR (price=5 AND height=0 AND id>1174) ORDER BY price, height, id LIMIT 10;

Предлагается использовать нечто подобное

select
*
FROM
(
SELECT
*
FROM
items
WHERE price>5
LIMIT 10

UNION ALL

SELECT
*
FROM
items
WHERE price=5 AND height=0 AND id>1174
LIMIT 10

UNION ALL

SELECT
*
FROM
items
WHERE price=5 AND height>0
LIMIT 10
) as table
LIMIT 10
Индекс то нужен, причем несколько, в том числе составные. И в MySQL 5 они даже будут использоваться
используя index merge алгоритм. Но все же лкчше такие запросы (с такими условиями)
WHERE (price>5) OR (price=5 AND height>0) AND (price=5 AND height=0 AND id>1174)
не писать, а переписывать их на запросы с UNION ALL, хоть и букаф больше, но работают значительно быстрей, притом если у вас есть общий лимит, скажем вывести 10 записей, то просто нужно добавить лимит в каждый из UNION-ов и в итоге, у вас получается датасет максимум из 30 записей (для 3х юнионов) который впоследствии сортируется и из него достаются 10; а не как в приведенном случае огромный датасет, который будет сортироваться используя огромтую темпорари тейбл. Вы можете проверить это с помощью все той же команды SHOW STATUS и посмотреть кол-во записей и чтений.

Ну, я автору, конечно плюс поставил, для меня любая статься в блоге MySQL за радость, только почему-то мне кажется, что каждый автор, который пишет про MySQL сразу поднимает проблемму педжинейшн, как буд-то других задач и проблем связанных с мускулом больше нет…
Хорошая идея. Вот что у меня получилось:



заметка в Tomboy — на скриншоте
скрипт на Python
конфигурационный файл conky
результат — на скриншоте

Парочка замечаний:
1) удобно, что после редактирования заметки не нужно запускать никаких скриптов самому. conky выполняет мой скрипт постоянно через определённый интервалы времени, поэтому изменения подхватываются автоматически вскоре после редактирования
2) когда в интерфейс Tomboy снова включат тегирование, добавлю в скрипт возможность выбирать заметки Tomboy по тегу
3) наверное, надо будет добавить вертикальных отступов между задачами (как сделано в реализации с XML-файлами, см. первый скриншот в топике)
4) наверное, стоит передавать conky и заголовок заметки (в данном случае «Дом»)
Насколько я понимаю, прецедент есть — advancedwindowsdebugging.com/
Мужик черти сколько концетрированно занимался отладкой Windows и написал об этом книжку.
2 mpix (1600x1200) — 20x15 см (200 dpi), 14x10 см (300 dpi);
3 mpix (2048x1536) — 26x20 см (200 dpi), 17x13 см (300 dpi);
4 mpix (2272x1704) — 29x22 см (200 dpi), 19x14 см (300 dpi);
5 mpix (2060x1920) — 33x24 см (200 dpi), 22x16 см (300 dpi);
6 mpix (3008x2000) — 38x25 см (200 dpi), 26x17 см (300 dpi);
7 mpix (3072x2304) — 39x29 см (200 dpi), 26x20 см (300 dpi);
8 mpix (3456x2304) — 44x29 см (200 dpi), 29x20 см (300 dpi);
10 mpix (3872x2592) — 49x33 см (200 dpi), 33x22 см (300 dpi);
12 mpix (4288x2848) — 54x36 см (200 dpi), 36x24 см (300 dpi).
Поэтому я всегда спрашиваю для кого сайт будем делать — для вас или для посетителей, ваших клиентов.
Если для вас уважаемый, то ценник поболее будет (я в портфолио такое не положу, а внизу не будет стоять ссылка на нас), зато мы сделаем все что угодно: и крутящийся логотип и плашку темнее и хрень сбоку. Платите, сделаем.
А вот если хотите для посетителей, и для клиентов сделать, то будьте добры прислушиваться к нам. Мы знаем, то, что вы, уважаемый предлагаете уже лет 10 как не делают даже в колхозах.
Будем для вас делать? Отказываются.

Бывает заказчик начинает вату катать, что у него вкус есть, и он может отличить хорошее от нехорошего. Тогда я прошу выйти на улицу вместе с ним, и спросить первые попавшиеся 10 человек: имеют ли они вкус, и смогут ли отличить красивое от уродливого.
Тоже отказываются.

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

И разговаривать надо с тем, кто решение принимает, а то другие обязательно будут выпячивать свои творческие таланты и организационную значимостью
Можно: Я за год вырос из быдлокодера в довольно сильного программиста, с объемной базой знаний и умением их применять, потому что осознал, что необходимо научится применять знания, прежде чем их применять.
Лучше уж руками...

Information

Rating
Does not participate
Registered
Activity