2020-04-20

Вычислить n знаков числа Пи

программирование

В Твиттере Раймонда Хеттингера был интересный твит - вычисление n знаков числа Пи - на Питоне.

Стало интересно как записать это на JavaScript. Сказано - сделано:


function pi(places) {
    const extra = 8;

    const pow = function(number, power) {
        result = number;
        for(let i = 0; i < power; i++) {
            result *= number;
        }
        return result;
    }

    const one = pow(BigInt(10), places + extra)
    let t = BigInt(3) * one;
    let c = BigInt(3) * one;
    let n = BigInt(1);
    let na = BigInt(0);
    let d = BigInt(0);
    let da = BigInt(24);
    while (t > 1) {
        n = n + na;
        na = na + BigInt(8);
        d = d + da;
        da = da + BigInt(32);
        t = (t * n / d);
        c += t;
    }
    return (c / pow(BigInt(10), extra))
}

console.log(pi(100)) //3141592653589793238462643383279502884197169399375105820974944592307816406
                     //2862089986280348253421170679

Занятно было посмотреть как работают вычисления в BigInt - если результатом деления двух Int в JavaScript будет Float то результатом деления двух BigInt будет тоже BigInt. При этом нельзя использовать Math.pow для возведения в степень - результатом Math.pow оказывается Number и точность вычислений заметно теряется. Поэтому пришлось делать свою функцию pow c n умножений. Как сделать лучше пока не придумал.

Как мы видим работать с int64 на Питоне значительно проще - Javascript тут значительно проигрывает.

 

Коментариев: 1

 
  2020-04-16

Amazfit Stratos 2

гаджеты

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

Одно расстраивало - не вибрирует когда приходит входящий звонок. Не показывает уведомления. Не вибрирует. Вобщем самые главные функции не работают.

И вот что оказалось - оказывается был включен режим "не беспокоить (DND) в настройках часов.

Зашел в настройки, отключил DND и вуаля - теперь все работает. Как так получилось, то ли это я его включил случайно, то ли изначально он был включен? 

Главное сейчас всё работает.

 

Оставить комментарий

 
  2020-04-08

Новый клиент Эфириума

разное

Интересно следить за тем как развиваются сейчас криптовалюты. Еще недавно чтобы поиграться, скажем, с Эфиром нужно было ставить софт, ждать дни и даже недели пока скачается блокчейн на локальльный диск, после этого можно было попробовать что-то куда-то перевести и еще не факт что получится. Сейчас же, поставить клиент - это дело трех секунд. Создать кошелек, вообще просто. Непонятно, правда, почему нет такого же легкого клиента под десктоп - только под мобильные платформы. Это и Биткоина, кстати, касается, официальный легкий клиент есть только под Андроид, под десктоп - тормозной монстр, который съест все свободное пространство вашего жесткого диска и не подавится.

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

Зато теперь, пользоваться эфиром может кто угодно, где угодно и как угодно. Все это вселяет оптимизм и надежду что, когда нибудь эти технологии все же дорастут до массового потребителя.

 

Оставить комментарий

 
  2020-04-07

Как сконфигугировать FreePBX на Raspberry Pi

howto

Сделал небольшую статейку про то как сконфигурировать Free PBX для работы в качестве мини-АТС - вдруг кому-то будет интересно...

Статейка пока сырая, дополнения и исправления будут позже.

 

Оставить комментарий

 
  2020-04-04

Поламаю-ка я свой сайт

разное

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

Теперь будем все это рафокторить. В ближайшее время все будет поломано. Надеюсь со временем смогу сделать что-нибудь достойное, или не смогу, время покажет.

 

Оставить комментарий

 
  2020-04-01

Отладка JavaScript в nodejs

программирование

Node.js умеет из коробки отлаживать JavaScript файлы. Для того чтобы зайти в режим отладки нужно запустить скрипт с коммандой inspect.

node inspect <filename.js>

При этом программа начнёт выполняться сразу в режиме отладки и остановится на первой строке.

Для перехода к следующей строке нажмите n[enter], для step into s[enter], для продолжения (Resume execution) с[enter].

Выход из приложения два раза ^C.

Записал коротенькое видео как это делается.

 

Оставить комментарий

 
  2020-03-31

Скринкаст на Linux

howto

Часто бывает нужно записать скринкаст. Пробовал разные утилиты, но лучшей оказался обычный ffmpeg.

На своем лаптопе я запускаю это вот так:


ffmpeg -video_size 1366x767 -framerate 25 -f \
x11grab -i :0.0 -f pulse -ac 2 -i default output.mp4

Может кому-то будет полезно...

 

Оставить комментарий

 
  2020-03-31

Полезная библиотечка для подсветки синтаксиса

вебмастеринг

Давно присматриваюсь к разным библиотечкам для подсветки синтаксиса, решил поставить PrismJS - выглядит довольно неплохо. 

Если у вас webpack - то поставить очень просто:

1. Ставим саму библиотеку:

npm install prismjs

2. Инициализируем в entry point js


var Prism = require('prismjs'); //ставим js
require('prismjs/themes/prism.css'); //ставим тему
// Подсвечиваем все теги автоматически
Prism.highlightAll();

3. Теперь можно размечать код:


  //просто пример кода
  Object.defineProperty(Object.prototype, 'abbrev', {
    value: function () { return abbrev(Object.keys(this)) },
    enumerable: false, configurable: true, writable: true
  })

 

Оставить комментарий

 
  2020-03-22

Полезный список приложений для Amazfit Stratos

гад-же-ты

Для Amazfit Stratos нет простого способа устанавливать приложения. Нет аналога Google Play на борту чтобы поставить то что хочется. 

Однако на борту у Amazfit Stratos крутится Андроид 4 - а значит можно поставить любой apt файл при помощи adb install <имя_файла.apk>

Вот тут есть полезный список apk файлов которые могут быть полезны. 

 

Оставить комментарий

 
  2020-03-07

Часорожи для Amazfit Stratos

гад-же-ты

Научился, спустя год после покупки ставить новые вотчфейсы на свой Amazfit Stratos. Находим файл срасширением wfz, загружаем его на телефон в папочку Watchfaces на самом устройстве, и после этого через стандартное приложение Amazfit этот вотчфейс появится в меню выбора вотчфейсов. Но как то интересных фейсов я пока найти не могу - наверно поэтому мне это особенно и не нужно было.

Вот здесь можно найти неплохой выбор циферблатов.

 

Оставить комментарий