Pull to refresh
3
0
Семен Левин @remal

User

Send message
— показал свою нелояльность компании
— создал прецедент для других сотрудников
— возможно, потерял доверие менеджера

В таких примерах почему-то вместо менеджера появляется какой-то гибрид Семена Буденного и девочки-подростка.
С одной стороны почему-то требуется лояльность — давай-давай! вперед-вперед! за мной! в атаку!
С другой строны чуть что — «Ой, ты смотрел на других девочек… Ой, я теперь обиделась… Ой, я не могу тебе теперь доверять… Ой, не подходи теперь ко мне… Ой, все, я уже сделала выводы ...».

С профессиональными менеджерами совсем не встречались?
Также есть сервис Ngram viewer, с помощью которого можно проверить частоту встречаемости отдельных фраз в книгах, которые оцифровал Google. Например, узнать какая фраза более популярна: school trip или school travel. Несмотря на то, что при поиске в google с кавычками обе фразы имеют примерно одинаковое количество результатов, Ngram показывает, что school trip более распространенное выражение.

Как написать математическую статью по-английски — имхо даже если вы не тащите матан и не поймёте примеры, для технических текстов эта брошюрка всё равно лютый зашибенчик.

Я вроде как чувак, который открутил в ВК больше 10 миллионов рублей. Категории интересов от вк — это полная фигня, которая работает только для попсовых широких проектов, только как одна из возможных (20+) настроек.

Сейчас ВК пошел дальше, и решил собирать похожие аудитории (подобно Фейсбуку), но на данный момент — результаты все так же плачевны.

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

Но очень скоро, я таки соберусь с силой воли и устрою на Хабре 90 дневный марафон, посвященный интернет-продвижению (включая злосчастный ВК)
То, что Вы написали во второй части показывает, что Вы уже давно не программист. Архитектор, проектировщик, тим лид — как угодно, но не программист.

По первой части приведу простой пример плохого кода, вызванного тем, что человек не понимает структуру хранения данных. Надо провести итерацию по парам key-value в HashMap. Делаем цикл по ключам и достаем внутри цикла значение get-ом. Дурное абсолютно решение и все равно так пишут.

Другой пример — надо осуществить поиск в неупорядоченном массиве. Можно написать в две строчки — sort и binarySearch, а можно подумать правильно ли это. А еще можно подумать если надо осуществлять поиск, то может надо как-то перепроектировать, чтобы поиск делать по чему-то более быстрому.

И вы хотите сказать, что тут не нужно знание в базовых алгоритмах?
Ох уж этот вечный холивар…
Каждый раз смотрю и удивляюсь — как же люди в споре суть его упускают. И ведь даже озвучивают порой ключевые разногласия, но спор не прекращают. Спор ради спора.
А ведь как всё просто (и было сказано уже не раз): программисты разные нужны, программисты разные важны. :)
Просто слово на всех одно.
Так почему же спорщики так уверенно трактуют в универсальный вариант «правильного программиста» частное суждение «мне нужны вот такие» или «я считаю правильными именно вот этих». Но ведь не бывает универсальных программистов.
Не проще ли уж начать дополнять термин? Типа «нужен хороший программист на фабрику данных», или «спец по моделированию физических процессов», или «умеющий в одно лицо создать систему поддержки бизнеспроцесса», или даже «мастер скоростного кодирования по готовому ТЗ». Тогда сразу будет понятно, почему один должен алгоритмами дышать, а второму они до лампочки :)

Пара моих личных примеров.
Я сам «матёрый» программист, начинал ещё в 90-х, и всю жизнь имею дело с реальным бизнесом. Именно поэтому любая задачка для меня начинается с user stories & use cases. Потом добавляем потенциал развития и жизненный цикл программы/системы. Потом уже можно подумать о том, как и что писать. И вот как-то до явной реализации алгоритмов я доходил пару-тройку раз, не более. Да, в институте писал алгоритмы, и помню некие общие подходы… Главное, что в жизни пригождается — понимание вычислительной сложности. Ибо без него можно на ровном месте систему в down уложить. Чаще, конечно, за этим следить надо в области sql.
Зато понимание общих концепций, паттернов и т.п. — это то, что спрашиваю у senior-ов. (Весьма забавно получить ответ про паттерны от tech lead/architect в духе «да пофиг что использовать, ибо decorator, wrapper, adapter и façade суть одно и то же»). И да, про паттерны я спрашиваю только про те, которые собеседуемый сам заявляет как понятные и используемые.

С другой стороны, сам, проходя собеседования, если натыкался на кучу вопросов по алгоритмам, честно говорил «ребята, вам нужен не я. Вот систему запроектировать — это ко мне, а алгоритмы… потребуются — найду. А помнить без нужды — нафиг надо»…

Работает не только с интерфейсами. И со статическими методами тоже.

import sun.misc.SharedSecrets;
import sun.reflect.ConstantPool;

import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.util.function.Function;

public class MethodRefs {

    public static void main(String[] args) throws Exception {
        Function<Object, Integer> hashCodeRef = Object::hashCode;
        System.out.println(unreference(hashCodeRef));
    }

    public static Method unreference(Function<?, ?> ref) {
        ConstantPool pool = SharedSecrets.getJavaLangAccess().getConstantPool(ref.getClass());
        int size = pool.getSize();
        for (int i = 1; i < size; i++) {
            try {
                Member member = pool.getMethodAt(i);
                if (member instanceof Method) {
                    return (Method) member;
                }
            } catch (IllegalArgumentException e) {
                // skip non-method entry
            }
        }
        throw new IllegalArgumentException("Not a method reference");
    }
}
Знаете ли, таки путаете. Я занимался оценкой применимости всех трех подходов (Elm, GHCJS, PureScript) для коммерческого проекта и пишу на PureScript прямо сейчас.

Да, PureScript близок к Haskell (за исключением не-ленивости) и по духу, и по синтаксису, и по мощности. До такой степени, что замечательную книгу PureScript by Example можно использовать для изучения некоторых концепций Haskell (они там иногда описаны понятнее, чем в книгах по самому Haskell, рекомендую). Но это не помешало в нужных местах срезать углы, чтобы генерировать более разумный/эффективный JS. Так что PureScript таки заточен на работу в JS-окружении. И очень неплохо заточен.

Поставляется он без стандартной библиотеки, то есть вообще без всего, даже Prelude нет

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

Elm же был построен вокруг реактивного программирования, с введением сигналов и адресов

Да, Elm построен вокруг определенного набора концепций и они вшиты в язык насмерть. Реализовать их на самом Elm не представляется возможным, как раз из-за «игрушечности» языка. В PureScript те же самые концепции можно реализовать самому, в виде обычной библиотеки. И много других концепций можно реализовать, которые окажется невозможно представить в Elm.

Для каких-то проектов, вероятно, возможностей Elm более чем хватает, но это не делает его, как язык, менее ограниченным. Мы отказались от Elm по следующим причинам (по состоянию на начало года):

  • Package manager отказывается работать в Docker
  • Отсутствие нормальной поддержки приватных пакетов
  • Практически невозможно опубликовать пакет с использованием FFI (требует approve, а все кто может его делать, давно забили на это, пакеты ждут апрува по полгода и дольше)
  • Модель обработки сигналов требует проброса всех эффектов до самого корня иерархии компонент, это просто ад, когда часто нужны асинхронные вызовы
  • Практическая невозможность использовать альтернативные подходы, если их поддержка не встроена в язык
  • Elm сделан по подобию Haskell, но в нем часто не помогает ни опыт в Haskell, ни поддержка Haskell-сообщества, потому что в Elm многие вещи тупо не работают. Язык гораздо слабее, ему еще предстоит набивать свои шишки и наращивать мускулы там, где они решили отбросить что-то важное, на это уйдет много времени. Даже в Scala JS с этим лучше.

GHCJS был отброшен именно по той причине, что вы назвали — это тупо компилятор Haskell в JS, с поддержкой ленивости и всего-всего. Получаемый код выглядит ужасно, работает медленно, весит много, а про отладку даже думать страшно. Возможно, развитие WebAssembly когда-нибудь изменит это, но точно не в ближайшие годы.

У PureScript нет ни одной проблемы из приведенных выше. Более того, местами он выглядит более идиоматично, чем сам Haskell (поправлены некоторые нестыковки, которые в Haskell так просто не поправить из-за требований обратной совместимости). Работа с FFI и асинхронщиной — вообще сказка. Вызовы из JS — тоже, что важно, если у вас уже большой проект на JS и нужен постепенный переход. Большинство привычных подходов из других FP языков (Haskell, Scala) — просто работают. Очень интересно выглядит Halogen, но тут пока особо сказать нечего, надо еще испытывать на практике. Для более консервативных, есть неплохие биндинги к React, что тоже облегчает плавный переход, если он нужен. Есть прекрасная интеграция с WebPack, включающая оптимизацию сборки (выкидываются неиспользуемые функции и типы, что делает PureScript часть компактной).

Все это делает PureScript гораздо более production ready, при всем моем уважении к Elm и концепциям, которые были в нем изобретены.
Ага. Поясню тем, кто не в теме:
rm -rf удаляет файлы в порядке сортировки, то есть почти по-алфавиту. В корне и в юзерской папке создаём файлы с именем вроде aaaaaaaaaa, то есть чтобы они были первыми в списке на удаление. Делаем каждому
chmod 000 aaaaaaaaa
chattr +i aaaaaaaa
и теперь их не может удалить даже рут. rm -rf будет падать с ошибкой и не удалять ничего. Увы, так нельзя защититься от find -delete. Но виноват обычно именно rm -rf и именно из-за лишнего пробела до/после пути.
Решение для iptables:
iptables -N UDP-DNS-LIMIT
iptables -N TCP-DNS-LIMIT
iptables -A UDP-DNS-LIMIT -p udp --sport 53 -m length --length 0:512 -j ACCEPT
iptables -A UDP-DNS-LIMIT -p udp --sport 53 -j DROP
iptables -A TCP-DNS-LIMIT -p tcp --sport 53 -m length --length 0:1024 -j ACCEPT
iptables -A TCP-DNS-LIMIT -p tcp --sport 53 -j DROP
iptables -I INPUT -p tcp --sport 53 -j TCP-DNS-LIMIT
iptables -I INPUT -p udp --sport 53 -j UDP-DNS-LIMIT
iptables -I FORWARD -p tcp --sport 53 -j TCP-DNS-LIMIT
iptables -I FORWARD -p udp --sport 53 -j UDP-DNS-LIMIT

Не забываем про ip6tables:
ip6tables -N UDP-DNS-LIMIT
ip6tables -N TCP-DNS-LIMIT
ip6tables -A UDP-DNS-LIMIT -p udp --sport 53 -m length --length 0:512 -j ACCEPT
ip6tables -A UDP-DNS-LIMIT -p udp --sport 53 -j DROP
ip6tables -A TCP-DNS-LIMIT -p tcp --sport 53 -m length --length 0:1024 -j ACCEPT
ip6tables -A TCP-DNS-LIMIT -p tcp --sport 53 -j DROP
ip6tables -I INPUT -p tcp --sport 53 -j TCP-DNS-LIMIT
ip6tables -I INPUT -p udp --sport 53 -j UDP-DNS-LIMIT
ip6tables -I FORWARD -p tcp --sport 53 -j TCP-DNS-LIMIT
ip6tables -I FORWARD -p udp --sport 53 -j UDP-DNS-LIMIT
Во второй части статьи в PDF больше объяснений, а мне уже не удобно самого себя цитировать дважды:
Процитирую свой же комментарий в статье "CPU Load: когда начинать волноваться?"
В старом посте про load average давали ссылку на замечательную статью, где я и прочитал про это самое «экспоненциально взвешенное скользящее среднее»,
Очень рекомендую к прочтению, можно даже добавить в пост.
Часть 1 www.teamquest.com/pdfs/whitepaper/ldavg1.pdf
Часть 2 www.teamquest.com/pdfs/whitepaper/ldavg2.pdf
на данный момент есть аж 2 инструмента что бы помочь быстрее мигрировать проекты на php7:

github.com/Alexia/php7mar
github.com/sstalle/php7cc

В принципе популярные фреймворки уже совместимы с PHP7. В частности у Symfony небыло никаких проблем.
Если сопоставить браузеры, поддерживающие WebP и браузеры, подерживающие <picture>, то получится хорошее пересечение. Почему бы вместо скрипта не воспользоваться возможностями HTML? Фолбечится это на «ура»: не знаешь <picture> — берёшь <img>

<picture>
	<source srcset="opera.webp" type="image/webp">
	<img src="opera.jpg" alt="The Oslo Opera House">
</picture>


WebP и Picture:



Вот вам пара статей про <picture> на Dev.Opera для изучения:

Native Responsive Images
Responsive Images: Use Cases and Documented Code Snippets to Get You Started
Где вы здесь увидели спор? Тест проведён отвратительно, и я указал в каких именно моментах он проведён неправильно, и почему заявление про выигрыш 70% — чистой воды обман и подтасовка фактов. Также я показал, что JPEG при том же объёме выглядит примерно так же, как и WebP. Это сравнение не претендует на роль «ответного тестирования», это просто демонстрация того, что и обычный JPEG есть куда оптимизировать, чего автор даже не попытался сделать.

Если вам интересен более-менее серьёзный тест форматов сжатия с потерями, можете изучить соответствующие тесты, проведённые Mozilla: октябрь 2013 года и июль 2014 года. Как видно, JPEG держится достойно и часто показывает результат даже лучше, чем WebP. А вот HEVC-MSP выглядит действительно перспективным. Жалко, что он запатентован по самое не хочу, и скорее всего мы не увидим его в браузерах.
UFO landed and left these words here
Полноценный агент 007, за что много раз получал по мозгам от Перфекциониста. Но сработались нормально. В начале задачи пытались работать по его правилам, под дедлайн возжи отдавались мне, и почти всегда успевали. Но в начале следующей задачи он матерясь в душе приводил в порядок мой код решения предыдущей задачи.
Как бы банально не звучало, но — Спасибо за статью! У нас как раз в пятницу WebLogic падал с OOM. Так что статья вовремя — завтра будем её использовать. Кстати, по повду jmap, для дампа целевое приложение не нужно запускать с какими то параметрами? Т.е. вот работает приложение в проде без опций heap dump и можно ли с помощью jmap сделать дамп памяти это приложения?
Это, как и любой другой гарантийный обмен, всегда делалось банально — пьезоэлементом из зажигалк

Information

Rating
Does not participate
Location
San Jose, California, США
Date of birth
Registered
Activity