Pull to refresh
0
0
Nora Puchreiner @zhengxi

User

Send message
Забавно.

Незадолго до появления coursier, мне пришлось написать свой ad-hoc резолвер, чтобы хоть как-то собрать свои проекты, т.к. maven резолвил не корректно. Постепенно алгоритм стал всё более общим и похожим на coursier.

Получается, что maven — это алгоритм резолва от «как хотели», а coursier — от «какой получилась свалка jar'ов на maven cental».

Кстати есть ещё интересный момент, что из содержимого .pom никак не следует есть ли рядом с ним jar.
Это нужно пробовать, получили ошибку HTTP — считаем что jar'a нет.
Когда Роскомнадзор боролся с Телеграмом и блокировал IP большими диапазонами это приводило к глюкам резолверов, они получив HTTP ошибку запоминали, что jar'а нет и быть не должно, а я тогда ещё раз порадовался что у меня свой резолвер и добавил в него поддержку Tor
Только имейте ввиду: если Cloudflare вас выкинет — по абузе или если им покажется, что вы слишком много траффика прокачиваете на бесплатном тарифе — то они внезапно, без предупреждения, выключат проксирование, но оставят DNS.

IP вашего сайта станет IP вашего сервера.

А к нему доступ запрещён для всех кроме Cloudflare.

То есть, к вашему решению полезно ещё добавить проверку, что сайт пока еще проксируется Cloudflare.
Кстати, archive.org потихоньку перетаскивается из США в Канаду.
Согласие пользователя на обработку его данных должно:
Быть свободным (никто и ничто не заставляло его соглашаться, отказ не должен вызывать негативных последствий для пользователя.


О как.
«Чешские Авиалинии» написали в email, что если не соглашусь — обнулят счёт с накопленными милями.
Надеюсь, банки и сотовые операторы не последуют их примеру.
С email такая проблема:

Если это GMail, Yandex, Protonmail, Lavabit,… — то зависимость от вендора, такая же как у месенжеров. Вендор может захотеть больше денег или к нему придут люди в чёрном.

Если свой домен — то зависимость от доменных регистраторов, которые отключают домен по анонимке, и от мантейнеров спам-листов, в которые легко попасть, особенно если кто-то «поможет».
Однопоточность ядра — это фича, а не проблема.
Она позволяла зарабатывать делая кастомные браузеры для телевизоров и автомагнитол (эти браузеры часто даже не содержали слово «opera», можно было догадаться только по «presto» в User-Agent).
На таких железках не всегда доступны треды и другие модные штучки, вроде gcc новее 3-й версии.
«прозрачная и понятная тарификация»?
это вы так называете практику присылать счёт за две недели до начала месяца и через три часа после этого письма отключать сервер «за неуплату»?
Есть ещё два незаметных класса программ плохо работающих с хипстерскими SPA-сайтами на react: веб-архиваторы (даже продвинутые с браузерным движком под капотом вроде webrecorder.io и archive.is) и веб-аннотаторы (вроде marker.to, hypothes.is).
Скала 2.11 компиляет в анонимные классы, скала 2.12 в лямбды.
На реальных проектах у 2.12 jar'ы получаются в два-четыре раза меньше.
Но нагрузка CPU чуть больше (в пределах +10%).
У меня в 2012-2016 проект рос примерно такими же темпами (сейчас тоже восемь серверов по 12 дисков в каждом; ~100Tb*3; ~10млрд картинок; запросов поменьше ~20млн/день).

Но в 2012 попалась статья о том, как хранятся картинки в YouTube.
А хранятся они там как записи в BigTable.
Чанки, версионирование, сжатие, удаление… практически всё к чему вы в итоге пришли, готовое.
В 2012 уже были три opensource клона (Hbase, Accumulo, Hypertable)

минусы такие:

1. при поломке одного из серверов, или даже всего лишь одного диска, чанки несколько минут распределяются между оставшимися серверами; хранилищ стало два, на том же железе, на kvm-виртуалках. Одно поменьше, восстанавливается за секунды.

2. большой сетевой траффик между HDFS-датанодами и таблет-серверами (можно упереться в гигабитную сетевуху при 100-300мбит общего чтения из хранилища); с этим можно бороться, например, сохраняя картинки одного 'сайта' рядом друг с другом.

Сейчас бы наверное посмотрел на Cassandra.
«какое-то время» в первом комментарии — это несколько дней/недель
В пике-то доступные.
Если постоянно столько качать, то внезапно начинают считать деньги и выгонять клиентов от которых мало прибыли, а то и убыток.
Проблема этими европейскими хостингами предлагающими сервер + 300мбит за $30-40 в месяц в том, что когда начинаешь действительно раздавать 300мбит, то через какое-то время они отключают сервер, а на тикеты отвечают «we do not like you» (четыре случая за 2 года).
Хотя если их много, то можно и надёжный CDN сделать.
Как раз с класслоадерами возиться не лень, а с OSGi и прочими страшными словами — лень :)
Но в случае использования технологий изолирования classpath-а (путем загрузки разных модулей разными classloader-ами), вполне может быть не только полезен, но и необходим.

А можете рассказать, как это решается класслоадерами?
Вот как раз на вашем примере: загрузить оба D-1.jar и D-2.jar и в итоге вызвать, например, A.main(«hello, world»).
Так чтобы E.jar использовал D-1.jar а C.jar использовал D-2.jar

Я что-то сходу придумать не могу.
Вернее, оно придумывается сразу вместе со сценариями в которых будет глючить.
CEF — это возможность встроить движок хрома в свою программу, написанную хоть на питоне или дотнете (а в ней уже наворотить хоткеев, менеджеров букмарков, торент-клиентов и всего прочего, что изчезло из оперы).
И этим он может быть интереснее (перспективнее) опенсорсных «полноценных браузеров», вроде Firefox, которые кастомизируются с другой стороны — плагинами.
Может быть как основу для допиливания будет проще взять Chromium Embedded Framework?
Такая же Chromium-болванка, как и Opera 15, но open source, не надо заниматься расковыриванием.
В pattern matching — это Regex.unapply(), к этому никаких претензий нет, это не наследие Java

А вот например Regex.replaceSomeIn(str: CharSequence, replacer: (Match) ⇒ Option[String]) у которого в возвращаемом replacer'ом Option[String] специальным образом интерпретируются символы '$' — это бяка и пережиток проклятого прошлого.

Нельзя вот просто взять и написать
  "%([0-9A-F]{2})".r.replaceAllIn(str, m => Integer.parseInt(m.group(1), 16).toChar.toString)

сейчас приходится писать так:
  "%([0-9A-F]{2})".r.replaceAllIn(str, m => Integer.parseInt(m.group(1), 16).toChar.toString.replace("\\", "\\\\").replace("$", "\\$"))
красиво, правда?

а хочется чего-то вроде
  str =~ rx"%([0-9A-F]{2})" ^^ (x => Integer.parseInt(x, 16).toChar.toString)
число параметров лямбды можно вывести из числа () в regex

Ну и компиляция регекспа на этапе компиляции скала-программы, да, полезно.
И дедубликация одинаковых regex'пов (сейчас маросами можно добавлять методы в некий глобальный object).
очень круто.
еще надо работу с регулярными выражениями так сделать, там тоже старое некрасивое java api
Зато ему можно и другие применния придумать, кроме использования для разговора.

SMS/MMS от системы мониторинга получать, например.
Периодически поглядывать на руку как-то удобнее, чем доставать большой телефон.

Information

Rating
Does not participate
Location
Praha, Hlavni Mesto Praha, Чехия
Date of birth
Registered
Activity