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-01

Отладка JavaScript в nodejs

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

node inspect <filename.js>

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

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

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

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

 

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

 
  2020-01-07

Atom - IDE

В очередной раз решил попробовать Атом. Оказалось, что с того времени, как я его ставил последний раз технологии продвинулись вперед, и теперь им вполне можно пользоваться. Конечно это не phpStorm, но за свои деньги (а он, кстати, бесплатный) он оказался вполне сравнимым по возможностям. 

Главным критерием для меня было, чтобы можно было в одной среде работать с Java, С++ и PHP. Atom пока вполне с этой задачей справляется, конечно, не так хорошо как специализированные продукты, но, это от него и не требуется.

Из нужных расширений пока поставил goto-definition и terminal-tab. Сильно не хватает продвинутых возможностей статического анализа от phpStorm ну да без этого пока можно жить.

 

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

 
  2018-12-03

Разработка под Андроид

 

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

Переехав на новый SSD встала необходимость доставить инструменты для разработки.

1. Установил Android Studio, которая сама по себе весит один гигабайт. Ну, ок, открываю проект. Оказывается, мой проект устарел - конвертируем в новый формат. Ок.

2. Не хватает gradle - скачиваем

3. Не хватает Android Platform 8 - скачиваем

4. Не хватает Build Tools - скачиваем

5. Компилируем еще раз, пока компилируется предлагают обновить gradle на новую версию - спасибо, не надо, мне бы поработать... Прошлый раз я сказал уже yes - пришлось час гуглить как починить проект для работы с новом gradle.

6. Для запуска давай, создавай виртуальный девайс - Скачиваем образ системы для виртуального девайса.

7. Теперь не хватает доступа к /dev/kvm - гуглим, чиним

Вуаля, виртуальный девайс заработал! Но хочется же и на физическом устройсте запустить. Тут запустилось почти сразу, правда пришлось еще скачать Android Platform 9 - для быстрой компиляции - ибо на устройстве стоит именно эта версия.

Ура! Можно программировать, управился с настройкой окружения за два дня!Программировать уже расхотелось, пойду посплю. В следуюущий раз, когда возникнет желание попрограммировать, история повторится.

 

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

 
  2018-04-23

Зачем рeдактировать /etc/hosts для создания локального сайта?

Добавил новую DNS запись вида *.local на домен maxistar.ru ссылающуюся на 127.0.0.1 - теперь для локальной разработки не обязателно добавлять имя локального сайта в /etc/hosts - просто создаем локальный виртуальный домен, например newproject.local.maxistar.ru - и вуаля - я могу видеть его по этому адресу!

Кстали, в сети полно таких DNS записей более короткого вида - например fuf.me ссылается на локалхост, можно, например, сделать newproject.fuf.me.

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

 

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

 
  2014-08-27

Arduino

Попробовал сабж, понял почему в народе оно так популярно - уровень вхождения - ноль, т.е. любой неподготовленный человек может поключить плату к компьютеру и начать программировать. Причем, готовое устройство можно получить сразу на макетной плате. Хочу реализовать кое-что из домашней автоматики Arduino Pro Mini - для моих нужд самое оно.

 

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

 
  2014-06-18

Mangekyo Reader прощай

Только что получил уведомление, что мое приложение для чтения манги было удалено с Google Play:

REASON FOR REMOVAL: Violation of the intellectual property and impersonation or deceptive behavior provisions of the Content Policy. Please refer to the IP infringement and impersonation policy help article for more information.

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

Пока же прошу прощения у всех пользователей приложения Magekyo Reader - пока, что скачать его из маркета нельзя. 

Выложил apk приложения на сайт - MangaBrowser20.apk.

 

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

 
  2014-01-06

10 правил дзен-программиста

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

 

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

 
  2013-10-01

Postgesql после MySQL

Поплотнее познакомился с Postgresql - вот некоторые впечатление от сабжа.

Прикольная штука, но медленнее чем MySQL, зато умеет много извратных штук типа хранимых процеур, транзакций, триггеров и прочей машинерии которую трудно отлаживать.

Для доступа я пробовал navicat, pgadmin, или psql.

Первые две вещи - gui, psql - консольная утилита. 

Navicat платный, быстрый, но версия под линукс работает, по крайней мере у меня, страшно криво. Модальные диалоги исчезают при потери фокуса приложения. Видимо, потому что версия под linux использует vine.

PgAdmin - тормозной донельзя. В принципе работает хорошо, но тормоза убивают идею на корню.

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

 

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

 
  2013-07-30

Heroku

Давно попадается на глаза интересный сервис heroku, но все не было времени его попробовать, и, вот, сегодня, наконец создал в нем свою учетную запись. Понравилось. Данный сервис позволяет хостить свои приложения написанные на различных языках программирования включая Riby on Rails, Javascript, Python, PHP и еще многих других.

Причем, на https://github.com/heroku/ выложена большая подборка "шаблонных" приложений которые могут стать хорошей отправной точкой при создании своих собственных проектов. Я еще просмотрел не все возможности данного сервиса но крутость решения поражает.

Еще впечатлило, что типовое приложение мне удалось загрузить на сервис буквально за несколько минут выполнив с пяток комманд.

Бесплатный аккаунт позволяет поноценно разрабатывать и хостить свои приложения. При этом не нужно даже вводить данные кредитки как на Amazon.

В общем - ляпота.

 

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