summaryrefslogtreecommitdiff
path: root/public/what-im-working-on-fall-2014.html
blob: efc293ab7334f18075c845e0280d7cbf44c0c595 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>What I'm working on (Fall 2014) — Luke T. Shumaker</title>
  <link rel="stylesheet" href="assets/style.css">
  <link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
<body>
<header><a href="/">Luke T. Shumaker</a> » <a href=/blog>blog</a> » what-im-working-on-fall-2014</header>
<article>
<h1 id="what-im-working-on-fall-2014">What I’m working on (Fall
2014)</h1>
<p>I realized today that I haven’t updated my log in a while, and I
don’t have any “finished” stuff to show off right now, but I should just
talk about all the cool stuff I’m working on right now.</p>
<h2 id="static-parsing-of-subshells">Static parsing of subshells</h2>
<p>Last year I wrote a shell (for my Systems Programming class);
however, I went above-and-beyond and added some really novel features.
In my opinion, the most significant is that it parses arbitrarily deep
subshells in one pass, instead of deferring them until execution. No
shell that I know of does this.</p>
<p>At first this sounds like a really difficult, but minor feature.
Until you think about scripting, and maintenance of those scripts. Being
able to do a full syntax check of a script is <em>crucial</em> for
long-term maintenance, yet it’s something that is missing from every
major shell. I’d love to get this code merged into bash. It would be
incredibly useful for <a
href="/git/mirror/parabola/packages/libretools.git">some software I
maintain</a>.</p>
<p>Anyway, I’m trying to publish this code, but because of a recent
kerfuffle with a student publishing all of his projects on the web (and
other students trying to pass it off as their own), I’m being cautious
with this and making sure Purdue is alright with what I’m putting
online.</p>
<h2 id="stateless-user-configuration-for-pamnss"><a
href="https://lukeshu.com/git/mirror/parabola/hackers.git/log/?h=lukeshu/restructure">Stateless
user configuration for PAM/NSS</a></h2>
<p>Parabola GNU/Linux-libre users know that over this summer, we had a
<em>mess</em> with server outages. One of the servers is still out (due
to things out of our control), and we don’t have some of the data on it
(because volunteer developers are terrible about back-ups,
apparently).</p>
<p>This has caused us to look at how we manage our servers, back-ups,
and several other things.</p>
<p>One thing that I’ve taken on as my pet project is making sure that if
a server goes down, or we need to migrate (for example, Jon is telling
us that he wants us to hurry up and switch to the new 64 bit hardware so
he can turn off the 32 bit box), we can spin up a new server from
scratch pretty easily. Part of that is making configurations stateless,
and dynamic based on external data; having data be located in one place
instead of duplicated across 12 config files and 3 databases… on the
same box.</p>
<p>Right now, that’s looking like some custom software interfacing with
OpenLDAP and OpenSSH via sockets (OpenLDAP being a middle-man between us
and PAM (Linux) and NSS (libc)). However, the OpenLDAP documentation is…
inconsistent and frustrating. I might end up hacking up the LDAP modules
for NSS and PAM to talk to our system directly, and cut OpenLDAP out of
the picture. We’ll see!</p>
<p>PS: Pablo says that tomorrow we should be getting out-of-band access
to the drive of the server that is down, so that we can finally restore
those services on a different server.</p>
<h2 id="project-leaguer"><a
href="https://lukeshu.com/git/mirror/leaguer.git/">Project
Leaguer</a></h2>
<p>Last year, some friends and I began writing some “eSports tournament
management software”, primarily targeting League of Legends (though it
has a module system that will allow it to support tons of different data
sources). We mostly got it done last semester, but it had some rough
spots and sharp edges we need to work out. Because we were all out of
communication for the summer, we didn’t work on it very much (but we did
a little!). It’s weird that I care about this, because I’m not a gamer.
Huh, I guess coding with friends is just fun.</p>
<p>Anyway, this year, <a
href="https://github.com/AndrewMurrell">Andrew</a>, <a
href="https://github.com/DavisLWebb">Davis</a>, and I are planning to
get it to a polished state by the end of the semester. We could probably
do it faster, but we’d all also like to focus on classes and other
projects a little more.</p>
<h2 id="c1">C+=1</h2>
<p>People tend to lump C and C++ together, which upsets me, because I
love C, but have a dislike for C++. That’s not to say that C++ is
entirely bad; it has some good features. My “favorite” code is actually
code that is basically C, but takes advantage of a couple C++ features,
while still being idiomatic C, not C++.</p>
<p>Anyway, with the perspective of history (what worked and what
didn’t), and a slightly opinionated view on language design (I’m pretty
much a Rob Pike fan-boy), I thought I’d try to tackle “object-oriented
C” with roughly the same design criteria as Stroustrup had when
designing C++. I’m calling mine C+=1, for obvious reasons.</p>
<p>I haven’t published anything yet, because calling it “working” would
be stretching the truth. But I am using it for my assignments in CS 334
(Intro to Graphics), so it should move along fairly quickly, as my grade
depends on it.</p>
<p>I’m not taking it too seriously; I don’t expect it to be much more
than a toy language, but it is an excuse to dive into the GCC
internals.</p>
<h2 id="projects-that-ive-put-on-the-back-burner">Projects that I’ve put
on the back-burner</h2>
<p>I’ve got several other projects that I’m putting on hold for a
while.</p>
<ul>
<li><code>maven-dist</code> (was hosted with Parabola, apparently I
haven’t pushed it anywhere except the server that is down): A tool to
build Apache Maven from source. That sounds easy, it’s open source,
right? Well, except that Maven is the build system from hell. It doesn’t
support cyclic dependencies, yet uses them internally to build itself.
It <em>loves</em> to just get binaries from Maven Central to “optimize”
the build process. It depends on code that depends on compiler bugs that
no longer exist (which I guess means that <em>no one</em> has tried to
build it from source after it was originally published). I’ve been
working on-and-off on this for more than a year. My favorite part of it
was writing a <a href="/dump/jflex2jlex.sed.txt">sed script</a> that
translates a JFlex grammar specification into a JLex grammar, which is
used to bootstrap JFlex; its both gross and delightful at the same
time.</li>
<li>Integration between <code>dbscripts</code> and
<code>abslibre</code>. If you search IRC logs, mailing lists, and
ParabolaWiki, you can find numerous rants by me against <a
href="/git/mirror/parabola/dbscripts.git/tree/db-sync"><code>dbscripts:db-sync</code></a>.
I just hate the data-flow, it is almost designed to make things get out
of sync, and broken. I mean, does <a
href="/dump/parabola-data-flow.svg">this</a> look like a simple diagram?
For contrast, <a href="/dump/parabola-data-flow-xbs.svg">here’s</a> a
rough (slightly incomplete) diagram of what I want to replace it
with.</li>
<li>Git backend for MediaWiki (or, pulling out the rendering module of
MediaWiki). I’ve made decent progress on that front, but there is
<em>crazy</em> de-normalization going on in the MediaWiki schema that
makes this very difficult. I’m sure some of it is for historical
reasons, and some of it for performance, but either way it is a mess for
someone trying to neatly gut that part of the codebase.</li>
</ul>
<h2 id="other">Other</h2>
<p>I should consider doing a write-up of deterministic-<code>tar</code>
behavior (something that I’ve been implementing in Parabola for a while,
meanwhile the Debian people have also been working on it).</p>
<p>I should also consider doing a “post-mortem” of <a
href="https://lukeshu.com/git/mirror/parabola/packages/pbs-tools.git/">PBS</a>,
which never actually got used, but launched XBS (part of the
<code>dbscripts</code>/<code>abslibre</code> integration mentioned
above), as well as serving as a good test-bed for features that did get
implemented.</p>
<p>I over-use the word “anyway.”</p>

</article>
<footer>
  <aside class="sponsor"><p>I'd love it if you <a class="em"
      href="/sponsor/">sponsored me</a>.  It will allow me to continue
      my work on the GNU/Linux ecosystem.  Thanks!</p></aside>

<p>The content of this page is Copyright © 2014 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
</footer>
</body>
</html>