1678783260
Lightweight justice for your single-board computer!
optimised • simplified • for everyone
Ready to run optimised software choices with dietpi-software
Feature-rich configuration tool for your device with dietpi-config.
DietPi is an extremely lightweight Debian-based OS. It is highly optimised for minimal CPU and RAM resource usage, ensuring your SBC always runs at its maximum potential.
The dietpi programs use lightweight whiptail menus. You'll spend more time enjoying DietPi and applications you need and less time staring at the command line.
Use dietpi-software
to quick and easy install Ready to Run & Optimised applications for your system. DietPi will do all the necessary configurations, including starting the services. Few highlights: Desktop Environments, Remote Desktop Access, Media Systems & Players, BitTorrent & Downloading, Cloud & Backup, Gaming & Emulation, Social & Search, Camera & Surveillance, Networking, System Stats & Management, Home Automation, Hardware & Voice Projects, Webserver Stacks, DNS Servers / Pi-hole, File Servers, Printing and much more.
Use dietpi-services
to control which installed software has higher or lower priority levels (nice, affinity, policy scheduler).
dietpi-update
automatically checks for updates and informs you when they are available. Update instantly, without having to write a new image. DietPi automation allows you to completely automate a DietPi installation with no user input, simply by configuring dietpi.txt
before powering on.
The full list of code contributors can be viewed here.
Joined Q3 2017
Project lead (20/02/2019 and onwards), source code contributor, bug fixes, software improvements, DietPi forum administrator.
Project founder and previous project lead (19/02/2019 and previous), source code contributor and tester.
Joined 2016-06-08
DietPi forum co-administrator, management, support, testing and valuable feedback.
Joined 2017-07-26
Creator and maintainer of the first Clonezilla based installer images for x86_64 UEFI systems.
Joined Q4 2019
DietPi forum moderator, support, testing, bug reports + investigation and valuable feedback.
Joined Q4 2019
NanoPi image creator, tester and bug reports.
Joined 2020-05-31
DietPi documentation author, product manager, SEO and DietPi visibility recommendations.
Joined 2020-10-11
Source code contributor, creator of the DietPi-Dashboard and many software implementations.
Joined 2018-04-16
Creator and maintainer of the first DietPi Hyper-V images.
Since 2016-09-02
Joint venture to bring you the ultimate Amiga experience on your SBC, running lightweight and optimised DietPi at its core: https://github.com/MichaIng/DietPi/issues/474
Joined 2016-01-01
Contributions to the DietPi in general, in-depth testing, bug finding and valuable feedback, forum moderator.
Joined 2016-03-20
DietPi forum moderator and version history maintainer on forums.
Joined 2018-03-01
Contributions to the DietPi in general, including source code, testing, new devices, forum moderator.
Joined 2015-10-10
Provided dietpi.com web hosting for 1 year until April 17th 2016. Additionally: forum moderator, testing, bug reporting.
Joined 2016-04-01
Contributions to the DietPi in general, including source code and VirtualBox image creation/conversion.
Joined 2016-10-01
Created the first DietPi image for NanoPi M3/T3.
Git coders, please use the active development branch: dev
Are you able to:
dietpi-software
install system?If so, let us know! We are always looking for talented people who believe in the DietPi project, and, wish to contribute in any way you can.
Also read our contribute page for an overview of way to support DietPi.
DietPi Copyright (C) 2022 Contributors
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/
/var/lib/dietpi/
/var/tmp/dietpi/
/boot/dietpi/
/boot/dietpi.txt
/boot/config.txt
(RPi)/boot/boot.ini
(Odroid)dietpi-
The above GPLv2 documentation also applies to all mentioned files!
Links to hardware and software manufacturers, sources and build instructions used in DietPi:
Author: MichaIng
Source Code: https://github.com/MichaIng/DietPi
License: GPL-2.0 license
#shell #bash #lightweight #debian #optimization #raspberrypi
1675406340
Basic Pitch is a Python library for Automatic Music Transcription (AMT), using lightweight neural network developed by Spotify's Audio Intelligence Lab. It's small, easy-to-use, pip install
-able and npm install
-able via its sibling repo.
Basic Pitch may be simple, but it's is far from "basic"! basic-pitch
is efficient and easy to use, and its multipitch support, its ability to generalize across instruments, and its note accuracy competes with much larger and more resource-hungry AMT systems.
Provide a compatible audio file and basic-pitch will generate a MIDI file, complete with pitch bends. Basic pitch is instrument-agnostic and supports polyphonic instruments, so you can freely enjoy transcription of all your favorite music, no matter what instrument is used. Basic pitch works best on one instrument at a time.
This library was released in conjunction with Spotify's publication at ICASSP 2022. You can read more about this research in the paper, A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation.
If you use this library in academic research, consider citing it:
@inproceedings{2022_BittnerBRME_LightweightNoteTranscription_ICASSP,
author= {Bittner, Rachel M. and Bosch, Juan Jos\'e and Rubinstein, David and Meseguer-Brocal, Gabriel and Ewert, Sebastian},
title= {A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation},
booktitle= {Proceedings of the IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP)},
address= {Singapore},
year= 2022,
}
Note that we have improved Basic Pitch beyond what was presented in this paper. Therefore, if you use the output of Basic Pitch in academic research, we recommend that you cite the version of the code that was used.
If, for whatever reason, you're not yet completely inspired, or you're just like so totally over the general vibe and stuff, checkout our snappy demo website, basicpitch.io, to experiment with our model on whatever music audio you provide!
basic-pitch
is available via PyPI. To install the current release:
pip install basic-pitch
To update Basic Pitch to the latest version, add --upgrade
to the above command.
This library offers a command line tool interface. A basic prediction command will generate and save a MIDI file transcription of audio at the <input-audio-path>
to the <output-directory>
:
basic-pitch <output-directory> <input-audio-path>
To process more than one audio file at a time:
basic-pitch <output-directory> <input-audio-path-1> <input-audio-path-2> <input-audio-path-3>
Optionally, you may append any of the following flags to your prediction command to save additional formats of the prediction output to the <output-directory>
:
--sonify-midi
to additionally save a .wav
audio rendering of the MIDI file--save-model-outputs
to additionally save raw model outputs as an NPZ file--save-note-events
to additionally save the predicted note events as a CSV fileTo discover more parameter control, run:
basic-pitch --help
predict()
Import basic-pitch
into your own Python code and run the predict
functions directly, providing an <input-audio-path>
and returning the model's prediction results:
from basic_pitch.inference import predict
from basic_pitch import ICASSP_2022_MODEL_PATH
model_output, midi_data, note_activations = predict(<input-audio-path>)
<minimum-frequency>
& <maximum-frequency>
(floats) set the maximum and minimum allowed note frequency, in Hz, returned by the model. Pitch events with frequencies outside of this range will be excluded from the prediction results.model_output
is the raw model inference outputmidi_data
is the transcribed MIDI data derived from the model_output
note_events
is a list of note events derived from the model_output
predict() in a loop
To run prediction within a loop, you'll want to load the model yourself and provide predict()
with the loaded model object itself to be used for repeated prediction calls, in order to avoid redundant and sluggish model loading.
import tensorflow as tf
from basic_pitch.inference import predict
from basic_pitch import ICASSP_2022_MODEL_PATH
basic_pitch_model = tf.saved_model.load(str(ICASSP_2022_MODEL_PATH))
for x in range():
...
model_output, midi_data, note_activations = predict(
<loop-x-input-audio-path>,
basic_pitch_model,
)
...
predict_and_save()
If you would like basic-pitch
orchestrate the generation and saving of our various supported output file types, you may use predict_and_save
instead of using predict
directly:
from basic_pitch.inference import predict_and_save
predict_and_save(
<input-audio-path-list>,
<output-directory>,
<save-midi>,
<sonify-midi>,
<save-model-outputs>,
<save-note-events>,
)
where:
<input-audio-path-list>
& <output-directory>
basic-pitch
to read from/write to.<save-midi>
<output-directory>
<sonify-midi>
<output-directory>
<save-model-outputs>
<output-directory>
<save-note-events>
<output-directory>
Supported Audio Codecs
basic-pitch
accepts all sound files that are compatible with its version of librosa
, including:
.mp3
.ogg
.wav
.flac
.m4a
Mono Channel Audio Only
While you may use stereo audio as an input to our model, at prediction time, the channels of the input will be down-mixed to mono, and then analyzed and transcribed.
File Size/Audio Length
This model can process any size or length of audio, but processing of larger/longer audio files could be limited by your machine's available disk space. To process these files, we recommend streaming the audio of the file, processing windows of audio at a time.
Sample Rate
Input audio maybe be of any sample rate, however, all audio will be resampled to 22050 Hz before processing.
Contributions to basic-pitch
are welcomed! See CONTRIBUTING.md for details.
Author: Spotify
Source Code: https://github.com/spotify/basic-pitch
License: Apache-2.0 license
1670457272
palestine_first_run
Lightweight and easy check if the app runs for its first time, apply that to custom calls.
To start, import package
import 'package:palestine_first_run/palestine_first_run.dart';
Ensure flutter framework is active
main()
// Make Sure Framework Is Ready
WidgetsFlutterBinding.ensureInitialized();
Just as easy as this
// First time (true), then (false)
final bool isFirstRun = await PalFirstRun.isFirstRun();
And for the custom calls
// First time (true), then (false)
final bool isFirstAPICall = await PalFirstRun.isFirstRun('call_api');
Run this command:
With Flutter:
$ flutter pub add palestine_first_run
This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get
):
dependencies:
palestine_first_run: ^0.0.14
Alternatively, your editor might support flutter pub get
. Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:palestine_first_run/palestine_first_run.dart';
import 'dart:developer' as developer;
import 'package:flutter/material.dart';
import 'package:palestine_first_run/palestine_first_run.dart';
void main() {
// Make Sure Framework Is Ready
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
Future.delayed(Duration.zero, () async {
final bool isFirstRun = await PalFirstRun.isFirstRun();
developer.log(isFirstRun.toString());
final bool isFirstAPICall = await PalFirstRun.isFirstRun('call_api');
developer.log(isFirstAPICall.toString());
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: const Center(
child: Text('Running on'),
),
),
);
}
}
Download Details:
Author: msayed-net
Source Code: https://github.com/msayed-net/PalestineDevelopers
1665915493
Skiff
A lightweight Mediator implementation for Dart projects.
This package allows you to write smaller, more robust and testable code by turning data access logic (or anything else you can think of) into first-class objects with sound typing.
With Dart:
$ dart pub add skiff
With Flutter:
$ flutter pub add skiff
Run this command:
With Dart:
$ dart pub add skiff
With Flutter:
$ flutter pub add skiff
This will add a line like this to your package's pubspec.yaml (and run an implicit dart pub get
):
dependencies:
skiff: ^0.3.0
Alternatively, your editor might support dart pub get
or flutter pub get
. Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:skiff/skiff.dart';
import 'dart:async';
import 'package:skiff/skiff.dart';
class FetchCharacters implements Request<FetchCharactersResult> {}
class FetchCharactersResult {
final List<String> characters;
FetchCharactersResult(this.characters);
}
class Authenticate implements Request<RequestResult> {
final String username;
final String password;
Authenticate(this.username, this.password);
}
void main() async {
var mediator = Mediator();
var query = FetchCharacters();
var charactersHandler =
FuncHandler<FetchCharacters, FetchCharactersResult>((r) {
return Future.value(FetchCharactersResult([
'Eleven',
'Mike Wheeler',
'Dustin Henderson',
'Jim Hopper',
'Jonathan Byers',
'Murray Bauman'
]));
});
mediator.addHandler(charactersHandler);
var characters = await mediator.dispatch(query);
characters.characters.forEach(print);
var command = Authenticate('alexei@starcourtmall.com', 'pa55w0rd');
var authenticationHandler = FuncHandler<Authenticate, RequestResult>((r) {
return Future.value(RequestResult.succeeded());
});
mediator.addHandler(authenticationHandler);
var result = await mediator.dispatch<RequestResult>(command);
print('Login ${result.isSuccessful ? 'successful' : 'failed'}');
}
Download Details:
Author: thisdarktao
Source Code: https://github.com/thisdarktao/skiff
1665889691
Hive is a lightweight and blazing fast key-value database written in pure Dart. Inspired by Bitcask.
If you need queries, multi-isolate support or links between objects check out Isar Database.
Check out the Quick Start documentation to get started.
You can use Hive just like a map. It is not necessary to await Futures
.
var box = Hive.box('myBox');
box.put('name', 'David');
var name = box.get('name');
print('Name: $name');
BoxCollections
are a set of boxes which can be similarly used as normal boxes, except of that they dramatically improve speed on web. They support opening and closing all boxes of a collection at once and more efficiently store data in indexed DB on web.
Aside, they also expose Transactions which can be used to speed up tremendous numbers of database transactions on web.
On dart:io
platforms, there is no performance gain by BoxCollections or Transactions. Only BoxCollections might be useful for some box hierarchy and development experience.
// Create a box collection
final collection = await BoxCollection.open(
'MyFirstFluffyBox', // Name of your database
{'cats', 'dogs'}, // Names of your boxes
path: './', // Path where to store your boxes (Only used in Flutter / Dart IO)
key: HiveCipher(), // Key to encrypt your boxes (Only used in Flutter / Dart IO)
);
// Open your boxes. Optional: Give it a type.
final catsBox = collection.openBox<Map>('cats');
// Put something in
await catsBox.put('fluffy', {'name': 'Fluffy', 'age': 4});
await catsBox.put('loki', {'name': 'Loki', 'age': 2});
// Get values of type (immutable) Map?
final loki = await catsBox.get('loki');
print('Loki is ${loki?['age']} years old.');
// Returns a List of values
final cats = await catsBox.getAll(['loki', 'fluffy']);
print(cats);
// Returns a List<String> of all keys
final allCatKeys = await catsBox.getAllKeys();
print(allCatKeys);
// Returns a Map<String, Map> with all keys and entries
final catMap = await catsBox.getAllValues();
print(catMap);
// delete one or more entries
await catsBox.delete('loki');
await catsBox.deleteAll(['loki', 'fluffy']);
// ...or clear the whole box at once
await catsBox.clear();
// Speed up write actions with transactions
await collection.transaction(
() async {
await catsBox.put('fluffy', {'name': 'Fluffy', 'age': 4});
await catsBox.put('loki', {'name': 'Loki', 'age': 2});
// ...
},
boxNames: ['cats'], // By default all boxes become blocked.
readOnly: false,
);
Hive not only supports primitives, lists and maps but also any Dart object you like. You need to generate a type adapter before you can store objects.
@HiveType(typeId: 0)
class Person extends HiveObject {
@HiveField(0)
String name;
@HiveField(1)
int age;
}
Extending HiveObject
is optional but it provides handy methods like save()
and delete()
.
var box = await Hive.openBox('myBox');
var person = Person()
..name = 'Dave'
..age = 22;
box.add(person);
print(box.getAt(0)); // Dave - 22
person.age = 30;
person.save();
print(box.getAt(0)) // Dave - 30
Hive was written with Flutter in mind. It is a perfect fit if you need a lightweight datastore for your app. After adding the required dependencies and initializing Hive, you can use Hive in your project:
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
class SettingsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: Hive.box('settings').listenable(),
builder: (context, box, widget) {
return Switch(
value: box.get('darkMode'),
onChanged: (val) {
box.put('darkMode', val);
}
);
},
);
}
}
Boxes are cached and therefore fast enough to be used directly in the build()
method of Flutter widgets.
1000 read iterations | 1000 write iterations |
---|---|
![]() | ![]() |
SharedPreferences is on par with Hive when it comes to read performance. SQLite performs much worse. | Hive greatly outperforms SQLite and SharedPreferences when it comes to writing or deleting. |
The benchmark was performed on a Oneplus 6T with Android Q. You can run the benchmark yourself.
*Take this benchmark with a grain of salt. It is very hard to compare databases objectively since they were made for different purposes.
Copyright 2019 Simon Leier
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Run this command:
With Dart:
$ dart pub add hive
With Flutter:
$ flutter pub add hive
This will add a line like this to your package's pubspec.yaml (and run an implicit dart pub get
):
dependencies:
hive: ^2.2.3
Alternatively, your editor might support dart pub get
or flutter pub get
. Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:hive/hive.dart';
import 'dart:io';
import 'package:hive/hive.dart';
part 'main.g.dart';
@HiveType(typeId: 1)
class Person {
Person({required this.name, required this.age, required this.friends});
@HiveField(0)
String name;
@HiveField(1)
int age;
@HiveField(2)
List<String> friends;
@override
String toString() {
return '$name: $age';
}
}
void main() async {
var path = Directory.current.path;
Hive
..init(path)
..registerAdapter(PersonAdapter());
var box = await Hive.openBox('testBox');
var person = Person(
name: 'Dave',
age: 22,
friends: ['Linda', 'Marc', 'Anne'],
);
await box.put('dave', person);
print(box.get('dave')); // Dave: 22
}
Download Details:
Author: hivedb
Source Code: https://github.com/hivedb/hive/tree/master/hive
1625452597
1. First go to the official page of Bodhi Linux and grab the Bodhi Linux 6.0.0 for your system architecture and create a bootable UDB Drive using Unetbotoin or dd command], and restart the system.
2. Once your system reboots, you will be presented with the Bodhi Linux boot menu.
3. Bodhi Linux Loading.
4. Choose your preferred language and click Continue .
5. Enlightenment (Default) Desktop Environment.
6. From the Bodhi Live Environment, locate and click the Install Bodhi Linux from the Main Desktop. Next, choose your preferred language and click Continue
#linux #lightweight #lightweight bodhi linux 6.0