Blog

  • dotfiles

    Allyson Rowe’s Dotfiles

    A simple storage for my dotfiles using stow.

    What about it? I like it simple, so don’t worry about large files (maybe)

    And also, I want it to be easy to configure 😉

    Requirements

    And the packages that I use

    Packages

    Just use your favorite package manager. Me? I use two

    sudo dnf install neovim tmux hyprland rofi waybar dunst git
    cargo install fzf eza blight ripgrep
    
    

    Instalation

    git clone https://github.com/TaliAly/dotfiles.git ~/.dotfiles
    cd ~/.dotfiles
    stow . # It just because 

    Post Instalation

    As you might tell, I use the theme of Rose Pine a lot which, is great until you consider that I don’t add the apps that I use with it. Why? Because I don’t care about them, maybe in the future.

    Neovim

    If you have trouble with Lazy, just move the config folders out and let lazy install itself into the editor, then you can add the files.

    Why cargo?

    Because sometimes my package manager won’t have some utils that I like, and I hate that, so I found out that cargo can install in a self contained enviroment and I’m happy with that.

    Why fish?

    it’s fast, good and it’s less hassle to add scripts to it (but writing them can be quite challenging)

    Credits

    Visit original content creator repository
    https://github.com/talialy/dotfiles

  • rust-container

    Rust in a container

    Build Status

    Latest Rust compiler and cargo in a linux container (using docker).

    Getting the images

    The images are available in my Docker Hub repository:

    • $ docker pull tomastomecek/rust — this is the most recent stable release
    • $ docker pull tomastomecek/rust:nightly — this is the most recent, functional nightly release
    • $ docker pull tomastomecek/rust:clippy — latest nightly image with clippy

    Every stable image is also tagged with version of Rust compiler, so for example:

    $ docker pull tomastomecek/rust:1.17.0
    

    For more info what versions are available, see the section Tags.

    Usage

    You should mount your project inside directory /src within the container. cargo and rustc commands are then available in the container.

    Here is a guide how to perform some common actions:

    1. Compile a file:
    $ ls -lha .
    total 4.0K
    -rw-rw-r-- 1 me me 37 May 23 13:10 main.rs
    
    $ docker run -ti -v $PWD:/src/ tomastomecek/rust rustc ./main.rs
    
    $ ./main
    It works!
    
    $ ls -lha .
    total 3.5M
    -rwxr-xr-x 1 me me 3.5M May 26 18:11 main
    -rw-rw-r-- 1 me me   37 May 23 13:10 main.rs
    1. Create a new project using cargo:
    $ mkdir the-best-project
    
    $ cd the-best-project
    
    $ docker run -ti -v $PWD:/src/ tomastomecek/rust cargo init --bin
         Created binary (application) project
    
    $ ls -lha .
    total 8.0K
    drwxrwxr-x 4 me me  61 May 26 18:35 .
    drwxrwxr-x 7 me me 143 May 26 18:29 ..
    -rw-r--r-- 1 me me  76 May 26 18:35 Cargo.toml
    drwxr-xr-x 6 me me  96 May 26 18:17 .git
    -rw-r--r-- 1 me me 120 May 26 18:35 .gitignore
    drwxr-xr-x 2 me me  19 May 26 18:35 src
    1. Compile a cargo project:
    $ ls -lh .
    total 8.0K
    -rw-r--r-- 1 me me  76 May 26 18:35 Cargo.toml
    drwxr-xr-x 2 me me  19 May 26 18:35 src
    
    $ docker run -ti -v $PWD:/src/ tomastomecek/rust cargo build
       Compiling src v0.1.0 (file:///src)
        Finished dev [unoptimized + debuginfo] target(s) in 0.34 secs
    
    $ ./target/debug/src
    Hello, world!

    CI/CD pipeline

    These images are being created using a very simple CI/CD pipeline. Here’s how it works:

    1. Travis CI initiates a build every day using its Cron Jobs feature.

    2. This build script is executed.

    3. Rust stable docker image is built.

    4. Tests for Rust stable docker image are executed. These tests verify that

      • Rust compiler is able to compile Rust code.
      • Cargo is able to create a new project.
      • This cargo project can be built.
    5. If the tests passed, push the image to Docker Hub.

    6. Do steps 3 and 4 for nightly image.

    With this very simple pipeline you can be sure that

    • you get functional images
    • you get latest Rust compiler
    • you can pick a version of Rust
    Visit original content creator repository https://github.com/TomasTomecek/rust-container
  • SmartI18N

    SmartI18N

    SmartI18N will die Internationalisierung von Webprojekten vereinfachen und die Umsetzung beschleunigen. Es gibt einen Online Editor mit welchem Texte in Echtzeit angepasst und verändert werden können. Für die Einbindung stehen verschiedene SDK’s zur Verfügung die das Arbeiten mit SmartI18N vereinfachen.

    Mehr Informationen zu SmartI18N findest du unter www.smarti18n.com

    🚨 This project is now officially retired! 🧓🪦

    Development has ended, support has vanished, and the code is now living its best life in a quiet repo somewhere, sipping digital margaritas. 🍹

    Feel free to fork it, remix it, or just stare at it nostalgically — but don’t expect it to do any new tricks. It’s not dead… it’s just resting. 😴

    First Steps

    Für den Start empfehlen wir dir, den SmartI18N Server von www.smarti18n.com zu nutzen. Später kannst du mit Hilfe eines Docker Image SmartI18N selbst hosten. Dazu aber später mehr.

    Erstell dir mit Hilfe des Editors einen Account und erstell anschließend ein Projekt. Mithilfe des Projekt Keys und Secrets kannst du dann SmartI18N in dein Projekt einbinden.

    SDK’s

    Derzeit gibt es für Spring Message Sources und AngularJS Schnittstellen. In Zukunft wollen wir weiter Schittstellen ergänzen.

    Spring Framework SDK

    Example folgt

    AngularJS SDK

    Example folgt

    Docker Image

    SmartI18N kann selbst betrieben werden. Mehr Informationen findest du im Docker HUB.

    MongoDB (optional)

    Für den Betrieb von SmartI18N benötigst du eine MongoDB. Du kannst eine extern gehostete Instance verwenden oder einen Docker Container.

    docker run -d --name smarti18n-mongo mongo
    

    smarti18n-messages

    docker run -d --name smarti18n-messages --link smarti18n-mongo:mongo -p 30001:8080 -e MONGODB_URL=mongodb://mongo/smarti18n-messages  smarti18n/messages
    

    smarti18n-editor

    docker run -d --name smarti18n-editor -p 30002:8080 -e "SMARTI18N_MESSAGES_HOST=http://localhost:30001" smarti18n/editor
    

    First Login

    Jetzt kannst du das initiale Admin Passwort aus dem smarti18n-messages Container suchen.

    docker logs smarti18n-messages
    

    #######################################################################
    Initializing Application
    Opened connection \[connectionId{localValue:2, serverValue:2}\] to mongo:27017
    Create Default User \[default@smarti18n.com\] with Password \[PASSWORD\]
    create default project \[default\] with secret \[SECRET\]
    Initializing Application finished
    #######################################################################
    

    Mit dem Passwort und der E-Mail default@smarti18n.com kannst du dich im Editor unter http://localhost:30002 einloggen.

    License

    SmartI18n is released under version 2.0 of the Apache License.

    Visit original content creator repository
    https://github.com/SmartI18N/SmartI18N

  • crnn-ctc

    «crnn-ctc» implemented CRNN+CTC

    ONLINE DEMO:LICENSE PLATE RECOGNITION

    Model ARCH Input Shape GFLOPs Model Size (MB) EMNIST Accuracy (%) Training Data Testing Data
    CRNN CONV+GRU (1, 32, 160) 2.2 31 98.570 100,000 5,000
    CRNN_Tiny CONV+GRU (1, 32, 160) 0.1 1.7 98.306 100,000 5,000
    Model ARCH Input Shape GFLOPs Model Size (MB) ChineseLicensePlate Accuracy (%) Training Data Testing Data
    CRNN CONV+GRU (3, 48, 168) 4.0 58 82.147 269,621 149,002
    CRNN_Tiny CONV+GRU (3, 48, 168) 0.3 4.0 76.590 269,621 149,002
    LPRNetPlus CONV (3, 24, 94) 0.5 2.3 63.546 269,621 149,002
    LPRNet CONV (3, 24, 94) 0.3 1.9 60.105 269,621 149,002
    LPRNetPlus+STNet CONV (3, 24, 94) 0.5 2.5 72.130 269,621 149,002
    LPRNet+STNet CONV (3, 24, 94) 0.3 2.2 72.261 269,621 149,002

    For each sub-dataset, the model performance as follows:

    Model CCPD2019-Test Accuracy (%) Testing Data CCPD2020-Test Accuracy (%) Testing Data
    CRNN 81.512 141,982 93.787 5,006
    CRNN_Tiny 75.729 141,982 92.829 5,006
    LPRNetPlus 62.184 141,982 89.373 5,006
    LPRNet 59.597 141,982 89.153 5,006
    LPRNetPlus+STNet 72.125 141,982 90.611 5,006
    LPRNet+STNet 71.291 141,982 89.832 5,006

    If you want to achieve license plate detection, segmentation, and recognition simultaneously, please refer to zjykzj/LPDet.

    Table of Contents

    News🚀🚀🚀

    Version Release Date Major Updates
    v1.3.0 2024/09/21 Add STNet module to LPRNet/LPRNetPlus and update the training/evaluation/prediction results on the CCPD dataset.
    v1.2.0 2024/09/17 Create a new LPRNet/LPRNetPlus model and update the training/evaluation/prediction results on the CCPD dataset.
    v1.1.0 2024/08/17 Update EVAL/PREDICT implementation, support Pytorch format model conversion to ONNX, and finally provide online demo based on Gradio.
    v1.0.0 2024/08/04 Optimize the CRNN architecture while achieving super lightweight CRNN_Tiny.
    In addition, all training scripts support mixed precision training.
    v0.3.0 2024/08/03 Implement models CRNN_LSTM and CRNN_GRU on datasets EMNIST and ChineseLicensePlate.
    v0.2.0 2023/10/11 Support training/evaluation/prediction of CRNN+CTC based on license plate.
    v0.1.0 2023/10/10 Support training/evaluation/prediction of CRNN+CTC based on EMNIST digital characters.

    Background

    This warehouse aims to better understand and apply CRNN+CTC, and has currently achieved digital recognition and license plate recognition. Meanwhile, LPRNet(+STNet) is a pure convolutional architecture for license plate recognition network. I believe that the implementation of these algorithms can help with the deployment of license plate recognition algorithms, such as on edge devices.

    Relevant papers include:

    1. Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline
    2. An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
    3. Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks
    4. LPRNet: License Plate Recognition via Deep Neural Networks

    Relevant blogs (Chinese):

    1. Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline
    2. An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
    3. LPRNet: License Plate Recognition via Deep Neural Networks

    Installation

    $ pip install -r requirements.txt

    Or use docker container

    $ docker run -it --runtime nvidia --gpus=all --shm-size=16g -v /etc/localtime:/etc/localtime -v $(pwd):/workdir --workdir=/workdir --name crnn-ctc ultralytics/yolov5:latest

    Usage

    Train

    # EMNIST
    $ python3 train_emnist.py ../datasets/emnist/ ./runs/crnn-emnist-b512/ --batch-size 512 --device 0 --not-tiny
    # Plate
    $ python3 train_plate.py ../datasets/chinese_license_plate/recog/ ./runs/crnn-plate-b512/ --batch-size 512 --device 0 --not-tiny

    Eval

    # EMNIST
    $ CUDA_VISIBLE_DEVICES=0 python eval_emnist.py crnn-emnist.pth ../datasets/emnist/ --not-tiny
    args: Namespace(not_tiny=True, pretrained='crnn-emnist.pth', use_lstm=False, val_root='../datasets/emnist/')
    Loading CRNN pretrained: crnn-emnist.pth
    crnn-emnist summary: 29 layers, 7924363 parameters, 7924363 gradients, 2.2 GFLOPs
    Batch:49999 ACC:100.000: 100%|████████████████████████████████████████████████████████| 50000/50000 [03:47<00:00, 219.75it/s]
    ACC:98.570
    # Plate
    $ CUDA_VISIBLE_DEVICES=0 python3 eval_plate.py crnn-plate.pth ../datasets/chinese_license_plate/recog/ --not-tiny
    args: Namespace(add_stnet=False, not_tiny=True, only_ccpd2019=False, only_ccpd2020=False, only_others=False, pretrained='crnn-plate.pth', use_lprnet=False, use_lstm=False, use_origin_block=False, val_root='../datasets/chinese_license_plate/recog/')
    Loading CRNN pretrained: crnn-plate.pth
    crnn-plate summary: 29 layers, 15083854 parameters, 15083854 gradients, 4.0 GFLOPs
    Load test data: 149002
    Batch:4656 ACC:100.000: 100%|████████████████████████████████████████████████████████████| 4657/4657 [00:52<00:00, 89.13it/s]
    ACC:82.147

    Predict

    $ CUDA_VISIBLE_DEVICES=0 python predict_emnist.py crnn-emnist.pth ../datasets/emnist/ ./runs/predict/emnist/ --not-tiny
    args: Namespace(not_tiny=True, pretrained='crnn-emnist.pth', save_dir='./runs/predict/emnist/', use_lstm=False, val_root='../datasets/emnist/')
    Loading CRNN pretrained: crnn-emnist.pth
    crnn-emnist summary: 29 layers, 7924363 parameters, 7924363 gradients, 2.2 GFLOPs
    Label: [0 4 2 4 7] Pred: [0 4 2 4 7]
    Label: [2 0 6 5 4] Pred: [2 0 6 5 4]
    Label: [7 3 9 9 5] Pred: [7 3 9 9 5]
    Label: [9 6 6 0 9] Pred: [9 6 6 0 9]
    Label: [2 3 0 7 6] Pred: [2 3 0 7 6]
    Label: [6 5 9 5 2] Pred: [6 5 9 5 2]

    $ CUDA_VISIBLE_DEVICES=0 python predict_plate.py crnn-plate.pth ./assets/plate/宁A87J92_0.jpg runs/predict/plate/ --not-tiny
    args: Namespace(add_stnet=False, image_path='./assets/plate/宁A87J92_0.jpg', not_tiny=True, pretrained='crnn-plate.pth', save_dir='runs/predict/plate/', use_lprnet=False, use_lstm=False, use_origin_block=False)
    Loading CRNN pretrained: crnn-plate.pth
    crnn-plate summary: 29 layers, 15083854 parameters, 15083854 gradients, 4.0 GFLOPs
    Pred: 宁A·87J92 - Predict time: 5.4 ms
    Save to runs/predict/plate/plate_宁A87J92_0.jpg
    $ CUDA_VISIBLE_DEVICES=0 python predict_plate.py crnn-plate.pth ./assets/plate/川A3X7J1_0.jpg runs/predict/plate/ --not-tiny
    args: Namespace(add_stnet=False, image_path='./assets/plate/川A3X7J1_0.jpg', not_tiny=True, pretrained='crnn-plate.pth', save_dir='runs/predict/plate/', use_lprnet=False, use_lstm=False, use_origin_block=False)
    Loading CRNN pretrained: crnn-plate.pth
    crnn-plate summary: 29 layers, 15083854 parameters, 15083854 gradients, 4.0 GFLOPs
    Pred: 川A·3X7J1 - Predict time: 4.7 ms
    Save to runs/predict/plate/plate_川A3X7J1_0.jpg

    Maintainers

    • zhujian – Initial workzjykzj

    Thanks

    Contributing

    Anyone’s participation is welcome! Open an issue or submit PRs.

    Small note:

    License

    Apache License 2.0 © 2023 zjykzj

    Visit original content creator repository https://github.com/zjykzj/crnn-ctc
  • Esp32_I2S_Microphone_Vol_Switcher

    Esp32_I2S_Microphone_Vol_Switcher

    SoundSwitcher is a class to implement a two state sensor reacting on sound levels.
    The sound volume is measured by an I2S micophone (SPH0645LM4 or INMP441)
    The state toggles when a changeable arbitrary soundvolume level is exceeded
    A changeable hysteresis is accomplished

    Example:

    https://www.hackster.io/RoSchmi/heating-burner-monitoring-using-esp32-and-microphone-80015d

    https://github.com/RoSchmi/Esp32_WiFiManager_HeatingSurvey

    Constructor: has two parameter, a configuaration struct and the used microphone type

    Initialization: .begin method with 4 parameters (has to be called in setup())
    * switchThreshold
    * hysteresis
    * updateIntervalMs
    * delayTimeMs

    The first two parameters need not be explained.

    updateIntervalMs : a time interval in ms. Only when the time interval has expired
    a new sound level average is calculated

    delayTimeMs: this delay time is introduced for reading the analog soundlevel
    after the threshold is exceeded. This parameter determins after
    which timeinterval the analog value is sampled (to read not just
    at the very beginning of the new state)

    soundSwitcher.SetActive() : Has to be called right after the soundSwitcher.begin function

    soundSwitcher.SetCalibrationParams() : Is optional, determins an offset and a factor

    soundSwitcher.feed() : This function is called frequently from the loop() of the main program
    It returns a struct Feedresponse.
    After the feed command, Feedresponse.isValid has to be checked
    If .isValid is true, Feedresponse.hasToggled is checked
    If .hasToggled is true, your reaction on the change of the
    state has to be performed

    Visit original content creator repository
    https://github.com/RoSchmi/Esp32_I2S_Microphone_Vol_Switcher

  • vim-ckb

    ⚡ vim-ckb ⚡

    A whole new level of editor immersion is here!
    Never before has a developer been able to achieve such code zen!

    vim-ckb is a hacky little 50-line plugin I made to put nice colors on my keyboard. I mainly made it to learn a little bit more about vimscript, and it’s an incredibly simple plugin, but it may be the missing piece in your development environment that will boost your productivity and make your kitchen sparkle like new.

    Usage

    This plugin depends on ckb-daemon. It’s completely untested on MacOS, and barely tested on Linux, so it may not work perfectly 😛

    Once ckb-daemon is up and running, just install this plugin with your favorite plugin manager and have fun!

    Testimonials

    vim-ckb just caused me great joy and amusement!

    • Oliver Burkill, internet person

    It certainly is a plugin!

    • Katie Wolfe, developer

    I don’t have a Corsair keyboard, but if I did, I would definitely install this plugin and experience the few minutes of mild amusement it has to offer before uninstalling it!

    • Brendan McCoy, Logitech keyboard owner

    Visit original content creator repository
    https://github.com/k80w/vim-ckb

  • bananaj

    Visit original content creator repository
    https://github.com/gscriver/bananaj

  • ab2018

    AB18 GNU/Linux: Sistem Yönetimi 0.5

    Karabük Üniversitesi’nde 27-30 Ocak 2018 tarihleri arasında vereceğim eğitimin içeriğin aşağıdaki gibi olmasını planlamaktayız.

    https://kurs.ab.org.tr/2018/gnu-linux-sistem-yonetimi-05/

    https://t.me/joinchat/EhBNxBAjgETEe2fP_Sj8TA

    Gereksinimler

    • Virtualbox kurulu Bilgisayar

    Planlanan İçerik

    1. Gün

    • Tüm bilgisayarlara VirtualBox kurulumu
    • Özgür Yazılım tanımı ve felsefesi
    • GNU Projesi ve Linux çekirdeğinin tarihçesi
    • Dağıtımlar, pencere yöneticileri ve masaüstü ortamları
    • Işletim sistemi ve dağıtım kavramı
    • Pencere yöneticisi ve masaüstü ortamı farkları
    • Temel bilgisayar mimarisi ve katmanları
    • Sanallaştırma Teknolojileri, Virtualbox ve KVM giriş
    • Sanal cihaza giriş
    • Dizin hiyerarşisi
    • Kabuk kavramı ve kullanımı
    • Komut kavramı ve kullanımı
    • Parametre ve argümanlar

    2. Gün

    • Dizinlerle çalışmak
      • pwd, ls, cd, mkdir, rmdir
    • Dosyalarla çalışmak
      • cat, tac, less, more, touch, head, tail
      • cut, expand, sort, split, tr, uniq, wc
    • Dosya yönetimi
      • cp, mv, rm, file, dd, find, locate, updatedb, type, ln, diff
    • Girdi ve çıktı kavramı
    • Uçbirimde çalışmak
      • bash, echo, env, export, set, unset, history, uname
    • Kabuk kısayolları
    • Uçbirimde metin düzenleme: GNU Nano ve Vi
    • İnternetsiz ortamda çalışmak
      • man, apropos, -help, whatis, which
    • Donanım bilgilerinin öğrenilmesi
      • lsusb, lspci, dmidecode
    • Metin işlemleri
      • grep, egrep, xargs
      • Düzenli ifadeler, sed ve awk
    • Sistemi izleme, süreçler ve servisler
      • top, fg, bg, ps, nice, renice, free, nohup, &, kill, uptime, df, du, lsof, netstat, sysctl, systemctl
    • Sistem açılışı ve disk yönetimi
    • Yeni bir birim ekleme ve mount kavramı

    3. Gün

    • Kullanıcı yönetimi ve gruplar
      • etc/passwd, etc/group, etc/skel
      • useradd, userdel, usermod, groupadd, groupdel, groupmod, chage, getent
      • id, whoami, last, whp
    • Yönetim kullanıcısı
      • su ve sudo arasındaki fark
    • İzin işlemleri
      • chmod, chown, chgrp, umask
    • Debian tabanlı sistemlerde Paket Yönetimi
      • apt-get, apt ve dpkg farkı
    • apt-get komutları
      • install, remove, purge, update, upgrade, clean, –download-only, download, check
    • apt-cache komutları
      • show, search, showpkg, stats
    • dpkg komutları
      • -i, -r, -l, -L, -S, -s
    • apt komutları
      • update, list, search, show, install, remove, upgrade,
    • Zaman ve dil yönetimi
    • Arşivleme ve sıkıştırma

    4. Gün

    • Virtualbox ile ağ ayarlarının anlatılması
    • Ağ yönetimine giriş ve temel komutlar
      • hostname, /etc/hosts, ifconfig, ip, ping, route, ifup, ifdown
      • netstat, dig, tracetoute, tracepath, netcat, lsof -i
    • Uzak bilgisayara bağlanma ve dosya transferi
      • ssh, scp
    • Kütük takibi ve kontrol
    • Temel düzeyde betik yazma ( Bash ve Python )
    • Python ile http sunucusu oluşturma
    • Apache ile http sunucusuna erişim ve log kayıtlarını inceleme

    Visit original content creator repository
    https://github.com/aliorhun/ab2018

  • NYPL-Fundraising-Concepts-2018

    Functional & Dimensional Specifications for Development 2018

    2/20/2018 14:14 -5:00

    Meerkats

    User Centered Design Principles

    • Do no harm
    • Do not annoy
    • Give users control
      • Closeable
      • Session based
    • Tell stories & be compelling

    Dimensions

    • Responsive Design Principles
      • Mobile First approach
      • Do not consume more than 15% of the user’s viewport
        • Browser chrome must be taken into account, especially on the smallest of devices (ex: iPhone SE)
      • Progressive enhancement if Javascript is disabled, basic content should be rendered.
      • Viewports should be considered as small / medium / large rather than a fixed pixel width or height

    Accessibility

    • Module(s) should be written in semantically correct HTML
    • Progressively Enhanced
      • Should function if Javascript is disabled
    • Should be keyboard operable
    • Should close on ESC key press
    • Alt text should be written in accordance with our policies

    Buttons

    • Should be unique to the module itself and not be repeat of other buttons found in the global header
      • This should reduce button “fatigue”
      • This will allow for more perceived targeting towards a specific campaign or cause within the library

    Colors

    Functions

    • Should behave as expected
    • Close buttons should close for that session
      • session cookie set to remember action
    • Links are visually treated as buttons

    Images and Graphics

    • Should be used sparingly and only as an enhancement
    • Compressed, in-line SVGs for vector graphics

    Type faces

    • System Type should be used
    • Keivit only if absolutely compelled by a senior manager
    • Type should never be an image
    • Type will be set in rems and be based on a default of 16px.
      • If type must be smaller 0.75rem or 12px is smallest acceptable size

    Animation

    • Should be used sparingly
    • Depending on context should only run once
    • Only when modules load to the screen or are closed by the user

    Visit original content creator repository
    https://github.com/NYPL/NYPL-Fundraising-Concepts-2018

  • simple-prayertime-reminder

    Simple Prayertime Reminder Logo

    Simple Prayertime Reminder – A simple muslim prayertime reminder app for desktop

    Total alerts Language grade: JavaScript GitHub issues GitHub pull requests github downloads sourceforge downloads GitHub release (latest SemVer) GitHub commits since latest release (by date)
    GitHub Repo stars GitHub forks

    A simple muslim prayertime reminder app for desktop. Made using Electron with electron-react-boilerplate. UI are made using Material UI.


    Table of Contents


    FAQ

    1. Q: Compatible platform?
      A: This app can be used on Windows and Linux. It should also work on MacOS but unfortunately, I haven’t tested it.
    2. Q: What is this app for?
      A: This app works just like any other prayer time/reminder app, it shows prayer time schedule for a specific location/date and the reminder for it.
    3. Q: How do i get help for the user settings?
      A: You can check out the wiki on this section.
    4. Q: My location is incorrect help
      A: You can set the location manually in the settings. For more info check on the options section of the wiki.
    5. Q: Does this work offline?
      A: Yes, the app works offline, internet connection is only needed for location detecting (there is also an offline method if an internet connection is not present) and version checking.

    Features

    • Prayer times with customizable reminder/notification
    • Prayer times schedule (calendar)
    • Export prayer times schedule
    • Adhan
    • Qibla direction

    Showcase

    This app is quite modern looking because of Material UI, it also have dark and light theme.

    Preview

    Preview 1 Preview 1 modal Preview 1_dark Preview 1_dark modal Preview 2 Preview 3 Preview 4 Preview 5 Preview 6

    Download

    Installation

    1. Download the latest release from GitHub
    2. Extract/Install
    3. Run the program

    Uninstallation

    Run the uninstaller if you are using the installer version. If using the portable version, you can just delete the folder. On windows, there might be a registry left behind that you can delete if want to by going to regedit and delete the Simple PrayerTime Reminder registry on \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.

    Customization

    Check the wiki for more information.

    Developing

    This app is developed using Electron React Boilerplate. It uses Electron, React, React Router, Webpack and React Fast Refresh.


    Starting Development

    Install all the packages:

    npm install
    

    Start the app in the dev environment:

    npm start

    Packaging for Production

    To package apps for the local platform:

    npm run package

    This will compile the app into the release folder.

    To compile the app into a certain architecture/platform, you can add extra options to the package command, ex:

    npm run package --win --ia32
    
    # If npm does not work, try to use yarn
    yarn package --win --ia32

    For commands list you can check in the official electron builder website

    Further Instructions

    You can check this repo’s wiki or You can ask in discussions

    Electron React Boilerplate Docs

    See Electron React Boilerplate docs and guides here

    License

    MIT © Dadangdut33 and MIT © Electron React Boilerplate

    Attribution

    Adhan uploaded by Ayat Via Youtube

    Mosque icons created by Freepik – Flaticon

    Further help

    Visit original content creator repository https://github.com/Dadangdut33/simple-prayertime-reminder