LINUX.ORG.RU

Сообщения crutch_master

 

QuickJS

Как всем уже известно по новости с опеннета, разработчик ffmpeg и qemu выкатил javascript движок поддерживающий почти всё ES2019 + запили туда перегрузку операторов и библиотеку для математики с bigint и bigfloat. Всё это работает быстрее и лучше duktape и также легко встраивается в сишный код. Можно собирать самодостаточный бинарник прямо из js скрипта. x86 поддерживается, заявляется небольшая стоимость вызова нативного кода из js.
Итак, теперь js можно встраивать почти везде. В Duktape есть только ES5 + несколько фич ES6, нода жирновата и только под x64, остальные движки тоже или заброшены или кто куда.

 ,

crutch_master ()

Node REPL, vim и костыли

Короче, я опять упоросля и приделал repl ноды к vim.
Суть такая: на одном мониторе код с редактором, на втором нода с repl. Код из редактора по хоткею отправляется в ноду, там что-то происходит и результат вываливается в терминал. Из ноды можно забирать данные по автодополнению для всяких структур и прочего. Нужно это мне для всякого кодинга «на горячую» - дёргать запросы, ворошить данные, структуры, тут же смотреть результат, что-то переписывать и т.д. Все работает на прекрасных и надёждый костылях - двух FIFO
Итак, поделка:

//node repl server
//repl.js
const repl = require("repl");
const fs = require("fs");
const outFifo = "/path/to/output_fifo";

var replServer = repl.start( { useGlobal : true });

replServer.context.useAC = function(str) {
    replServer.completer(str, (err, v) => {
        let ret = v[0].toString().replace(/,/g,"\n");
        let out = fs.createWriteStream(outFifo);
        out.end(ret);
    });
}
Конфиг вим:
func Js_run()
    execute ":yank"
    execute "'[,']w! >>/path/to/input_fifo"
endfunction

func AC_node(s, b)
    if a:s
        let line = getline('.')
        let cmd = "void useAC('".line."')"
        new
        setlocal buftype=nofile bufhidden=hide noswapfile nobuflisted
        put=cmd
        execute "w >>/path/to/input_fifo"
        q
        return line
    else
        let ret = []
        let s:lines = readfile("/path/to/output_fifo")
        for s:line in s:lines
            call add(ret, s:line)
        endfor
        return ret
    endif
endfun
set completefunc=AC_node

fun Js_runall()
    execute "w! >>/path/to/input_fifo"
endfunction
map <F2> :call Js_run()<CR>
map <F5> :call Js_runall()<CR>
inoremap <C-@> <C-X><C-U>
inoremap <F2> <ESC>:call Js_run()<CR>i
Запуск ноды:
$ tail -f /path/to/input_fifo | node repl.js
Ну и, собственно, нужно сделать эти 2 fifo. Функция отправки из vim должна отправлять выделение или строку, но она какая-то кривая, я в vimscript полное днище.

inb4: atom, sublimetext и пр электроноподелки.
Жирно. Не люблю. Мой велик - норм.

 , , ,

crutch_master ()

IDE для javascript/json

Ищу ide для js, но не совсем обычное. Нужно что-то типа repl, но с гуем, редактором кода, просмотром json, сохранением и применением нашлёпанных функций, выполнение запросов.
Суть работы следующая : получаешь кусок данных откуда-нибудь (сеть,фс,копипаст,csv,etc), пишешь функцию которая его обрабатывает, смотришь результат, повторяешь до достижения удовлетворения, сохраняешь данные и функцию.
Нужно для обработки данных и быстрого кодошлёпства. Сейчас использую repl ноды с костылями, подумываю запилить, если не найду.

 , ,

crutch_master ()

Минималистичные установщики убунту/минт

Есть что-нибудь такое, чтобы можно было сказать

$ install_linux /mnt/new_system_root
И оно поставилось, настроило сеть, fstab, grub спросило пароль и tz? Debootstrap не справился, качать 2 гб iso и «прожигать» его на флешку в 2к19 лень.

 ,

crutch_master ()

Боты выносят людишек в dota 2

Просто насилуют (почти) всех в прямом эфире.. 99.6% побед ии (600+ матчей). Была статистика на https://arena.openai.com/#/results но она лежит. Хорошее завершение недели.
СР/УВЧ. Хоть говаривали, что нейросетка совсем простая, но народ из openai молодцы.
inb4. Нет у ботов мапхака, что не скажешь о подлых людишках.

 , ,

crutch_master ()

Json schema/validator

Поскольку json-schema - говно я с горя упоролся и наваял свою правильную схему/валидатор

var config = {
    meta : {
        desc : "Bicycle validator example",
        keywords : {
            any : "^ANY",
            or : "_or_",
            notRequired : "^_",
            comment : " - .*$"
        }
    },
    types : {},
    schema : {
        ANY : {
             id : "number - required parameter",
             _name : "string - not required, but can be",
             a_or_b_or_c : "string - need one of them",
             e_or_d : "string - or them",
             _list : ["string","number","string - list with types in this order"],
             _list_etc : ["string","number - repeated list with spectype ...", "..."],
             _st : "anything - any field",
             _anyobj : {ANY : "anything - object with any content"}
        }
    }

}
Фичи/как работает:

  • Отдельно метаданные, отдельно схема, отдельно типы
  • Сама схема записывается так, как будто это объект. Структуры (объект, массив) пишутся как есть, типы пишутся строкой. И никаких сраных "type" : "string" везде и прочей не нужной писанины.
  • Требуемые поля объекта пишутся как есть. Необязательные поля должны соответствовать регулярке notRequired в meta.
  • Если допустимы произвольные наборы полей, то поле должно соответствовать регулярке any в meta
  • Если нужно одно из полей, но не все сразу или некоторые из них, то названия разделяются регуляркой or в meta
  • Из описания типа регуляркой вырезается шаблон комментария
  • Типы должны проверяться. Встроенные - int (целое), number, string. (Еще не тестил)
  • Массивы с типами, последовательностью типов (повтор - спецтип "...", хардкод)
  • Хардкодный тип anything для чего угодно, в т.ч. структур.
  • Можно делать свои типы добавляя функции в types. Функция получает значение, возвращает true - если всё нормально и что угодно другое, если всё плохо. При этом возвращаемое запишется в выдаваемый объект
  • На выходе выдаётся структура подобная входной с пожеланиями для автора в проблемных местах

Планируется

  • Схема в типах
  • Причесать код
  • Протестить работу с типами
  • Сделать тесты для всего
  • Ссылки и вложенные структуры
  • Вызов валидатора типов с параметрами (например intRng 1 100, для целых от 1 до 100 или цепочки типа int rng 1 100)

Говнокод сей поделки там -> https://github.com/Crutchmaster/bvalid-js
Приветствуются предложения, пожелания, проклятия.

Для затравки. Это самая охрененая схема/валидатор. Вы видели json-schema? Дико многословное говно без возможностей которое без костылей невозможно использовать в принципе.

 , , ,

crutch_master ()

Команда роботов сразится с командой человечества в Dota 2

Завтра в 18.30 по Гринвичу (если я ничего не путаю) пройдёт матч между командой ботов OpenAI и командой человечества по Dota 2.
OpenAI - это некоммерческая организация созданная при участии Илона Маска для проведения исследований в области искусственного интеллекта. На The International 2018 боты OpenAI обыграли команду бывших профессиональных игроков, но команда действующих профессионалов оказалась роботам не по зубам. Тем ни менее в режиме 1vs1, only mid, mirror match ботам OpenAI нет равных уже сейчас.

Держим кулачки за роботов! Дотеры не нужны! 8/64! СР! УВЧ! Регайте Бендеров на Твиче! Зафлудите им чат!

Твич OpenAI

Подробности

 , , ,

crutch_master ()

gnu parallel выдаёт странное

Academic tradition requires you to cite works you base your article on.
When using programs that use GNU Parallel to process data for publication
please cite:

  O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
  ;login: The USENIX Magazine, February 2011:42-47.

This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.

To silence this citation notice: run 'parallel --citation'.

Сегодня выдал вот такое. Раньше всё работало нормально. Что ему надо, я читать не умею.

 

crutch_master ()

Массовая генерация PDF true linux way

Есть данные о начислениях по квартплате для 300к человек в БД. Надо сделать из них платёжку на 1-3 листа А4 в pdf. Чем кошерно будет это сделать? Сейчас всё работает на fastreports в дельфи и jasperreports, но один документ делается 2+ секунд и занимает это около суток да и стрёмно всё это как-то.
Хочется следующего: данные из бд перегоняются в пригодный вид, дальше скармливаются шаблонизатору, тот делает tex/md/etc документ из которого делается pdf. Хочется, чтобы всё, кроме бд занимало <50 мс. Есть истории успеха?

 , , ,

crutch_master ()

Где сейчас можно выставить PATH в Debian 9?

Пишут, что в /etc/login.defs. Добавляю в ENV_SUPATH, ENV_PATH но работает только для рута. Раньше всё писалось в /etc/environment, но сейчас он пустой. Из https://wiki.debian.org/EnvironmentVariables ясно, что он его тупо перепишет на то, что там есть, а это, как я понимаю, не вариант. В bashrc ставить тоже не вариант. Куда его теперь можно ставить?

 ,

crutch_master ()

Интерактивный js редактор из vim

Хочу js редактор с встроенным eval выделенного куска кода, перезагрузкой/выбором контекста и автодополнением по содержимому контекста ноды.
Например, я пишу

var Foo = {
   var func = ["a","b","c"];
   for (var i = 0, c = func.length; i < c; i++) {
       this[func[i]] = function() {/*... */}
   }
}
var foo = new Foo();
Выделяю всё это, делаю eval, потом пишу foo. и редактор мне предлагает a,b,c
Можно ли vim довести до такого и каким образом? Есть ли готовые ide, не жирные.

inb4: зачем это не нужно? Чтобы реактивно писать repl-говнокод и тестить прямо в редакторе.

UPD: короче, мне надо пробросить nodejs repl в vim и обратно.

 , , ,

crutch_master ()

Новый день, новая дыра

https://www.securitylab.ru/news/498218.php
Интел, спекулятивное выполнение, чтение данных по анализу времени задержек или что-то около того. На АМД всё норм.
Ну что, режем javascript, пацаны.

 , , ,

crutch_master ()

Тест java vs nodejs по жору памяти

java:

package test_java;

import java.util.HashMap;
import java.util.Scanner;

public class Main {

    class Table {
        Long x2;
        Long x3;
        String str;
        public Table(Long i) {
            x2 = i*2;
            x3 = i*3;
            str = x3.toString();
        }
    }
    private HashMap<Long, Table> hash = new HashMap<Long, Table>();

    public Main() {
    
    }

    private void log(String s) {
        System.out.println(s);
    }

    public void test() {
        for (long i = 0; i < 1000L*1000L; i++) {
            hash.put(i, new Table(i));
        }
        log("Generated");
        Scanner scan = new Scanner(System.in);
        scan.nextInt();
    }

    public static void main(String[] args) {
       Main m = new Main();
       m.test();
    }
}

Nodejs:
h = {}
for (i=0; i < 1000*1000; i++) h[i] = {x2:i*2, x3:i*3, str : (i*3)+""}
Жор памяти с htop после нескольких минут простоя: https://i.imgur.com/6VY2zqfl.png

Ъ: 267мб - ява, 127 нода (было ~180 сразу после запуска)

И что получается? Ява сосуна по памяти больше чем в 2 раза? (и во много раз по коду, лол) Как дальше жить? Что я не так сделал?

$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

$ node --version
v10.14.2

 , , ,

crutch_master ()

Vim. Поднять строчку кода

Есть

    a = 
    123;
надо
    a = 123;
Одной кнопкой из normal mode. Сейчас, как и раньше, долблю i-space-del-esc-dw как идиот.

 

crutch_master ()

Допускаете ли вы такой стиль кода?

Что лучше и правильнее?

public void foo   (Double a)            {fn(0, 0, a,  "foo");   }
public void foo   (Double a, Integer b) {fn(0, b, a,  "foo");   }
public void bar   (Double a)            {fn(a, 0, 0d, "bar");   }
public void bar   (Double a, Integer b) {fn(a, b, 0d, "bar");   }
public void foobar(Double a, Integer b) {fn(a, b, a,  "foobar");}

или

public void foo(Double a) 
{
    fn(0, 0, a, "foo");  
}
public void foo(Double a, Integer b) 
{
    fn(0, b, a,  "foo");
}
public void bar(Double a) 
{
    fn(a, 0, 0d, "bar");
}
public void bar(Double a, Integer b) 
{
    fn(a, b, 0d, "bar");   
}
public void foobar(Double a, Integer b) 
{
    fn(a, b, a,  "foobar");
}

 , ,

crutch_master ()

Лучший рэп про программистов

https://www.youtube.com/watch?v=wjFgOckkVYM
Я извиняюсь, но это - шедевр.
Вот эти ребята : http://vk.com/nii_rap
Inb4: слоупок, баян. Не все такие быстрые.

 ,

crutch_master ()

Как разогреть лед в пластиковой трубе 50мм

Перемёрз слив. Доступ к ледяной пробке есть, но сколько её еще там дальше хз. Может быть метров 5. Можно, конечно, лить кипяток и дуть феном, но не долго. Надо какой-то девайс, который можно засунуть туда глубоко. Подошел бы обычный кипятильник прикреплённый к дощечке, если бы это была труба на 100мм. Хорошо шел кусок арматуры разогретый в печке, но туда-сюда не набегаешься. Гугл советует сделать кипятильник из лезвия, но это - конченный вариант, кмк. Если не найду мелкий тен, засуну паяльник в медную трубу, приварив к ней жало свинцом, замажу точку входа провода силиконовым герметиком и буду молиться, чтобы не попала вода и не замкнуло.

Я пришел с этой проблемой сюда, потому что, куда еще идти за советами, как сделать что-то из говна и палок?

 , ,

crutch_master ()

Как регуляркой обрезать юникод за пределами U+FFFF (или починить его)

Всякие символы типа
🌨 🌡️ 🌬️→
Надо или вырезать целиком или починить, чтобы символы отображались в терминале. Минт 17.3 в браузере все работает.

 , ,

crutch_master ()

Инвалидация кеша в РСУБД

Как решается на практике? Есть куча жирных таблиц и надо знать, что определённые записи поменялись, причём узнать это надо быстро и просто. В оракле были какие-то таймштампы по таблицам/записям, но их извлечение не намного быстрее, чем сам запрос по ключу. Парсить логи - тоже не вариант. Подключать раббит к ораклу и отсылать события через триггер? Сомнительно. Конечно, есть некоторые особенности функционирования ИС, когда в таблицы только добавляются записи или ведётся какой-нибудь свой лог, где по одной записи можно сделать много выводов, однако интересуют универсальные готовые решения, не обязательно в оракле.

 , , ,

crutch_master ()

Java ссылки в строковых параметрах аннотаций

Есть такой код (myBatis)

package my.crutches;

@Mapper
public interface someMapper {
    public static final String FIELDS = "id, a, b, c";
    public static final String WHERE "id = #{id}";
    @Select({
         "select ${@my.crutches.someMapper@FIELDS ",
         "from my.table where ",
         "${@my.crutches.someMapper@WHERE}"
    })
    List<Abc> getAbcById(Integer id);
}
Это интерфейс маппер, который скармливается myBatis'у, который делает по нему запрос к бд и заворачивает результаты в класс. Вот эти две ссылки:
${@my.crutches.someMapper@WHERE}
#{id}
Это фича myBatis'а и спринга или любой строковой аннотации java? Где про это написано и как оно называется?
Нашел вот тут:
https://stackoverflow.com/questions/11948115/access-public-static-final-strin...

 

crutch_master ()

RSS подписка на новые темы