2022-05-28

Тридцать часов блокчейна

FreeCodeCamp.org запилили курс по блокчейну и смартконтрактам аж на тридцать часов. Я пока осилил только первый час, но уже понимаю, что курс мегаполезный.

 

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

 
  2021-02-21

Интервальное повторение

Реализовал в своем маленьком пет проекте superwords метод интервального повторения

Superwords это маленькое приложение под android, при помощи которого я изучаю иностранные языки. Что-то типа Anki но с возможностью учить синонимы и варианты переводов - когда я только начинал делать эту программу я был увлечен японским языком и мне нужно было запоминать не только смысл слова но и написание каной и канзи. 

Знание языков мне всегда очень помогало в путешествиях по Европе, в поиске работы и, сейчас, когда я живу в Германии, без них никуда. Хотя, признаюсь, иностранные языки мне всегда давались с большим трудом. Ну нет у меня к ним таланта!

Интервальное повторение - это повторение на основе кривой забывания Эббингауза. Кривая забывания или кривая Эббингауза была получена вследствие экспериментального изучения памяти немецким психологом Германом Эббингаузом в 1885 году.

Эббингауз был увлечён идеей изучения «чистой» памяти — запоминания, на которое не влияют процессы мышления. Для этого им был предложен метод заучивания бессмысленных слогов, состоящих из двух согласных и гласной между ними, не вызывающими никаких смысловых ассоциаций.

В ходе опытов было установлено, что после первого безошибочного повторения серии таких слогов забывание идёт вначале очень быстро. Уже в течение первого часа забывается до 60 % всей полученной информации, через 10 часов после заучивания в памяти остаётся 35 % от изученного. Далее процесс забывания идёт медленно, и через 6 дней в памяти остаётся около 20 % от общего числа первоначально выученных слогов, столько же остаётся в памяти и через месяц.

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

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

Первое повторение — через 30 минут, второе повторение — день после первого повторения, третье повторение — через неделю после второго, четвёртое повторение — через месяц после третьего, пятое повторение — через пол года после четвёртого повторения.

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

К сожалению, в GooglePlay приложение в настоящее время недоступно - сейчас новая версия ещё проходит ревью. Но можно установить apk вручную.

 

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

 
  2020-12-12

Альтернативное IDE для Ардуино

Давно ищу замену для Arduino IDE которое очень примитивное и жутко неудобное.

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

Оказалось что Visual Studio Code прекрасно умет почти из коробки запускать скетни Arduino. Просто ставится соответствующее расширение и ваши скетчи начинают волшебным образом компилироваться. При этом, как я понял, используются те же библиотеки, которые используются для компиляции скетчей в Arduino IDE.

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

 

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

 
  2020-12-06

Почему в npm так много плохих пакетов?

А просто любой школьник может создать новый пакет и опубликовать его!

И беда в том, что пакеты для использования нужно обязательно опубликовать, даже если ты его создаёшь исключительно для личного использования. Невозможно, скажем, указать git репозиторий как в composer и использовать его не публикуя.

Понадобилась мне на днях для одного маленького проекта библиотека cuba - такая маленькая утилита для вытягивания данных с google таблиц. Так оказалось, что библиотека перестала поддерживаться, а мне она очень нужна - уж больно удобная. Из-за маленького бага, табличка, которую я создал на Google Sheets никак не хотела импортироваться. При этом фикс простой, и Pull Request на гитхабе уже есть, но автор библиотеку давно не обновляет. Пришлось форкать репозиторий, и публиковать свою исправленную версию.

Встречайте - cuba-sheet. Теперь в npm одной плохой библиотекой больше!

 

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

 
  2020-11-12

Коммитим в Git из Android

Задался вопросом - можно ли развернуть Git репозиторий на телефоне, редактировать файлы и коммитить изменения в проект? Оказалось, что можно, и оно отлично работает!

Установил Termux, Termux:Api, Termux:Widget. Важно чтобы все три приложения были установлены из одного магазина приложений - они есть в F-Droid и Android Play Market но последнее в Android Play стоит два доллара а в F-Droid - бесплатное.

Запускаем Termux и ставим необходимые пакеты, и разрешаем приложению доступ к файловой системой:


pkg install git openssh termux-api
termux-setup-storage

Cоздаем папку для проекта и инициализируем репозиторий:


mkdir /storage/emulated/0/Documents/work
cd /storage/emulated/0/Documents/work
git init
git remote add origin git@github.com:username/reponame.git
git config --global user.email "your@email.com"
git config --global user.name "Max"
nano readme.md
git add readme.md
git commit -am"first commit"
#cоздаем пару ключей для git репозитория:
ssh-keygen
cat /data/data/com.termux/files/home/.ssh/id_rsa.pub
#полученную строку копируем и вставляем в профайл гитхаба или другой системы которой вы пользуетесь.

Cоздаем папочку со скриптами:


mkdir -p $HOME/.shortcuts
mkdir -p /data/data/com.termux/files/home/.shortcuts/tasks
cd /data/data/com.termux/files/home/.shortcuts/
nano ./push.sh 
chmod +x push.sh

push.sh выглядит так:


#!/data/data/com.termux/files/usr/bin/bash
cd /storage/emulated/0/Documents/work
git add *
git commit -am"autocommit"
git push origin master
termux-toast "Changes successfully pushed" 

Аналогично создаем pull.sh:


#!/data/data/com.termux/files/usr/bin/bash
cd /storage/emulated/0/Documents/work
git pull origin master
termux-toast "Changes successfully pulled"

Осталось лишь добавить виджет на экран и вы можете делать pull и push с вашего телефона кликая на виджет!

Вуаля, теперь можно, например, редактировать заметки и сразу коммитить их в репозиторий, чтобы не потерять историю изменений!

 

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

 
  2020-10-18

Занимательный факт о вычислениях с плавающей запятой

Подсмотрел в твиттере Раймонда Хеттингера пример для Питона.

В Javascript это тоже работает:

var x = 12345678901234567.0
console.log(x === x + 1); //true	

 

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

 
  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