On Thursday, 15 January 2015 at 14:57:48 UTC, Ola Fosheim Grøstad wrote:
Sounds like perfect topic for your newsletter? :)

I could totally fill in the "project spotlight" with stuff from that repo for at least a year, not even kidding. But I don't want it to be all about me! (and oauth.d isn't new, i wrote that like three years ago... it had to be updated a while ago because twitter deprecated v1 of their api, but other than that, it hasn't changed much)

Over the years though, I've written a lot of D programs and do my own libs as required. I've done 2d games, working on a 3d game now, web applications with social media interop for authorization and posting, email marketing, email parsing, I've written a terminal emulator, taskbar, the list goes on and on.

And only about 1/3 of the D code I've written is even on Github! (Of course, about half of my D code is totally uninteresting, closed source business logic stuff, though it would make nice examples to how to use the libraries for real world tasks...)



Let me give an outline of the misc modules to give you an idea of how varied this is:

audio.d, screen.d, engine.d - my old game stuff, wrapping SDL, works in D1 and D2 (or at least did last time I tried it about a year ago). Soon to be replaced by the dependency-free simpledisplay.d, simpleaudio.d, joystick.d combo.

bmp.d, png.d - read/write for bmp and image files.
jpg.d - partial read support for jpeg headers (just to get the size of the image).

cgi.d - basic module for making web apps. Includes cgi, fastcgi, scgi, and an embedded http server. Reads url encoded data, MIME data (for file uploads on the web), and has full URL parsing, among other things.

characterencodings.d - stuff for converting other strings to UTF-8. Supports about twenty other encodings based on webpage and email mining I've done in the past. Also has a lossy conversion as a catchall.

color.d - a color struct for RGBA, also does CSS color string read/writing, HSL <-> RGB, some color manipulation, alpha blending, and image base classes including palette to true color and true color to palette (quantization).

csv.d - simple csv reader, predates std.csv (and is a bit simpler)

curl.d - wrapper for libcurl (predates std.net.curl)

database.d - base class for RDBMS access. Also includes basic ORM and query builder in the form of DataObject and SelectBuilder. It is a simple, low-level wrapper of sql so you can manipulate it semantically more easily but you still need to understand sql to use it. (It also doesn't limit your options!)

mysql.d, postgres.d, mssql.d, sqlite.d - drivers for database.d (wrapping C libraries)

dom.d - XML and HTML parsing and manipulation, including CSS selectors and other tools that can help for implementing a browser. API inspired by modern Javascript DOM, capable of scraping tag soup web pages.

email.d - functions for reading and writing emails with MIME attachments, html and text versions, character sets. Can scrape mbox format, I used it to automatically monitor and reply to some email addresses sitting on the smtp server.

english.d - printing numbers in English

eventloop.d - an epoll based event loop for responding to and sending events. My other modules can optionally tie into it, so you can have one event loop driving files, networks, terminals, X windows, and more.

html.d - stuff for html and CSS manipulation. Includes the Css Macro Expander, which is similar to functionality offered by SASS (also available as a stand alone dub package on code.dlang.org btw), and a Javascript macro expander which you can use to add stuff like foreach to that language. Also has HTML sanitization based on a full parser and whitelist.

htmltotext.d - converts html to plain text so you can display it in a terminal or an email, etc.

http.d - my old standalone http client. Does NOT depend on curl. I'm in the process of replacing it with http2.d, which has a more flexible, asynchronous api (still dependency free, though I have to add OpenSSL and SChannel support for SSL soon). http2 provides an object that kinda works like a browser -it can understand relative links, maintain cookies, etc.

joystick.d - code for accessing XBox 360 controllers (and similar ones, like the PS1 controller via usb) on Windows and Linux.

jsvar.d - a var type similar to Javascript, usable in D. Can be used to read and write JSON with a natural syntax and other dynamic type tasks.

mangle.d - mangles a D name

minigui.d - small, dependency-free (except for simpledisplay.d and color.d but doesn't even need Phobos) widget set, using Win32 native widgets where possible, custom Xlib based ones otherwise. Still work in progress but already works for some basic forms.

oauth.d - OAuth library for client and server. I've used it with Twitter, Linked In, AWeber, Facebook, and more. Has specific functions for the Facebook Graph API, tweeting, serving oauth 1.0 requests, and doing the OAuth authorization flow. Depends on the mhash C library.

querygenerator.d - a user-contributed module for sql query generation

rpc.d - a remote procedure call library for D, making interfaces available across the network. You might prefer the apache thrift bindings or something, this is a custom job that I haven't seriously used.

script.d - a script interpeter based on jsvar.d. The script language is like a cross of D and Javascript. Made for API convenience - very very easy to embed in an application.

sha.d - implementation of SHA1 and SHA2 in pure D (well and some inline asm).

simpleaudio.d - access to WinMM on Windows and ALSA on Linux for waveform sound I/O and MIDI I/O.

simpledisplay.d - dependency-free base windowing library. Allows drawing, input, and other basic functionality. Also allows OpenGL access.

sslsocket.d - Uses OpenSSL to inherit from std.socket.Socket and give client SSL support.

stb_truetype.d - port of C library for writing ttf fonts to images. Has some convenience functions (but they aren't great, works, but not great)

terminal.d - I/O support for the text console. Does real time input, cellular output, getting lines with user editing, coloring, mouse input, and more.

xwindows.d - functions for working with X, beyond what simpledisplay.d offers. Stuff like interacting with the window manager, getting window icons, etc. I wrote it to support my D xlib taskbar.

web.d - wraps a D class in an HTTP api, with automatic url routing, view generation, argument conversion, and much more. Also includes a HTML templating system among other stuff that brings a lot of these modules together.



There's a few other hidden gems in the files themselves, and so much more on my pipeline. Among the ones you might see added in the next month:

game.d - helper functions for writing games (bringing together the display, audio, and joystick stuff). I have OpenGL texture stuff written now, almost done with the high level input api, and some math stuff that will probably be in there.

model.d - loading and displaying a 3d model format with open gl.

midi.d, wav.d - loading, saving, and working with midi and wav files


(Yes, I'm writing a pair of D games again, finally! First time in a long time, but it is moving along well... and I don't need SDL this time!)

Reply via email to