• Stars
    star
    168
  • Rank 225,507 (Top 5 %)
  • Language
    D
  • Created over 14 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An auxiliary general-purpose D library

test

About this library

ae (almost everything) is an auxiliary general-purpose D library. Its design goals are composability and simplicity.

Among many things, it implements an asynchronous event loop, and several network protocols, such as HTTP / IRC / TLS.

Overview

The library is split into the following packages:

  • ae.demo โ€“ This package contains a few demos for various parts of the library.
  • ae.net โ€“ All the networking code (event loop, HTTP, NNTP, IRC) lives here.
  • ae.sys โ€“ Utility code which primarily interfaces with other systems (including the operating system).
  • ae.ui โ€“ Framework for creating 2D games and graphical applications (SDL, OpenGL).
  • ae.utils โ€“ Utility code which primarily manipulates data.

Notable sub-packages:

  • ae.sys.d โ€“ Builds arbitrary versions of D. Shared by Digger, DAutoTest, and TrenD.
  • ae.sys.net โ€“ High-level synchronous API for accessing network resources (URLs). Includes implementations based on cURL, WinINet, and ae.net.
  • ae.utils.functor โ€“ Functor primitives and functions, allowing @nogc range manipulation and text formatting.
  • ae.utils.graphics โ€“ Contains a templated graphical context optimized for speed, and basic support for a few image formats.
  • ae.utils.promise โ€“ Implementation of Promises/A+, async/await, and related operations. Can be used on top of the ae.net asynchronous API.
  • ae.utils.time โ€“ Supplements core.time and std.datetime with extras such as PHP-like parsing / formatting and floating-point duration operations.

General concepts:

  • Data: Many modules that handle raw data (from the network / disk) do so using the Data structure, defined in ae.sys.data. See the module documentation for a description of the type; the quick version is that it is a type equivalent to void[], with a few benefits. Some modules use DataVec, a Data vector with deterministic lifetime, to minimize copying / reallocations when handling byte streams with unknown length.

  • Networking: ae uses asynchronous event-based networking. A select-based event loop dispatches events to connection objects, which then propagate them to higher-level code as necessary. libev support is also available.

  • UI: The ae.ui package contains basic support for cross-platform interactive applications using SDL. There is a working game demo in ae.demo.pewpew.

What uses this library?

Documentation

You may peruse the documentation generated from DDoc on ae.dpldocs.info.

Other ways to get started with this library is to:

  • Play with the demo programs (in the demo directory)
  • Look at open-source projects using this library (see above)
  • Use your editor's "go to definition" feature to navigate the implementation.

Using this library

  • If you are using Dub, simply add a dependency to ae (or a subpackage) in your project.

    The main package has no additional dependencies, with the rest of the library being split out into sub-packages which have additional dependencies (such as OpenSSL).

    See dub.sdl for details.

  • If you are not using Dub, note that this library has multiple entry points and many optional dependencies, so compiling and linking all *.d files into a single library will not work. In this circumstance, the best way is to simply use recursive compilation (rdmd or dmd -i).

    You can achieve strong versioning and avoid configuring compiler import paths by setting it up as a git submodule in your project's root, as seen here.

Versioning

There are currently no stable/development branches, and versioning is done only according to the number of commits in master.

Breaking changes are prefixed with [BREAKING] in the commit message. Each such commit includes a rationale and instructions for updating affected code.

Tags are created regularly for the benefit of Dub packages (e.g. Digger).

The bleeding-edge version can be found in the next branch (which may be regularly force-pushed).

License

Except where stated otherwise, this library is licensed under the Mozilla Public License, v. 2.0. (Approximate summary: you only need to publish the source code of the files from this library that you edited.)

Modules under licenses other than MPL are:

  • ae.utils.digest_murmurhash3 - D port of a C MurmurHash3 implementation. Public Domain.
  • ae.utils.graphics.fonts.font8x8 - Data for an 8x8 bitmap font created by Daniel Hepper. Public Domain.
  • ae.utils.graphics.hls - Code to convert between RGB and HLS. Ported from a Microsoft Knowledge Base article. License unclear.
  • ae.utils.text.parsefp - Parse floating-point values from strings. Adapted from Phobos. Boost License 1.0.

More Repositories

1

aconfmgr

A configuration manager for Arch Linux
Shell
931
star
2

btdu

sampling disk usage profiler for btrfs
D
414
star
3

RABCDAsm

Robust ABC (ActionScript Bytecode) [Dis-]Assembler
D
411
star
4

DFeed

D news aggregator, newsgroup client, web newsreader and IRC bot
D
368
star
5

dhcptest

Cross-platform DHCP test client
D
315
star
6

trimcheck

SSD TRIM check tool for Windows
D
236
star
7

DustMite

General-purpose data reduction tool
D
112
star
8

hax11

Hackbrary to Hook and Augment X11 protocol calls
C
98
star
9

term-keys

Lossless keyboard input for Emacs
Emacs Lisp
90
star
10

Digger

A tool to build D and bisect old D versions
D
56
star
11

AutoMouseLock

Multi-monitor gaming helper
C++
34
star
12

WormKit

W:A Extension Framework
Pascal
30
star
13

wp2git

Downloads and imports Wikipedia page histories to a git repository
D
27
star
14

DuolingoMoreKeys

JavaScript
24
star
15

SlimD

Bare-bones D on Win32
D
20
star
16

swfutilsex

Some classes that use or extend the Adobe Flex 4 SDK that may be useful for reverse engineering.
Java
20
star
17

dmdprof

DMD compilation time profiler
Python
19
star
18

DBuildStat

Tools to measure and visualize performance of building D programs
D
17
star
19

tree-sitter-d

JavaScript
17
star
20

Ditto

Fork of Ditto Clipboard Manager
C++
14
star
21

TrenD

D stats/benchmarks and historic results
JavaScript
13
star
22

MMTool-Extract-All

D
12
star
23

csfo4

Fallout 4 native mods
D
11
star
24

MyWormNET2

WormNET server written in D
D
11
star
25

dscripten-tools

Alternative build toolchain for Dscripten
D
11
star
26

LiteUnits

Lightweight Delphi units to replace heavy system units like SysUtils. I did not write these, I only maintain them for personal projects.
Pascal
11
star
27

dlint

D
10
star
28

thincow

Create a deduplicated, COW view of block devices as a FUSE filesystem
D
9
star
29

DMapTreeMap

Visualizes D map files in a treemap
D
9
star
30

EnvMan

FAR plugin for comfortable management of environment variables
Pascal
9
star
31

steamkeyactivator

Cross-platform Steam bulk key activator
D
9
star
32

dcaptcha

CAPTCHA for D programming websites
D
8
star
33

keygen.js

<keygen> polyfill for modern browsers
JavaScript
8
star
34

Diamond

D memory debugger and profiler
D
8
star
35

DDD

Generic External-Memory Delayed-Duplicate-Detection Search Engine for Implicit Graphs. Based on Kwirk DDD solver ( http://github.com/CyberShadow/kwirk ).
C++
7
star
36

D-dot-git

Git repository generator for all D components
D
7
star
37

graphstudio

Fork of MONOGRAM GraphStudio
C++
7
star
38

misc

Miscellaneous (non-script) utilities to complement my dotfiles
D
7
star
39

FiddlerAutoCapture

Fiddler extension to automatically save all content hierarchically
C#
7
star
40

DAppenderResearch

Benchmarks and experiments in writing appenders in D
D
6
star
41

turbotuber

relentless external youtube-dl downloader for YouTube
D
6
star
42

cacheset64

64-bit CacheSet
C++
6
star
43

squelch

D
6
star
44

dbt-mode

Emacs Lisp
5
star
45

rtf2any

D
5
star
46

putty-terminfo

Attempt at a better terminfo for PuTTY
5
star
47

steamguides

Steam Guide Uploader
D
5
star
48

MyWormNET

Personal WormNET server software
PHP
5
star
49

data.d

D wrapper for raw data located in unmanaged memory.
D
5
star
50

SimpleIndent

C++
5
star
51

term-title

Emacs Lisp
5
star
52

ProcMonTools

Process Monitor stuff
D
5
star
53

ripfs

Simple deduplicating userspace filesystem for recordings of Internet radio stations.
D
5
star
54

ProSnooper

ProSnooper is an application that lets you connect to WormNET, chat on the channels, join and host games.
Pascal
5
star
55

KeyboardEmperor

Kernel-mode hack to speed up USB keyboards [I have no idea what I'm doing]
C
5
star
56

DBugTests

Curated D issue test case database
D
4
star
57

FAR

Obsolete, see https://github.com/CyberShadow/farmanager
C++
4
star
58

UniUpload

CyberShadow's file uploader
Pascal
4
star
59

TextNavigate

Obsolete. See:
C++
4
star
60

DDD-Kwirk

Kwirk module for generic DDD solver ( http://github.com/CyberShadow/DDD )
C++
4
star
61

xmacro

Fork of the xmacro program with some essential fixes
C
4
star
62

GHDaemon

Caching GitHub API proxy for Digger
D
4
star
63

ForumAntiSpam

Client-side forum spam filter
D
4
star
64

localcmdhistory

C++
4
star
65

colorout

Colorize your compilerโ€™s output
D
3
star
66

cyberzshadow

My zsh theme
Shell
3
star
67

d-btrfs

D
3
star
68

win32

Shell
3
star
69

TimeTracker

Minimalistic time-tracking program for Windows
D
3
star
70

json2colorer

Utility to convert DMD .json output to Colorer wordlists
D
3
star
71

cirun

[WORK IN PROGRESS] Stand-alone CI test runner
D
3
star
72

ColorCalc

Command-line calculator for hex RGB colors.
D
3
star
73

image-quality

Quantifying generation loss using machine learning
Python
3
star
74

kwirk

Kwirk C++ solver. Obsolete, this project was split up into a generic DDD engine ( http://github.com/CyberShadow/DDD ) and the Kwirk module for it ( http://github.com/CyberShadow/DDD-Kwirk ).
C++
3
star
75

DDraw

Deprecated project, merged into ae:
D
2
star
76

monocre

D
2
star
77

DomainManager

D
2
star
78

pas2d

Simplistic text processor for doing part of grungework of Pascal->D conversion.
D
2
star
79

DvorakLayouts

Dvorak keyboard layouts
Shell
2
star
80

ShellUtils

Some stuff that goes into /usr/local/bin on my machines
Shell
2
star
81

Drain

D
2
star
82

metahumble

HumbleBundle Metalink generator
Python
2
star
83

multishellcheck

Lint multi-file scripts with ShellCheck
Shell
2
star
84

reduce

General-purpose data reduction tool
D
2
star
85

Team15

D1/Phobos library with various (mostly network) code
D
2
star
86

photosensitivity

Makefile
2
star
87

rwm

Remote Window Manager - list and manipulate windows remotely
D
2
star
88

SteamKeyAdder

Easily add bundle/retail keys to your Steam account
D
2
star
89

function_factory

D
2
star
90

ColorerVCLog

Combine Visual C++ build logs with colorer HTML output
D
2
star
91

DAutoTest

My D autotester (currently for just the documentation)
D
2
star
92

git-splice

Programs to splice histories of git repositories
D
2
star
93

ddoc2ghmd

Extremely simple filter to convert DMD Ddoc output to github Markdown
D
2
star
94

CpuUsageMon

D
2
star
95

AutoFix

D
2
star
96

PuttySessionsToSSH

Convert PuTTY sessions to OpenSSH config
D
2
star
97

SeatD

SeatD SVN mirror
D
2
star
98

dbot-server

D
1
star
99

dbot-client

D
1
star
100

dchmgen

D CHM generator
D
1
star