xonix
0

Недавно удивился, обнаружив в разрабатываемой спецификации Java Value Classes куски кода описания на прологе http://cr.openjdk.java.net/~dlsmith/values.html

xonix
+8

Советую в подобных статьях вот это "Самый простой и ёмкий ответ — это база данных. В основе которой — хранилище "ключ-значение"; грубо говоря, ConcurrentDictionary, в котором данные расположены на нескольких машинах." помещать в шапку. Жутко бесит когда сперва идет простыня о продукте, но даже не понятно о каком :)
В остальном, спасибо.

xonix
+2

А можете, если возможно, сказать пару слов о том, как соотносятся ClickHouse и Amazon Redshift? На работе есть юзкейс под который как будто идеально ложится ClickHouse, но босс хочет Redshift. По позиционированию смотрятся близкими продуктами, так ли это?

xonix
0
Ну это философский спор. Но, например, разработчики angularjs сделали так же.
Forgiving: In JavaScript, trying to evaluate undefined properties generates ReferenceError or TypeError. In Angular, expression evaluation is forgiving to undefined and null
xonix
0
Что значит правильно обрабатывает


Как Ваши варианты решения отработают на какой-то из записей facilities без поля services?
xonix
0
Но данная библиотека только повышает количество возможных способов


Не только. Её вариант проще Вашего лаконичного варианта, правильно обрабатывает null/undefined, работает на любом древнем JS.
По-моему плюсов не так и мало.
query(hotel,'facilities.services[_.visible !== false].name')
xonix
0

Весьма верное замечание! Вариант с Jsqry корректно прожует вариант объекта без поля services. Вариант с ES-кунг-фу скорее всего упадет с Null Pointer.

xonix
0

Библиотеки очень похожи по задумке. Jsqry значительно проще как по устройству так и по использованию за счет переиспользования обычного js для предикатов, в JSPath же изобрели свой язык предикатов со своими операторами и т.д. По функционалу, имхо 80-90% совпадает. Хотя в Jsqry срезы более продвинутые (поддерживется step параметр, как в Python), а также не нашел трансформации у них, только фильтрация. С другой стороны, в JSPath, разумеется есть и возможности, коих нет в Jsqry, например, '..' и '|' в location path. А, да, у них еще более громоздкий синтаксис подстановок — именованные вместо '?'. Впрочем, это можно расценить и как плюс.

xonix
–2

Ну когда запрос настолько сложен, что требует дебага, можно и в коде переписать.
А так-то можно и в Jsqry, хотя, признаться, о таком способе использования я раньше не думал.


function f1(elt) { return elt > 2 }
function f2(elt) { return elt + 10 }
console.info(jsqry.query([1,2,3,4,5],'[ ?(_) ]{ ?(_) }', f1, f2)); // [ 13, 14, 15 ]
xonix
0

А что — разве будет легче дебажить?

xonix
–1

В этом смысле так же как и регулярные выражения, JQuery-селекторы или тот же SQL.

xonix
0

Скурпулезных замеров не проводил, но вот есть небольшой бенчмарк https://github.com/xonixx/jsqry/blob/master/bench.js.
У меня 100000 прогонов запроса вида


jsqry.one(o1, '[_.id>=2].name[_.toLowerCase()[0]==?].length', 's')

отрабатывает за 425ms.

xonix
0

Спасибо, интересно.
А такой юз-кейс:


var hotel = {
    name: 'Name',
    facilities: [
        {name:'Fac 1',
        services: [
            {name:'Service 1', visible:false},
            {name:'Service 2'}
        ]},
        {name:'Fac 1',
        services: [
            {name:'Service 3'},
            {name:'Service 4', visible:false},
            {name:'Service 5'}
        ]}
    ]
};

console.info(query(hotel,'facilities.services[_.visible !== false].name')); // [ 'Service 2', 'Service 3', 'Service 5' ]
xonix
+1
Тема весьма интересная. Хотя я и не доконца понял вашу мотивацию, т.е. вообще постановку вопроса. Если не понравился интерфейс Kibana — не проще ли было просто доработать её или создать свой веб-интерфейс? Подозреваю, что реальным мотиватором был избыток молодецкого задора :-) Также зря отказались от Elasticsearch, очень уж хороший продукт.

Также, по-моему, у вас в описании неточность
It's nodejs-based Logstash witch suddenly stops processing logs in some conditions.

Logstash написан на Ruby, который запускается на JRuby, т.е. на JVM. А вот Kibana, да — на node.js.

Ну а вообще, респект, конечно!
xonix
+5
Интересно то же самое проанализировать для geektimes, увидеть есть ли корреляция и какая.
xonix
+2
Плюсану, всегда использовал что-то типа
class SomeCls {
  private final Logger log = Logger.getLogger(SomeCls.class);
}

Также подход автора не позволит логировать из static методов.
xonix
0
Синтаксисом больно на Кобол похож.
xonix
0
Я думаю, не потянет. Банально рантайм Groovy не влезет. Не говоря уже о том, что там, по-видимому, байткод-магии внутри хватает.
xonix
+1
sed -r 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/'

Может это тоже стоит пропатчить…
xonix
0
В чем киллер-фича этого ЯП?
Ну там С(++) — эффективность, Erlang — акторы/конкурентность, Go — хипстерский С++ с GC, Java — ну понятно… А тут что (кроме нового синтаксиса)? DSL, Lisp-like? А оно практически нужно как самоцель? Если он метит в нишу Lisp, то вряд ли это будет популярным…
За статью спасибо, может быть интересно как пример дизайна/имплементации ЯП.
xonix
–1
Очевидно, как. Додуматься впихнуть список и словарь в одну структуру — «гениальное» дизайнерское решение.
xonix
0
В таком случае ещё один вопрос — про какую версию говорится?

ideone.com/Gb2Bhl
xonix
+1
И нет, не совпадение, а дальновидность дизайнеров языка, которой я поражаюсь.

Блин ну в чем дальновидность-то?

Может быть в этом? (за достоверностью цитаты к автору поста)>>
Вместо этого Рамус Лердорф говорит вещи навроде:

У нас есть защищённые свойства, абстрактные методы, вся эта фигня, про которую ваш учитель информатики вам рассказывал. Мне на всё это дерьмо плевать.

Или в этом:
Хозяйке на заметку: PHP в линейном массиве из int-ов отводит где-то по 70-80 байт на элемент.

david-m.livejournal.com/1117497.html
xonix
0
Двойное двоеточие позволяет визуально определить где обращение к объекту, а где вызов статики:

А здесь обращение к объекту или к статике?

class OtherClass extends MyClass
{
    public function myFunc()
    {
        parent::myFunc();
        echo "OtherClass::myFunc()\n";
    }
}


А т.ж.

So, word of warning: apparently, some PHP installations will let you use a $instance::method(), while others don't.

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

Чтоб обосновать выбор стрелочки в качестве доступа к объектам — надо пойти чуть глубже: Распространённая практика использования символа "+" для конкатенации строковых значений.

Это все понятно. Череда обратных совместимостей породила монстра. Нет, обратная совместимость, безусловно, нужна. Даже важнее чем новые фичи. Но Вы же сами оголяете противоречие. С одной стороны Вы говорите, что синтаксис был обусловлен уже существующими конструкциями языка, и с другой пишете что вам полученный синтаксис нравится даже больше. Совпадение? Возможно. Но больше похоже на оправдание.
xonix
–2
Бывает удобно — иногда, а некрасиво — всегда.
Понятно, что можно найти тысячу оправданий несовершенству парсера. Туда же ::, \, -> и прочие.
xonix
0
Почему не позволит? Вот заменили array() -> [] тоже все удивлялись.
Что такого принципиально невозможного? Почему в куче языков возможно, а в пхп нет?
xonix
–1
Наблюдаю краем глаза за лавинообразным развитием пхп последних лет, и сделал парадоксальный вывод. Чем быстрее пхп развивается, тем быстрее он умрет. Очень просто. Из него сделают недо-яву (без юникода, потоков, толковой типизации, тормозную, с «шумным» синтаксисом), и люди получат больше оснований сравнивать.
А сравнив, сделают очевидный вывод.
Процесс запущен.
Мой прогноз: пхп умрет, когда отменят доллар в имени переменных.
xonix
0
Как там в 2015 — уже привинтили юникод-то?
Один `[]` заменяет HashMap, HashSet, T[] (т.е. массивы) и прочее
И оттого работает чудовищно неэффективно по памяти.
xonix
0
Можно короче:

$scope.$eval('a + b')
xonix
+1
Груви чем хорош, он может быть одновременно и javascript'ом и java'ой — за счет опциональной типизации. Очень напоминает Dart в этом плане.
Еще одна заманчивая особенность — полнейшая динамичность. Например, не только резолвинг методов выполняется по типу получателя (виртуальность, как в java), но и резолвинг методов по типу сигнатуры в runtime (мультиметоды, как в obj c, smalltalk). В общем-то из за такой сверх-динамичности на груви весьма удобно городить всякое метапрограммирование и DSL. В ущерб скорости, конечно, но всегда можно тормозящее написать на java.
xonix
0
Спасибо. Встречал аналогичный тул — btrace. Там профилирующие скрипты можно писать на java. Довольно гибко.
xonix
0
Свои проекты перевёл на Gradle недавно.


Не показывает ли это что Groovy лучшая альтернатива?
xonix
+3
Ну если вспомнить, для чего вообще ввели в жаве эти дефолты, то все станет понятно. А ввели для того, чтоб расширить базовые интерфейсы коллекций лямбда-примочками, не поломав уже написанный код, явно или неявно использующий оные интерфейсы.
xonix
+2
Говорят, еще vtd-xml.sourceforge.net/ хорош для такого
xonix
+2
Для подобного можно использовать kenai.com/projects/btrace
xonix
0
Я в целом про то, что синтаксис Java не улучшается годами.

А нужно оно? Золотое правило: работает — не трожь.

То, что в других языках есть из коробки, здесь реализуется через паттерны.

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