Как стать автором
Обновить
0
0

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

Отправить сообщение

Про АМД с нвидией тоже забывать не стоит.

Автор почему-то упустил основной смысл такого подхода.

func (s speaker) toSpeak() {
fmt.Println("prepare to speak")
s.callBackFunc() //<- теперь здесь будет вызов той функции, что была сохранена в поле структуры!
fmt.Println("do something after")
}

То есть вынос общей базовой части внутри которой вызывается переопределенный метод потомка. Перекрытие методов такое не даст.

Начал писать развернутый ответ, но мою мысль можно выразить более кратко:

Атрибут role в принципе не нужен там, где:
1) HTML-элемент максимально поддерживает CSS стилизацию
2) HTML-элемент максимально поддерживает расширение логики/кастомизацию верстки
3) HTML-элемент поддерживается 99.5% браузеров (https://gs.statcounter.com/ — Edge все еще 3.41%, думаю, это включая IE11)

Попробуйте details в IE вставить или сделать только с 1 Table (и всеми вложенными элементами) фиксируемый при скролле thead.

Двоякое ощущение. Вроде как и действительно какая-то подборка инструментов. Но очевидно, что при написании этого поста никаких консультаций с разработчиками произведено не было. Давайте разберём по пунктам:
1) О перечисленных вещах не слышал только ленивый, так что это опустим.


xDebug.

Почему не Zend Debugger? Почему не phpdbg? А где сравнительное описание инструментов? А вы ведь знаете, что phpdbg умеет показывать опкоды, а Zend будет побыстрее, а работает поверх того же DBGP?


PHPUnit — идеальный инструмент тестировщика. Лучшего просто не найти.

Т.е. вот этой фразой зарезали сразу всё интеграционное, мутационное и прочее тестирование. Чем PHPUnit лучше Infection или Аtoum? А почему он лучше Codeception? А чем удобнее Gherkin или Behat? А может взглянем на PHPSpec? Как на счёт Peridot? Ой, забыли про Selenium?


PHPCS / PHPCPD / PHPMD — отличные средства улучшения качества кода. В работе любого профессионала можно найти ошибки, а избавиться от них поможет этот инструмент.

А где информация о phpstan? Phan? Psalm? Ну или что-то вроде Scrutinizer или StyleCI? А почему перечислили PHPCS, но не написано ничего про PHPCBF?


Крайне однобокие суждения и выводы в статье, которые не несут никакой практической пользы, по-моему...

Совершенно не флейма ради, мне скорее действительно интересно, либо я где то радикально ошибаюсь, либо в Лондоне что-то совсем не так, как в остальной Англии…
Ну пальцем в небо, но думаю не ошибусь, если предположу что стартовая точно не больше 50к в год до налогов… (больше бы поставил на 35)… и это очень хорошая стартовая.
Это значит на руки 3 тысяч фунтов…

Вот я пытаюсь вспомнить свой бюджет… (дело было в Манчестере правда)…
Что-то около 1000 в месяц улетало на дом клоповник, почти новый двухэтажный semi-detached в средне-приличном районе (попроще Didsbury и Hale, но без маргиналов на улицах) площадью суммарной метров 50 наверное… 750 аренда, консульский сбор, всякие там вывозы мусора и прочая дребедень… газ+вода+электричество боюсь соврать но по-моему около 600-700 на круг… зимой больше, чтобы копыта не двинуть в строении с утеплением по местным понятиям… (double glass итд присутствовало)…

недельный счет в магазине на двоих ну где-то 100-120 с вкусняшками (Tesco + рыбный рынок), ну то есть 500 на еду
страховка машины 1200 в год, берем 100 в месяц
куда то сходить поужинать 50-60… пару раз в месяц, на выходные покататься по стране, где-то 150 улетает (дизель, поесть, переночевать)… ну пусть тоже пару раз…

итого 3000 — 1600 — 500 — 100 — 300 — 100 = 400 фунтов
и это все в комплексе очень скромная жизнь… по факту с гостями, посиделками итд получается плюс минус около 0 =)

недвижка стоит космических денег (в отношении цена-качество)… народные игрища под названием «кредитный рейтинг» я не постиг, хотя кредитки их банков до сих пор присылают =))) сменить работодателя по Tr2 практически без вариантов, скорее их просто нет…

медицины нормальной нет от слова нет совсем, толку от ее бесплатности 0, коммерческая — те же яйца только дороже…

где-то через года полтора мы с женой поняли, что нервная система дороже английского паспорта, а при полном отсутствии финансового интереса, все это вообще выглядело как издевательство и было похоже скорее на анекдот про двух эстонцев в борделе… собрались, все продали и уехали…

Для ленивых так же существует Mozilla SSL Configuration Generator, который позволяет выбрать версию веб-сервера и OpenSSL, и в зависимости от их версий подбирает оптимальные параметры.

Вот, например, команда rm, выполнение которой приведёт к катастрофе, так как переменная VAR не определена
если вы запускаете скрипты без -eux и -o pipefail, то кто же вам виноват. У нас есть строгое правило, любой скрипт должен начинаться так

#!/bin/bash

set -euxo pipefail

Избавляет от множества неприятностей, а х в последтсвие можно убрать, по желанию.

Shell Style Guide от Google
Тот самый Advanced Bash-Scripting Guide
Учебное пособие на eddnet.org
Тред на StackOverflow о скрытых фичах bash
Полезные одно-строчные скрипты sed


Ну и man bash периодически покуривать имея ввиду, что на удалённом хосте версия bash может отличаться и некоторые функции могут быть [не]доступны.

НЛО прилетело и опубликовало эту надпись здесь
Уж простите что здесь отвечаю… Тема уж больно до боли знакомая.

Что было у нас:

Задача организовать подписку на события для клиентов (кроссплатформенный клиент-бороузер). расчетное кол-во клиентов 1000000. Стресс задача — все клиенты (сволочи) ломятся за событиями. Собирали стенд на 1000000 одновременных коннектов. остановились на 210000 потому, что понятно, что держит и как масштабироваться и смысл лупить дальше коннекты не имеет смысла.



конфиг nginx

#
# Transport site
#

upstream rabbitmq {
        server  dev-queue1:15674 weight=5;
        server  dev-queue2:15674 weight=10;
        server  dev-back1:15674  weight=10;
        server  dev-back2:15674  weight=10;
        server  dev-back3:15674  weight=10;
        server  dev-back4:15674  weight=10;
        server  dev-back5:15674  weight=10;
        server  dev-back6:15674  weight=10;
        server  dev-back7:15674  weight=10;
        server  dev-back8:15674  weight=10;
}

server {
    listen          80;
    listen          88;

    server_name 10.76.156.241 dev-front1;
    access_log     off;
    error_log          /dev/null;

    root         /var/www;

    location /stomp/ {
        proxy_pass http://rabbitmq;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_buffering off;
    }

    location / {
    }

}


#
# end
#


Собственно как все решилось. Клиент использует websocket+stomp. кролик умеет stomp из коробки. между клиентами и кроликом стоит nginx, который умеет апстримы и вебсокеты. тем самым при выпадении любой нодды клиент просто переконекчивается и живет дальше. nginx так же осуществляет балансировку по нодам кролика. nginx балансируется DNS балансировкой с ТТЛ 60, тем самым решается автоматическое исключение фронта, т.е. кластер полностью автоматизирован.

Во что уперлись. Да собственно в канал, потому, что выдать всем клиентам одновременно 1024байт (json) в таких масштабах превращается в гигабиты траффика. Мы уперлись на 1Гб в сетевухи. Инженеры могли переделать на 10Гб, но нам уже было не надо.

Что имели при тестах. Без оптимизации ОС кролик благополучно падал так, что восстановить кластер было не возможно. Выедал всю память, Уходил в своп и тю-тю… kill -9 и кластера нет. Лечилось полной остановкой, удалением mnesia кролика и пересборкой кластера ручками.

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

Что использовали:

— CentOS release 6.5 (Final) (тюненый TCP стек и ядро под HA)
— {rabbit,«RabbitMQ»,«3.1.5»},
— {mnesia,«MNESIA CXC 138 12»,«4.5»},
— nginx version: nginx/1.4.4
— клиент sock.js stomp.js из коробки (проверяли почти во всех броузерах. все пашет именно по вебсокетам на постоянном коннекте. старые ИЕ летят по HRX по лонг-поллинг)

Резюме? Все работает почти из коробки. Немного напильника и жизнь удалась.
Если установлено расширение php_intl, можно вот так сделать:

$result = (new \MessageFormatter('ru-RU', '{n, spellout}'))->format(['n' => 321]);
echo $result;
// триста двадцать один

$result = (new \MessageFormatter('ru-RU', '{n, spellout,%spellout-cardinal-feminine}'))->format(['n' => 321]);
echo $result;
// триста двадцать одна
Я длительное время использовал MPDF, но он медленный, поэтому изучал альтернативы, тестировал разные варианты. Ещё один интересный сопособ: рендрить с помощью Node и PhantomJS: www.npmjs.com/package/phantomjs-pdf

Но я в итоге остановился на wkhtmltopdf. Расскажу свой опыт.

Во-первых, есть готовая обёртка на PHP: github.com/mikehaertl/phpwkhtmltopdf (сам ей не пользуюсь, у меня простая задача, все аргументы зафиксированы, нет смысла в этой обёртке)

Во-вторых, генерировать временный html файл на диске не обязательно, wkhtmltopdf умеет принимать исходный html через stdin, если указать параметр "-" (прочерк). На PHP получается как-то так:
$descriptorspec = [
    0 => ['pipe', 'r']; //stdin
    1 => ['pipe', 'w']; //stdout
    2 => ['pipe', 'w']; //stderr
];

//Обратите внимание на аргументы, которые я передаю при запуске wkthmltopdf 
//--disable-smart-shrinking без этого аргумента, всё становится каких-то не правильных пропорций
//--dpi 96 если принудительно не поставить dpi, то размеры указанные в css в милиметрах на печати будут совсем не такими!
//- последний аргумент это прочерк, чтобы передать html через stdin
//bypass_shell (только для Windows): при установке в TRUE процесс будет запущен в обход оболочки cmd.exe
//это нужно для обхода бага https://bugs.php.net/bug.php?id=60181 "proc_open fails to read quoted whitespaced directories in Windows"
$process = proc_open("/path/to/wkthmltopdf --disable-smart-shrinking --margin-left 20mm --dpi 96 -", $descriptorspec, $pipes, null, null, ['bypass_shell' => true]);

if (is_resource($process)) {
    
    //Пишем в stdin html контейнт
    fwrite($pipes[0], $html);
    fclose($pipes[0]);

    //Читаем результаты и ошибки, если они вам нужны в приложении
    $stdOut = stream_get_contents($pipes[1]);
    $stdErr = stream_get_contents($pipes[2]);
    fclose($pipes[1]);
    fclose($pipes[2]);

    $exitCode= proc_close($process);

}


Более подробно про разные параметры принимаемые wkthmltopdf рекомендую почитать здесь: wkhtmltopdf.org/usage/wkhtmltopdf.txt

Да, если нужен header-html и footer-html, то пара временных html файлов на диске всё-таки понадобится.

В третьих, на Linux машинах есть неприятный баг, что шрифты выглядят меньше, чем при печати в PDF этого же html файла с помощью браузера: github.com/wkhtmltopdf/wkhtmltopdf/issues/2171
По этому багу, в том числе, есть много обсуждений на StackOverflow, но фикса в ближайшее время не предвидится, предлагается workaround: github.com/wkhtmltopdf/wkhtmltopdf/issues/2171#issuecomment-139164039

Но я использую другой подход: есть отдельный windows сервер, на котором запускается wkthmltopdf, а обращение идёт к нему через простенький самописный веб-сервис: принимает html контент в POST и возвращает готовый PDF — так и живём.

Вообще по wkhtmltopdf активность на github почти нулевая, баги не фиксятся, но ничего лучше пока не нашел. Кто знает C++ — присоединяйтесь к проекту, внесите свой вклад в opensource!

Есть ещё www.princexml.com — но он платный и жутко дорогой!
что бы не вспоминать как пишется --max-depth для du, можно использовать ключ -s
du -xhs /*
получим вывод размера всех директорий корневого раздела. Ну и по аналогии с другими папками.
GTID для этого и придумали, посмотрите доклад Осипова Константина на failoverconf

видео www.youtube.com/watch?v=v68l2YOur5M
pdf failoverconf.ru/upload/iblock/dc5/05_Osipov.pdf
Немного релевантно первому пункту — очень полезная картинка:
Вот пример моего конфига с которым ssllabs.com дает A+
listen                      443 ssl spdy;
ssl                         on;
ssl_protocols               TLSv1.2 TLSv1.1 TLSv1;
ssl_session_cache           shared:SSL:20m;
ssl_session_timeout         10m;
ssl_ciphers                 'EECDH+ECDSA+AESGCM:AES128+EECDH:AES128+EDH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!CAMELLIA:!ADH';
ssl_prefer_server_ciphers   on;

resolver                    8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout            10s;
add_header                  X-Frame-Options             "DENY";
add_header                  X-Content-Type-Options      "nosniff";
add_header                  Strict-Transport-Security   "max-age=31536000";
add_header                  Public-Key-Pins 'pin-sha256="[SOME_BASE64]"; max-age=5184000;';  #[SOME_BASE64] надо выставлять свое, гуглить как считать Public-Key-Pins
ssl_stapling            on;
ssl_trusted_certificate /etc/nginx/ssl/[SITE]/trustchain.pem;
ssl_certificate         /etc/nginx/ssl/[SITE]/server.crt;
ssl_certificate_key     /etc/nginx/ssl/[SITE]/server.key;
ssl_dhparam             /etc/nginx/ssl/[SITE]/dh.pem;        #openssl dhparam 2048 -out dh.pem
Лечение прокрастинации подменой цели. Ирония в том, что мозг на это ведётся.
  • Не «заниматься проектом модернизации инфраструктуры», а «подготовить 5 LUN и перенести на них содержимое текущего кластера» (техника «порубить слона на бифштексы»).
  • Не «написать модуль обработки аудиопотока», а «программировать с 9:30 до 10:00» (техника Pomodoro).
  • Не «прийти на работу к 8 утра», а «выйти из дома в 7» (официальное название техники, если оно есть, мне неведомо).

Другое дело, что прокрастинация — защитный механизм организма. И без понимания причины, его вызвавшей, бороться с ним — всё равно что глушить симптомы болезни без её лечения. Обеспечивает временное облегчение, но в долгосрочной перспективе может привести к осложнениям. То есть стрессу, неврозу и потребности убивать людей.
для старых версий Ubuntu 10.10, 11.04, 11.10 и Debian 5 просто поставил из исходников сделав скрипт:

mkdir src
cd src
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 27); do wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 27);do patch -p0 < ../bash43-$i; done
#build and install
./configure --prefix=/ && make && make install
cd .. 
cd ..
rm -r src


Установка идет в /bin/bash что позволит при обновлении системы просто обновить bash до нормальной версии.

PS. Для тех у кого будет ругаться в Ubuntu на отсутствие patch или gcc просто в /etc/apt/sources.list надо указать old-releases.ubuntu.com
Моя подборка, лет 5 назад откуда-то скопировал, часто выручают и логи не требуются:
Cколько коннектов на 80 порт: netstat -na | grep ":80\ " | wc -l
На какой домен чаще всего идут запросы: tcpdump -npi eth0 port domain
С какого ip сколько запросов netstat -ntu | awk '{print $5}'| cut -d: -f1 | sort | uniq -c | sort -nr | more
Нагрузка на канал ftop -i eth0 -B
В Twig есть очень полезный фильтр — localizeddate. Позволяет делать примерно то же что у вас,
например: {{ event.date|localizeddate('long', 'none', null, null, 'd MMMM H:mm') }}
выведет что то вроде: 1 декабря 12:00
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность