Q: why doesn't X get dates?
A: X doesn't advertise to their strengths.
Solution1: X should advertise to their strengths.
`` WRONG!!! If X advertises to his/er strengths, they will find someone that is searching for advertisement of strengths. They seek to sell themselves.
Solution2: X should invoke antiadvertisement to unsell themselves. X will advertise, in terms of literal definition, and through textual implication seek others towards the persuasion of unselling themselves.
If you had told me 5 years ago I'd be doing bitsyblog updates I'd call you a liar
If you had told me that no one else was using it I'd call me a loser
Real success doesnt come from exertion but from application of considered intent. The consideration of intent -- comprehension of the problem -- is the essence of solution.
i now know the depths i reach are limitless
I rarely make playlists that take much advantage of order these days (I rarely make playlists). In contrast to the era of analog tape, the mp3 world is a slice and mash bazaar where the order added is often semantically extraneous. But today I noticed a nice pattern in undertones and transitions between some songs I've been playing of late (and a few that I haven't) that did flow...nicely.
darkfuturist.pls:
Download/02 - Mothersonne.m4a fsol/Future Sound Of London Dead Cites.mp3 AphexTwin/Aphex Twin - Drukqs - vordhosbn.MP3 elliotsmith/16 Bye.m4a pigface/01 - Flowers Are Evil.mp3 nin/The Downward Spiral/12 - Reptile.mp3 sistermachinegun/Sister Machine Gun - This Metal Sky.wmv.MP3 lpd/The Tear Garden/1993 - Sheila Liked The Rodeo/03 - Sheila Liked The Rodeo.mp3 skinnypuppy/Remix Dys Temper/04-Killing Game [Autechre Remix].mp3 sistermachinegun/Sister Machine Gun - Addiction.MP3 skinnypuppy/Process/11-Cellar Heat.mp3 tool/undertow/Tool-Disgustipated.mp3 nin/The Downward Spiral/13 - The Downward Spiral.mp3 tool/undertow/Tool-Blue_Is_Your_Color.mp3
(title from now i'm nothing)
Terribly sorry about the subject. How embarrassing! Of course it should read,
"Are applications of optical responsivity spectra calibrated to the representative anthropic idempotent?"
Certainly won't be getting into any sort of respected peer reviewed journals with that sort of lack of precision...hell, it'd barely pass at "Applied Optics"
Jimmy Dean?:
motorbike engine roared to life too loud unmuffled as a cry to empty streets loud enough to cover up the cries of children calling you a nerd loud enough to cover up the fighting of mommy and daddy on the long road to divorce or worse loud enough to cover up the divorce that never happened that would separate you from the cadre of freaks you wished to join
bye bye livejournal:
Dear duisternisvos!
We noticed that your account duisternisvos has less than three entries and hasn't been logged into in over two years. LiveJournal is deleting inactive empty accounts. Pursuant to our housekeeping policy, your LiveJournal account duisternisvos is scheduled to be deleted in 15 days.
If you wish to reactivate your account to avoid this deletion, please visit http://www.livejournal.com and log in within 15 days of this notification. If you do not remember the password for your account, you can reset it following instructions over here.
not that i ever knew thee
beh, my beautiful taxonomy of metalexicological ontologic nomenclature! i must resist thy sweet allure!
I never know how to feel about quoting irc://irc.mozilla.org/#ateam even though its clearly public...
well, this is too zeitgeist:
10:20 < armenzg_mtg> jhammel: I forwarded you the email 10:20 < jhammel> armenzg_mtg: heh, well, i have it in my inbox ;) my inbox is, um... 10:20 < armenzg_mtg> jhammel: now it is at the top of it! 10:20 < jhammel> well, you know how ctalbert declared email bankruptcy at some point ;) 10:21 < jhammel> armenzg_mtg: heh, sadly that has become my prioritization system 10:21 < jhammel> which...really doesn't work :(
And...it's really true
Are applications of optical responsivity spectra calibrated to the representative anthropic idempotent?
Kamikazes came 'cause chaos reigned and rained under their reins in their plain planes over the plains
Big Brother is at it again, and I don't mean the guy that gave you noogies
Kill CISPA, Kill it dead! Go to http://www.sitesnotspies.org/ and get pissed!
Lawyer: Isn't it true you're a pedophile?
Defendent: No
Lawyer: Ladies and gentlemen of the jury, are we going to take the word of someone that's been accused of pedophilia?
from the Navy's own mouth: "In February 1903, the United States leased 45 square miles of land and water at Guantanamo Bay for use as a coaling station." (http://www.cnic.navy.mil/guantanamo/About/index.htm)
i'd love to add right after that: "... We sure abused the hell out of that, didn't we?"
it might be at bad taste, but i always wanted to fly out to the plant at fukushima and put a sign on the door that says "gone fission"
Reading http://www.karlgroves.com/2012/04/03/captcha-less-security/ , I was going to ask what would be feasible to do for comments, where I want anonymous users to be able to do so but obviously don't want SPAM (filtered or otherwise). Of course, you have to log in to comment there, so... o_O
I remember when people talked about technology serving humanity. You don't hear much about that anymore
How the fuck do you find an open source thesaurus?
This is a long standing problem. As a writer and lover of nomenclature , I fequently find myself wanting to express a concept maybe related to a word but not quite that word. (Aside: a word of advise on usage of thesauri: these days, the above is my primary usage of these catalogues of synonyms. In my youth, I used thesauri to look up (ahem!) "cooler" words (and, more validly, to avoid repeated usage). Today, IMHO, I consider this a Bad Idea, or at least a bad way of thinking about the problem. Writing, like, what everything?, is a manifestation of intent. Words carry connotations; word choice should be the choice to convey precisely what you want to say. That said, do whatever the hell you want.)
So for dictionaries, after several years of wikipedia fueled desire, http://www.wiktionary.org/ appeared and garnered my canonization as dictionary of choice. I hate the mediawiki software, but that is more than offset by ramifications of a lexicon for, of, and by the people. It is not ad-hampered. The definitions are basically good, or as good if not better on average than any free online dictionary (it is the pursuit, not the cost, that is of primary importance to me). But while Wikisaurus could gain my blessing...it just isn't there yet, in part from my back-seat opinion because mediawiki isn't good software for a thesaurus (that is to say: for word relations). But for whatever reason, it never shows up in my search results for (e.g.) synonym complexity and when I have tried to use it, often my word wasn't found (nor even a placeholder!). I'd feel worse about not helping it off the ground if mediawiki wasn't such awful crap that is essentially a daily frustration (where the fuck are sectional permalinks in 2013??? Oh, and whoever thinks the redirection and/or lack of redirection is cute and/or clever...I wish upon you that Thesaurus was actually a large dinosaur, ten times the size of T-rex, that wants a you for a nibble). Several years ago, someone -- maybe Ian Bicking ? -- gave me a link to a open source/open knowledge thesaurus but somehow I lost it. I have subsisted on the poor man's approach of googling "synonym <word>", but its time consuming, the free (as in crap) thesauri are often of poor quality (ya know, so you can buy the pro version or other product; its a feature of capitalism!), and the ads! The ads are so awful! Popups, lightboxes, screaming monkeys... whatever it'll take to annoy you into apathy. There was a site -- can't recall nor care to -- where you had to answer market research questions to get your synonyms. Nice. The Robot will soon be complete!
Googling open source thesaurus didn't yield much. On my search adventure, I came across http://www.vocabularyserver.com/ which looks cool but not usable for my purposes (or at all? Really its about word relations of which what I want from a thesaurus is a subproblem), http://www.cs.utexas.edu/users/jared/aiksaurus/ which didn't find the words I was looking for or give any way to add them and the URL (human-facing URLs ftw o/ .... at least if you're on the humans' side, which is of course (literally) the only side) let's me know its basically not supported, and http://wordnet.princeton.edu/ which is another word-relation based thesaurus (which, btw, is what I consider the correct approach; albeit donning my writer hat I still need a front-end for actual use as a thesaurus) which looks pretty cool but still not really fleshed out enough in terms of data nor does it seem possible to modify entries, which is kinda necessary for what I'm calling "open". None of these were the site I previously used, which I still have no idea what it was. There were more results; those were just the top three and kinda the only ones that were actually what I was looking for, even remotely.
So it is a word!
From http://dictionary.reference.com/browse/extance :
Ex"tance, n. [L. extantia, exstantia, a standing out, fr. exstans, p. pr. See Extant.] Outward existence. [Obs.] --Sir T. Browne.
via the form of its enactment, Semantic HTML is a self-invalidating term
From https://en.wikipedia.org/wiki/Italic_type#Web_pages, sans markup save the link of interest:
Conversely, if the italics are purely ornamental rather than meaningful, then semantic markup practices would dictate that the author use the Cascading Style Sheets declaration font-style: italic; along with an appropriate, semantic class name instead of an i or em element.
I can't imagine anyone who is capable of understanding (herein) Semantic HTML even at the most rudimentary level would even consider using an <i> element "purely ornamental"ly unless they knew the rule and in breaking affirmed the rule (see also the fragment http://k0s.org/blog/20130324210337 ). That is, given that the semantics of the quoted block itself is correct.
And if you agree with that....what is said here?
Playing with a dead snake again. My apologies. I'll put it down and try to remember not to pick up another with this as my lighthouse
IANAL, but...
Happened to be reading https://www.eff.org/deeplinks/2013/04/are-you-teenager-who-reads-news-online-according-justice-department-you-may-be :
... making it possible to prosecute a user for accessing website for a purpose other than intended by the publisher.
So, given that, if you're reading this, your intent must be under the law service of the Monican aegis . Wrong thinking is punishable. You're either with us or against us.
From some of the people that brought you (in the loose sense) the Electronic Frontier Foundation comes righteous defenders for today's information superhighway...
The
Who's defending your inter-rights?
IFF. And only IFF.
It would be nice if there was a virtual lounge where "idea men" hang out and contemplate ways to solve problem, perhaps to act upon.
Inspiration: the quoting problem: http://k0s.org/hg/config/rev/2454d5a1728b
I wrote a python script to quote crap for me so that I could actually use logic (vs. that bash hacker for slackware crap I used to do) mostly so I could have a hotkey for it: http://k0s.org/hg/config/rev/bc8d098a2474
I briefly looked for something like http://k0s.org/hg/config/file/tip/python/quote.py for linux in the wild that'd be pretty generic, but quick googling didn't turn up anything, plus having something I can be insured is installed with http://k0s.org/hg/config is a worry off my mind.
Anyway, </background>
So obviously this isn't an interesting or clever script. But it got me thinking...what is the right tool for the job? Obviously probably not one right answer.
But...*It would be cool to have a forum where problems could be considered and solutions explored.*
IRC seems a no-brainer. But extant IRC culture, and maybe tech culture in general, seems to be about fitting a solution to a problem. What I'm talking about is more of a forum for understanding problems without necessarily even desiring a solution. Exploring "problems". General pontification.
Anyway...back to the real world
Does your battle against obesity make you want to invoke a jyhad?
Try: Mu-Slim !
The only halal weight loss supplement for Mohammed's supplicants
Now an approved part of the Caliphornia diet
My most recent amusing 10 Mozilla blog posts... my #webstory
evidentiality - love this definition
From http://en.wiktionary.org/wiki/evidentiality :
evidentiality (uncountable):
(linguistics) The encoding into a language of the source of information being communicated, so as to distinguish (for example) hearsay from something actually witnessed.
for shorthand that doesn't exist...
While I raised it in an absurd way and under the assumed (or was it presumed?) guise of a fictional character (and I, I can guarantee you, am not fictitious! -- so many to choose from but let's cite http://k0s.org/blog/20130211190957 ), I have in the past several months needed precisely such a shorthand as desire as expressed for in http://k0s.org/blog/20130302172103 .
To put more plainly: I've found myself writing texts where there is a strongly implied clause (or context or contention) that may be deduced -- as was intended! -- from the text. (In fact, though the reader need not care about the fact nor be aware of it and hence the parenthetical sentence since I'm not sure of relavency, the fact that such may and should be deduced from the text is the main point that the author, me, was trying to convey in the text.)
I have found it "the Thing to Do" in the cases I'm considering here (which could be a subset of those of the above paragraph) to make explicit, parenthetically, that which is implied and deducible. Point at the result of the alchemy, as it were.
"But!" one might say who was playing Devil's advocate , "Calling out the result of the deduction that the reader is desired to undergo implies that they have not undergone it! It can be seen either as a Cliff's notes form, or the author steering the audience as some sort of cheap trick, the reader will perceive that the author didn't understand their own point! It contradicts exactly what you're saying you're trying to say!"
"That would all be true," I would say to Satan's attorney, "Except by pointing to the very thing that, via communication of what I am saying to the reader, is implied that needs not pointing out, I am instead drawing their attention to the gestalt as bifurcated via the eureka moment itself and in fact pointing out that, via communication, we, =author+reader, now have a particular understanding of a thing. The pointing at the forbidden, since we both understand why it is in bad form to do so, is something I am doing here because we both know what it means and it is only forbidden because that would mean our communication does not exist and I am, in fact, showing that it does, and if you understand that, then we understand each other in a, pardoning the word, subtle way."
So, yes, I want a short way of saying/implying all of that. A metaphor would work, though it'd rely on a shared mythology. I can't think of an example right now, though I'll put my mind to it. (I also thing a single metaphor as universal shorthand would likely become cliche and therefore in misuse contradict itself. It is like a few of my students who would, for whatever reason, put Q.E.D. -- non-ironically, I would assume, but the times I raised the issue via red ink it was never commented on -- following exercise where it didn't apply. Q.E.D. has a rather precise meaning. I have rarely used it, academically, even in situations where it did apply. In fact thinking too far into this hanging waiting-for-a-) (no, that wasn't it, nor is this one), there are strong parallels between what I want and Q.E.D. as a term and its associated meaning and implications. Nomenclature is what is desired, of whatever form, and though the definition should be precise -- as illustrated by the word choice: "point" -- phraseology may be invoked erroneously regardless of the type of phrase nor how precise an ideal NLP when fed the context would measure the precision (or inversely, fuzziness) of any particular phrase. Language is a medium, not in general an expression of the inherent as such. Oh thank typography and encodings, here comes a ). How does one say that? Playing with thought and language aside, my contemplation is furthered as far as that goes, but I have not yet an answer.
So I was intending to write this blog post when I found an example whereby I could make this more concrete. Preferably a short, simple one. And it would have to be noncontrived (as dictated by the form of mathematics -- Q.E.D. that, bitch!). That said I intend to write many blog posts I haven't yet written (and may possibly never write, unless you got some idea-offload-points for me) and am kinda surprised I found an example AND still cared about the problem. Today I stumbled across (context, as writer's discretion, unimportant; "the reflection of the Universe" if you need some bullshit answer):
You can ignore that bit about, "It's subtle". That's mostly making fun of people that would place that after the three words that strung together actually form an idea. It's a dead herring .
So there is the explicit.
The parenthetical implied calause isn't there. Let's add it! It would be (guess!) e.g. "(of a nature unfound vis-à-vis 'text v texts')". The exact wording may be cast of the nature of mind.
So, checkpoint here. This is complicated. Let's write the whole thing:
subtext v subtexts (of a nature unfound vis-a-vis text v texts)
(You could also have the shortened less implied version, which if I was thinking about it for as long as it's taken to write this thing I would probably choose in preference. Oh wait, I have been thinking that long about it! subtext v subtexts (vis-a-vis text v texts) . Yeah, lookin' good! But not important for the purposes of this text. Or is this one of those, er, nm)
So. If you don't understand this statement....I'm sorry for wasting your time. I can't really go into that. If you do understand what the above example sentence (fragment?) says, even if you disagree with it, what is going on here? And what am I trying to get out of it?
Time to start popping stack()
So, regardless of whether I use my original parenthetical clause, or the shortened, more implicit parenthetical clause presented in a (main-level text) parenthetical clause (no, that last one wasn't one, that was me just being helpful, strangely; probably screwed that up with this one), they are both saying, parenthetically, what is already directly implied from the statement "subtext v subtexts". So it is redundant. And we all know that's bad in writing. Furthermore, if the author made such a statement in their presented text, as a direct consequence of the redundancy and the nature of such a statement the reader may deduce that the author, in incurring the redundancy in light of their work's evidentiality (to exemplify, the comprehension of the text subtext v subtexts as subject of a study including the presentational context, which therein already implies the proposed parenthetical (contrast: text v texts) . Yeah, had to vary the wording up a bit there for my own well-being. I'll probably do it again.) it is exhibited that the author did not understand or notice the redundancy, despite the fact that it is in direct opposition to the substance of his/her statement!
Common ascribed or inferred reasons are a lack of comprehension of the author of his own purported ideas or a contradiction of professed purpose vs internal purpose (e.g. manipulating the reader vs imparting collected synthesis of psychic explorations/studies; also, this characterization is applicable regardless of the author's conception of their own intentions). But the source of the deviance does not matter; what does matter is that the deviance exists. By its existence, the candidacy of not the work but the author (you see that, don't you?) as professor of ideas exhibited therein is dispelled. The validity of the work, as language inferred, is unchanged; its comprehension shall render as any synthesis of (i.e.) text, the light cast upon the author as exhibited by the disparity between the (as taken herein) text's comprehension and their misapprehension of their attempt at profession being a factor as such unremarkable of the environmental context within a work is interpreted. The author, however, has let something known of himself via this fault that, having temporal existence in addition to touching upon ideas, imparts causal consequences via implication.
And because it feels about time for a flow-breaking quote that ends with an explanation point:
"Enough of these begats" - Leto Atreides II, _The God Emperor of Dune_, Frank Herbert, who knows when it was actually published but google says 2008 at http://books.google.com/books?id=Aow3MjNEvgkC&dq=enough+of+the+begats+dune&source=gbs_navlinks_s so it must be true, confirming my theory that my reading of this book circa 1990 was the result of a trans-dimensional phenomenon, as yet unexplained and potentially inexplicable within the confines of casual three-dimensional constitutive postulation. Q.E.D. [Inline footnote: the very conveyance of this exact quote as reported empirically observed in multiple "origins" (really publication dates) (i.e. alternate timelines, as oft described in contemporary trans-linear-temporal hypotheses; adjunction: QM) has been casually speculated to be (e.g.) intrinsic to the quality of the quote (in the reference) vis-a-vis the observor's appreciation and remark upon synthesis, likewise and as an axially orthogonally equivalent of the same, a measurable "frame drag" constant apropos the translation of the (observed) times of publication with a extradimensional and therefore unmeasurable (interally to extant 3D casual models, anyway; if higher order effects could be formalized and their equations derived from our convolution of empiricism, then we could conceivably measure them, since we are also part of this higher-order U/universe. Is there a bridge?) constant (for simplicity) specifying the exchange value of (hypothesized) vacuum energy in our 3.x-Space to local (that is, local in terms of the relation of our 3.x-Space to N-space, the Universe, which via conformal mapping may be expressed as e.g. a point in defense of our extant notion of locality) information richness (as intentionally undefined due to lack of proposed forms of laws of information mechanics as such; the term 'information porosity' (alt: 'information pulverability') has also been proposed. 'The communication constant' or even 'communicability' is used, informally. Stop. I can't do it anymore. Or, more sadly, I really could. This "Inline footone" is all utter B.S. as bespoken titularly. I was kinda curious if it would be just synthesized through ingestion for so goes the processing of its environment. In case your curious, I was assembling from tagents invoked of context (the lack of original publication date; wth? Who cares about the print run?) and the appeal to ridicule in getting time-travel out of Occum's razor as applied to the misreading of information with my own unsupported thoughts, though presented as through a distorted lens and representing with intentional error, on i.e. the meaning of the speed of light in connection with information mechanics in a transdimensional universe. I suppose explaining the joke takes all of the humour out of it, but then... Despite the mocking and glib tone of protest against the firmament of formalized (Western) logic, and yet also (I hope!) using it as a vehicle appropriate to my communique, I am genuinely interested in..the topic, and the rest, while perhaps joking without being funny, is meant illustratively. I hope I can look back on this "footnote" and say the same.]
Taking a step back from the physical manifestation of words a bit to my own intentions, I don't pruport to prove anything here. I am trying to be very careful with word choice to support what I'm actually trying to explore and say, but none of this is intended as formal or rigorous in any formal or rigorous sense. I'm mostly trying to be expressive and hopefully illustrative and exploring this idea. It is a weird thing to go into this much depth on...even for me! I am surprising I find it as fascinating as I do. Maybe it is the tip of an iceberg of, um, gold...maybe it is some minor thing that is subtle, at least to me, that I can see but can't quite understand. The assertion that, conclusively, the author is unmasked as illustrated through exposure of parenthetical or otherwise conceptually subtextual through rendering as textual
(...to be continued...)
cf. http://k0s.org/blog/20130324200321
"Man is the microcosm of the macrocosm; the god on earth is built on the pattern of the god in nature."
From http://www.blavatsky.net/talk/bnbasic/macrocosm-microcosm.htm It was a random google search result in a rapid-fire of them.
I have no idea and don't want to know. All I can say from that opening sentence: how stupid. Not only did the authro manage to go anthropocentric immediately (and in fact elevate us monkeys to straddle the divine, I can only assume sexually from our base nature), he also manages to reduce scale symmetry, as a mystic property, to a retarded cliche that an idiot would use as a bar pickup line to sound smart. Make sure you carry your copy of Neatchu with you! Notice that absolutely no Communication takes place in this piece of crap pseudomystic cargo-culting
So delicious you could eat it:
"...the commonsense conception of information is semantical, but the mathematical theory of information is syntactical..."
Yum!
...and the funny thing is....
Re: http://k0s.org/blog/20130324133130 , it was written concurrently with getting netflix-desktop working due to "the hard work of programmer extraordinaire, Erich Hoover". No, I don't know who he is, haven't even googled him yet, but figured that since I'm quoting the excellent instructions at http://www.techrepublic.com/blog/opensource/how-to-get-netflix-streaming-on-ubuntu-1210/4019 and his software actually worked for me, he deserved to be in the quoted material.
The coincidence was pure coincidence. I've looked before (like, more than a year ago) about if netflix + ubuntu was possible (e.g. without a windows install or a desire for one) and... it wasn't. But thanks to the perseverance of people like this Erich Hoover guy I don't know, retarded proprietary stacks fall to ingenuity. It is protection of IP through idiocy, but though its both hard and painstaking, idiocy will fall to the flame of a bright torch if its bearer so persists.
I have been getting caught up across the board (which is a very very wide board, as far as such things goes) this weekend. I was recently gifted a netflix account! Yay! And Thank You! ...that I have sadly underused because this quarter has been busy as fuck (and I haven't been dealing with that well either). Since streaming is such a great part of their service -- that is, if your operating system is supported and all corporate-approved -- I figured I would google again. Bingo. The link above, and here again:
http://www.techrepublic.com/blog/opensource/how-to-get-netflix-streaming-on-ubuntu-1210/4019
So I set that in motion awhile ago ("It does, however, take some time." - ibidem). While that was all happening, I was cleaning out my gmail inbox which of course had suffered due to the high expansion coefficient of my work inbox. And...I came across the letter which I posted together with my reply as a blog entry . Not planned to be karmic, or coinciding at all. Just happened.
And to be fair, as amazed as I am that netflix-desktop works for me, let alone worked with the said instructions, no improving or nothin' (despite two mysterious "failure" messages, for the wine mono and gecko installers somethin' and somethin' -- I should have recorded them, but figured that this meant it wasn't going to work anyway; being perfectly honest, after the whole blindly-follow-instructions-to-something-I-want + apt ppa add, I was wondering if the whole thing was just a scheme to jack netflix accounts of desperate linux users), it is clunky. Its running stuff under wine on a system with no native window$ via silverlight, which I wasn't joking about being a dying piece of technology and there are reasons for that. If it was performant, perhaps it would be, though to my chagrin. I can't manage it like a desktop-native program. There are rendering issues. There is slowness. Don't get me wrong, I am very happy and astounded it works as well as it does...and it works!
But no, that doesn't contradict anything I was saying in my reply, which towards the end was being written to a badly buffered "Downton Abbey" in the background. The amount of time people like me, and people like that unknown guy Erich Hoover (after all this praise of an anonymous hacker, I hope I don't google him and find out he is diametrically opposed to me on all axes save netflix-desktop), have lost because yet-another-company made a yet-another-proprietary-stack choice that will end up costing them time and grief in the end and which, in the stack-sense, takes them right out of the running of innovative tech.
IANAL (no, google it, its not a porn term if you don't already know it), but I intend my usage of correspondence to me with no explicit confidentiality clause and about nothing that should be confidential is fair for me to quote here. If not, then fuck it. It should be. I deleted the name of the netflix employee that contacted me and everything else was very generic.
Now, why did I do this? Well, I don't know. I don't expect netflix to change their ways. It was the right thing to do, but in a present where there are so many right things to do and so little time, was it worth writing, let alone writing this commentary (and this meta-mise en abyme commentary on the commentary on the parenthetical ... )? shrug I don't know. I felt like speaking up. I don't expect to change anything, but ultimately the power to shape the internet's and humanity's future is forfeit when we say nothing and watch idly while greed and entitlement are fed from the flesh of the giving. There is the reverse, which is not untrue, but "Power is given, not taken" has always resonated with me (probably ultimately unknown in true origin, but I'll cite http://community.eveonline.com/ingameboard.asp?a=topic&threadID=1109436 since I agree with the arguments and it is about the same theatre, different battle; its symmetric duo, "Power can be taken, but not given" seems to be Gloria Steinum ). Yeah, its much easier from behind the shield of email than the many times I should have defended myself, for which I regret, not for my sake but for that which actually matters to me: the freedom that is worth eternal vigilance.
I hope this doesn't sound like I think I did some great thing. I really don't think that. I'm just (over?)analyzing it because I am both amused and am learning from the analysis. My most likely impact, if any, is upsetting and confusing the poor recruiter that wrote me from netflix. S/he probably doesn't care about their job save as a means to make money. Who knows? I do think this sort of "being a dick" is entirely appropriate, though, and in fact a Really Good Idea.
And, to be fair, it was much more fun to write the original letter and this follow-up than cleaning out my inbox for the past several hours has been. But back to it. Who knows? Maybe I'll even get to program today! Or write a fiction or what not. I see "Downton Abbey" has buffered a bit...so maybe it is watchable now. While in the vein of calling shit out, that rate I'm supposed to be getting from Comcast? Yeah, um....more bandwidth please. It is a joke in this part of the Mission (my old, also in-the-Mission apartment was fine). Pay for the infra so that I'm not paying more for bandwidth than I was 15 years ago (not a joke!). 'Cuz you're going to have to anyway...and you don't want me to go all Michael Moore on you and shit.
Do you?
What can I say...I'm honored and I'm angry
Hi Jeff,
After checking out your LinkedIn profile, I think we have some opportunities at Netflix that might be an exciting next step in your career. It's a great time to join Netflix - as we grow internationally, our test developers are constantly solving novel technical challenges and growing their experience.
I’d love to chat to learn more about you and share with you what we’re working on. Let me know if you’d be interested in hearing more.
Thanks!
Hi ??????,
I am not looking for a new position at this time and am very happy at Mozilla -- exciting work, meaningful work, (well paying work), and great people.
That said, and meaning no disrespect, since software engineers are in high demand I would not be looking for opportunities with Netflix even if I was looking. I run linux, both for practicality and to further open source. Netflix's lack of streaming on linux has prevented me from really using the service to its full effectivity for years now. It would not be my first choice to throw my service at a company that not only doesn't embrace my ideals, but whose support of their opponent directly has lead to me not being able to use their product.
While I'm sure even if there was no technical barrier linux support would be, at best, "not officially supported", I imagine linux support would be very difficult due to using silverlight as a key component in the technology stack. Which points to one benefit of the OSS manner of unboxed vs. boxed: silverlight is a dying beast. As best I can tell, even Microsoft doesn't care about silverlight save for the relatively minor revenue it brings in. It is my objective belief that silverlight will ultimately become unsustainable to netflix and that netflix will have to invest in undoing the commitment to this proprietary piece of stack that it should have never used in the first place. Perhaps work is already underway. I would be very surprised if engineers did not already speak of this at your company. As an engineer, what incentive would I have to come to work at a company with such an obvious technology problem as well as the forecasting problems associated with it? It does not reflect well.
I don't say this to berate, but I do hope that lessons have been learned from this. I do like your service and, in contrast, what netflix has done (though purely for profit apropos motivation) in diminishing the control of existing media distributors I can get behind. My apologies for the longish and lateish reply; please note that any unexpected frankness is meant only as what it says: being honest for the sake of honesty.
Jeff
The Machinist : a dropped take
(One of the things my mind uselessly does is combine surface thoughts with randomly accessed memories. While mostly a waste of brain power, it does make for some larfs changing dramatic lines to outtakes.)
Trent Reznor...er, Trevor Reznik: I haven't slept in a year.
Stevie: Jesus Christ!
Trevor Reznik: Sorry, slip of the tongue. I haven't showered in a year.
Too small of a form factor for me, but pretty cool! :
http://www.techinasia.com/shanda-bambook-smart-watch-launching-june-2013/
I just donated to Mozilla and got a limited-edition, 15th Anniversary plush red dino - available only to supporters. Join me in wishing Mozilla a happy birthday and get yours before they're gone at http://bit.ly/ZoNIjM
As summer approaches, the earth gets closer to the sun; spring was so named for the value of the spring constant being unity according to Archimedes' model of the heavenly bodies being attached with springs. Of course, in the southern hemisphere, being bizarro-land, everything is the opposite. This is fortunate for other reasons, since were it not for gravity pulling up instead of down, the southern hemisphere would be nigh uninhabitable as everyone would fall off the globe.
Re: Love n laugh - 28 (Monterey )
> Hi... I am just a girl who loves to laugh and have a good time.
Hi. Your ad sounded great since I am a guy looking for a girl. However, I hate to laugh. Its so ungainly the way it contorts your face. It's like the bowel spasm of the mouth. And the sounds that come out -- "Ha ha ha" -- remind me of apes at the zoo. Disgusting. This isn't surprising, considering that laughter is a social lubricant which evolved as a signifier to others that everything is okay. Fuck that, I say. We don't glorify other involuntary reflexes; I don't see why we make an exception for this evolutionary throwback. People that laugh look like clowns, but if we give too much positive reinforcement to this form of complacency we'll end up more like the monkey shocked for obedience by a 1984-esque control agency.
LOL. Not.
fluxbox menus and the power of pipes: the short short version
So I have a thing as detailed in http://k0s.org/blog/20120810005157 that makes a fluxbox menu from http://k0s.org/programs.html . Pretty friggin useful.
However, what I would like to do is transforms (probably not with XSLT, but who friggin knows since who knows when I'll have time to cobble my poor feetless children) for classes of shit.
For instance, there are programs that run in an xterm (or other terminal).
Then there are programs that just display a message.
Yep. Short short. Something left to reader, something
"So the panda came in and set off a firearm, resulting in one casualty."
"Is this that 'Eat, shoots and leaves' grammar joke again?"
"No, this panda was just a real asshole"
much ado about a tempest in a teapot
(See also: http://k0s.org/blog/20130311150002 )
Everyone's seen the modern film adaptation, but have you read Shakespeare's original play, "Much Ado About Mary"?
the best part about not being a kid is realizing that what adults don't tell you is that adults are basically kids that forget that they shouldn't take themselves seriously
"What's that you say? You want me to force-feed you alphabet soup?"
"You're putting words in my mouth."
re http://k0s.org/blog/20130302165721
The [sic] ¥ as copied directly to ensure capture of the anomaly inherent in propagation.
re http://k0s.org/blog/20130302172103
Author's note, apropos the majorant context of the long parenthetical: it would be nice to have a short-hand for this considering its prevalence as literary mechanism
re http://k0s.org/blog/20130302164606
The frame, of course, being a visual metaphor. The mechanism of "transference" (as perceived) of roles from one state machine to a dual via application of reciprocity depends upon the mode of transcription of the relational model of the formalization of state, per the author [Ed note: should be 'inscription' v 'transcription']. The method by which an author denotes text flow, apropos context ibid., is of an incomparable form to that postulated from the metaphor, a literal frame of a painting communicative of state (or, equivalently, state of state, as implied and in fact redundant with the central thesis, but herein as done intentionally such that to restate in the face of the redundancy as essential to be recognized as inherent from the text (as a literary mechanism) in subtextual (herein, again: mise en abyme) dialectic with the reader to see the irony posed as appeal to ridicule whereby the reader in the spirit of all that is good walking back through entangled beards to, metaphorically, the trasmutation of hemlock to reason and laugh and accept that while it is not provable that the author is in fact the sort of thinker or even having percepted or existed as such, that to take anything other from this entendre is likely a fall from an informal fallacy to one of the formal variety. The exact reactions of readers may vary.) as presented as a system boundary.
re http://k0s.org/blog/20130302152731
See http://www.sacred-texts.com/phi/desc/med.txt, especially this paragraph:
And my principal task in this place is to consider, in respect to those ideas which appear to me to proceed from certain objects that are outside me, what are the reasons which cause me to think them similar to these objects. It seems indeed in the first place that I am taught this lesson by nature; and, secondly, I experience in myself that these ideas do not depend on my will nor therefore on myself¥for they often present themselves to my mind in spite of my will. Just now, for instance, whether I will or whether I do not will, I feel heat, and thus I persuade myself that this feeling, or at least this idea of heat, is produced in me by something which is different from me, i.e. by the heat of the fire near which I sit. And nothing seems to me more obvious than to judge that this object imprints its likeness rather than anything else upon me.
See more on complexity theory, systems thinking, and [sic] holism. The general mathematics may be derived from i.e. a specified domain e.g. as from the equations in "The nonequilibrium statistical mechanics of open and closed systems" (Lindenberg), which at the time of authorship appeared in the 11 results shown for http://library.brown.edu/find/Search/Results?lookfor=%22closed%20system%22&type=AllFields Amongst other results shown is "Quixote" (Levy, D. A., et al., 1965) as so computable and (contention, impl. dependent [re caching], but highly likely although this is ultimately unimportant) computed at prior to authorship. The inevitable detractor will no doubt point out, of course, that Castenada was in fact Peruvian/American and not Spanish and such a classification scheme as presented is untennable (even and/or especially for untenability). [Ed note: What a lousy joke and a waste of time. You're right, these games are boring.]
Noted also amonst others are references to Soundgarden, the Diamond Sutra, and the question recorded by e.g. Richard Baxter (1667) and answered definitively Dorothy L. Sayers with appropriate attention to subtexts.
re http://k0s.org/blog/20130302162859
now back in this sphere. Did the puppets spring to life? The molecules rescued from their zero-energy rotation?"
"Then to change it once..."
"Right. But now how many times has it been? How long have you stood here uselessly talking to me, thinking that I as the fictional author of a fiction was other than a puppet. Did you think it so? That I was above impelled?"
"You have always seemed-"
"Fey?"
"But so I was, for so I was written. By me, if you want to think that way. And yet, not so. I am only glad I am too great a fool to worry about it."
"That's all there is?"
"I first conceived it as 'The cutting of the Frame'. We are such low and loathsome being and yet...we are so important, aren't we? '...in apprehension...' For so it was known and so the liar bearing the liar's mask was known since first self-deception was cast. But, such a temporal spin. You're right. I do sound a fool."
"I never said it."
"You were too nice to. I would not have been. So it is okay to be this idiotic man-monkey with fools that go pissing themselves in search of this imbued meaning in their suffering while there walk amongst us those who have been touched by those... Such is the problem with our position of rational thought. I slit that throat with Descartes' I guess, yet the blood on the knife was my own. The tenent of systems theory is correct. It is us that decided what our measurements meant, us that decided that dreams were the bubbles and we were the pond, and for our measurements mise en abyme-"
"And so we were ourselves."
"We closed the system. The author did. Whatever."
"For all stories
re http://k0s.org/blog/20130302152731
yet attempt so insidiously: to weave in this way your narrative so that one can suppose one might find it and suppose at the subtext of your myth. The shadows of the subtext at any rate."
"Then you deny it to be true."
"Since it is claimed without basis, as just a mad scrambling narrative... Yes, if you want me to be explicit. I don't need to deny it for I have seen nothing to it."
"You've read it?"
"I've read your state machine thing trying to sound like David Foster Wallace. I...liked it, I guess. Its fairly incoherent though I assume that's part of what you were going for.
"He developed fractals for IJ's structural form. Fractals. I can't even suppose to do that, and I've worked in science. Did you understand it?"
"I understood what you explained it means."
"And you deny the reciprocity principle applies, that a state machine describing another state machine cannot be freely interchanged?"
"What does it mean that they may be 'freely interchanged'? I see it as the cheapest kind of trick. You put forth a hypothesis pointing to the space of undefined terms that you conveniently claim the proof proves are undefinable."
"For the page as yet unturned, who would guess it ending blank mid-sentence on rising action? The page is yet unturned
re http://k0s.org/blog/20130302143624
"I think, I feel, I breathe, I percept. I speak these words and walk doing so, gesturing. You cannot deny that I feel these things."
"Where does the dream go when the dreamer awakens? When the dreamer donning their own affection as masquerade speaks to another spectre in the thoughtscape of the lunar umbral occlusion, does the dreamer wake to wondering where does abide the conciousness they were conversing with, or has it vanished into ether?"
"You told me once that when you were a child that a character amongst a recurring cast once asked where he went when you woke."
"No longer can I recall were that true or merely a fleeting imagining, make-believe I had convinced myself of. So you can guess how much of me is in this. I don't know anymore. I'm not even sure what the difference is."
"Since both are imaginings, both sides of your mind."
"For the span of time before our primate anscestors, down to rodents to even deeper, the terrors of dreaming...the uncarved nature of the universe. For we wake and, as men of science, men who have no argument capable of being invoked against rational thought, take the mind's mechanism as the network of cables spinning in their electrochemical sea from when we cast the first measurement. It is just a dream. And how recent in our past was this beyond knowing, and how still beyond so many that sureness....of measurement."
"And yet."
"And yet. We do not speak of it for then the walls of science come crashing down, the crowd burning and looting in their rush to egress that which they espouse so dearly but cannot even name, for to speak of it is to recall that it, civilization, rests upon the tip of a needle."
"'The laws describing any closed system cannot be complete within the scope of the closed system.' Whatever that law is. I am horrible with names, especially when they seem so obviously true once you hit them. I guess I have too surrendered my stance of neutrality."
"What days are these when science take their learning from stagecraft, and philosophers profess against knowledge, both smiling as they so thought in cunning secret and carrying the placards of the eccentric reading 'THE END IS NEAR' for none to see? While the young and still romantic may claiming thinking they speak the truth that they can conceive of this as just a dream....there is not a man that builds their pin-balancing act upon that."
"Your definition of nihilism, then. The pin does not exist."
"Never has been conceived as existed."
"Pun?"
"Heh. Not this time. Your wit was always sharper yet underpraised. For my notoriety of carrying the sharpest blade my name more said. But I could not have guessed that it would claim the origin of grid coordinates."
"I did almost wish it to be 'vanished into the very ether itself !' for a part of me."
"... We are not awake yet
re http://k0s.org/blog/20130302141749
"Have you been keeping track? Of how many times they've swapped? Is it once? Twice? A million times and seven? Which one is this?"
"When people said that you spoke with great pretension but that what you have amounted to was sandcastles in which you catalogued the various ways of tilting at windmills, accomplishing nothing and vanishing with the tide, I have defended you and what you have, or so I believed until now, to those who held your future at stake, those with money and power and drive to get shit done. For I saw in you a genius, but like all genius one bordering on madness. Everyone saw the madness. Sadly, that is all I see today."
"Is it an accident, do you think, that such a complex and -- dare I say? Oh of course I dare, I am impelled! -- over the top metaphor that you tell others cursed upon me as an epithet is as appears in my writing? Though surely I think you mean, 'vanishing forever with the tide'."
"Are you claiming it does appear?"
"Would such change which path through the gestalt you beheld?"
re http://k0s.org/blog/20130302140735
"It is a very clever trick, and taken for fiction is both unique and compelling. I just hope you don't believe any of it."
"Believe what? That we are fictions in the mind of the narrator, lacking any more reality than the play of shadows on a screen imbued life through imagination? No belief is required."
"The whole thing is presented as a belief trick."
"They had forgotten they were playing. For so it felt so very real..."
"Which one? Yours or the collective reality?"
"What is the difference anymore
re http://k0s.org/blog/20130302135843
"It's interesting as microfiction, though I'm sure you realize lacking narrative shape it can't be called a story."
"Under what name you call its form it matters as a fancy...how classifiers are built... It is, if I may beg indulgence, a crypomythic figment of one the stories that pass through life with me."
"If it speaks that truth, it cannot be called fiction."
"Can it not be an expression that in so it manifests happens to be the truth?"
"No. You are the author."
"And to what is this 'you' herein addressed?"
No one remembers how to play the games I like anymore, because they are old and too hard to play and ultimately they are boring.
But so I find this new game of theirs that has replaced them.
or are they the same?
a joke only funny to me
Since I mentioned The Furniture Guys incidentally at http://k0s.org/blog/20130223083404 recently, I thought I'd mention this bit that goes on in my head... Its not actually funny, and I don't know why I find it so amusing. They would always say on the show "You're not painting a masterpiece." So I'd roll this thing around in my head, "That's too bad that they never do masterpieces." I finally wrote them as follows:
On your show, you would often say, "You're not painting a masterpiece", or variants thereof. While this is correctly important to keep in mind for the scoping of the projects as presented, after awhile it made me sad. I realized that you were never painting masterpieces on the show. Why didn't you ever do masterpieces? Maybe, I dunno, get the Louvre to commission you or something. I think if you did more masterworks you would be more successful, at the risk of alienating your audience.
I don't know why it amuses me. I know its in poor form to laugh at your own jokes but thought I'd share anyway.
the biggest and most common mistake wrt workflow is that to assume by feigning ignorance of its existence that you can avoid it
on writing: apropos http://k0s.org/blog/20130225111322
A few subtleties:
If you don't put the cart before the horse, how are you going to make use of the already in-progress cart/horse-rotator-apparatus?
On being a guy and looking good
The best way to think about it is that realize that you are, essentially, a monkey, and that your attitude towards making yourself "good looking", as so emphatically quoted, should go with the presentation of the monkey as best as possible.
So most of this stuff comes to maintenance. You ain't paintin' a masterpiece, to quote The Furniture Guys . You're getting a monkey to the point that its going to look like everyone else's polished monkey that struts and frets its hour upon the stage.
Get a haircut. Take a shower. Shave. Put on deodorant. Clip your fingernails and toenails. Comb your hair, if applicable, potentially after your don your shirt. Maybe groom your ear and/or nose hair, if such is considered proper for the particulars of your situation.
Your outfit is an area where you can express your feelings and ambitions: if you are looking for an analog of females' grooming ritual, full of intent and meaning, then this is the closest you're gonna get, guys. So get creative here, as appropriate to the occasion.
And that's it! The important part is ending it here vs. trying to make yourself be some sort of piece of art, you silly monkey. Be a guy, if that's what you're trying to be, and play the role of guy and not forget that you're not a kid and you're not a girl. You're role is to affect protocol, not to be fancy, and you fulfill your role as a monkey by affecting protocol, not trying to be the most attractive. There's no reason to get all bent out of shape about it: you're just a monkey. If there's a fancy hat party or other sort of occasion, or, goddess-willing, some girl wants to forcibly dress you as a female and have their way with you as their "lesbian" lover, feel free to partake in these shenanigans in contrast to these guidelines. But by the same token, there's also no reason to try to present yourself like you're actually aesthetically pleasing: you're just a monkey. No male knows why girls find us attractive; all we can know, for sure, is for some reason they do, no matter how we gussie ourselves up or make ourselves for them some will find us attractive, some won't, and that maybe if we just focus on this grooming thing from the point of view of protocol that they won't really realize (or at least will be able to overlook) that we are just a gussied-up monkeys.
[Note: this is written, as implied, from a heterosexual male (human) point of view (and not necessarily the most typical, hopefully towards credence of the unification implied therein for that specific point of view). This is not to suggest, in any way, shape, or form, that any sort of validity of the piece is necessarily extensible to other gender-identification modes.]
Constructing an opposing mirror for infinite reflections:
12:00 < jhammel|lunch> $var: sure, but i am flooded so i can't give you an ETA 12:00 < jhammel|lunch> how i wish i were physically flooded instead
Already I long for the days in the many chambered mind for simple reality, for though its horrors were deep and base, this extraordinary machine, built in haste suppressing contemplation, I fear more than what has come before
"Your surface thoughts show me that you think I'm mad. Could a madman talk with 10th dimensional elves on the trailing edge of time's inception?!?"
i generally like software that let's me use it to solve my problem in the way that i want vs software that tells me what problems i should have
What did git and mercurial say to each other following a sexual exchange?
git: thanks for the tip!
hg: thanks for the HEAD!
Not that funny, but I like it because it makes git look like a prostitute
what thread to apply how much attention to to what end and effect from a pool where the desired value for adequate is greater by factors than that available
serendipitous juxtaposition
http://k0s.org/blog/20130217185608 quid pro quo http://k0s.org/blog/20130211190957
"Will this shit fuck you up?" -- another $1e6 idea from your braintrust
Proposal: Probably not suited for network television, "Will this shit fuck you up?" is a show of hijinx and self-directed satire where our hosts, Mick and Mike, answer the title question every week regarding common household substances.
The pilot starts out with a brief discussion that drugs are just chemicals and that our household and common environs contain "literally dozens of chemicals" that can potentially get you "high". They affect the attitude that they have no real skill or idea of what they're doing as hosts. Or is that part of the illusion? the audience is left to wonder. Through continuous watching, the subtlety realization comes to the discerning viewer that the "joke" is meant to cover up the sad truth that while they are play acting this farce, Mick and Mike live horrible lives and their drug addiction conscripts them to this show where they essentially mimic and belie the immense suffering of street junkies to a target audience of middle-class caucasian 18-24 y/o whose brush with the tabboo of drugs has given rise to the myth of the burn-out as a modern-day Oriental (sic) ascetic.
Mick and Mike moved to their "lab", as they call it, but that really looks like a really trashed room from the day-rate hotel of some band of junkies. Strewn about one can make out a bunch of lighters, IV needles, bits of foil, glass pipes of various varieties, unguessable clumps of white powder, burnt spoons, black char, crumpled up pieces of paper, plastic baggies, containers of bleach, acetone, methanol, etc, stained clothes, and just about any other artifact of druggie lifestyle. But there is a microscope (never used) and a continuously lit Bunsen burner in a markedly delineated clearing on the otherwise cluttered coffee, and a "Lab Book" (title written in permanant marker with poor lettering), which Mick and Mike consult from time to time, looking confused but then speaking with great authority thereafter. Season two, if it pitches, will add a face-down body of possibly a mid-40s 1980's-era Metallica fan, replete with denim jacket of decades of accrued patch work and long greasy hair. The body will never be addressed or acknowledged in any way.
Every entrance to the lab features Mick and Mike donning lab coats and giving what feels a mandated speech regarding safety, including shot-in-the-dark stories usually having no bearing on lab safety. From the pilot:
Mick: "Safety is ... important!"
Mike: "Yeah, no joke."
Mick: "This is like totally fucking serious man."
Mike: "Totally."
Mick: "If you, like, fuck up, man? They are going to be dragging your body from a burning house."
Mike: "And that is why we always put on our safety goggles."
Mick: "Always put that shit on!"
Mike: "Those safety goggles can save your life man. For realz."
Mick: "And like the lives of your family. And, um, friends."
Mike: "Yeah, save your friends lives man."
Mick: "And your cat or dog or shit."
Mike: "Your parrot or something."
Mick: "Or a hamster. Or...ferret."
Mike [laughing]: "Ferret man?! Are you fucking-"
Mick: "We're getting distracted again. But that's because this is so important man. You can't fucking forget."
Mike: "Like maybe tell 'em what could happen."
Mick: "What could happen?"
Mike: "If they forgot."
Mick: "Oh yeah, right. Like if you forget to put on your safety goggles..."
[silence]
Mike: "Like...there was this guy I know. And he was walking home in the projects. And he thought he saw some meth, right? But he was tweaking so he was like super-paranoid. So he didn't want to carry it so he bent down, picked it up and ate it. But guess what? It wasn't meth. It was broken glass."
Mick: "Woah!"
Mike: "He was dead like instantly."
Mick: "That shit will fucking do that to you."
Mike: "Yeah. You don't mess with that shit."
Mick: "Did he have his safety goggles on at the time?"
Mike: "Why no he didn't Mick."
Mick: "That's right. And that is why it is so important that you always wear your safety goggles when working with chemicals. Or you could end up like Mike's friend."
Mike: "He wasn't my friend, man. He was a total dick."
Mick: "You don't fuck with chemistry."
Mike: "I was glad when he died. I thought it was funny."
Mick: "I would rather face down like a whole biker gang with like knives and shit than fuck with chemistry. Okay? So take safety precautions."
Mike: "For realz man."
Following the lengthy announcement, the hosts' safety goggles remain strapped about their head at their hairline.
The lab is really the heart of the show. Each week, one or more common substances are considered for "Will this shit fuck you up?", in which the host tries to imbibe the substance by a particular mean -- smoking, injection, insufflation, oral ingestion -- and then review if the susbstance candidate did indeed get them high. The chief entertainment appeal of the show is that while donning a video persona of a junkie, the actual junkie nature of Mick and Mike when coming to the details of preparation and consumption of chemicals really comes through. The pilot's substance: plastic. Mick and Mike freebase (the method of the week) plastic to see if it will "fuck them up".
After the explanations and preparations are done, but before they have freebased very much plastic, Mick and Mike introduce a regular feature of the show: "From the streets". In this segment, a guest is introduced who generally stays for the rest of the show unless Mick and Mike piss them off too much or they wander away due to innebriation or withdrawal. Their history, which reads like testimony from an NA meeting, is presented as resume qualifications for being on the show. There is generally tension between the guest and Mike and especially Mick due to the resentment of being forced into the public eye for generally a life of regrets including the unmarketable skills of how to survive as a junkie; this is paralleled in subtext by Mick and Mike's own roles, but they being paid employees and in a different though more insidous and direct economic trap, and so to garner their social status, Mick especially feels empowered by making the guests feel awful about their own lives. While it is occasionally implied by guest or host that there is some sort of compensation given to the guests for their appearance on the show, it is never addressed outright or named, which considering setting, can only be interpreted as the exchange of controlled substance of some mediocre amount but sufficient to hook the guest.
The pilot's guest is Tyrone Black, a heroin junkie from downtown detroit. The initial conversation centers on what all substances they've done, Mick and Mike pointing out, often wrongly, what type of drug it is and factoids (which may also be flawed) about the drugs. Mick tells Tyrone about the show while he listens skeptically. Then Mick asks if he think plastic will fuck them up:
Tyrone: "Shit...I don't know. Why would ya wan a be doin that?"
Mick: "What if its like heroin but better?"
Tyrone: "Its fuckin plastic! You put that shit in yo lungs and they gonna get all fucked up. Yo be lucky you don't have a heart attack."
Mick: "So you don't think it'll get you fucked up?"
Tyrone: "I think you a damn fool. I think it will fuck you up, jus' not in the way you be wantin'."
Mick: "A skeptic!"
Mike: "I mean...it might fuck you up."
Mick: "Yeah, you were betting 'for'. I was undecided. I mean, what about the cough syrup? That fucked you up."
Mike: "That -seriously- fucked me up."
Mick: "You couldn't remember what you were wearing."
Mike: "Yeah, and that doesn't even make sense."
Tyrone: "You's a bunch of assclowns. Can I go now?"
Mick: "So you like mainline shit. How about you mainline some plastic so we can compare to freebasing?"
Mike: "Yeah, that's like science and shit."
Tyrone: "I ain't puttin' no plastic in my veins. I got enough problems."
Mick: "Come on, man! We're not fucking with you or anything. I got a spoon right here...I'm heatin it up for you. And what's this? A clean needle?"
Tyrone: "Fuck this shit. I'm leavin'. If I see either you bitches on the street...you gettin' stabbed."
[Tyrone storms off]
Mike: "And if I see you on the street I'm gonna stay clear of the puddle of urine where you pissed yourself. 'Cuz you're a junkie."
The guest plays the otherwise unfulfilled role of a tether between the escapist fantasy/nightmare platform and reality. The guest may point out directly things that Mick and Mike are under contractual obligation not to talk about, such as the stupidity of herein freebasing plastic. As a bridge between social contexts, it casts a light on the interaction of guests (junkies and other drug users) and hosts (junkies who have betrayed their social order, though in some non-obvious manner, for more junk, which in a very large part is junkie social order).
The second half of the pilot returns to Mick and Mike freebasing plastic and experimenting with/refining techniques for doing so. It is this portion of the show that really captivates the audience due to the high energy and the line between play-act and reality (and 'play-act casted as reality' v reality, etc) becomes blurred, as their junkie selves shine inevitably through any polish affected, intentionally or otherwise, for production. This feature creates an intensity where the audience is mesmerized by the experience presented from drug culture as Mick and Mike try vaporizing the plastic, shredding to tiny pieces and smoking through a glass pipe, dissolving in acetone, etc., all with trade talk which our polls indicates has hypnotic-type retention on viewers of all age groups.
The pilot ends in a manner where the show often ends on a "successful" experiment. Mike, having constructed a pipe whereby the plastic can be made to smoke in a manner slightly less dirty than outright burning it, is, apropos the title, "fucked up". Mick proceeds to join him, cheering him on. Mike passes out while Mick quickly trends toward incoherence. Since research indicates that characters acted innebriated has high appeal in what people wish to see more of in shows, even past the incoherent stage we expect high retention and also a suitable, if bleak and unpunctuated, wrap-down for such episodes. We do not anticipate audiences to characterize this as bleak comparative to existing media; nor is it less punctuated. While it is generally a faux pas to end a question-centered show without a verbose answer, we expect that while the hosts never repose the question and address it, their exchanges as exemplified by: Mike: I am high right now; Mick: I am so fucking high right now!, repeated several times in variants, will be explicit enough to provide closure the answer to the audience.
Often during the show, Mick and Mike (typically Mick) will answer unpresented voices off-set and more rarely address off camera. It will be clear from context (for a discerning viewer) that these voices belong to those to whom Mick and Mike are contractually obligated to. This provides an additional "character", which for a show with guest is merely three characters (although we do expect to have group guests as pertinent) is a boon. It is evident from the one side presented of these interactions that (quotes herein from Mick) that those off-camera think of Mick and Mike as "fuck-ups" and that Mick and Mike think of them as "assholes". This will also boost the sense of isolation upon which both the appeal and art ride for this project: the vast majority of the audience will be led to believe that they are laughing at the idiocy of these two people/characters irregards of finding them enteraining and possibly identifying with them, whereas in fact they are in fact on the same side of the bars as Mick and Mike, just in a different part of the enclosure. Viewers may pick up on some level the control executed here, but will dismiss it as presentation.
The show exists on multiple levels. On the level that will reach audiences, "Will this shit fuck you up?" is Entertainment, and another in a long line of "in your face" brashness giving credence that yes, Entertainment can still become more base and be amusing. While the subject matter and the speech and lewd language are too "adult" for a portion of the e.g. American population, it should fare well where adult is no longer considered novel, combining the appeal of reality shows with an market traditionally considered far afield: the drug alterno-culture and its afficiadoes which is becoming rapidly mainstream with marketability. On a high level, the show is illustrative of control and sadness, a profound self-inflicted satire made hideous by its execution.
Remember, parents:
When your child uses profanities or otherwise raises juvenile trangressions against the social convention, don't in your fully deserved embarassment ssh! them or otherwise scold in typical negative-reinforcement discouragement. This just makes sacred cows out of the civilization, making them think that their anarchic idiocy is a unique opponent that had never been seen before (which goes some ways to explaining why each generation thinks that it alone is the premier of a new social order, until the next shout of upstarts come along...).
No! What you do is you slaughter the sacred cow, let it bleed out in front of them, and toss its head at their feet. That'll let them know that, oh yeah, what they're doing in challenging the order of civilization is an integral part of civilization, that this is thousands(?) of years old, and that they aren't very good at it and should perhaps go back to playing with blocks.
Just when you thought they had scraped the bottom of the last rock for vampire-genre films...
"The candidate's resume is very impressive and all of his references check out. He aced all the phone screenings, so he looks like he's a pretty good match, but... Here's the thing: we think he's a vampire. But we can't ask him because that violates state law for hiring practices."
"...So if you could maybe figure out a way to ask him under the table. This company's got enough issues without having to deal with the undead. And this time I'm not talking about Perkins."
One candidate. Five interviewers. Four hours. If you like films in the form of job interviews -- or even if you don't -- then this is the must-see picture of this year.
"So it says here you're originally from Romania. What part?"
"You certainly seem to have the technical chops for the position, but we're really looking for well-rounded employees. Do you have any hobbies? I like cooking. Going to match a batch of my extra garlic pesto this weekend. Yum! Do you like garlic?"
"Yeah, I don't know why this room has all these mirrors in it. They must have put those in today. Do ya mind, um....moving just a little to the left? I want to see your reflection."
Tensions will run high. It could be that there is much more than the position at stake...
Vampire: "This is a vitch hunt! I vill sue all of you!"
From the makers of Blacula, Son of Blacula, and Assisted Living Dracula
This film is not yet rated due to the fact that we can't get anyone from the MPAA/CARA to watch it.
the silent drop
I'm a big fan and I use the silent drop a lot as a communication end. If you don't know what I'm talking about, I mean using the termination of communication as the message. Its like intentionally omitting the punctuation from a sentence
(Or is it intentional?)
I'm not talking about "the silent treatment" or other games/tactics for emotional advantage. I'm talking about not saying good-bye when you're planning on leaving anyway. There's no particular gain to you to do this; it is the possibility that you can and will do this that it has power.
This is why, after years of pondering its place in protocol, I've decided that it was politcal speech. If conversations can be ended only when both sides have agreed they've ended, then all are enthralled
To http://k0s.org/comedy/newyorker/
"His prolific use of self-claimed 'esoteric artifacts' are more akin to 'exoteric artefacts'"
Obviously needs some cleanup
[joke in need of context]
"I really want to hug you right now"
"Aww! Underneath that grim analytic facade, you really are a softy that has feelings for me."
"Well, there is that element, but its mostly that I'm charged to 50,000 volts"
how come no one starts a cult with "The End of the World is Near! (at some unspecified time in the future)"
saves the embarassment of being wrong about your predictions and having to explain them away
on lasers and MASERs
I knew a guy that used to throw out bits of esoterica and their subtle history in conversational context. Probably still does. He used this to point to what intelligence is. To a degree, I have adopted (roughly) his technique, but I use it to point to what intelligence is not.
Which was more important to the instantiation of the holographic brain: the transistor or web as a platform?
Imagine if they taught control mechanisms and power dynamics in sex ed. You want your kids to really excel in life; you do that
When you can find issues with "the system" faster than you can file them, is that A. good; B. bad; or C. just the way the world works?
isn't that some sort of famous joke:
"Sire, the peasants are revolting!"
"I've always found them so"
I always like that cheesy 80s action movie joke where the guy is hanging from a live wire and someone tosses some conductor at him and says "You're grounded"
critical point
"The payload comes next, when people come to expect a remix button on everything they see. The videos, the sites, the experiences that are only possible when users become makers."
-- Mozilla comunique
When Einstein came out with the General Theory of Relativity, few people appreciated the gravity of the situation.
http://www.trilithium.com/johan/2004/12/cat-education/
FWIW, in this case the cat is, if anything, overqualified
if you think about it, twitter is just a bug tracker without states, transitions, metadata, comments, and bug summaries longer than 140 characters
"Since there is no divine authority for, as you call it, 'power', any sort of system of government is really an ad hoc bandaid over anarchy..."
A trip back in the Way-Back Machine
Sherman: I'm glad we got all that sorted out, Mr. Peabody. What should we do now?
Mr. Peabody: I was thinking of heading over to Amsterdam for some of their famous breakfast porrige
Sherman: I didn't realize that they were famous for that.
Mr. Peabody: Surely you've heard of Holland Oats
The problem with "Lucy: Daughter of the Devil" is that it pretends to have a plot. If it was just 12 minutes of H. Jon Benjamin and Melissa Bardin Galsky talking, it'd probably be a great show
it was handed down from Gods that came from far away galaxies in golden flying saucers; others contend it was the ancients themselves that harvested the living power of geomancy....
There was a mathematician who had a problem.
He had 50 Euro left over from a trip to France.
He couldn't keep it since he had no place in his dwelling to put it.
He couldn't exchange it since the exchange fee combined with his hourly worth exceeded the value of the bank notes.
He couldn't throw it away since it was worth too much.
"The good news is that in 1995 we will have a good operating system and programming language; the bad news is that they will be Unix and C++." - Richard P. Gabriel, "Worse is Better"
the artificial Moon
(The underlying meme: 'The artificial X . That posited, its reductionism, as (artificially) curated, does not in and of itself cancel the meaning of the underlying phrase, were it suggests true archetypes (see the imformational science text, "Jungian and post-Jungian Constructs and Destructs", (sic, ibid)). Taken here, "The Moon", as X , denores a particular and spectral connotation beyond the the convention of its hieroglyphics.
So I keep hearing how like space debris is going to be a problem, and I got to thinking....why not just make a vacuum to suck that shit up?
Breaking Bad's Heisenberg Uncertainty Principle
If you fuck with Heisenberg, it is uncertain if you'll live
Did you know that if Mitt Romney is elected foreigners won't have to pay taxes?
In his years in government, Mitt Romney did not oppose legislation mandating mind-control devices. Not once.
Mitt Romney has never denied feeding on the flesh of newborns.
Is this who you want as the leader of the free world?
Romney: just say "NO"
1. Malevolent actions rise not only from malevolent intentions 1.a (The choice of the word "malevolent" vs e.g. "harmful" is very much intended)
2. So a malevolent being is not defined as a being of ill-intent, but by, its actions
3. Consequently, to understand one's malevolence (or benevolence) is to understand the effects of one's actions. 3.a. Therefore the only weapon against malevolence (or, in general, the only tool for ensuring intent results in effect) is an understanding of one's self's place in the Universe
I used to think, apropos Buddhist literature, that ignorance was the only evil. What then of delusion? Is this ignorance, or something worse?
Give a man a fish and you'll feed him for a day.
Teach a man to fish and you'll feed him for a lifetime.
Refuse to teach a man to fish and you'll keep him indebted to you forever.
What a woe to not know one's own shadow!
Is it darkness occluding light, or the inverse masquerading as the like?
i dunno about WWII .... great cast, great plot...certainly higher budget than the original; but i can help but feel it was missing something
My UX
I tend to actively develop working habits and environments that play with my natural inclinations and provisional needs. So my user interface is the result of years of trying different window managers, saved configurations, and developing scripts. Outside of giving them a Firefox browser window, most people look at my display and have no idea what, if anything, they can do with it. I've wanted to write for awhile about what all goes into it and why in hopes of giving some ideas about what can be done with e.g. X and a few scripts or at least explain why I like my system. But there are a lot of pieces so it may be a bit long.
It all starts with fluxbox . A big shout out to fluxbox: it mostly does what I want out of the box. I used to actively try a bunch of different window managers, but fluxbox has been my favorite for about a decade now. It is keyboard-friendly but still is usable with a mouse. It has text-based configuration , which is easy to mirror across computers, and has multiple desktops. I currently keep six: one with Firefox and Thunderbird, one with four terminals, one with a text editor (emacs), and three of "open usage". I try to avoid overlapping windows except Firefox and Thunderbird. Its very quick to navigate between windows. For mouse-usage, I consider focus-follows-cursor a must (and an old UNIX tradition).
While I use the mouse plenty, I'm more keyboard-driven, so hot keys are a must. Fluxbox has excellent support for hotkeys which I take full advantage of. I have keys for a bunch of window controls and then a series of programs launched with Ctrl + Alt + letter , such as Ctrl+Alt+f for launching Firefox or Ctrl+Alt+t for launching a terminal. I even have a hotkey, Ctrl + Alt + h for launching help on the hotkeys. I did this mostly in case someone wanted help on how to use my computer, but that hasn't actually happened.
One program that changed my operating idiom was xclip which allows for manipulation of what's on the clipboard through shell invocation. I take advantage of this together with other scripts I've written to transform data that I select with the cursor. A common pattern is:
xclip -o | <program> | xclip -i
This runs what is on the clipboard through the program and puts its output back on the clipboard (also, thankfully, fluxbox evaluates hotkey command in a shell environment, so I can use my fancy pipes like this). One example is my pastebin program, which uses this pattern on my copy of pbmoz.py . I select text, press Ctrl+Alt+p, and the URL of the created pastebin is put back on my clipboard that I can then share with Shift+Ins. I try to keep hotkeys for tasks that I do a lot that work better in a windowing environment than from the command line.
The command that I have tied to Ctrl+Alt+s is smartopen . smartopen takes text and goes through a series of handlers. If the handler matches the text, it will open a URL appropriate to the text. For instance, the text:
2 Harrison St. San Francisco, CA 94105
would open in google maps. I have handlers for bugzilla, google maps, wikipedia, ..., and defaulting to a google search.
While I mostly work from Firefox, hotkeys, and the command line, it is nice to have a menu to launch applications. One thing fluxbox doesn't have that I wanted is dynamic menus. I like to manage my menu through (again) a human-editable config file so I can mirror it between machines, but prefer that only menu items that actually have the programs installed on the machine displayed. While fluxbox doesn't support this directly, you can include a file which you can generate however you like, as pointed out in this helpful article: http://darkshed.net/article/dynamic-menus-in-fluxbox . There also needs to be a piece that refreshes this file. I put this in .bashrc so that it will happen each time a terminal launches (or I can sync it manually). This is a bit weird, as this event has nothing to do with whether a program is installed or not, but without a watcher service that wakes up and decides if the menu needs regeneration, I know of no good way to do this.
I have a source document, http://k0s.org/programs.html , that lists what all I want in the menu. I then have a script, http://k0s.org/hg/config/file/tip/python/html2flux.py , which translates the HTML to fluxbox's format. For good measure I added a fluxbox menu item to edit its menu sources. I could add more dynamic items. I have thought that a menu might be a good place to read e.g. RSS.
I have thought (and continue to think) about using pywm or something similar to have fully dynamic behaviour and in a language I am comfortable with. So far I haven't explored that much.
As far as decorations, I have a toolbar that I mostly ignore except for the clock and wireless icon, some sort of power monitor (I currently use wmacpi since it seems gnome-power-manager no longer works in fluxbox). I have transparent widgets and wallpaper which is either my art (for home computers) or Firefox art (for Mozilla computers), and that's mostly it. Sometimes I run gkrellm. All else is application.
I hope this sheds some light on how and why my UI is the way that it is. It is somewhat messy loosely-integrated system grown out of experimentation, necessity, and practicality. It is certainly not "the way all computers should work", but (IMHO) gives a sharp contrast to the conventional wisdom of e.g. GNOME, Apple, and Microsoft, (amongst others), whose interfaces I find extremely cumbersome. Describing this all in text is also cumbersome compared to the reality of working on things, but I hope this at least lends some sort of understanding to how I work.
Inspired by the creatively awful "Every breath you tiki masala burger" from Bob's burgers: Beefsquatch I've created some names for Bob's burgers. The show mostly isn't funny, despite having the talents of Loren Bouchard and Jon Benjamin, but the horrible burger naming scheme got into my brain. I hope you enjoy my menu:
My creations:
Actually from Bob's burgers:
if you can't test your continuous integration system with your continuous integration system, you're wasting your time
i could probably actually do what i set out to do with another of me, since my progress is, fairly consistently, about 50% of what i think it should be.
of course, the first time i disagreed with myself that theory goes down the tubes
"We don't need abolition...the slave market will sort itself out!"
I'd draw a Newyorker cartoon, but all google image search yields for "slave auction cartoon" are BDSM photos (and yes, safe search is on)
"You don't need money. You don't need fame. Don't need no credit card to ride this train."
Well, actually, you'll need money to purchase the ticket and you'll need a credit card to confirm. And for this particular train all remaining seats are reserved for celebrities.
as inspired by David Foster Wallace
http://k0s.org/stories/the-reciprocity-theorem-as-applied-to-state-machines.txt
it's not quite finished -- I couldn't decipher all of my handwritten notes to self and had no computer available at the time -- but i figured i'd loose it on the world. If anyone wants, I can go into more detail
When to blog
If you're planning on doing a blog post about something you're working on anyway (and you should), write it as you are going along with the work. If you don't you will forget the essence and state of mind that you meant to put into the text
back in my day we had blogs! and we were damn glad to have 'em!
and they weren't limited by no 140 character limit
entropy is information evaporating
It's okay, there is unlimited source (*)
[*] Whether the poly-dimensional source, where bubble universe spontaneously manifest from quantum foam is, in fact, unlimited is a non-sequitur in the sense that "universal" (small 'u') entropy integrated over brane-space represents an arrow, albeit one in a background bereft of dimensionality. Since we're dealing with multiple levels of undefineds here, it is silly to believe that any extrapolation made to the "whole" (already an undefined) may precipitate from the microcosmic view, and in fact the statement should be taken as the light-hearted parlance of a 3.x dimensional being trying to cope with a limited manifestation of conciousness.
Why I am an Idiot for Buying a Blu-ray Player
As I sit here I am sitting through the 10 minutes of pointless previews in front of "Tinker Tailor Soldier Spy" for the second time today. I've seen them once before and didn't care for them the first time. I love the movie. I hate the disc. I click on the menu buttons. "Operation not permitted." Why its the second time is that I paused the disc and tried to resume. "Operation not permitted."
Blu-rays are basically proprietery and piece of shit technology. Firstly, not all that well known, you can't get a spec for blu-ray without entering into a very expensive license agreement with the MPAA. That is, you can't build a blu-ray player if you are an engineer and want to make a free one. You can be sued for doing this.
This already annoys the hell out of me, and I probably should have listened to my conscience and not bought a player. But its the injury on top of insult that kills me. "Operation not permitted." "Operation not permitted." Why should I be beholden to information that I have paid for? If the disc had been distributed for free, I can understand why I should be expected to watch ads. I wouldn't agree with the reason, but I would understand. But I paid for this disc. Why the hell can't I just watch it?
Fuck you, MPAA. Fuck you.
I don't think my cat has a concept of how bowls are used in contemporary American society.
Well, maybe she does a little...
Q: The expansion of what four letter acronym commonly used in web programming is brought to mind by the following phrase:
"The nation gave the title of its sovereignty to a holding agency, but the exchange was purely emblematic."
A: REST (Representational State Transfer)
think of how much time you could save if you could stick your hand down the garbage disposal to check for obstructions if you could be running it at the same time
While the nation retained its sovereignty over minerals of Terran origin, it had sold its meteor rights
"You should strive to get the actionable article implicit in the context done or towards some other state of successful completion."
I feel I should connect with my salt of the earth roots. Perhaps I will listen to the musical stylings of Jonathan Cash or Robert Dylan, following up by watching that delightful romp, Lawrence the Cable Guy.
The support of RTL (vs 'RTL') text has increasingly become an issue in browser rendering. I find it, anthropologically, astounding that these are the two choices handed modernity from antiquity. One can easily imagine a written system whereby the symbology is derived from the relative position of the glypths, either independent or extending the direction of the "paper".
Something that always bothered me about Alien
"In space no one can hear you scream" (*)
[*] Albeit in a space craft they have an atmosphere where sound can propagate, so people could conceivably hear you scream therein
So this girl tries to pick up on a time-traveler, but he ends up rejecting her.
She says, "I just wanted a casual relationship."
He says, "Casual relationship? I thought you said a causal relationship."
The Currency of Privilege
People tend to think of one economy: that of that which can be bought and sold through the medium of money. But of course there are other economies: that of attention, that of information, and that of privilege, to name a few. Privilege is an interest-bearing medium: if you abuse privilege with me [1]_ then this denotes not only a debt of privilege but also the consequence that I am less likely to extend you privilege in the future.
There are those of the classically altruistic mind that would suggest not accruing interest on debts of gratitude. While in the past I would have been sympathetic to such a point of view, it now brings me to a question:
What is the division between being selfish very being altruistic?
People are "supposed" (again, according to this classical model) to strive to be "good" (read: altruistic) or they are selfish. However, I claim that this model is not only unfair but it is also inaccurate, in terms of modeling the behaviour of concious organisms.
I generally want neutral karma, or lack of karmic involvement with other beings. I am not particularly selfish, in that most of my actions are not for the good or well being of my organism. People tend to divide selfishness versus altruism based on the mark of whether (the majority of) one's actions are for the accumulation of advantage towards one's own favor or for the manifestion of actions towards a value system. By this definition, I am non-selfish, as most of my actions are towards the manifestation of a value system. However, the criticism of this is that the overlap of my value system with the socio-centric value system is not necessarily that large. I don't care much about what many people consider important, especially considering the subtext of how they manifest their intent towards such things. For one, I do not consider humans innately privileged beings.
Often, people who are considered selfish are simply less creative or abstract in terms of manifestation of their actions. Those who espouse very abstract value systems are generally not considered selfish, but what is altruism but the manifestation of ideas towards a particular end? People are also considered selfish because they protect their prosperity and do not rely on the benificence of others. I fall into this category. Generally, I have found that I cannot rely on the charity of those around me. I wish I could, most of the time. But I can't.
I owe lots of money (thank you, student loans). I am in poor health and cannot really rely on the American health care system to actually work towards my betterment. I have sacrificed great time and effort towards others and have not received it back. So I have to protect myself. It doesn't do anyone any good if I can't function.
So the interest-bearing nature of privilege can be seen as a natural consequence of my circumstance. When look at as an economy, I can understand how those with freer circumstances and/or who have seen more support from those around them can afford to charge lower or even negative interest rates [2]_ for privilege, I cannot afford to do so and keep myself functional in terms of sustaining myself, projecting my ideas, and generally not being a drain on society. My entire life has seen a slow growth of my interest rate that I am forced to imposed reactively towards my deteriorating circumstances.
But is it logarithmic or leading to an asymptote?
[1] I'll use the first-person singular for convenience, though mostly I mean "one" in this text.
[2] Albeit in terms I cannot, for the moment, define in a numerically rigorous manner
I wish there was somewhere I could work besides my house and coffee houses. After a week of wet weather, I feel very cooped up at my house, and were my health my concern more than my work I would devote today to a day about town walking and otherwise concerned with my well being. But, I have shit to do. I like coffee houses, but I'm already caffeinated enough, and I tend to become overly obsessed with getting a seat. Its Sunday in the Mission and coffee houses are a popular destination for those in similar boats. I may try the Civic Center library, but again I'm unsure if I could actually sit down. Concerns of my property and wireless also make these options inconvenient.
What about working spaces, San Francisco? People get together in a fashion not necessarily social or asocial. I tend to work better with people around just because I get too much alone time and quiet time as it is. Guessing how things work, there is probably a "silent" "revolution" here amongst hipster with lots of hidden spaces that fall into the category of what I want. But I ain't hip, so tend to get left behind by such revolutions
i tried to reinvent the wheel but then realized that for all real-world applications i needed the axle first
Hollywood loves prequels! So how about...
The First of the Mohicans
starring H. Jon Benjamin
HJB: "Hi I'm Jon Mohican...first of the Mohicans."
Indian: "I haven't heard of the Mohican tribe."
HJB: "That's because I just started it. I started my own tribe. You should be impressed. Not very many people start their own tribe."
Indian: "Oh. So what is the role of the Mohicans?"
HJB: "Like I guess we have a creation story. Maybe a possum was carrying around a bag of marbles and then it spilled. And one of those marbles was the Earth."
Indian: "Oh."
HJB: "Its not very good, right? The point is I just made it up, just now. Maybe I can get an editor on it, jazz it up a bit. Maybe get a movie deal going."
Indian: "You don't look Indian."
I'm not that familiar with Jungian psychology.... is it normal to have romantic attraction to one's anima?
What the world would be like if I was a bartender
"Not to doubt your agency to imbibe alcohol, but how many times has Earth circled its nearest star since you exited the womb?"
Infinite Jest too long and complex? Try the abridged version, Finite Jest
- no footnotes!
- all words three syllables or less!
- less depressing
it is impossiblr, isn't it? to compare the distortion of one's mind's representation of reality with distortion of another's
is it wrong to up quotes on http://quotes.burntelectrons.org/ that further my ideologic point of view?
...no, it's not
There is a disparity of thought that the word circle can mean either the 1-dimensional curvature, x^2 + y^2 = r^2 , or the area contained therein, whereas a sphere is usually thought of as the 3-dimensional space versus the 2-dimensional membrane confining it.
The argument can be made that this is innate to human thought, but I would contend that we (as only an English speaker, I will confine the first-person plural to that) have muddled the language with this ambiguity. Since 2-dimensional drawing has been available since pre-history, this mode of ambiguity comes from the ability to have define a region with a circle (the 1-d variety), whereas having no drawing mode in three space commonly available in 3-space the sphere is realized through abstract thought.
shout out to fluxbox
Tech press is mostly awful, but so is gnome 3, and I'm happy to see press for my window manager of choice. I played around with a lot of them and fluxbox finally stuck.
An Amusement Park for the Post-surrealist age
"Kafka-world: you just stand in line"
(I wish I could take credit but it was from http://www.npr.org/programs/wait-wait-dont-tell-me/)
Just saw the latest "Got Milk?" advertisement. Evidently, "Real milk comes from cows", if this case be believed. I'm not really sure who they're competition is, but the frank statement frightens and confuses me.
On the other hand, drinking lactations sucked from bovine nipples has certain stigmas as well....
A typical privacy agreement:
https://addons.mozilla.org/en-US/firefox/addon/screenshot-pimp-screengrab-scr/privacy/
when i was a kid we had to walk uphill both ways!
i know that seems contradictory but it was on a liquid planet where the gravitational center varied by daytime
don't ask me how i walked on a liquid planet...i have other problems
What is the significance of the oft popular references to romantic love taking in accord the separation typically applied before union?
Is the mistake inventing the time machine or going back in time to ensure the time machine is not invented?
Since you care about X, you should attend to X, because expecting other people to attend to X is predicate upon them caring about it
i see my upload to youtube is waiting for WiFi access. so much fot the promise of 3G
...and thank you, Google
The television in the elevator just told me that corn bread is venerated by Southerners for New Year's fare as it is the color of gold. Is this true?!?
The # of individuals nor the time they put forward nor past success are not good indicators of future success
Normally I hate it when companies I do business with (AT&T, I don't really need your newsletter, thank you very much), but Dyn's CTO had a blog post about SOPA they linked in an email that I thought had some excellent points:
http://dyn.com/sopa-breaking-dns-parasite-stop-online-piracy/
I can't really say much about SOPA except that it is a horrible horrible idea from so many points of view. But Tom's post illustrate some of the reasons why its a technically horrible idea. Just because you can write a law on paper does not make it technically wise or feasible.
jimi hendrix quite a guy
angel in the devil's sky
but i can't understand what he says sometimes
and half the time i think he's high
L. could picture in his mind perfectly the geometric reconstruction in Anton's thoughts of the port. He tried to read Anton's thoughts of his designs but it was too far of a reach already holding the mental map. Anton began to speak, but L. projected, 'No, let me try to read this way'.
His thoughts roused disproportionate anger in Anton, and the latter's mind came collapsing down around L.
"What is art?" Anton asked.
"An expression of--" L. began, but Anton nod his head and raised his hand as punctuation.
"'Expression' is enough," Anton said. He paused, the silence deeper for the stillness of mind. Then Anton leaned close, their faces almost touching. "What would you express unto the world?" There was no answer, for both knew the nameless that was pointed at. "While art can be wrought of only subtextures, and there is some skill expressed in doing so, not of such can all art be manifest," Anton continued, "Use your skill as means of your expression, not as its object."
L bowed his head.
"Shall we continue?" Anton asked rhetorically, and once again allowed their minds to commune in projection of the port's configuration.
I doubt anyone reads this anyway
I have a story that I have been working, on and off, for most of my life at this point. As you might guess, it has changed a lot over the years such that it is hardly the same story. Even after multiple efforts of cleanup, there are still strong elements that I today find amatuerish, but the plot is pretty intricately linked and I'm not sure what to do about that. Maybe I'll figure that out someday. But right now, it is daunting. Some of the writing is really good, probably the best that I have done. Some of it is awful. I'd like to keep the good and discard the bad.
So for now I am going to post snippets of it on this blog. I don't know if anyone actually reads my blog at this point. Probably not. But if you do, I hope you enjoy it. As always, feedback is adored. I don't really plan on explaining context of anything, at least not on the blog. So it will be somewhat of a mystery.
If you, dear readers, are out there, I hope you like it.
How things work
(Noe Valley affects Christmas) + jhammel == http://k0s.org/blog/20111210154108
Frosty the snow man was a jolly happy soul with his coal-black eyes and his corncob pipe and his fifty grams of blow
humans look down on fish because they have such short attention spans that they swim around in a tank all day. but we like to watch them do it...
clean house vs. dirty house
I'm a developer. Given that software development is in a state of burgeoning growth and has not solidified on a methodology (contrast 3rd world factory workers, where their operating methodologies have become science), organization are often inconsistent on how development is done. This is great as a means of self expression, as I as a developer may behave as a craftsman, even an artist, claiming my methodology may make a mark upon the work. But it is bad in the sense of inconsistency, in the same sense whereby artists, being less inclined to survive in primordial culture, are bullied and not favored unless they cater to the powers that be.
So there are essentially two opposing development methodologies:
Both sides have upsides and downsides. It is worth noting that with an ideal API, both sides are exactly the same. If you start with a clean code base, and you have positive changes, you end up with a clean code base. However, this is almost never reality.
The actual effect is that programmers that affect methodology 1. are penalized for their efforts whereas programmers that do not clean up after themselves (re: methodology 2.) are rewarded. How can this be?
Development processes are never light-weight. At least, I have never encountered any that are. Given that, type-1 programmers are weighed down by the effort of making shared code bases cleaner for everyone. OTOH, outcome is measure in short-term incremental goals. Abstract notions like down the road extensibility are ignored. So, by following methodology 2., you are guaranteed a good report card.
I feel like I say this over and over, but if you ignore the crap and hack your shit in and probably make worse crap because you have to work around the crap already there, you achieve "results" and are lauded for it. Mark that these are short term results, the terms defined by those setting the goals and not necessarily for the survival of the organism that is the software you are developing. Whereas if you try to make things better for everyone, you will be laden with the burden of proof, the burden of showing that your provide any value, questioning doubts, and if anything you do, even rightly so, breaks something because of other bad behaviour, you will be crucified for it.
So enters the rock star programmer and his kin. A software project is hard to maintain. Well, yes, legacy is expensive. Even clean legacy and no one has clean legacy. So the common reaction is to abandon legacy and start anew. Why? Two reasons:
A. By starting something new you are no longer bogged down by the decisions, good or bad in the context, of yesteryear B. And by starting something new, you can say that you worked on something new
Do not underestimate B.! The hidden factor that should be considered before you do this is that you throw away the entire knowledge base of a project when starting something new! Take Fennec on nightly. I can no longer give feedback in the app, because there are (evidently, putting on my user hat) no addons. If I can't report bugs, something is wrong. I realize that my primary position is not reporting Fennec bugs. But I used to, because it was easy. And now I can't. OTOH, I get to see that my browser is refreshing on my phone at 60fps. Native UI is speedy, but...
Another classic example is Firefox vs. Chrome. Google was Firefox's partner. Google made some noise when we made a deal with Microsoft and Bing but the fact is we had a browser that complied with their purported ethics and instead of helping develop it they forked it!. Now Chrome has a legacy, and all the smart kids at Google are beginning to see what a pain in the ass it is to have a legacy.
Being a nascent field, software development has many aspects that have long ago been dealt with in other fields, such as the debate whether it is better to keep a clean house or a dirty house. In more mature fields, only in dysfunctional -- and desparate -- situations do you see the logic applied of applying disproportionate effort to work around a problem vs. solving a problem. If you have a clean house, it is easy to keep it clean. If you have a dirty house, less so. But the dysfunctionality comes in several sayings in the software industry on why it is justified to keep a dirty house:
Note that none of these address the issue or tell how to make it better. They're just excuses. But somehow they're believed. They're not taken to be the kindergarten logic they are. If you're a for-profit company and show me a spreadsheet of (untainted) time estimates, I'll buy it. But mostly I feel the same about these as when I hear a review of a movie that's "the best movie of this or any year".
If you ran a house this way, you would never clean anything. You would have a house that got dirtier and dirtier until it was almost unlivable and then you would move. Really. We can do better than that.
I see a lot of old faces at Suicide Club. This means you haven't been following the first rule of Suicide Club: commit suicide! In fact, it is the only rule
NPR is the play closes its doors forever on a biker gang, I can't apologize for the biker, ``Who are sorry in a winged collar? Perkins: I would tell them, ``You gotta respect the Los Angeles International Airport, think of Command. Then, if someone was part of The hottest new Broadway production: The Glossary of the leading brand Witch Project movies
Doing the dirty work? Absolve yourself! With Pontius Pilate Hand Wash
From the makers of Holy Smokes
got an email from my bank today that said, in effect, that they may have accidentally sent me too many emails
I reorganized my site a bit. It now approximately resembles what it should have looked like five years ago. In other words, its the state of the art!
just when you thought my site couldnt get any less readable... http://k0s.org/?css=noir-de-noir
jokes are serious business
I organized my jokes a bit and they now have permalinks and are more of them. Cheers and jeers welcome
The Cloud will change your life!
i was also thinking that what "The Cloud" means is exactly the opposite of what i care about from The Cloud so the idea of the badly name The Cloud is that it doesn't matter what computer I'm in front of wrt what i'm doing sure, it has disc, ram, cpu, but other than that its just a box so The Cloud (pretty much plan 9) is about not being tied in to a particular resource, federation whereas "The Cloud" means using a particular, locked in implementation which is not federation, its just a silo again
its amazing
people have problems; these problems are solvable but instead of solving them The Establishment provides something that looks shiny and fancy but has the exact same problems baked in that is the only problem, i think the only problem worth caring about, except, say, whether my cat is hungry or not
i need to meditate upon this
i was just thinking about Cane's 999 plan i think i'll run on the 666 platform. lower taxes for everyone! plus you get the Devil-worshipper vote
From the most talked about screenwriter of the year comes a new Broadway production:
The Glossary of Alexei Kahn: a play on words
What About Bob?
I was recollecting with a friend about David Lynch's Twin Peaks and got to talking about Bob. What about Bob? Bob was the Demon who posessed Leland Palmer and who made him rape and kill his daughter, Laura Palmer.
While few people claim any direct experience with demons, they inherit a common mythology. Unlike ghosts, demons are not vestiges of lives, but whirlpools in the psychic plane, inhuman. They wish to get into the physical world to fuck things up. Perhaps it is rich and sensuous to them. Perhaps they are concious beings, perhaps not. In either case, they are completely alien to us. They come in through the mind. At first their hold is weak and they can manifest only in short bursts. But once a demon has its tendrils in you, they do not let go. They lurk, in the background, sinking themselves deeper into you, breaking you down from the inside. Eventually, uncontested, they have complete control of your mind and they use you as a shell to manifest psychic destruction on the mortal plane. Demons may be thought of as "real" or merely as metaphors. For me, I don't really see the distinction. Nor does the demon.
I present a hypothesis of how Bob came to possess Leland Palmer. As David Lynch is fond of, Leland is a pent up father with the morals of the '50s that say to smile at the world and hide any unpleasant thoughts even from one's self. The repressed self grows inward and consumes one's self, leading to one fracture. Like more than would admit to it, even to one's self, Leland desired his daughter even from the tenderest age. But he hid this from himself. He could not bear to admit to himself that he had these feelings. When he acted on these buried feelings and molested Laura, he opened this crack. A disparity was born...a cognitize dissonance.
Laura, like all daughters, wished to see her father in nothing but a positive lot. Leland was a little kooky, animated, and basically a great dad. There was something wrong with him, something she could not bear to see, so she hid this from herself. When her father molested her, she sought an illusion that might make the reality unreal.
You have a conflicted father divided between what he thought he must believe and what he felt, and a daughter who did not wish to see the evil in him. They created Bob. Bob was born of them. Not all births are the combinations of DNA, but a synthesis of beings. Between Leland and Laura, a crack appeared, a mutual secret hidden behind a shared desire of illusion and repression. Through this crack the Demon, Bob, entered into Leland and all of the subsequent events were triggered.
"A little boy went out to play. When he opened his door, he saw the world. As he passed through the doorway, he caused a reflection. Evil was born. Evil was born and followed the boy." -- an old tale, Inland Empire
Once Bob got hold of Leland, he took his mind. We know that Leland molested Laura from a very early age. At first it must have been a life-wrenching shock. Bob could only manifest in bursts as Leland still had a fragment of his divided self. He had emotional resistence. But as time wore on, it became easier for Leland just to let go, to pretend it was all an illusion, hidden beneath the surface of his mind, a dream.
Laura was affected differently. Ungrounded by her molestation and by her disparity, she sought a tether to the earth. She sought out all of the advanced school activities, several boyfriends and sex partners, and cocaine to try to tie herself to something. But this all made her lighter, less tied to anything. She positioned herself to be a sacrifice to Bob.
Both parties, in blinding themselves to their own actions, created a subconcious space where the horrors they attempted to oppress could grow and fester.
I do not know what Lynch meant by this presentation. Perhaps it is a metaphor. Perhaps he is telling tales of the supernatural. Perhaps he points to psychic forces which are very real but as are yet misdefined. It does make for a fascinating tale.
i always thought it'd be great for an action movie if someone was about to be shot with a cannon and the action hero said "I hope you enjoy sainthood because you're about to be canonized!"
i get very nervous that i'm doing too much doing and not enough thinking. seems to be the best way to corner one's self
anyone that uses the Socratic method needs an icepick in the eye
the fundamental assumption of the Socratic method is that you know more than another person about their affairs
git vs. hg: the ultimate bikeshed discussion
After listening to the Mozilla and git talk at this week's all-hands and the ensuing discussion, I've decided that the git vs. hg wars are the ultimate bikeshed discussion since emacs vs. vi. You'll probably hear me complaining about git after this post, but I've decided that I no longer need to care about the issue.
Being realistic, I don't really care about VCS (much like editors). Like most programmers, I want to program and integrate my work with the work of others, so in that since I care that a VCS exists and that I can push and pull and what not. But the nuances of how it works....why would I care?
I do care about workflow. It probably irritates me more than it should when simple tasks are hard, but realistically a lot of my time is eaten by simple things gone awry and me having to manually pick up after them. In this sense, both hg and git are awful. I want to pull others changes, program, and push. Anything other than that is a waste of my time. Neither git nor hg particularly makes this easy. hg queues fit my brain better, and I've thought of some pretty interesting usecases for them, but in the hg queue vs git branch debate, neither opinion is wrong any more than painting a bikeshed blue vs.green is wrong.
Looking at the technical merits of the system, git is faster. And that's about it. The rest is all opinion. Neither is particularly nice to automate. Neither of them have particularly automatable workflow. As John O'Duinn points out, when many people argue for git they're really arguing for github, but honestly I think its mostly horrible too. I could go over a system I think is generally better, but honestly there's no point. I won't have time to program it, and even if I did, as long as the bikeshed discussion continues it doesn't really matter if there is something better or even different. Dogmatism has become the dominant moderator.
I realized today that the git vs. hg debate had nothing to do with the technical merits of the system. Rather it was a debate based on two non-technical concepts: how the programmer wants to work and the culture of git users vs. hg users. I'll take the latter first.
While I don't like git and constantly wonder why the fuck I have to type -a for each of my commits, I've learned to use it reasonably effectively as a programmer that doesn't really care about the guts of version control software. Mostly what I don't like is talking to proponents of git. Generally, they have presented git as unquestionably better, they haven't been interested or willing in understanding my problems with the software, they automatically assume that any problem I might have with git or github is a deficiency in me, and when I ask how to do something more than a trivial command in git they throw their hands up and walk away since its not their problem. This is the sort of attitude I hate to see in the open source community: elitism. The people that are more fond of hg, on the other hand, don't really care much about the innards of version control, are more willing to help, and are more willing to listen. In other words, they are more like me.
In a bikeshed discussion, eventually things break to sides mostly based on the "more like me" factor. Instead we pretend that this is a debate about version control innards. Programmers aren't excited about version control innards. The fact that so much debate happens about hg vs. git tells me that something is wrong in the same way that the vi vs. emacs war illustrates that they are both awful editors. Instead, its a debate about how people want to work. git branches vs hg queues, the github workflow vs. a more traditional workflow. Neither is right. Neither is complete. And the whole discussion is pretty pointless.
So I'm content to let the debate run its course. I continue to think that what people want on top of a VCS is a real tool to configure workflow both in the manner that their community works but also how they want to work. But we can't even talk about this until the hg vs. git debate is over. Otherwise the talk degenerates into "well, I'm happy that git does this" or "hg queues are a much better workflow". People won't be happy until they can work the way they want and not the way that whoever is in majority tells them they have to. I can't wait for this day until we can start talking about having real workflow with a VCS instead of the twin crap workflows git and mercurial give us. But I don't think that can happen until the bikeshed discussion is called.
As a passing shot at dead history, Linus once said that by using the same model as CVS that SVN was "the most pointless software ever written". If I were going to be as arrogant, I would claim that by not solving the workflow problem, by introducing a DAG database but not as a library, and leading to the rise of statements like "if you don't have a github account, you don't care about open source", that git is "the most pointless software ever written". But really, I bear no more ill will. I don't care about VCS. I just want things to work.
so as you (assumedly) know...
∴ What are the implications of evolution/time?
"Optional episode commentary by cast and crew"
That's good....I hate those mandatory commentaries...
The Essential Problem of Curation
If X and Y are contradictory to the nature of the workflows, then both people can't be happy. This is a human problem.
an interesting parallel
i was thinking of the Marxism "The workers control the means of production", when in his time was the physical instruments of capital. but today, the means of production are business logic, and while the capitalists (classic sense) present what they want, the software engineers implement the systems to manifest business logic
Pauline's Pizza had entered the shadow stage of a restaurant, where sometimes they seemed closed and vacated forever and others they just seemed not open right now
Joey Martinelli: "Ya know what they say, you can eat more flies with honey than you can with vinegar."
"You've been running it as an Empire that is both time-limited and resource-limited....well, which is it?"
Holy Smokes : the cigarette Jesus used
"The Son of God smoked these...and he didn't die of cancer!"
"If you want to die at the cross as well... Smoke Holy Smokes!"
How to get me to completely ignore your package
http://pypi.python.org/pypi/ab/
One sentence description: Manage your address book.
No long description
My reaction: Well, i'd love to manage my address book. But I don't know what that means, I already have a crappy solution, and since its not telling me anything I'll move on to other things
the longer I'm away from college, the more I forget people's names....like that guy and that other guy with the funny beard...
Here at cccrrraaazzzyyy Larry's Used Cars, Larry went cccrrraaazzzyy and start slashing prices....and throats...
From not-at-all the makers of Cafe Gratitude comes...
"You want some food or you just feeling like standing there and looking stupid?"
Located at 20th and Harrison (right across the street from Cafe Gratitude)
Cafe Attitude: when you want it all up in your face
the internet is a directed graph and each person's personal traversals of the web are each a directed graph. why not show this to people?
Did you hear about the guy that confused the inventor of the steam engine with the Premier of China?
He didn't know Watt from Wen
"This is a message from BART police. In an effort to protect you and your personal electronic devices..."
since the latter == asserted state identity, i can see why they would warrant an usurpation of "property'
[Man walks in to gold and silver + walks up to the counter. Rick + Old Man are there]
Rick: It looks like you're coming to pawn something but I don't see anything
[Man pulls a stick of used chewing gum out of his mouth]
Old Man: Oh mai gawd!
[cut to fact board]
[back to g+s]
Rick: Were you looking to pawn or sell it?
Customer: Actually, I was just going to throw it in the trash but I'd like to sell it
Rick: Ha ha ha
[cut to Rick]
Rick: Used chewing gum isn't worth much, but if I can get it for the right price, I can make a profit, and that's what I'm after
[back to g+s]
Rick: So how much you want for it?
Customer: Well, new it was 25 cents. But I'll give it to you for ten
Rick: No. Look, its been in your mouth....its kinda disgusting really. [pause] I'll give you 2 cents for it
Customer: How about five? I've seen used chewing gum on ebay go for like a whole dollar.
Rick: I'm going to have to wash it off. That costs money. Look, I have to make a profit on it. Three. And not a penny more.
Customer: Would you go four?
Old Man: You're being a fool, Rick.
[Long pause with suspense]
Rick: Okay, I'll do four. But don't -- ew -- hand it to me. Just set it on this paper.
[Old man puts face in palm]
[Cut to Rick]
Rick: I know its an old piece of gum, but I am confident I can turn a profit on it. Or maybe I'll just give it to Chumlee and maybe that'll shut him up for awhile. Ha ha ha
[Cut to customer]
Customer: I was high on mescaline and just wandered into this pawn shop. I was just looking to throw my gum away but this crazy guy wanted to buy it. So yeah, I'm happy.
[Cut to Old Man]
Old Man: I have an idiot for a son.
FIN
the reason i hate most documentation
http://www.virtualenv.org/en/latest/index.html
aside from the URL being retarded, the first thing i learn is that "virtualenv is a successor to workingenv, and an extension of virtual-python."
so if i don't know anything about virtualenv, i now know it is vaguely associated with two other things i know nothing about
The Old Guard
"The prisoner tried to escape by lowering himself on a rope, but I found that con descending"
google has really come a long way from their humble beginnings. now they can nag me into filling out some piece of paperwork with the best of them
itd be fun to be on the moon....if you measured time using earth as your central body then time would purely be a function of geography
"see you at midnight!"
So, for whatever reason, when I updated to the latest nightly of Firefox today homedash, https://addons.mozilla.org/en-US/firefox/addon/prospector-home-dash/ , which I installed awhile ago, decided to renable itself. I remembered thinking at the time that I thought homedash was the future of browsing, but for reasons I can't remember I found it somewhat unusable other than as an experiment. Well, I decided to try out this new version that had turned itself on.
Turns out...its pretty awesome.So, my browser is really the entire screen. srsly. There is a tiny tiny Firefox in the upper left corner which opens up to an entire full Firefox-button type menu. I can scroll through my "tabs" (there are no tabs) and get a fast preview and do anything else I could do through the Firefox button. It is seriously slick. It is not just Firefox in fullscreen. It is a genuine new and cool interface. Coupled with panorama (ctrl+shift+e), this feels like the right browsing experience. Not for all time or anything silly like that. But...just to repeat....seriously slick.
It requires a pretty high familiarity with how browsers work (not Firefox specific per se, but modern browsers in general) in order to really get it. I wish it was more self evident. But for an experimental project, its downright usable. I've already contaminated my home machine with it.
There's a few things I really need. I want a way to copy the current page URL to clipboard. I do this a lot to share links outside of the browser. The best I can do is ctrl+l && ctrl+c && click back on page. This should be a single command to do this (keyboard or otherwise). Also, my page previews a la ctrl+t don't render (linux). I don't know why. I don't actually care about them that much, but the fact that they don't render bother me.
To make this useful for more people, it'd be nice if it displayed and configured keyboard shortcuts. I know ctrl+l, ctrl+k, ctrl+t, ctrl+w (both of them), and that's about it. And I work at Mozilla. I have a short memory for things I don't use, and I don't use things I can't remember. Also, attention to addons? If I need to access addon functionality....I have no idea how to do that. Addons are first class citizens. We should give them that respect. And URLs are first class citizens too. I want to see the URL I am clicking on. I want to see what is loading. homedash combined with https://mozillalabs.com/prospector/2011/07/14/tab-focus-automagically-organize-tab-groups/ could be a good shippable combination.
There are some bugs too, but they're mostly details here.
So, how is it so slick?
I was browsing my website, http://k0s.org (yes, the very site this blog is on!), with homedash in fullscreen. Without chrome and widgets to distract me, with nothing but HTML, it really made evident how my UX worked. What is actually slow that should be snappier? How do things really look minus a virtual frame? Its quite striking when presented to you like that. Also, it made me realize how ugly the default scrollbars are. Yuck. Lets make them better.
So try it out. Maybe you'll love it. Maybe you'll hate it. It's open source -- https://github.com/mozilla/prospector-- so feel free to play along.
On an unrelated note, it's often more (actually) pretentious to sound common-spoken than to use archaic expression forms
13:18 < jhammel> i wonder if i have the most twitter followers of anyone that
doesn't tweet?
13:18 * jhammel should tweet that
about 9 out of 10 times i see regex-based dispatching is the equivalent of making a PDF that reads "Meet me down stairs in an hour" and sent in an email
"Do you espouse a proscriptive or a prescriptive structuralist viewpoint?"
"I espouse an anti-structuralist viewpoint."
annoying
From http://autolycusrogue.weebly.com/submission-guidelines.html
autolycus: rogue literary journal [...] Please ONLY SEND SUBMISSIONS AS A SINGLE WORD DOCUMENT ATTACHED TO YOUR EMAIL
word documents...very this century and very rogue
k0s.org -> web-3.0, part 1: pyloader
Earlier this year, I moved my site to wsgiblob. The idea is that a composite (poly-application) website is an acyclic directed graph (DAG) and that using a native format for the DAG would make true traversal realizable.
wsgiblob was an exploratory project. While I put k0s.org on wsgiblob for several months, it was mostly to remind myself to finish up what I was doing. Amongst a few other things (see http://k0s.org/hg/wsgiblob ), wsgiblob contained various matching conditions for dispatching (via path, domain name, etc) and an object loader. The object loader used an .ini file, with each "app" having an :app section and an :options section (e.g.):
[hg:app] factory = hgpaste.factory:make_app path = /hg [hg:options] global_conf = config_file = %(here)s/hgweb.config
It was a realization that while there were special things going on (e.g. path = /hg ), loading a python object was agnostic to whether or not that object was a WSGI app. I intended to rewrite this at some point.
For wsgiblob 2.0, which became wsgintegrate ( http://k0s.org/hg/wsgintegrate ), after several months of consideration I realized that this rewrite was going to be necessary. Thus was born pyloader: http://k0s.org/hg/pyloader .
pyloader actually contains several utilities for inspecting, constructing, and calling python objects. But what I will talk about now is the abstract factory for creating DAGs of arbitrary python objects that improves upon and generalizes that in wsgiblob. (See http://k0s.org/hg/pyloader/file/9203ca3a5182/pyloader/factory.py#l23 )
Like wsgiblob, the base format is JSON-serializable:
{'foo': # (arbitrary) object name,
{'args': ['positional', 'arguments'],
'kwargs': {'keyword': 'arguments'},
'path': 'dotted.or.file.path:ObjectName'},
'bar': ... } # etc
(From http://k0s.org/hg/pyloader/file/9203ca3a5182/README.txt#l12). An arbitrary name is chosen for the object (e.g. foo) and the args and kwargs associated with its construction are stored. These may also refer to other objects in the same (net) configuration via python string semantics: %(bar)s denotes the bar object, etc. So long as you have a DAG, the connectivity is arbitrary.
Additionally, you can have an .ini file that translates into a JSON file, e.g.:
[foo:dotted.or.file.path:ObjectName] . = positional, arguments keyword = arguments
In addition to just mirroring the JSON syntax, the .ini format allows for easy use of "decorators" as would be useful for matching a request in WSGI, though the entire thing is WSGI agnostic. For instance, a portion of my site looks like:
[:wsgintegrate.dispatcher:Dispatcher]
. = %(hg)s
%(mozilla_hg)s
%(bitsyblog)s
%(wordstream)s
%(dissociate)s
%(anagram)s
%(a8e)s
%(toolbox)s
%(k0s)s
%(decoupage)s
# wrapper decorator
[@:wsgintegrate.match:wrap]
app = %(object)s
[hg:@:path=/hg:hgpaste:wsgi_app]
config_file = %(here)s/hgweb.config
[mozilla_hg:@:path=/mozilla/hg:hgpaste:wsgi_app]
config_file = %(here)s/hgmozilla.config
[bitsyblog:@:path=/blog:bitsyblog.factory:bitsierfactory]
global_conf =
namespace =
file_dir = %(here)s/blog
date_format = %H:%M %A, %B %-d, %Y
site_name = blog
user = k0s
header = %(here)s/templates/site-nav.html
...
The @ symbol is used as a convenient decorator. More about the syntax is available at http://k0s.org/hg/pyloader/file/9203ca3a5182/README.txt#l27
So the real question is....why do this in JSON or an .ini file versus a python file? Well, easy to read, easy to write and all of that. But much more importantly, imposing a structure -- that is restrictions -- in creating an abstract factory allows use and manipulation of said structure. A python file allows absolute freedom, but almost zero chance to be able to robustly manipulate what's going on. You can't very intelligently inspect what the python is doing: trying to do so is already black magic and it will fail in the face of other black magic, on top of being counter intuitive and, dare I say (I probably shouldn't) unpythonic. In addition, the use of python as factory configuration inevitably leads to an incestuous union of configuration and program logic...because its easy to do so. Freedom is never really free.
Contrast an .ini or JSON based approach (or XML, but...shudder). Given an .ini configuration file, you can tell when the file has been modified. Since you enforce a DAG (which covers not only WSGI traversal but a wide variety of practical python problems), you can reload the whole graph or, if you keep track of what depends on what, you can selectively reload only the modified objects. You can enable read or write access through (e.g.) a JSON request. Using this, it would be easy to make a drag+drog SVG map to construct/modify a WSGI site in real time.
I'm pretty proud of pyloader. I'd love to see something like the JSON format for object serialization be part of the standard library. The mapping of path, args, and kwargs fits well to both the JSON and .ini representation, and while the .ini format is somewhat unusual....is it really any more so than e.g. apache or nginx?
While goings are slow, since k0s.org is a side project of low priority (and time, sadly, is limited and taken up by stupid things like laundry), I look forward to improving and leveraging pyloader for k0s.org and other purposes. Stay tuned for more on wsgintegrate, built on top of pyloader.
For more details, see:
removing the perforated strips from a spiral notebook after tearing out another page, i realized that this moment holds some truth at what life is
Machine Architects
A: Divorce yourself from the petty vanities of self and its incesant programmatic concerns. We are simply machines, miniscule cogs in a universe, and as surely as machines we can be operated.
K: To what end?
A: It is with that thought you should gauge telepathy.
Peet's Coffee and Four Barrel come together to bring you a reserve venture into Japanese rice wine: Four Peet's Sake
I wonder what the safe ambient microwave density for (order of magnitude 2.4MHz) wireless devices. Could everyone have (multiple) wireless devices without us cooking ourselves?
not reinventing the wheel is the mark of a good programmer
knowing what wheel to reinvent and when is the mark of a great programmer
automagic development
Consider e.g. Mozilla could benefit from deploy a plethora of tools (see e.g. http://brasstacks.mozilla.com/toolbox/ ) and custom configuration on e.g. developer laptops. Ideally, you would have a variety of configurations that could be mixed and matched depending on desires and needs, but the simplest case -- a single configuration -- can be extrapolated to the more complicated case. Imagine if, when you alter your configuration or any of the provided tools it was automagically pushed to your own fork (pre-provided). Then these could be used for notification and combed for information that can be used to update the canonical repository
the decriminalization of the suicide pill is held to be the greatest furtherment of civilization since the invention of toilet paper
The wonder of manufacture, the creation of form from ideas, of objects that faded even more slowly than the life of animals, has faded as a subject of concious observation in these days. Look to the mandate to build faster, cheaper, more temporary, washing from the mind without leaving a mark
dependencies should be reconciled at packaging time, not fetching time
setuptools presents a typical installer type program which recursively resolved dependencies. This presents several practical problems, most of which involve requiring reliable network access at the time the packages are to be deployed, in addition to version incompatability. If the dependencies were instead resolves on packaging, a full version could be presented with dependencies resolved.
in Europe, there are facts and there are "facts"; in America, we see no reason for the quotation marks
its like when you lose your mail so you just take something out of your neighbor's box...it may not be what you want, but at least you have mail
Cost-cutting strategies for canoe trip
"Alright, I need your best ideas on the table and I need them now!"
I read about 2/3 of this....he's just starting on how to use Class now, which might actually be interesting, but I don't think I can read anymore. While nothing he says is "wrong" per se, and he even invites jQuery authors to fact-check him, he (I can only presume its a he based on language and tone) presents his opinions as if they are valid and correct and conversely that others are invalid. In some parts, I agree with what he is saying. For instance, it would be nice to have a JS something that extended native objects and made inheritence easier. However, to contend, as he seems to, that since jQuery doesn't do this it is therefore not particularly worth considering I find as horribly invalid. Hey, I have my opinions too.
He presents jQuery as a toolkit and mootools as a framework. I've come to loathe the latter term and, thereby, develop affection for the former. When asked what web framwork I like, my answer remains "none of them". A framework, in experience (and I suppose partially in definition), presents a "do things our way and you'll solve the problem we tell you you want to solve". A bit unfair perhaps, but largely true. To name a very frameworky framework, take django. Answers to a few questions:
Etc. Frameworks are dogmatic. If your dogma meshes with the frameworks, or if you don't care, you're probably fine. For instance, if your questions are like "What template system should I use?", django has an excellent answer: "Ours." Or to put it from a more utilitarian perspective, if you're programming something, you probably have something to do. If you're just playing around, fine, it doesn't really matter if you use esoteric language A on esoteric platform because there aren't any design considerations for your software. Interesting problems usually have design constraints. I could easily invoke economics, but I don't even need to. Even if you're a hobbyist and you don't expect many -- maybe even any -- people other than you to use your software, you still have design constraints if, say, you're making a federated bookmark site. You probably don't want spam. You probably need it to work on a standard browser. You probably don't want it to break if you throw unicode at it. You probably want it easy to deploy and maintain. Maybe you don't. Maybe you enjoy complex and fragile deployments. But probably not. Those are pretty low bars, but its not a horrible example. So you make technology choices to do what you want. Most people don't like reinventing the wheel just for fun. If there is a clear, free, OOTB solution that fits your needs, most people will go for it. Software that I don't have to think about is generally software I like. But, failing that, you have to do it yourself.
The first thing you have to do is decide A. what the problem is; and B. what your solution to the problem will look like. If your problem is making software to organize your bookmarks, well, that's a clear problem :) But this really doesn't give a solution. That's where creativity comes in. You think: "What would it look like if my bookmarks are organized?" Several things flash to mind. If you're an experienced designer, you realize that even if your vision is implemented perfectly, it will probably just point to other problems that you didn't even realize you had, or more optimistically, opportunities and ways of intuiting the universe that you were previously unaware existed. So given that, you set down to write it.
The first thing you do is make technology choices: languages, libraries, platforms, etc. Usually you'll use tools that you know if they apply cleanly (unless, again, your real problem is "I want to learn erlang" and the project is semi-incidental). Herein comes the problem. You've imagined your solution. You can program it with these tools. But how much do you work against the grain of the technologies your working with?
Frameworks, as the word is popularly used, work great when you're going with the grain of the technology. If your vision is served by a regex-based dispatcher interfacing with an SQL database with static files served by (e.g.) Apache that is a traditional-type website with an admin panel, then django may work very well for you. If, on the other hand, you're using a graph database with a highly configurable traversal-based dispatcher with in-memory caching of a small set of static files that will work out of the box on any computer with python and (e.g.) setuptools with complex XML templates using inheritence, then django won't help much at all. It will probably mostly get in your way. HTTP is not complicated. Try it! Seriously, try it! The next time you're writing a simple web app, read the headers and body of the request and construct your response by hand. You may never want to do it again, but it will never more be magic. Frameworks (sometimes) do a lot of stuff. Some of it (e.g. i18n) is pretty substantive. But its only useful if you need it and use it.
The problem, if you will, is that frameworks, and more so, the users and proponents of said frameworks, try to tell you what your problem is. Often, I've been told that the problem I'm trying to solve isn't a valid problem. Sometimes that assessment has been correct. Other times that assessment has been wrong. For instance, if the answer you're offered is "do it this way, its easier/better/more pythonic/etc", consider that. Is it the problem you want to solve? If you want a directed graph of bookmarks and someone tells you to use a hierarchy, is that what you want? Does it make it less useful to you? Does it not let you do things you care about?
I was in a dicsussion recently about whether e.g. "/new" or "/new/" was the "correct" canonical resource. The argument given was that "/new/ is easier to match with a regex dispatcher". This is how methodologies taint one's thought patterns. I wasn't using a regex dispatcher, so it really didn't matter to me. And the fact that the answer is tailored to a method -- a framework, if you will -- is to me a good example of bending what I'm trying to do (figure out which the canonical URL should be and how best do deal with the alternate case, redirect or 404) to a particular technological implementation, in this case one I wasn't even using.
That's how I feel about most arguments in http://jqueryvsmootools.com/ . For the record, I don't consider jQuery just a toolkit. It is a framework, with all of the good and bad that goes with it. Its not a complete JS framework: it is very DOM-centric. But its also not just a bunch of tools and integration layers to build your own damn whatever. It is a framework I happen to like and have found useful. But I'm not particularly trying to defend it, or for that matter cast any dispersions on MooTools. MooTools might be awesome! It solves a different problem, but could very well be cool. I just think the comparison is written in a way that turns me off to it since the author is obviously very involved in the MooTools community.
"MooTools is a framework that attempts to implement JavaScript as it should be (according to MooTools' authors)." - well, at least he's honest. What if I disagree? Are there consequences to this? I have things about any language I use that I don't like, but even if I was given carte blanche to change everything, others wouldn't necessarily like my changes.
"...while the jQuery version is more concise; its hover method accepts two methods - the first for mouse enter and the second for mouse leave. I personally like the fact that the MooTools code is more legible but that's a very subjective observation." - yes, and this is what I want 99% of the time for this problem. Its much easier for me to read, contrasting "I personally like the fact that the MooTools code is more legible but that's a very subjective observation."
"Again, the MooTools code is a bit more verbose, but also more explicit. Also note that the design pattern here is to store the reference to #faq in a variable, where jQuery uses its .end method to return to it." -- That is a design pattern and one I disagree with and don't use. jQuery doesn't force you to do this. And I don't. I store the variable like a sane person when jQuery "convenience" patterns don't fit. You can't (in general) match a regex with a regex (for example). Don't become so dogmatic about any tools you use so that you write bad code for aesthetic or design pattern sense. Design patterns are about communication. If you're adhering to design patterns that make you less communicative, stop.
jQuery doesn't modify native prototypes. Intentionally. I'm glad it doesn't.
"It's actually kind of rude to ask users to download two frameworks. The only reason to include two frameworks is because you want to use plug-ins from both, and in the minds of the MooTools authors (myself included), if you want a plug-in that isn't available with the framework of your choice, it's more appropriate for you to spend the time porting it to your environment than to ask your users to download another framework." - that's probably true. Note the word framework. The toolkit philosophy is somewhat different. A tool solves a specific problem. A toolkit (my definition) is loose integration layers on top of tools that work well together. The difference? While a framework tries to put your problem in its box, if jhammel's mathtool and joeuser's graphtool work well together, why not use them together?
So, really, no slight on MooTools. I will check it out and play with it someday. It probably solves a lot of interesting problems. And I will continue to use jQuery for the problems I know it solves well, which as the author correctly points out are not nor are meant to be all of the problems in JS-land. I do resent the framework >> toolkit attitude that he espouses. But that's my opinion, based on my practical experience. I can already think of arguments against my case and you're free to disagree
Dear Misters Hanna and Barbera, respectively,
Sirs ! I empart this correspondence to both praise you with one hand and to scold with the other your most interesting presentation, The Great Grape Ape Show. This show both entices and fulfills with exhuberent whimsy, imparting lessons both moral and esoteric, not to mention the excellent entertainment value therein carried. However, Sirs, I would implore you to consult with your designated experts concerning the adherence to physical law in such cartoons! While aspects such as a beagle that talks -- and has been given license to operate a motor vehicle -- are to be expected in the genre, and even the implausible event of lifting up an entire jail and placing it over suspected criminals with its structural integrity intact may be lent (however reluctantly) some creedence, I find it impossible to suspend disbelief that a forty foot ape could leap on to a cargo van, still in motion, without any impact to the detriment of the vehicle. Using an estimate of a six foot gorilla at 800 lbs [Reference: wikipedia], a forty foot gorilla may be conservatively estimated at over 80 tons (metric), accounting for purely the scalability of mass into three-space and not taking into account the bone and organ enlargement that would be required to make feasible the existence of such a gorilla. Even from the modest height of ten meters, with an (again conservative) estimate of an impact moment of under 0.1 s, this provides a force far exceeding that required to crush a cargo van even of reinforced titanium! This isn't calculus -- this is simple arithmetic! Surely the poor Beagly Beagly would be crushed every time Grape Ape lept on to his vehicle, ignoring entirely the effect of the lateral momentum on the van's dynamic stability. While I applaud you for this and other fine forays into the medium of animation, the blatant disregard of simple physics cannot be overlooked. In the future, please consult your fact-checkers, or my services may be sought by appointment. And I would implore you, Sirs, for the sake of your reputations, to issue an apology for your oversight in this matter.
A concerned and devoted fan,
Jeff Hammel
re http://k0s.org/blog/20110517142323 , i was joking but.... http://www.tetris1d.org/tetris.php
captchas are like every other thing in webdev: they're extraordinarily easy but all the baseline implementations are awful
"bb&beyond prices themselves like they were moderately fancy when in fact they're just moderate"
(...could almost be a NewYorker cartoon caption except that it mentions BB&B at all)
re http://k0s.org/blog/20110514182108 :another classic blog post runed by misspelling
application of a wine rack
while from a perspective, a wine rack is essentially meaningless furniture, holding bottles that could just as easily stand on a floor, counter, or table uncontained, the wine rack presents the wine with a distinction that is both aesthetic and practical.
when retrieving a bottle from the wine rack, the guest is given an air of mystery to the story of the wine. is it a prized bottle saved through the years for this moment, or simply a forgotten vintage that has lingered and pulled out by chance?
wines tied to one's story should be buried deep, unseen in the wine rack, while more casual bottles should be more evident. the wine rack should be in no real categorical order, save perhaps for very large racks where such is necessitated.
all bottles in a wine rack should be good, or at least presumed very good if they have not yet been tasted. a poor wine presented from the rack will cast doubt to the quality of the entire collection. lesser wines unworthy of the rack, if kept at all, should be kept physically separate so that the bringing of a wine from the rack -- part of an occasion -- is not confused with simply drinking an indistinct wine.
when the wine is presented to a guest, the story of the wine, if mentioned at all, should be only as a trivium in the context of a party favor. it should not be boasted of, only presented as the condensation of its story .it should never be mentioned out of obligation or to alert the guest that they are drinking an especially distinct wine. the nuance must be appreciated through its rise to the senses, not by casting attention upon it. of course when the nature of the wine is inquired into, such should be presented save when it would be uncouth.
stop for a coffee
At my morning coffee spot behind a guy whom the cashier was flirting with with such abandon that she forgot how to operate the cash register. This further disconcerted her in the presence of a hot boy that she accidentally charged him an arbitrary amount, points to be worked out later after he left her morning. I wondered what it would be like to be her. Covering my paper cup with a plastic Solo-brand traveler lid, I spied the book she was reading. While I did not know the title, I judged the book not by its cover but its relation to the reader, ascribing to its words, its author, all of the facets of her witnessed through a typical moment's fumbling. I wondered why she read. Did she read because she enjoyed it or because it was a thing to do?
In my obsessiveness, I applied the same lens to myself. I once thought I had a good understanding of how things worked, at least from the point of view of a hyper-evolved monkey in an ephemeral civilization built on economies of imagined exhuberence. Now....less so. Why do I read books? Do I read them because I enjoy them or because they're a think to do? Have I fallen from some intelligent perspective and am now an artefact of what I was (likely) or was I just never that bright in the first place (also likely)? And what does it matter? Nothing has changed that the greatest relief in my life is that the universe is not my sole responsibility. So I learn to take solace in my inadequacies and insignificance
There's something horribly and inappropriately decadent about drinking Chimay blue straight from the bottle
sum peephole complane abowt mai sepllung butt eye doent allways half thyme too pay a tension two details
chores
So there are three kinds of tasks:
People often assume that I favor tasks of type 1. and disfavor tasks of types 2. and 3. Not so! While there is something satisfying about type 1. tasks, in reality its not realistic. Even for the examples given, there may be follow-up to the novel and the SATs are just a step towards college. I'm quite content with type 2. tasks...that is the bulk of life.
Its the type 3. tasks I don't have much respect for. When effort is duplicated, or worse, when effort results in more effort, this is the beginning of untenability. Let's quit tolerating this
my curator sense tells me if the classifier approach of toolbox could be merged with hierarchy something awesome would happen...
how i write a letter
...kinda sucks. So I switch computers, Alot . Which means I need a way of having a long email live in several places. Unfortunately, my mail program (which will remain nameless) isn't really quite up to bar here. Not to mention that an offline editor, whose purpose is to edit, is going to be Alot better at editing than something rolled into to a mail program. So I edit files and sync the files, something I already have a solution for . However, my problem is exacerbated by the fact that my MUA doesn't let me insert a file into my message :/ Nor, for reasons I don't understand but are probably intrinsic to X and/or GTK, does xclip -i < myemail.txt and shift+insert do what it should and solve about 90% of my problem. So here's what I do:
3. Make my screen really really tiny so I can copy and paste the entire email. 4. Paste the entire email.
Sound stupid? It is! How can it be 2011 and computers be so awful? :/
New! from Baskin-Robbins:
Iraqi Road iced cream
Now with more marshmallow IEDs (improvised explosive deliciousness)!
Try with a scoop of Abu Grape!
Q: Why was the president so eager to have the text line up with the margins in the Patriot Act?
A: So that it would be justified
dna lounge was packed for probably the one event of theirs i'd ever care about so i passed them by. i heard industrial from slims but it was a bear party so i split back to mission. went to that club on 16th that i still don't know its name. the dj was a little awesome but it was crowded so i couldn't dance and it sucked.
Victor - "Finally found a wine rack at the MOMA store which was surprisingly reasonably priced. Drank an espresso and smoked a cigarette across fron Moscone center where a lady I saw earlier was still on the phone."
didn't go to the container store because they might try to sell me a shoe rack as a wine rack and shatter my entire belief in rational thought
now at beauty bar for the first time ever having a beer while i wait for pizza since amnesia had a band. its actually not horrible this early. everyone is cliquey and wont talk to me but nothings different there
i am in crate and barrel shopping for wine racks. everything is too new and expensive but some of their bars are nice. theyre playing the muzak version of nevermind
│cat american_politics.py parties = ['Democrats', 'Republicans'] current_party = 'Democrats' debt = 7E13 deficit = 1E12
bug trackers need a way of attaching patches with the message "Look, here's a free patch, but don't expect me to further work on it"
Stages of language mastery
So in writing toolbox (https://github.com/k0s/toolbox for now, not my idea to use github so don't yell at me) I realized I didn't know JS nearly as well as I thought. This is to say....I know how to do stuff in JS, but it is more difficult to structure it than I thought.
I've realized that there are different stages for learning a programming language. This is given the assumption that one knows how to program but one is learning a new language/way of doing things. How do they go?
In python, I'm probably a 4. (roughly speaking). In JS, I had previously assumed I was a 3, but really I'm a 2.5 tops.
idea that someone will probably steal and do something evil with
So....you have search algorithms that e.g. count where the page is linked from. What about scraping names. E.g:
Jeff Hammel was at war with the evil orcs of Saruman the White
So you scrape and analyze the text nodes and see how people are related to each other. You can construct a social graph and asociate people with things and other people. Pretty evil, eh? So why hasn't anyone done it?
My experience with HTML and CSS (especially forms)
We may speak of what we call reality as solid by convention as there is entropy and an arrow of time to which all actions are fixed and we fall from them to the future. Yet actions fall from the interwoven thoughtscape. Is there not a vantage point that plants this astral plane in solidity?
I have now been at Mozilla over a year. I won't pretend any of it has been easy -- even in things I have prided myself on doing well in, it is a continuous challenge to do more, better, effectively.
As you can tell from my recent slew of blog entries not to mention press all over the media, Firefox 4 came out yesterday. It was my first major launch at Mozilla and I can only say that I am impressed -- not only by the fact that everyting went real smooth, but also at reflecting upon all of the progress that has been achieved in the last year and how after the launch (the very day), a plethora of conversations ensued addressing so many of the issues that have been on my mind for awhile. Sometimes I'm really proud of us.
Another thing that really hit home with the launch is that Mozilla is a community. That is what it is. While the general reception by the tech press regarding Firefox 4 has been positive (our new CEO, Gary, has been most excellent in translating our values and what we do to a form that the press could convey. kudos!), there have been numerous articles predicting the demise of Firefox to Chrome and IE. Nothing new here. But having been here for a year and going through the Firefox 4 launch has given me a new understanding of why these articles are at most unimportant. We're not offering the same thing as what Chrome or IE or Safari are offering. We're offering community. We use phrases like "the open web" to describe what we want and -- truly -- our values are aligned with our words ... because they can be, because these are really why we exist. Not for profit. But while anyone can recite pretty buzzwords, we really do allow the internet to become something that is participatory in its construction.
We build the internet. We all do. At Mozilla, we work to raise awareness of how the internet works and how its not something that is written for you that you are just following some path on, but that you are part of. Since the launch, so much of the discussion has been about how to empower our community -- us -- to make the internet what they want. The process can be cold and prickly now, like with most open source projects of any size. But we believe in what we do. And we do it well. If you want to compare the nuances of technical characteristics of Firefox, Chrome, IE, and Safari, I would still say, objectively as I can be, Firefox is superior, but I could see other points of view. But we are the only one of these whose purpose is to build a better internet for you, for all of us.
In the first 36 hours, about *one in thirty' people in San Francisco downloaded Firefox 4: http://glow.mozilla.org/
oh SF !
i wake up at 4a to go to the Firefox 4 launch party. i walk over a bridge i could have well gotten mugged carrying an expensive computer. i walk over a giant hill in the rain to wait for the first caltrain, an awful local one. but the thing that gets me ... no fucking coffee house is open
I hate to be the one to say this -- again -- but the clean energy problem is not hard to solve. Rather, it would not be hard to solve if it was a societal priority. Its not solved because its not as cheap to do. So....no one is going to do it until it is. Invest in energy saving technologies. Invest in renewable/clean energy generation. Its not hard. Its just expensive.
Or, think of it another way. You can live off of rice and beans for less than $50 a month. I know this for a fact. Or you can eat a more balanced diet. We(=society) say, "Hey, you're a consumer, do what you want! In fact, spend more because it elevates your social status and is good for the economy (albeit, not your economy)." But as society, we don't make decisions like this, at least anymore it seems (unless someone important gets a kick back, see the Iraq war). Why not? Why should we make decisions based on dollar figures rather than what the dollar actually represents -- that is, prosperity?
I was somehow hoping that Barrack Obama would, as part of the stimulus, do what I thought was obvious -- creating jobs by investing in energy technologies vs or in addition to giving over -- let me spell it out -- $1,000,000,000,000 to (e.g.) Wall Street. I haven't done the math, but, really, how much clean energy would that buy us? Things to ponder
You sculpt the future from your expectations. If you open yourself to the will of the universe, your dreams will take you to wonderous and terrible unknowns. If you are insistent in your expectations, then time is forced to yield only your greatest doubts realized.
when solving a problem, don't go through the steps about what you need to do to solve the problem. instead, imagine how things will look like after the problem is solved and do that. the former, while more expedient, tends to lead to cruft. the latter, to contrast, will give you the clean solution you really want
a membraned creature has several architectural disadvantages. the toxins taken into the body must be processed and expelled. processing toxins ages the body and contributes to eventual system failure. the membraned creature therefore is subject to the environmental absorption rate and thus the chemical nature of the creature is revealed as opposed to it being a 'black box' of conciousness. it is therefore concluded that all membraned creatures are subject to ambient toxicity, permeability being a constitutive property of a contained existence. the only invulnerability: permeability approaching infinity
i sit in bars and take notes. i'm not sure how its come to this. i don't hang out with anyone. sometimes i just stay in my house and, i don't know, program or listent to NPR ... or paint ... or whatever. but being a programmed social creature, i go out. i'm too shy and antisocial to talk to anyone. so i don't know why i do it except to be around people. so i go to bars, even if its just a Thing To Do. i don't know where to put my eyes. eye contact is key. i accidently made eye contact with a girl when i thought she was someone i knew and she talked to me. silly isn't it? i'm not sure which is more silly: that she was compelled to talk to me because i made eye contact, or that i don't try to exploit this eye contact thing to get girls to become superficially fascinated with who i would pretend to be.
i was at, if you will, a "happening club", writing in my notebok, when a very attractive girl said to me, "so you come to a bar to take notes?" i didn't really have much to say to that
there's something nice that internet searching "long pants" actually does what i want, except the ads on top
I was stupid enough to open an envelope saying "Financial Information Enclosed"
""" Debt can feel so overwhelming [...] A Discover Personal Loan can make all the difference! """
...no comment
CSS-like metadata for files
I wonder if anyone has played with attributing metadata to files with css selectors. You have selectors for files, which albeit would look slightly different than CSS (but very similar) and you can put metadata on them:
*.txt {
type: text/x-rst;
}
"Al Qaeda gave young people drugs"
Figures. I thought I was watching democracy unfurl, but what was I thinking?
If you tell someone to do something, you have a certain resposibility that falls into a finite set of categories:
Failure to acknowledge this responsibility leads to unhealth and a bad disposition for all affected parties.
Teh factz: 1. most coders hate to clean up after themselves 2. most coders who are not in 1. don't want to be yelled at for making a mistake 3. most coders who are not in 2. don't want to be yelled at for wasting time 4. most coders who are not in 3. don't write code
Teh kingdom: Meet OpenSorceum, a once peaceful land on the edge of the sea. For thousands of years, OpenSorceum lived in peace. But villagers lived in fear -- there were places in the Code Woods that no one would go. The couldn't understand the code! They were afraid to change the code! Aged wizards claimed that the code could be changed by no man but he out of prophecy....
But this was a lie!
The dark Code Woods encrouched on the world of light, isolating villages, and the kingdom of OpenSorceum faded into a world of proprietary web services and ancient hacks.
Ur qwest:
To take back the code and have once again software == intent!
Ur Toolz: 1. A VCS repository w. A text editur 7. tests! 8. The Holy Lamp of Continuous Integration!
With these tools you are so tasked with the slaying of bugz! Fear not! Continuous Integration and tests will protect you lest you falter! But in order to check your bugs into the great vessel of VCS, you must slay Cruft!
...In other words...clean up shit until you have enough XP to check in, you lazy bastard
I realize I'm oversensitive to this crap but....
http://stackoverflow.com/questions/533857/whats-the-best-web-image-search-api/5038521#5038521
Gives me a good excuse not to write software in my free time!
possibly the best beer ever: http://beeradvocate.com/beer/profile/1146/10672
this is my former favorite and a close second: http://beeradvocate.com/beer/profile/24/36
i hate it when i lose things
There's a quote I heard, sampled in a song, so I have no idea whence it originates, that I would love to find....but google...and the interior of my head are being useless. Its gist is "It is not uncommon, not rebellion, to stand against the faults of the establishment. But to rise up against your own generation, and to cast them down and ostracize yourself from them...that is the path to singularity." I fucked up the phrasing, other than the "rise up against your own generation part" -- that part is close, anyway -- but this speaks something to my life.
When I was a wee slip of a lad, I was pretty popular in my rebellion. I rebeled against corporate rock, and drug laws, and capitalism. Maybe, in ways I couldn't express, it was more subtle than this. But these were the epithets I uttered against the universe. While these are somewhat contraversial topics for high school, they're not exactly hard things to support. Yes, art should come from the heart. Yes, the criminalization of drugs is basically retarded. Yes, the competitive system of capitalism has some pretty bad effects. But its easy when you can speak out against something from a counter-culture who is willing to support you.
I'm not sure if that's rebellion
the civility of a place is inversely proportional to the length of time from when the walk symbol turns red to when the traffic light goes yellow
there are 01 kinds of people in the world
those that understand the difference between big and little endian binary and those that don't
Two guys are pass by a playground when they see a kid's merry go round.
"I bet you can't push anyone I put on there," said the first guy.
"I bet I can!" said the second guy.
So they put on kids, adults, fat guys, and, sure enough the second guy had no problems. "Give up?" he asked.
But the first guy pulled over Jesus on put him on. The second guy pushed as hard as he could and the merry go round wouldn't turn.
"Okay," he said, "But that's Jesus. I mean, seriously, he probably used his God powers to stop me."
"Fine fine," said the first guy. This time he picked Mohammed and put him on. Again, the second guy couldn't turn it. "I don't know what's going on here," he said.
"I have an idea," said the first guy. Nostradamus got on. The second guy pushed as hard as he could but, once again, he couldn't turn a prophet.
A ping math lesson
I got to see ping's counter turn over:
64 bytes from 74.125.224.82: icmp_req=65534 ttl=55 time=33.7 ms 64 bytes from 74.125.224.82: icmp_req=65535 ttl=55 time=18.4 ms 64 bytes from 74.125.224.82: icmp_req=0 ttl=55 time=17.3 ms 64 bytes from 74.125.224.82: icmp_req=1 ttl=55 time=15.4 ms
What are the odds? No, seriously, what are the odds?
So you have a 25 line terminal over, lets say 65000. So 1/2600 (where the magazine gets its name! Not really). But, lets say at most I'm looking at that particular terminal on that particular screen one percent of the time. So 1/260,000 ! I mean, its not lottery good, but its good!
However, its a complete piece of steaming bullshit.....*like* the lottery! This is the chance that I happen to look over this particular time and see the counter reset. To really see if its abnormal, you have to integrate over all time. I don't know what that number is, but its not insignificant. Comparable to 260,000 in my life? Quite possibly.
Math teaches us a lot of things. One of the things that it teaches us is how easy it is to interpret facts however you want, but that this has very little to do with truth
there are two kinds of problems in the world
those i don't have to care about and those I do
if I don't have to care about it, then good, it works and I can move on with my life
if I do have to care about it, then I'm going to want it solved properly
"this works by annihilating your particles with antimatter"
"and then i'm reconstituted on the other side?"
"sure, whatever makes you happy"
What Grinds My Gears
When sciency things start a sentence with, "Inside a black hole, ...."
Unless the next words are "you'd be dead", it's probably misleading.
We've really evolved, Alot
It used to be that I would have plenty of time to eat a bowl of cereal before my computer boots
Now that is no longer true
But I do have plenty of time to eat a bowl of cereal while I get on the wireless network
What times we live in! What a brave new world that has such virtual people in it!
in computer architecture, you run into limitations of front-side bus
in New York, front side of bus run into you!
From the makers of "The Makers of the Internet" comes....
The Internet: the director's cut
Coming soon! Available on 524 blu-ray discs
How to ensure frustration in linux developers
This has literally been my experience for the last 10+ years
"Frodo was attacked by a barrow wight!"
"Gasp! By Barry White?"
"No, not Barry White. A barrow wight!"
"Abbey Road white?!?"
"No! A barrow wight!"
12:59 < jhammel> i generally know what i want/need to do
12:59 < jhammel> i just have a hard time communicate with it
13:00 < jhammel> er, communicating it ;)
Another good thing about SVG
https://developer.mozilla.org/en-US/search?q=talos
See the second result, as least as of today
I finally understand why people like twitter
They can feel like they're doing something just by liking things
Of course, for that reason, I hate it
Alot of semicolons:
;
;;;;;;;;; ;;
; ;;;;;;;; ;;;;;; ;
; ;; ;;;; ; ; ;;; ;; ;;; ;;; ;
; ;;; ;;;;;;; ; ;;; ;;;;;;;; ;
; ; ;;;;;; ;;;; ; ;; ;; ;; ;
;;;; ; ;;;; ;;;;;; ;;;;;;;;
;;;; ;; ; ; ;;;;; ;;;;;;;;
;;; ; ; ;; ;; ; ;;;;; ;;;;; ;
;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;
; ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;
;; ;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;; ;; ;
;;;;;;;;;;;;; ;;;;; ;;;;;;;;; ;; ;;;;;;;;;;;;;
;;;;;;;; ; ;; ; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;
;;;;;;; ; ; ;;;; ;; ;;;;;;; ;;;;; ;;;;;;;;;;;;;;;;;;;;
;; ;;;;; ;; ;; ;;; ;; ; ;;;;;; ;;; ;; ;;;;;;;;; ;;;;;;;
;; ;;;; ; ; ; ;; ; ;; ; ;;;;;; ;;;;;;;;;;;;;;; ;;;;;;;;;;;;;
;;;;;;; ;; ; ;;; ;; ;; ; ; ;;;;;;; ;;;;; ;;;;;;;;; ;;;; ;;;;;
;;; ;;; ; ; ;; ;; ; ;; ;;;;;;;;;; ;;;;; ;;;;;;;;;;;;;; ;;;
;;;; ;; ;; ; ;; ; ;;; ;; ;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;
;; ;; ;;; ; ;; ; ; ; ; ; ;;; ;; ;;;;;;;;;;;;;;;;;;;; ;;;;; ;;;;
; ; ; ; ; ;; ; ;;;;; ; ; ; ;; ; ;;;;; ;;;;;; ;;;;;;;; ;; ;;;;;
;;;; ;; ;; ;; ;; ; ;; ; ; ; ;;;;;;;;;; ;;;;;;; ;;;;;;;;;;;;;
;;; ;; ;;; ;; ; ;; ;; ;;; ;; ;;; ;;; ;;;;;;;;; ;;;; ;; ;; ;; ;
;; ; ; ; ;; ; ;;; ; ;; ; ; ; ; ;; ;;;;; ; ;; ;;; ;;;;;;;;;;;;;;;
;;; ;; ;;;; ; ; ; ;; ; ;; ;; ;;; ;;;;;; ;;;;; ;; ;; ;; ; ;; ;;;;
; ;;; ; ; ; ;;; ;; ;; ;; ; ; ;;;; ;;;; ;;;; ;;;;;;;;;;;;; ;;;
;; ;; ;; ;;; ; ;; ; ;; ;; ; ;; ;;;;;;;; ;; ;;;;; ;;;; ;;;; ;;;;
;;;; ;;; ; ; ; ; ; ;;;;; ;; ;; ; ;;; ;; ; ;;;;;;; ;;;; ; ;; ;;; ; ;
;;;; ;; ;; ;; ; ; ; ; ; ; ;; ; ;;; ;;;; ;;; ;;;;;; ; ;;; ; ;;; ; ;
;;;;; ;; ; ;; ;;; ; ; ; ; ;;;;;;;;; ;;;; ;;; ;;;;;; ;;;; ;;; ;;
;;;; ;; ;;; ; ;; ;; ; ; ;; ; ; ;;; ; ;;; ;;;;;; ;;;;;; ;;; ;; ;; ;
; ;;;; ; ; ;;; ; ; ; ; ; ; ; ;;;;;;; ; ; ; ; ;; ;;;; ;; ;; ;;
;;; ; ;; ;; ; ; ; ; ;;; ;; ;;;;; ;; ;;;;;; ; ; ;;; ; ; ;;
;;;;; ; ;; ; ; ;; ; ;; ; ; ;; ;;; ;;; ; ; ;; ;;; ; ; ;;;;
;;; ; ; ; ;; ;; ;;; ; ; ;;; ;; ;;;; ; ;; ; ;; ;; ;;; ;
;;; ;; ; ; ;; ; ; ; ; ;; ;; ;; ; ; ; ; ; ; ; ;; ;; ;;; ; ;
;;;;;; ; ; ; ; ; ;; ;; ; ;; ; ;;; ; ;; ; ; ;; ;; ; ;;
;;;;;;; ;; ; ; ; ; ;; ;; ; ;;; ;;; ; ;; ; ; ;; ; ;; ;; ;; ;;
;;;;;; ; ; ; ; ;;; ;; ; ;;;; ; ; ; ; ; ; ;;; ;; ; ;; ;;;;;
;;;;;;;;; ;;; ;;; ;; ; ; ;;;; ; ;; ; ; ;;; ; ; ;; ;; ;; ; ; ;
; ;;;;;;;;; ; ; ;;;; ;; ;; ;;;;; ; ;; ;; ; ;;;;; ; ;; ; ;; ; ; ;;;;
;;;;;;;;;;; ;; ;;;;;;; ;; ; ;;;; ; ; ; ; ;;;;; ;; ; ; ;;; ;; ;
;; ; ;;;;;;;;; ;;; ;;; ; ;;; ;;;; ; ; ; ; ;; ; ;;;; ; ; ;; ; ;;; ;
; ;;; ;;;;;;;;;; ;;;;;; ;; ; ;;;;; ; ; ;; ; ; ; ;;;;;;;; ;;; ;; ;; ;;;
;;; ;;; ;;;; ;;; ; ; ;;; ; ;; ;;;;; ; ; ; ; ; ;; ;;;; ; ; ; ; ;; ;;
;; ; ; ;; ;;;;;;;; ;;;; ;;;;;; ; ;; ; ; ; ;;;;; ; ;;;;;; ;;;; ;;
;;;;;;;;;; ;;; ;; ; ; ;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;; ;;;; ;
;;; ;;;;;;;;;;;;; ; ;;;; ;;; ; ; ; ;;;;;;;;;; ;;;;;;
;;;;;;;;;;;;; ; ;; ;; ;;; ;
;;;;; ;;;;;; ; ;
"Chase could double your deposit, up to $5,000!"
Most people look back at the macroeconomic indicators and cite these as clear portents towards the collapse of major financial institutions in the recent crisis.
For me, when banks started emailing me contests telling me how I could get rich quick, that's when I had some idea that bad things were happening on a societal level.
I don't want my bank to mail me contests! I want my bank to be boring, efficient, and basically a place I can put my money and not think about it. If I ever have the capital to go after some risky venture, well, maybe i'll do that. But I certainly don't need the prompting.
All my life I was told I should go to college. The economics of college were never really explained to me -- all I knew is that it was very very expensive. Over and over my parents told me, "Don't worry about paying for school, just worry about getting in to the best school you can." I suppose by my teenage years when I started to question everything else I should have questioned this too, but it had been repeated to me so many times I thought there was some master plan to be had.
Well, there wasn't. My senior year, when the rubber hit the road as they say in the venacular, they changed their stance a bit, "Well, we don't have any money. You're on your own." The school I ended up going to for undergrad and my master's was Worcester Polytechnic Institute. Its a pretty good engineering school, maybe a slot down from an MIT. They even gave me a scholarship of $10,000 a year. But even with that, at the end of my undergrad I had accumulated over $100K in student loans. Everyone else was doing it, so it must be cool. Right?
My grandparents even helped out quite a bit. As a graduation present, they paid off most of my loans. Mind you, most of over $100K still leaves tens of thousands in outstanding debt. I got my Master's in some esoteric field and I didn't know what to do. So I went to .... more school! at UC Berkeley. Berkeley's a public school, but living in the Bay Area is expensive. So more loans. A lot more loans.
I ended up leaving Berkeley to take a fairly well paying job minus the degree. By this point, I was again at way over $100K in debt. I had no capital. And I got into financial troubles for reasons having nothing to do with education. I wasn't partying it up or doing anything particularly foolish. Just bad circumstances and helping out other people. So I had to take out more loans. Even with my decent salary, about half was going to student loans even before having to take out the personal loans and maxing out my credit cards. Afterwards, there were months when I mostly ate beans and rice for financial reasons.
Now I'm at a great job making even more money. I don't particularly have any immediate financial hardships. I generally spend how I want, but my life isn't particularly expensive. I don't own a house, a car, or anything worth over $1000 (I'm neither proud nor not proud of that, its just how it has worked out). But its given me a chance to reflect.
Even with my salary, which is more than I really ever thought I would make, it will likely take me to my 50s to pay off my student loans. Read: my retirement plan is....paying off my loans early. I'm lucky and my employer contributes to a 401K. But its not going to be anything to retire on.
I often wonder where I went wrong, exactly. Loans aside, I'm very happy where I am, career-wise. But financially, I'm in a real pile of crap. Yes, I have a good salary. But my loans require me to have a job with a high salary just to make the payments. Its pretty much indentured servitude. Having not gotten my doctorate, I probably shouldn't have gone to Berkeley. But what could I have done with my master's degree? I didn't know then and I don't know now, and not having any money to live off of, its not like I could have taken time off to figure that out. Its kinda "get a career right quick". I was always jealous of relatives and friends that actually got to take a few months off and reflect on things. I really need that right now. But que sara sara.
Financially, I probably would have been better off if I had taken my alternative plan I formulated at 19. I was going to go to a 2 year trade school, become a welder, and screw the educational complex. At the time, welders were in demand (I have no idea now). It paid fairly well ($40-50K again at the time). And I would have been making a positive income for ten years instead of kinda just starting now. Again, I love my job now, so can't really complain about how things ended up. But it would have been nice to have a job where I could work 8-5, go home and have the rest of the time to do whatever I wanted. I'm mostly a thinker. I think about things and I play with thoughts. This is extraordinarily time consuming to do in depth. I also tend to be depressed and physically unwell. I am jealous of my coworkers that feel fine (physically and mentally) everyday. Most ever day I hurt. Most every day is a struggle for me. But with the indentured servitude of debt through student loans, I have little choice but to plod on. I don't know if it helps me or anyone else not to really have a chance to get a handle on my life.
I often joke that I should become a motivational speaker for high schools carrying the message, "Don't pay for school, kids! It will ruin your life!"
COUNTER, Inc: developers of high-precision digital timers
Interested? Call today for your free COUNTER-example
"When I was a child, I thought as a child and spoke as a child. And when I became a man, I took that child out back and had him shot." -- C.S. Lewis
Mission Bars: do we need more of them?
I need a better hobby. Generally, when I'm not programming or eating or sleeping, my hobby has been going to a bar (whichever) and generally not talking to anyone. I'd much rather go to a friend's house and/or talk to someone, but....well, I'm a loser, and no one offers that.
My problem is mostly: I haven't been able to have a seat at many Mission bars of late. When the holidays were on, it was great. No one was here. Lord knows where people go. I have somewhat of an opinion that people that leave the Mission during the holidays kinda don't belong here. But hubris aside, since people have gotten back in this last week I've had a helluva time getting a seat.
Maybe its too much to have a seat. But I don't think so. Why should I be the weirdo off in the corner wanting a seat? Generally, I don't drink at a bar if I can't sit down. There's just enough of a gentleman in me to think this is the minimum of civilization. If I was going out with other people, I probably wouldn't care. But like I said, it is a hobby, albeit a poor one. This is as close as I get to social. I'd love it if people actually talked to me. But they don't. And I don't expect them to.
So what does this mean? Does this mean we need more bars in the Mission? I dunno, but its starting to sound likely. Maybe it just means we need longer bars. I'm not really sure, but, to be honest, with as much as I pay for my apartment in the middle of nowhere, I should at least be able to sit down and get a drink.
Of course I could drink at home. And it would be much cheaper. But to reiterate, I am a loser. I don't have friends that want to hang out with me. Sometimes, my apartment feels cramped and I need to get out of there. It doesn't really matter if I drink. But, sadly, going to bars seems to satisfy that part of me that is programmed to be around people best.
i "love" how people pretend to be interested in each other even in the brunt face of cognitive dissonance
appearances and reality
All of my life, I've gotten a lot of flack for saying that I won't do something. This probably speaks to my lack of intelligence, my poor social skills, or both. Most people learn to phrase this in the passive voice, "Nothing can be done...." But which is more ultimately anti-social? At least standing by my guns and saying that I'm not going to do something for such and such a reason is admitting that I'm not going to play with others. Saying nothing can be done and dodging responsibility allows one to play a sufferer unto the world even when what is really meant is that another's problems are of no concern, even when the other offers to help. It is ultimate dismissal. For who among us would have the daring to stand up and call he the liar who would speak such a thing? To daemonize him as a black spot on the universe? For in such, one becomes a pariah and the hands of all others withdraw into their winter coats
Failed names for crêperies:
Load-a-crêpe
Tastes like crêpe!
Take-a-crêpe
"Now with our new smaller sizes, you can really take a crêpe in your pants!"
"damn racist hippies" - its copyrighted!
(The phrase "its copyrighted!" is also copyrighted. See also http://k0s.org/comedy/copyright.html )
a possible renaming of wsgiblob: wsgintegration
i kinda like it because it tells more what it is (it is an integration layer for a wsgi "stack") and it rhymes with disintegration
theres a piece inside of me that feels like im falling into a cave. it is cold. it is dark. and i am alone with myself. the cave feels like a presence and i wonder what depths it reflects ?
site mapping middleware
I've often been curious as to how people use my site. Its been a backburner priority to add some sort of analytics WSGI middleware. Sadly, such a thing doesn't exist. Which is sad, really. Middleware is the perfect place for accumulating statics, as the net effect doesn't alter the request at all but gets to look at each request. I don't really want to program such a thing, but I might piecemeal add things as I need them.
One piece I have been curious about is what people do on my site. They see a page...where do they go? Partially just to see how many people are using my site, but equally to see how the site actually works. Where does the traffic flow? I'm also a huge fan of directed graphs, as you may/may not know. So let's make a map!
I put a piece of WSGI middleware using PyGraphviz (aside: is there something else I should be using? I'm not sure what good, deployment-friendly solutions to storing a directed graph and -> SVG ... but I'd love to find one) to write a directed graph of site traffic. It looks for where the traffic came from and the page you're going to and it keeps a tally on the graph. The code is pretty simple: http://k0s.org/hg/svgsitemap/ I put up a simple map at http://k0s.org/map.svg .
Its not pretty. There are tons of cosmetic things to be done. The text is barely readable as is. I should probably prune paths with lower prune counts (though I'll still need to store them). It'd be nice to zoom in or zoom out. Adding some nice Raphael JS would be awesome. You could also embed this on a page and display a "here" with common links from "here" and maybe a bit more of the map.
The other big goal would be to have this a federated service. That is to say, you have site A, I have site B. If we both had these maps, we could weave them together. At the very least like old-style nintendo games.
its interesting the older i get the more people look like monkeys whoever would point to form in protest to evolution is not vain enough for in doing so one may claim to have touched the divine
OED CUTTING ENGLISH
Oxford University, England - The Oxford English Dictionary has announced it is removing thousands of core English words to make room for expanding cyberjargon. The words removed include many in common usage, including 'gullible', 'naive', and 'foolish'.
Professor s. C. Lewis, one of the curators of British English, explained, "While the internet generates thousands of new words each year, the dictionary is already full. So words in use for centuries have to go to make way for today's more popular words like "defriend' and 'smart phone'. Kind of sad, really.
"We cant print any larger volumes as they already overflow a standard desk. Quite frankly, the OED has become a workplace hazard. Prof. Johnson sprained his ankle this sprint when the final volume fell on his foot."
Professor Lewis did not seem receptive to the idea of keeping the dictionary online. "We cant have an entire language simply based on computers. What if they all went down one day?"
When asked, "What can people do when they need to use a word like gullible?", Prof Lewis responded:
"Well you see that bit you said at the end there isnt a word, its just gibberish so I cant very well answer your question. It used to be a word. But it isnt anymore, so I cant really acknowledge what youre talking about.
"We have to be careful not to cut any vital words, like 'and' or 'the' or we'll have a devil of a hard time talking."
Canonical -> multiple distributed publishing platforms
The walled gardens have changed. Yesterdays' walled gardens were the closed desktop app. Think Microsoft office. While there is still a place for desktop applications, most people want publishing instead of just isolated resources that live on their hard drive, and publishing today means the web.
Today's walled gardens are non-federated services. Take twitter. There's only one twitter. Its not like twitter does anything amazing. Even though it is closed source, it does have a (albeit pretty poor) RESTful interface, so one could make their own twitter.
However, why should twitter (and facebook and google apps and...) be the one canonical service? People go pretty far towards federating twitter. You can tweet to your facebook, your google buzz, etc. But there's no twitter2. And there's no way you can have your own twitter. Instead, people do as I have tried to do for bitsyblog and blog -> tweet.
(Sorry, I really had more to say here. I started this blog post weeks ago, then got busy, and now find that whatever I really meant to say is lost to me.)
Here at GenericCorp, we believe in giving the customer the key values of Quality, Quantity, Quintessence, and Qualifications. So when a customer asks, "What can you do for me today?", we answer, "4Q".
How the universe really began
> ls -l everything* crw------- god god 0 0000-00-00 00:01 everything-0.0.1.tar.gz > tar xzvf everything-0.0.1.tar.gz
God: hmmmmm....I didn't really want to do that....
failed invention: Pascal's rectangle
| 1 | 1 | 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 | 2 | 2 |
| 3 | 3 | 3 | 3 | 3 | 3 |
| 4 | 4 | 4 | 4 | 4 | 4 |
| 5 | 5 | 5 | 5 | 5 | 5 |
| 6 | 6 | 6 | 6 | 6 | 6 |
its amazing to think about
qwerty keyboards, developed to avoid locking mechanical typewriter keys, will probably be the last keyboards used before computers have a neural interface that will make typing obselete, the province of embarassed half-understood conversations between parents and their progeny and tools of the eccentric old who refuse, in their twilight, to get the surgery that will convolve flesh and machine
i care about this Alot
from http://hyperboleandahalf.blogspot.com/2010/04/alot-is-better-than-you-at-everything.html
Ideas from workweek opening session
Its Mozilla workweek! We just had our opening session this morning. There were a lot of good ideas, and many of the opening remarks made me think of a observations of my own. I decided to write these as a blog post instead of trying to get my mostly specific and possibly contentious questions in the Q+A session.
Employees whose full time job is to audit the (dev side) of mozilla to make things eadier for newcomers and community members to increase their ease and therefore productivity with the direct side effect of making things easier for current devs.
What are the rough spots?
How rough are they?
Who do they affect?
How much time is lost or would be lost through these issues?
The answers to these quedtions allow these issues to be prioritized and meaningfully tackled. Even vague critiques like "this website is confusing", when probed, can lead towards significant streamlining. This is going to especially important for fostering community as well as our wishes to expand hiring.
Tailored Firefox: Customize firefox for your own needs. Mozilla builds a very good all-purpose browser. However, there is a market for Firefoxen specialized for specific needs. There is already a rich addons community to base on. At first, a preselected number of flavors of Firefoxen could be hand-crafted for user-motivated needs. Ideally, several important packages of addons could be selected: web developer, education, minimal, etc, and the downloader could choose which pacakge to download (being able to drill down and choose/unchoose individual addons) through a friendly webpage. A base profile could be chosen as well. Build options, etc, could be additionally be thought about, but they're probably not as important.
Partnerships with birds of a feather. There was some talk about partnerships. Obviously, partnerships with players such as google, samsung, intel, etc are valuable. But what about on the dev side? We use several open source tools heavily with powerful communities. Python. Ubuntu. Django. MediaWiki. Just to name a few I know. None of these are exactly along the lines of our core mission. But we use their tools. We want their help. They want our help. If we cant even work with our kind, why should we think we can suceed?
Sync should optionally export data to a webpage : I am a great bookmarks collector. I want to share my bookmarks with people. I want to do this on k0s.org. I can, of course, export my bookmarks as an HTML page. But currently, I have to do this manually. It'd be nice if I could tell sync to do this everytime I synced, as currently I pretty much don't update at all. I'm not sure if this is doable as an extension. That would be a great thing to do as a plugin, if that's doable.
Two other more definitive issues I've filed as bugs:
- Directed graph for Firefox : https://bugzilla.mozilla.org/show_bug.cgi?id=618888
- Tooltips for new features and UI for Firefox releases : https://bugzilla.mozilla.org/show_bug.cgi?id=618891
the face, the animal's flower, looking up from primordial cesspools to be touched by flakes of heaven
i hate it when i have to futz with my mouse. programming is challenging, but it shouldn't be physically challenging
I think it'd be funny to ask someone "Can you tell the difference between butter and I can't believe its not butter?" Then, if they say yes, throw a tub of butter at their head. And ask them, "Was that butter or I can't believe its not butter?"
? : So I ended up getting a labrador. My friend told me I could name her "Kim" so she could be "Kim Lab". So I sorta took his suggestion.
? : No, Physics.
equivicator
As best I understand it, last week a couple of bills were turned down in congress regarding the expiring of the George Bush tax cuts. One of them would have indefinitely extended cuts for people who make up to $250,000. The other would have extended cuts for people making up to $1,000,000. Now, I hear, Obama wants to work with Republicans to reach a compromise.
Honestly, I don't know enough about macroeconomics to say which tax plan is appropriate. Its probably not a good idea to disrupt very many peoples' taxes during a tenuous recovery? But I don't know. One thing I do know about a bit is power. This will be the last month of democrats in control in Congress. They're eternally depicted, at least on NPR, as backing down in the face of any power struggles. Power struggles are pretty idiotic, but continuously compromising only weakens one's position. The democrats can't even control the House and Senate even when they control the House and Senate.
After these two attempts, I would just let tax expire. Not because it is necessarily the best economic decision, but because it is the best decision with the respect of compromising one's position. If there are two parties, whether they are husband and wife, or democrats and republicans, and one continuously backs down in the face of adversity, they will assume a subservient position. I'm not particularly a democrat or a repulican, but its actually bad for the whole system to have a weak opposition. When the democrats don't play the game -- I don't know if its out of inaptitude or a sense of the greater good -- instead of putting up a strong front, they will lose sense there is no third-party balance. And in America, they don't.
There is probably much more behind the scenes interaction that makes a whole lot more sense in game theory. But this is how the democrats' position is seen by the public, which goes some way to how the power goes.
Somedays I feel we're all just going to be inconvenienced to death. The death of a thousand paper-cuts...
Watch, over the glass of black beer and the reflections on the hardwood bar from the tin ceiling, how everything dissolves
and be glad of it
I think i might marry Paula Poundstone, excepting that she wouldnt be into me, is way older, likes kids, and doesnt seem to care about relationships
but other than that...
cybernetics and globalism
So, to the notion: "The more wired we are, the better off we are."
Its too obvious to point out that this is a naive question. But lets break it into components.
Firstly, and oft-neglected, there is the sustainability of connectivity as a resource-based economy. As much as we like to pretend that computers are true telepathy vs proto-telepathy, the reality is that broadband economics is resource intensive. Not only do you have silicon, but rare exotic doping materials once scientific footnotes have now become important enough to, say, cause bloodshed and rape in the Congo.
So, this again points to the notion that capitalism as a "screw your neighbor" system is kinda becoming obselete. Regardless of the size of the monkeysphere, we, as reasoning and abstracting beings who can create these complex devices, are capable of behaving civilized when we want to. Instead of side-stepping the "is our economy sustainable?" issue, let's go through the steps:
I realize this sounds too easy, and there will be a lot of chaos and pain, but can you imagine having a fairly firm idea that the economy was sustainable? Its completely doable. Pay me to do 3. or do it yourself or hire someone, but my hand-wavy calculation says it can be okay as soon as we face it up.
So there is the material cost.
Then there is throwing computation at a problem. This is a positive and a negative.
The cloud!
Firstly, cloud computing means something different to me than the term seems to mean. I don't know. I have this idea of cloud computing of being something like developing a deployment and giving an architecture to have this fit together.
... I'll probably rant about this more later, as its really a tangential issue. So let's carriage-return to a related issue: software.
If we had perfect computers, there's still what runs on them. Software, by and large, doesn't write itself, and in the case where it does (to the cases I know of) it is still ultimately a human-germinated creation that behaves within certain bounds. You look at the magic of logic gates and then you look at the software that people run on it. Software is pretty lagging.
Why is this? I rant about it often enough, don't I?
Cooperation. People have become very good about solving a particular problem. However, people are general poor about cooperating about putting solutions together.
So, there is the sustainability index. And there is cooperation. The more we cooperate the better off we are. The more we cooperate, the more we will become a broadband-based society. The more effort we put into making worthwhile structures, the more quickly we can move away from those tired arguments of cut-throat individualism
the cyborgs won: and we're the good guys!
Probably most people know this, but we're now fully cybernetic organisms. There is still a lot of concern about what this means or resistence to this idea, that humanity has changed forever into a new species, one symbiotic with machines.
There's the movies like Terminator 2, or my own dark fictions. All of those things will likely happen, assuming we give up this idiotic outmoded individualist capitalism vs true globalism before we destroy ourselves. But to look at the other way, all of this can happen. We can enter the wider universe.
Is it wise to do so? That question has no answer
But it might be worth noting that the people that were early adopters of the cybernetic philosophy were the heros of the story. We tethered ourselves to the electronic thoughscape because it was an untapped well, and if we did not tether ourselves to it, the antagonists would come around and chain us to it according to their rules.
so more chaos, a step sideways, and the evolution of a new species
My Dream
Its funny how dreams make you reconsider your perspective. I guess that's their point -- the chemical DMT, the chemical that psychedelics emulate, is injected at the transition between the point where the neural net finally falls quiesscent and dreams emerge.
I had a dream last night. I was a kid, maybe about 12, which is probably near my emotional age. After pushing Abraham Lincoln off a snowy mountain (he was a real asshole in the dream), all of the kids began pushing each other off the mountain.
Climbing up after pushing Licoln down, there was a cute girl who gave me a mischevious look. "Are you going to push me down the mountain?" I asked.
"Maybe so," she said.
To defend myself, I grabbed her and pulled her down. "Stop!" she yelled, giggling. I could have thrown her down to her doom. But I didn't. She was cute, and just looking at her eyes, I knew we could be friends. I helped her back up the mountain, and I awoke.
Even though its a silly dream, it made me think about some things. Firstly, it gave me a glimpse of that nice quality that I miss so much: friendship. Just having a friend that will just appreciate me for me. Its so rare in my life. It used to happen....it hasn't in a long time.
Secondly, though relatedly, it made me think of permanance versus ephemerality. It seems to me that most people live mainly in the ephemeral. Things just happen. In contrast, I dwell on things. History is written in pen. What has happened is etched forever, never to be undone. I'm over-analytic. I think about what everything means, and though I try not to, I take it personally sometimes. Looking at the universe in this way is really dark, if you keep your eyes open.
What this dream made me realize, somehow, is just how brief life is. While I dwell on things like "will I ever be wanted", because I am programmed to and conditioned for, life is ephemeral. And if I would look back on my life from the depthless beyond, I doubt I would very much consider my petty concerns that mean so much to be now, like being wanted as a significant other.
I would probably think of moments with people like the little girl and silly little things like how we almost pushed each other off the mountain. Maybe there is more truth there
Attic is open, which is sadly more than I can say for most Mission bars (even Bar).
And, so it seems, i can blog with Android, which is more than i can say for the iPhone
Oh, and i have the best cat
You win this time, twitter!
Awhile ago, I set up bitsyblog (that is, this thing you're reading right now) to tweet snippets of my blog to twitter. You can see some results here: http://twitter.com/k0scist
Lemme take a step back....why the hell did I do this? I hate twitter. Its....kinda one of those sites that make me really abhor the web. I mean, there's nothing wrong with the site....it just doesn't do anything. But everyone reads it. I mostly wanted to post on twitter so I could get my posts into google buzz. It would be nice to have my friends read my posts. Again, google buzz has that same idiotic problem that most pretend-federated sites have: it just doesn't work with arbitrary RSS. I jumped through a few hoops trying to get my blog and photos on there, but to no avail. On the other hand, it picks up twitter just fine.
You'll notice that most of my posts in the time I did this didn't pick up on twitter. There's a reason for this. Twitter changed their API to only allow OAuth access. This seems all well and good, but now its a pain in the ass for a consumer like bitsytweet. If you care about the boring details, read http://code.google.com/p/python-twitter/ . Of course, they didn't update their script :( See http://dev.twitter.com/pages/basic_to_oauth
I've decided not to jump any more hoops for the time being. Web developers jumping through hoops is, IMHO, one of the things that makes the web sucky. Instead of working towards a solution, people bend over backwards to do what other people tell them to do.
So fuck you twitter. If you want to read my blog, it will be here.
Why I'm a Loser
I'm mostly a loser because I am. But why write about it? Well, its a Tuesday night, I don't feel like going out right now, I don't really feel like programming, so I'll waste some time writing a blog post. That's what life is, right?, filling that time between birth and death.
Some guys are winners. They're the kind of guys that have a girlfriend (with more probably in line) who thinks of them as inspirational, outstanding, great, or any of those adjectives. I don't know what makes them winners. People just think of them that way. Maybe its because they've been brought up being told that they were great. Maybe they just got lucky along the way. I don't know. I'm not really convinced they're all that much better than me. I haven't done much with my life, but to be fair, no one's really believed in me either. Its hard to get enthused about doing something great just because. As an analogy, I like to cook, and making myself food is cheaper than going out to eat constantly like I do. But its hard for me to get excited cooking for an hour just for me and then eating it in 15 minutes. Usually when I buy groceries, I end up just eating ingredients. So goes my life. If I had someone to cook for, I'd love to. If I had someone to paint for or write for or program for or fix up the house for....someone that I could make them happy by practicing a skill, it would be worthwhile. But just sitting and honing my talents so I can feel like my talents are honed....not really worth it to me. Its probably some fundamental failing on my part.
Then, some guys are losers but they know they're losers or just don't care. I wish I could be one of those guys.
But...I do care. I am programmed to want someone in my life. Maybe that's what makes me a loser. I didn't realize that this was inborn programming until recently. Maybe its a nature/nurture combo, I don't know. No one wants me. No one thinks about me and says, "That Jeff...he might actually be able to make our lives better. He's a great man." No, I'm not trusted that way. Probably for the best. I just have to learn to live with it and move on, taking what pleasure as I may from watching people in the subway train with that pointless detachment that defines society.
seamonkeysphere
I haven't really used seamonkey. I probably should at least check it out, working at Mozilla and all. But from what I've seen in its documentation and heard, its just the old-style marriage of browser + MUA + etc internet suite.
While I think an internet suite could become useful in 2010 (or whatever year it is), I think the driving question towards its design should be: "what synthesis is gained by the marriage of disparate products?" If the main gain is not having more than one window open, I dunno...I'm not sold.
I do have a few armchair ideas for synthesis of a web browser and an MUA:
I think cross-app information management should be the focus of any sort of suite at this level. But what do I know?
software idea:
I want a she-bang based configuration file that follows the curl | python pattern (so you don't have to install anything) that makes a virtualenv, makes a source directory, and then for each line in the file checkout/clone that url and run python setup.py develop on it.
So like...pip without having to install pip + setting up a virtualenv
find it odd how sometimes bitsytweet works and sometimes it doesn't
i'll have to debug that....some mythical day
The thing about life is ... when you're here, everything seems so ordinary, as mammals we are programmed to perceive lest the tasks needed to ensuing survival would become an whirlwind of perceptual complexity.
But when you are not here, you recall the colors, the fluidity of motion, the twinkling of chemical combustion of paraffin encased in slow-moving liquid [*] , and it all seems as wonderous as a Dream
| [*] | how long would it take for a glass candle-holder under the |
force of Earth's gravity to collapse to a puddle?
People put their projections on me and I can figure them out. Since there is a grain of truth, that perception of their projection grows to a reality, and soon I act as other than what I am.
What do you get when combine a Southern plantation family and a Jewish family in Tsarist Russia?
The hottest new act on off-off-off Broadway, that's what!
Fiddler on a Hot Tin Roof
Its the cross-over they said couldn't be done...and it can't.
Hurry! Get your tickets now, before the play closes its doors forever on opening night!
i'd love some peeps to work on our respective websites together. i really miss that from the confab days. so much to do and so much funner to do it together
New thing: essasys!
I put some essays on my site. Many of these have already been done as blog posts, many of them aren't really polished, but hey, more content.
it is a funny thing to think that people celebrate when their orbital star is in the same position relative to its reference frame from their little blue planet
the new traversal: another free idea
So I'm not sure why what I want doesn't exist. I was hoping repoze had something like this, but...it doesn't look like. I've always called this traversal, but its not just path based. Its....request based. Let me explain.
Let's say you have a request handler. Or really a bunch of them. How do you wire them up? Currently k0s.org uses paste. This allows me to use domain names (which I don't) and paths (which I do). But what about something more general?
What I really want is a matching based system. You have a root application. This is probably HTTPNotFound. Its a standard WSGI application. However, you want to hang subapplications on this. And you want these subapplications to be called when the request matches some condition. The application shouldn't care about these conditions: you just pass them in. Maybe you only listen to POST requests. Maybe you key off PATH_INFO. Or domain. Or...
In this way, you can build a real website out of simple WSGI applications.
This is step one.
Step two is to allow filters to modify the incoming request and/or response. Again, based on certain criteria.
This isn't quite netblocks yet.
This probably sounds too simple. Maybe it is. But the point is it kinda gives WSGI infinite flexibility of piping.
And...its easy to program
people keep talking about this micepace.com site but I go there and there's just a bunch of crap
...at least its better than myspace
existential problem
I have a problem.
Last night, an army of the undead passed by my house. I decided to follow them. A band of skeletons played amidst hipsters smoking pot. I didn't have time to don my cloak or trechcoat, so swept into the night I was as I am. This is not my problem
I followed the horde to a park at 26th and Treat that I had not known of. Unmarked altars dotted the nightscape. It was another burningman: dia de los Muertes.
I was glad that I went. But it seemed I was the only one there without anyone. I hate that.
I'm caught between worlds. I know I should meditate, probably devote the rest of my life to meditation and just have a kind though detached attitude towards the human condition. But it is hard to be so empty. There are those that play this game and become attached to unattachment, or so they play to be.
I don't know why it means so much to me to have someone to share my life with. I don't know why loneliness hurts so much. I don't know why I don't have any friends who I can hang out with when I'm lonely. And I don't know what to do about it.
Notice: This ATM charges a $5.00 convenience fee. Do you want to continue?
-> Yes, I want continue and pay the fee
-> No, I don't want to continue but I'll still pay
k0s.org: dreams for the future
Its been on my backburner for quite sometime to do the next generation of my website.
Bugzilla: I really need a place to keep track of my ideas. I'm high on creativity low on time and ability to keep everything in my head. In addition, I really want to start hacking bugzilla since I'll need it for work anyway. Until recently, I was blocked by bugzilla not having a sqlite backend. But that was recently fixed. So I need to investigate this and deploy and do a brain dump there.
Découpage templates: the majority of my website is done via http://k0s.org/hg/decoupage . I did a change this morning to move most of the <head> logic into a template, head.html, that each subtemplate includes. This allows me to add new items to the document head in one place instead of copying and pasting to each template for each change. However, this raises other questions. Put in the most general way, how does one create a slotted template system that is flexible and generic enough? Does each template include head.html, for instance, or is there a template that frames everything and includes subtemplates? One of the problems (though it has positives too) in coding for my website is that I am too tempted to code for my use case and be blinded by the big picture. Realistically, this is how many websites are coded, but I want to code generic software that just happens to be deployed on my website, which I think is a better development model anyways.
Traversal: webob_view has the beginning of a traversal system. I want to move away from being tied to the paste server, and would like something that does traversal in a generic way. Ian Bicking mentioned that repoze has something like this, so I should investigate. What I want is something like this: you have a traversal block tied to a WSGI application (the traversal block is in fact a piece of middleware). In other words, you have several handlers hanging off of this. You check if any handler matches. If so, call that handler and return the response. Keep going down the chain. I'll probably blog more about this later.
The new smart phone from Verizon! Not only does it have a camera, mp3 player, and full touch screen internet, but it is rated as waterproof up to a hundred meters. So leave yesterday's smartphone on the beach and dive on in to...
The Deep Water Verizon
the first rule of Alzheimer's club is that you don't talk about Alzheimer's club
the second rule of Alzheimer's club is that you don't talk about Alzheimer's club
the third rule of Alzheimer's club is that you don't talk about Alzheimer's club...
funneling open source efforts
The bazaar has grown a lot bigger. This is a good thing :) However, we need a better way -- coordination -- to feed people into open source projects. Traditionally, the impetus has been entirely on the contributor. Want to work on a project? Go for it. Want to start a new project (with the likely case being you are duplicating effort)? Likewise, go for it. What is needed is a way to point people towards the right open source project. You have requirements that you want. These might be satisfied by some project....or they might not. I'm mostly talking about developers that actually need a product to do something, not just futzing around with code.
This comes to mind because I have this problem at the moment. My efforts to develop http://k0s.org are pretty lagged because I don't have an issue tracker. Since I have to work with bugzilla anyway, I would really like to use bugzilla. However, I have a particular requirement, the ability to sync data from all of my development computers. I have this with files via silvermirror . But this is hard to automate in a general sense for SQL, maybe even impossible to do in a robust way. If bugzilla supported SQLite ( https://bugzilla.mozilla.org/show_bug.cgi?id=337776 ) then that would be an easy win (despite the necessity to write a WSGI-CGI bridge to run the damn thing). But...sigh, it doesn't. The next likely candidate is Trac. Having worked a lot on Trac, I know there are things deep inside it that bother me enough (like not having a real model, just using SQL statements...grrr! good luck abstracting that) that I fear I would spend all of my time developing Trac instead of developing my website. Not my goal.
So what to do? If I'm going to be working on an issue tracker software, I want it to fit into my overall goals. I wrote some rough specs: http://k0s.org/portfolio/issue-tracker.txt . This really involves three software projects: workflow, discussions , and the issue tracker. I honestly don't care about the issue tracker part, except as a client, though the other two I do care about.
I can, and maybe will develop this myself. But, you know?, for multiple reasons I'd rather work with other people, one of them being I'm tired of rolling everything myself because I have peculiar requirements. If there was a project that really wanted me as a contributing member that was willing to listen to my requirements, I'd much rather put my effor there. If there was interest by others in helping me develop my software, then that would be cool too (and keep me more motivated than if I just have it as yet-another-free-time-project). So what to do?
A problem that I care about enough to write a blog post about but not enough to solve is this funneling problem. For those developers that have particular requirements (i.e. are not willing to change their requirements to use a piece of existing software) and want to work in the open source world, which project do you choose? Or do you start your own? And if you do, how do you get others to play with you?
Left as an exercise for the reader
In the spirit of Halloween, the end of an internet ghost story. WARNING!! may not be suitable for small nerdy children.
"...he unplugged the router, but the packets kept coming. He ran netstat and found that the packets were coming from 127.0.0.1."
Scary!
triumph
The notion of the ascending arc and falling action used to mark in Western literature the accepted form of narrative gives rise to the goal of triumph. But vitory over what?
My life is a melancholic victory, one of the victories that are never voiced in narrative but must be induced from the subtext. My dreams are dead, gone from the realm of possibility, and all I am left with is a blank page, so far scribbled only with meaningless words, spilt stains of beer, and the unknown ailment that burns in my intestines. And I call this triumph.
I will never know my dreams. Apologies to those who dismiss my certainty as pessimism, but for you who have known my life only through a looking glass, never wishing to seek further, but such is a statement of fact, even if only because I chooose it to be so. It may be that I will know what others would call greater victories, but they will never make me happy in the same simple way that my dream to love imagined satisfied would. It may be a silly dream, perhaps even unimaginable for me in manifestation, but it is what I have wished. This is not my victory.
My quiet victory, that better left to subtext but loneliness and gaps of time lend me to record it in poor form, is the return to this unborn state to the page never written. It is the triumph of awakening to the cessation of this perfect dream, of rising from bed against the aches of a body failing prematurely, and daring to face truth. It is the victory of having fallen off the planet. Though I am sad that I float in the ether alone ... there are none who wished to come with me.
So untethered, I let the words again fall to subtext
I again watched my favorite film I've seen this year, Moon. It comes at a seredipitous point in my life. While I'm sure the film would always have resonated with me, a human alone with himself on an empty landscape, it has a special meaning as I start a new life alone. While part of me feels that something has died, it more feels like I'm starting again. What do I want? What should I do with myself? These questions used to be so clear, and now they are trackless .
Like Sam, there's nothing particularly horrible about my existence. I don't fear starving, or persecution, or have to deal with any of the other awful things as do animals and the vast majority of poorer denizens of this planet. But I feel I missed my life, and that is not a good feeling. I feel my dreams have been stolen away from me, but like Sam they were never really mine to have. They were just dreams. I wished so much for them to be true, but have to deal with the reality of waking up.
I wanted someone to share my life with. Someone to be in love with, in spite of the social distortion of love and the need to procreate as a conflation. I didn't, and don't, think that it is really that much to ask. Maybe I'm wrong on this one. Its more than most people get. I don't know why I thought I was special. Maybe because I saw how it could work, could see how two people together could live in genuine contentment in alliance, and was willing on giving up so much that other people value but that never mattered much to me. But it is something I have never known. And now, the dream, that sweet dream of being young and stupid in love and growing old, as out bodies cease their beauty and we only have each other in a world of selfishness and uncaring, cold and icy drifting alone against the stars....now it won't be true.
What to do about this now that I can no longer slip into this dream again? I guess like Sam, I have to just deal with it....deal with the fact that I'm one poor monkey out of billions whose dream isn't that important to the cosmos, pick up the pieces of my life and move on. It is terrifying to be so untethered, and I have sympathy towards that majority that choses not to remember their dreams for the sadness of their absence. But I would rather have that over the pain of self-effacing lies.
But I have not pointer towards what to do. In an existence where survival and perpetuation are not paramount, what does one call a destiny? Attachment seems ... odd to me somehow. I knew I would have to give it up, but now that I have fallen off the world , I'm not sure what to do with this concious body floating in the ether.
I guess some things won't change. I'll still go to cafes and bars because it is in my nature to want people around sometimes. I'll still go for walks in the rain. I'll still write blog posts to no one in particular (so why would I do it, save that that too has become programmed?) and program and go to work and advocate my beliefs. But all of that is playing to the board. What happens outside the game? I suppose I will learn to become more an archaeologist of people, observing them, and otherwise honing myself. But for what other than my own whims and for standing against the background even while fading to it?
maybe that question has no answer
So, if you're a teacher with a crush on a student, I think it would be funny to give this math problem:
Simplify the following expression to put i on the left hand side:
u > i/3
Then when they return with the result written on their paper, say "well, that's highly inappropriate, but I feel that way about you too".
it's like i tell people a thousand times: "don't repeat yourself", "don't repeat yourself", "don't repeat yourself" ...
you must be able to have multiple instances of your mom running around, because there's no way she could be a single-ton
if there's one thing i've learned working with production software, its the quickest way to dig a hole for yourself is to rush features to production
http://twitter.com/beltzner/status/27956020097 : more proof that Apple is the new M$
...does that make google the new IBM?
Mozilla: Six(+) Amazing Months!
I completely meant to do a six months at Mozilla blog post. The fact that I'm a month late doing so betrays how busy I and everyone else here is.
Firstly, Mozilla is awesome. I am completely amazed at how well Mozilla lives up to its ideals, both technically and interpersonally. Everyone I've met here is really smart, which I'd like to think is a high compliment coming from me. My team-mates on the Tools + Automation Team (the A*Team, as it were) are all extremely talented in so many different ways. I could go on for a whole post about each of them, but suffice it to say, we're quite a force to be reckoned with and I'm very happy to be a part of the team. People toss around the term "dream job" maybe more easily than they should, but after being here a bit, I can honestly say I can't imagine finding a place I'd rather be. I feel bad that I'm so busy and at the same time never get as much done as I feel I should, but...I hope I'm getting better. I've been lucky enough for the past many years to be at places that had some claim to say are the "best of the best": the Plasma Theory and Simulation Group at UC Berkeley, the many very talented programmers (and a few non programmers) at The Open Planning Project, but Mozilla is the first place that I've felt that not only do you have people who are among the best and the brightest, but that they're actually functioning effectively. We (well, less so me, as a newcomer, but "my peeps") built a web browser that most likely changed the web from a dark closed place to an open happy place, and we're (legitimately) working on keeping it that way and making it better. It makes me proud to be part of such an effort.
Technologically wise, I still feel like a newcomer. But I'm getting there. I've been exposed mostly to the testing frameworks and infrastructure and a little towards the periphery of how Firefox (and other Mozilla products) actually work. The build system is amazing. People complain about it every day (including myself), but I think people are just as glad that we have something that is not only technically robust but that actually is used to orchestrate development in a usually friendly way (including myself). It could be better ... it could be a lot better, and I hope to help towards that end.
I still haven't had time for many of my dreams. I want to make a few Firefox extensions (that, honestly, I have a hard time believing everyone doesn't want them). I want to improve bugzilla, improve buildbot, and develop more metrics tools for our infrastructure. I haven't really gotten a chance yet, though some of the projects coming online (that I should already have done something for, but I'm playing catch up) will serve that end. I have bigger dreams too. I'd love to help make addons a real ecosystem that enables Firefox == a web OS (effectively, anyway). I'd love to make Firefox serve web. And, as always, I have some ideas for webapps that would make the world really cool if they could get adoption. I mean, I don't even have WSGI tagging yet! So, sadly, this post won't be added to planet.mozilla.com. All in time, I hope.
One thing that strikes me every day is how great it is to work in a place where creativity and good development practices are encouraged. Sure, I have arguments all the time on "what are good development practices?" mostly with members of my team, but its all in good spirits. One size does not fit all. Other places I have worked have looked upon creative analysis of problems as either wastes of time or downright subversive (this isn't to say that at Mozilla I can or should just do what I want, but at least my ideas are heard, appreciated, and occassionally even agreed with), and good development practices were scrapped for getting something done yesterday only to devote more time to it much later. I get know pleasure for being able to say "I was right" about such things.
So, Yay! Mozilla! Its fast approaching the year of Firefox 4. Nightly benchmarks show that we're nearly as fast as Apple and Chrome. I can't claim much responsibility for this -- I'm still learning the ropes (though the firehose has dropped to a reasonable level) -- but I'm excited to put as much effort to things as I reasonable can.
Thank you everyone, and most especially those on the A*Team.
Engineering has a special place in the coopting of the human state. I'm sure this is true for other fields of expertise, but engineering's uniqueness is marginal returns as a result of artificial external constraint. It is easily showable that we have the entirety of technology needed to maintain a stable system where everyone had elevated standards of absolute wealth, many dramatically so. Obviously, this must fail in the way things all fail.
But taken to a microcosm, engineering is reduced to ineffectiveness. In the effort to get profit, engineering companies are run ineffectively. There are few novel ideas, yet everything engineered pretends to be a novel idea. It is technologically easier, in the same way manner as it is easier to mix coffee and cream than to unmix them, to replicate existent technology. Yet synthesis is achieved from the harmony of technologies: innovation.
So, no, there'us nothing wrong with making a game that has a wacky gopher popping out of some phone that you get points on for tapping on your iPhone. But the way engineering is practice does harm to the field itself. Instead of developing cohesively, the "let's pretend this is a [new] idea" just gives spawn to "do it you f-ing self"-ism.
Historically, for product, there was scarcity. There is no scarcity of information or engineering. So the suffering is needless. It would be much easier -- much easier! -- to allow engineers to work collectively to develop better systems. It would be cheaper, more time efficient, and result in much more stable innovation more quickly, to take the body of engineers and allow them to work very much part time and on their own schedule and very minimally supervise them.
I guess I'm lucky enough to largely have this, so I shouldn't complain. But it really makes me sad that people...engineers...can't just make the world better
i always wanted to get a car and paint the front part blue and the rear red so people would think i was driving so fast i was red-shifting on them
So 5/12, 11/18, and 36 walk into a swank restaurant. The Maitre D says, "I'm sorry, none of you have reservations and we only have one table available. 36, we'll take you." 11/18 hughed and object, "Well, now you're just pandering to the lowest common denominator."
When the moon retreats from the sky shall there only be cloud-covered night? Or will there be naked stars, singing?
It has been my experience in picking up a project that other people have started that there is usually a large amount of cleanup involved. I'm not talking about the learning curve so much -- some pieces of software are complex regardless of how considerate the previous developer was. I'm more talking about fixing things that really, IMHO, should have been fixed before. I'm sure every programmer has had the same experience.
Cleaning up after yourself is good karma. More than that, its actually not much work and even if you're the only person on the project, keeping things clean will save you time when requirements change or you have to port to a different system (etc.). Some of these practices are pretty obvious, e.g. not hard-coding strings. Others are those sorts of things people like to argue about. If you're just you working on a piece of software, then it really only matters when others become involved in the project. Everyone is free to keep their own house as messy as they want. However, in reality it is usually very hard to say when someone else will join your project. So I'd be so bold to implore you just to keep things clean as you go and do things the right way. Cutting corners won't save you any significant amount of time, but will potentially cost a newcomer very significant chunks of time as well as discouraging them from your project. Some rockstar programmers might think this is a good thing. Some people also pride themselves on how messy their lives are.
Here are some basic things that probably everyone knows are true but yet I see violated all the time.
yesterday was John Lennon's 70th birthday. Today i'm washing my linens, which takes about 70 minutes. COINCIDENCE?!?
...yeah, most likely
...if you doubt this is possible, how is it there are pygmies and dwarfs?
Why do WYSIWYG editors hate HTML5?
While looking for help on HTML elements, I stumbled upon http://rebuildingtheweb.com/en/why-do-wysiwyg-editors-hate-html5/ . In the style of its author, I'm just going to refuse to deal with any difficulties that aren't easy for the way I work. For instance, view source displays one giant line of HTML that is most of the article. So I won't link to anchors...not even sure if they have anchors! So you'll just have to read the article.
Firstly, it is asserted that HTML has too many elements. Then he (I'll use 'he' internally even though I don't know the gender of the author) shows a crowded toolbar and points to it and says, "SEE?!?". Q.E.D. I guess. This shows the beginning of his misunderstanding. HTML isn't designed to have a large subset in a WYSIWYG toolbar, nor are WYSIWYG editors designed to give all of the features of HTML. If you want all of the features of HTML...write HTML. GUIs serve those that want a crafted subset for a specific domain. Do your users need strikethrough? Do they need emoticons? I'd much rather have a slim editor if I was using one that communicated the intent of the site master.
Then he goes on and complains about alt tags for images. See, the great thing about a WSYIWYG editor -- in fact, any abstraction layer between the user and the resulting markup -- is that the site master (or GUI designer, etc) can build in functionality. If the site is, say a blog, you'll want headings, subheadings, etc. Each of those should be an anchor. If the writing is semantic, you probably don't need more anchors. If I double-space (or alternately, any time I press enter), I want a new paragraph. Images should get captions that are set to their alt and title, etc, and should be dynamically resized thusly. I'm not saying any of the rules above are how the web should or must work. I'm saying if you're designing an abstraction layer, thinking of this as policy both allows you to craft a site that is easier to use (without the tons-o-buttons) for users, has better markup, and is more consistent.
If you don't want this, just let them write raw HTML.
The browser is the OS of the modern network. As such, it is good to have a browser that correctly and efficiently implements that functionality required for browsing while allowing extension such that the OS may be tuned for particular needs.
Firefox is a good example of this model. The out of the box browser allows a good interface to the web while not trying to tell you how to use it. Hitherto, this was all people really wanted except us geeks that like to customize everything.
The Firefox addons community is pervasive and fierce. Some addons allow simple functionality. Other addons greatly modify your browsing behaviour. I see potential for Firefox + addons to achieve what has been an outstanding goal in applied computer science: high-performance tailored installations of what amounts to an operating system for a spectrum of use-cases.
How will this work? It depends on the use-case. As a web developer and someone picky about their UI, people like me will download a semi-virgin Firefox and install packages of add-ons tailored to our use case. There will be (one or more) web developer package(s) and then several UI packages depending on what you want. Since I am picky, I will probably augment this with several individual addons too. And since media is part of the web, I'll probably get some video and audio packages too. Its like shopping, except for free!
Many people will work this way. There will be others, however, that just want a solution out of the box. Different versions of Firefox pre-loaded with packages will be available from various distributors. Some will become popular. Some won't. There will be the small business distribution, the government distribution, the accounting distribution, all with addons tailored for this purpose and for interacting with various web and onboard applications as needed by the consumer. Smart phones, as android phones already tend towards, will be a net interface with the browser being the primary point of contact.
This is already mostly a reality. Its funny. Looking back to the things we said we almost wrote off as failed in this last decade -- calendaring solutions and the Chandler project, ubiquity of open source, net computing (http://k0s.org/blog/20101001113942) -- these are basically here now. Oh what a brave new world that has such technologies in it.
The (Near) Future of Computing
We're still physically dealing with what amounts to be a legacy of how computers were used. We have computers: laptops, desktops, etc; and things that are almost computers: smartphones, tablets, etc. What is the natural state of what we can produce today vs. what we are doing?
Computing has reached the predictions going back more than 30 years: that computational resources and information are available independent on how you connect to them. People will carry around an interface to the internet: for some people this will be their phone, for others, a tablet or a small laptop depending on their needs/wants for roaming computation. The purpose of this device is to allow connectivity, not on-board computation. Since processors, memory, storage is cheaply small, these are limited by the size/technological limitations of the display and the keyboard or other points of interaction. With glasses, not only does display size become a non-issue, but this allows for augmented reality as well, which will clearly soon become how the world works. For input devices, we already have projection keyboards, touch screens, and other soft devices to allow for a wide possible frame of interaction not limited by size. The way of interaction, following this, will be true cybernetics: direction neural/computers interplay. This will transform more than just our day-to-day interactions with computers, so I'm limiting my scope here to talk about just short of that, though that will be a reality soon enough as well.
You will walk into someone's house with your portable device. You can use this to interact with their various household electronics -- screens, speakers, computers, video games -- wirelessly. Or you can use whatever input device your friend has lying around. Interfacing with devices will no longer be bound by which interface you are in front of, but what credentials you are granted by the agents of control.
Despite all my early enthusiasm, I don't think anyone would argue that writing bitsyblog has been a significant time win. However, that may change. WARNING: another million dollar idea ahead
While I plan on implementing a calendar interface for navigation, I'm still a big believer in the blog roll: http://k0s.org/blog . One real strength of a blog is having a unified place to put new content that is automatically filed and dated. For bitsyblog, the filing options are somewhat limited (namely, is it public, secret, or private). However, since there is effectively one event -- posting a blog -- it is easy to turn this into a pluggable event handler. See http://k0s.org/hg/bitsytweet for an example.
But how does this solve the CMS problem? So, if you've been paying attention, you'll know that I'm a big believer in curating information. Take a typical development cycle, for example. A programmer is assigned a bug, fixes it, and commits his changes to a VCS repository. Through manual convention or automatic process, the programmer can note in the commit message which bug was fixed and note on the bug which commit message fixed it. This is good practice that allows rich linking of resources. It is also information curating.
Now, let's take k0s.org, which is really saying "take the software that I use as a portal to the excellent CMS, my filesystem". bitsyblog is clearly the "idea roll" -- its where I put random text to be organized. Some of it should just stay there. Others I end up doing things with. I want to start automating this a bit.
A few ideas on what can be done here:
"on <blah>:" so, let's say I want to accumulate a corpus of work on a particular topic. An example: """on writing: how word order makes a difference""" So I give the post handler a directory to work with. Then, if the title matches "on [-A-Za-z0-9]:.*", then I append stuff to a file. For instance the "on writing" post would be appended to writing.txt like:
""" -- how word order makes a difference """
and then the rest of the article. This let's me blog and file essays simulataneously
jokes: I waste far too much brain power making jokes. I can't really help it. Look at http://k0s.org/comedy/cheapshots for how I waste my time (as well as, what 40% of my blog posts?). So there are a few kinds of bad jokes I generally make
I don't really know how to store these. I guess I can have a file for each one and split on, oh, maybe --+ *$. I definitely want files that I can edit instead of a database (yes, my old complaint. Databases are nice, but just try using emacs on them).
probably more stuff too
Anyways...yeah, that's right, I said it! I talk a lot about how the filesystem is a good CMS and most everything else is a crappy CMS. I hope these practical examples give more of an idea of what i'm aiming for. Someday I'll even implement them ;)
If one wished to hold on to me, they would need to stay unphased by more than a flash of light and a puff of smoke
From the makers of The League of Extraordinary Gentlemen comes...
Higgins: I say, Perkins, should we accost that privateer with the Siberian tiger?
Perkins: I think not. We're just ordinary gentlemen.
THE LEAGUE OF ORDINARY GENTLEMEN
Higgins: Are you sporting a winged collar?
Perkins: It is the style of the times!
May, 2011; Get ordinary
A Simple Prioritization System
People go on about how hard it is to make a decent to-do list. People -- especially in the tech industry -- also complain that they're not sure what they're supposed to be working on. A quick solution:
You have a queue of tasks. These are ordered. I'm thinking of tasks == issues in an issue tracking system, but this isn't that important to the software itself.
You can add whatever you want to your queue.
Your boss or anyone else higher up than you can add tasks to your task list. You can't remove these or move them around. You can't move any of your items ahead of these.
That's probably all that I need to say on the matter.
Firefox is a great browser. It is even a better browser with a selection of add-ons. Now here in comes the problem, or a set of them (or solutions, if you like):
if you are an expert user (read: into firefox) then you know where to get addons and what to do with them. In fact it's kinda fun, like shopping. But if you're not an expert user, you're probably not going to install addons or know what addons to install. This is being worked on: https://bugzilla.mozilla.org/show_bug.cgi?id=574293 At this point, the community changes. Mozilla will have to make an effort, together with the community, to curate these add-on packages into recipes that make sense. There will be an additional level between individual addons and the user of add-on curators that will pick packages that are best of breed and will make sense together for (mostly casual) users.
There will need to be extended effort on making curated addons self-obvious to users. Very few people read help anymore unless they're confused. They'll install and addon and expect it to magically work. So this needs to happen.
Addon farming: there are two problems with the great success at the number of addons that are basically the same.
1. addons never get consolidated. That is, if my addon and your addon have significant overlap in intent, there is no push for us to combine these addons. This makes it really hard to find addons that I want and I have to install multiple related addons to get the superset of features
2. addon features are very slow to go into mozilla-central. Obviously, even for great addons, it may not be a good idea to upstream them. But some features are both lightweight and pretty non-contraversial. Like TabMixPlus's duplicate tab, which duplicates an entire tab including history. Its really awesome. So addons need to be aggressively farmed and upstreamed for simple user-desired features. This could even be a community point: voting on what addon features (from a preselected list) do you want in m-c?
I'll note that these aren't Firefox specific problems, but problems with the human side of software development in general.
Just for me, I want a better way of dealing with addon compatability (see http://www.oxymoronical.com/blog/2009/11/Changing-the-checkCompatibility-preference ). Firstly, doing this doesn't really fix things for my nightly build. Secondly, even if it did, it doesn't affect the fact that I really want addons to work on my Firefoxen. If I'm using a version of FF that really is incompatible, that's one thing. If the version of FF gets incremented, I don't want all of my addons to break. Ideally, there would be a more functional way of seeing if addons were compatible, and, ultimately disabling only the functionality that didn't work properly (unless they're tightly integrated in which case you're hosed). Obviously, this only affects bleeding edge users.
Its funny how the tiniest things can so impact productivity. On the train -- the Japanese kind with rows of individual seats on the top floor, not the stupid but more showy American kind that only have groups of seats each taken up by one or two people, the remainder empty or filled with their luggage -- there are usually two seats at the end, sometimes with a cup holder. On this day, he managed to take one of these seats, the other one next to him being left empty of course (people in the Bay Area refusing even to acknowledge that others exist unless such is thrust upon them) so he had a place to set his coffee while it cooled and between drinks. Having use of both of his hands, and the coffee, he was able to complete a substantive piece of work during his commute hour. Contrast this to the majority of mornings when he could not get this one seat out of a dozen or, as had happened, this last seat was free but was of the model without a cup holder, his work was diminished from having to hold his cup of cofee with one hand while he typed with another, juggling these with his commuter pass when the conductor collected fare from those who were too paranoid or proper to ride naked of legal protection.
If he missed the 7:04 train then the he had to take the 7:17 train, which was one of the sleek (albeit sleek only in the way that plastic can be sleek) American-built trains that only had seats in groups of three or four. While the capacity of both trains was approximately the same (there were probably fewer seats on the Japanese trains), he could rarely find a seat on the American variety. Each group of seats held at least one person. Without any way of knowing if anyone objected to his presence, as people had historically done, he wandered up and down the aisles, going from car to car, looking for that empty group of seats. He could ask them, "Do you mind if I sat here?", and while the tone of their voice would actually answer his question, more than likely the words would be something along the lines of "Sure, go ahead." These mornings he rarely got any work done. Even finding a seat was an accomplishment. He supposed most people just sat down whereever without caring about the issue. He wondered, why then, were there comparatively many attractive girls sitting alone. If he were to hypothetically apply that philosophy to himself, he would find a convenient seat with a girl that was easy on the eyes, if only to sooth that foolish need within towards feeling of self-worth through the dance of pseudo-procreation. He hypothesized that perhaps people would rather sit next to someone less attractive to avoid the question entirely.
MeetingCorp has a lot of meetings. In order to learn how to navigate through these meetings and how to choose a meeting, we recommend you attend the "Meeting about meetings" meeting.
a few complaints about things:
1. people that blatantly want dom/sub relationships. wow, you're really one-sided. Surely there's more to a relationship than that? And more to the point, surely you could do it with a little subtlty?
2. chat on the internet. I'm bored right now (big surprise) and wanted to, you know?, shoot the shit. So I looked up some channels on IRC and they're all awful. If you want to meaninglessly flirt with someone on line, that's easy to find. If you just want to, you know?, talk, good fucking luck.
"Did you figure out how to reproduce?"
"Yes, but I don't see how unprotected sex is going to fix this bug."
webcronym is a copyrighted term so don't even THINK about using it!
"don't even THINK about using it!" is also copyrighted
webcronym is a copyrighted term so don't even THINK about using it!
"don't even THINK about using it!" is also copyrighted
webcronym is a copyrighted term so don't even THINK about using it!
"don't even THINK about using it!" is also copyrighted
web-based filesystem
I was thinking this morning....it would not be hard to implement a web-based filesystem that was completely backwards compatible with existing filesystems. For existing OSes, you only have a few things you can do:
- try to open (read) a file
- try to open a file for writing
- get the parent of a file/directory
- list directory entries
For many common cases, even just reading a file is a huge gain. Consider this bash code to count the number of anagrams in the word "filesystem":
wc -l <(curl http://k0s.org/anagram?filesystem)
(If you're curious, with my current dictionary there are 956 anagrams.)
Now why can't this be done like this instead?
wc -l http://k0s.org/anagram?filesystem
If you allowed a handle that, for all filenames starting with http:// or https://, the filesystem/OS match a fetch to the resource and read the content (in any number of ways), it could. Again, trivial change to implement and completely backwards compatible (save for a file with a relative path starting with http:// ... I guess we could check for the existence of such files first).
Again, already huge gain. We've made a lot of people's lives much easier. And because we've implemented this at the filesystem level, it will work with any program, whether command line or GUI.
Now, let's imagine doing this better. Not so trivial to actually get people to play nice together, but it will happen eventually.
Normally you can't write to the web. Well, you can, but not like writing to a file. So these files are read-only in filesystem jargon. But what if you want to?
HTTP has an OPTIONS verb. Currently its not used much, but that is changing. If a server answers an OPTIONS request in such a way as to indicate whether that a resource is writable, then the OS could do a PUT (for URLs ending in /) or a POST (for other URLs) to the resource. While this is certainly implementable now, it won't really work as most servers don't expect this form of document. Which is to say....it will very selectively work.
However, this is where things are going. Right now, there is a division between "my computer" and "the internet". A lot of folks (::cough:: Apple) want to keep it that way or allow you only to operate within a fence. But, as with all things technological, eventually the easiest way will persist.
I won't pretend that any of these ideas are unique to me, or even anything but obvious. There are people working with real webbased filesystems now, like davfs, hadoop, and others. Most of them work in a sandbox, but that's only out of convention. The reality is, five years from now or fifteen years from now, the internet will be so integrated into every computing experience that most people will look back and say "wow, and we really thought we were using the internet well...tsk tsk..."
patchwerk (hg patch queue) workflow diagram
- Workflow: http://k0s.org/portfolio/patchwerk.gv.txt
- Original About pitch: http://k0s.org/blog/20100606155416
when you leave your surroundings to meditate in quietude,
so is it to meditate in everyday things and noises without abandoning awareness
"You wouldn't know your ass from a hole in the ground."
"That would explain those rectal pains after shoveling yesterday."
it's a saturday night and i wish there was someone to weave thoughts with me. i guess that, at the superficial level of communication, is what it's all about. i have a cat here who loves me. and i love her. but there is something missing of that going off into infinite mystery. Civilization, that thing we pretend to have, is about that infinite. a moment passing. this is all there is. and yet. here is another moment. some sort of culmination is in order
If All are One, how can there be an Other?
There is the duality of existence and non-existence.
Which one are we?
Why does Kansas always appear on maps with is Easterly bordering state?
Because Missouri loves company
"I'll get you a bag -- a body bag!"
-- another quote from a non-existant Arnie movie where he plays a waiter
The one lesson that life continues to teach me is the one I know all too well: others are completely unreliable and should not be trusted or depended on to take my welfare into account in any possible way.
Another New Yorker caption: "Barnard College? Looks more like barnyard college"
Put whatever image you want to to that to make it funny
simple web service: what's my ip?
you make an arbitrary request to a webservice and it will give a plain-text response of what IP address you're broadcasting from. Silly, yes, but this is often difficult/impossible to determine locally
I'm sure you'll grow up to be a beautiful swan. Then you'll have your head smashed in once they realize youre different
Damn, I missed my billion second anniversary! April 27, 2009
datetime.datetime(2009, 4, 27, 1, 46, 40)
Somehow I don't think I'm going to make a trillion
its 2010....and emacs still leaves f-ing ~ files all over the filesystem
i mean, i fix it on my computer, but when I'm on a shared machine, i'm just ass-screwed, or I can be an asshole and modify .emacs for everyone
fuck you, emacs, fuck you
fun on Facebook (ads): "Do you know your neighbors? Find Sex Offenders in Your Neighborhood"
That's the whole text. To watch out for? To connect with? You decide!
sometimes i think i see weird unicode characters on my screen; it usually turns out its just some bit of dirt
one bad effect of being crazy is that you're not sure if the mp3 is skipping or if your head is skipping
git, to the best of my knowledge, is the most complete and atomic version control system yet written. However, because it takes a tools-based approach to version control, it is cumbersome for typical development tasks. While release engineers and occassionally project managers may require the need to do very fine-tuned version control, as a typical developer, all I really care about from a version control system is the ability to check in my code, pull the latest changes, and merging conflicts.
git in fact has no workflow. This is a good thing, in that it allows arbitrary workflow to be built on top of it. Different workflows are appropriate to different projects and situations. However, it is a bad thing in that workflow has come to be expected from version control systems. While this is somewhat of a historical accident, a VCS without workflow is pretty useless. People will do whatever they want. People will complain when other people's method of doing what they want is at a conflict with theirs or makes theirs hard. I have found that agreeing on a workflow (a human problem) to be much more difficult than the usual taks of dealing with a VCS.
I have been disappointed that github.com, which brought git "to the masses", has completely ignored the workflow problem. github highlights how easy it is to fork and make your own copy of a project, and gives some hand-wavy explanation about pulling from each other's copies. However, for a large collaborative project, the instructions that github gives you are not really helpful. You'll want a workflow. You'll want an actual procedure whereby people can develop code and contribute upstream without stepping on each other's toes. While github does things like code-commenting and pull requests excellently, it gives no real tools for coordinating among people working on the same project.
So people write workflows as list of instructions. "Do this...then do this..." As a programmer, I'm good at writing lists of instructions -- that's in fact what programming is -- but when it comes to following a long list of instructions for a task I have to do several times a day, I am ill-suited. I get impatient. Often a small typo can have dire consequences. If its a one-off, then I can be very careful and do it. If its a bunch of typing I'm asked to repeat over an over again, I have very little patience. Machines do such things very well. I do not do such things very well. Enter: automation.
So the real solution to git's lack of workflow -- and probably to other VCS's as well -- is to write a layer on top of the bare VCS that contains the needed workflow. Ideally, such a workflow-program would have the following characteristics:
1. It should be easy to follow the workflow, in the same way that you don't have to worry about steering a train.
- It should be hard or impossible not to follow the workflow
3. The parts of the VCS that aren't part of the workflow, such as purely informational components (viewing logs, etc), shouldn't be affected by the workflow wrapper
I've written such a wrapper, that I call gut : http://k0s.org/hg/gut . This is a pretty naive implementation for a particular workflow, that for Mozmill detailed in https://wiki.mozilla.org/Auto-tools/Projects/Mozmill/RepoSetup . It doesn't really meet these ideals (except #3). However, it does automate a number of aspects of the git workflow that I've gotten wrong many many times due to typos or other silly human mistakes. It's not 100% identical to what is in the RepoSetup page, but it is conceptually the same.
I'll admit that this is a cheap fix and a brittle one. The important part is that since using gut I've made fewer mistakes and have more confidence working with a VCS that continues to baffle me. More so, with the --simulate flag, I can see what commands will be run, so if I do have to do manual intervention or want to make sure what will be run next is what I really want to do, I have that control.
While I wrote gut to make my life and the life of my coworkers easier, it is a good proof of concept for what I think needs to be done to really bring complex VCS "to the masses". In order to really tackle workflow wrappers for VCS, there should be a way to:
- precisely define the workflow that is being used
2. be able to build a tool like gut from this workflow definition automatically
- have wrappers that are more robust
if git is such a wonderful VCS, why is all my experience with git me working for my computer?
Oh! It's because its tools to build a VCS and doesn't have any workflow! So the workflow is "do everything by hand yourself, you expert!"
I have a friend who is very dear to me. She's kinda been my only real friend since I've been "all growed up". I treated her badly ... she treats me badly and I treated her badly before that. I guess it doesn't matter who started it. Its one thing to realize that you've been jealous and generally afflicted with meanness. It's another thing to realize that you really hurt and disappointed someone you care about. For me, those someones are rare. Most people in the world are blank faces, stories that I'll never know, wandering grey amidst the city streets because all people ever do is wander grey against the city streets. Then there are the people that I like to call friends. These too are rare, but I have them. We laugh, we talk about math, philosophy, war, and all the light-hearted things people like to laugh and talk about. But another face comes along, and if their eyes are not occluded, then the moment is gone and we all know it was just another lie. And then there is she. When she is there with me, she is always real. She can't help it. It's just the way she is. She is the darkest and cruelest person I have ever known, but also the most honest and sweet. I love her. And my love for her has made me blind and crazy. So I hurt her. I didn't mean to hurt her. I never meant to push her away. But I do because I am afraid of being hurt by her, afraid there will be a day when I will never see her again and all that I will be left with are memories of her. It is so hard just to be with her. Even as I cherish each moment with her, I also fear that it is just a blip, a chance passing in a dark cold universe where all meaning evaporates.
I know, for all that you hurt me, I will never deserve you. Though I'd like to think, of all the undeserving, that you would settle for me.
having to play with the windows VM, I saw the hard disk light lighting up. i thought, "Wow, that is actually kinda cool." Then I realized it was part of the VM software and not windows
i always forget just how retarded windows is until i go to work with it. seriously, i install git...and git isnt on my path. how can that possibly be what i want?
what do you call export PATH=$(dd if=/dev/urandom of=/dev/stdout bs=255 count=1)
a psycho-path
<rimshot/>
progression of technology
technology evolves in stages:
- a new technology is introduced
2. the wild west phase: everyone does whatever they want. life is good, at least for that sort of person
3. we standardize on something stupid. everything is horrible, except for that sort of person
4. the something stupid breaks. we standardize on something good as people actually start realizing the problem. everything is good again
oh, i see....
2009 was the year that explosive decompression hit those that have already lept from rocks to rocks without thinking of their own stability.
this year, bam! it his everyone.
so there is riding the wave
addons ecosystem
At the Mozilla summit, there are lots of exciting things going on: WebM video, Javascript audio transforms, making JS fast ... much has happened in the last year and much more is going to happen in the next.
One thing that particularly excited me was seeing the demo of building a Jetpack in 5 min. To do this yourself, go to https://builder.mozillalabs.com/ . The addons community -- with its freedom and openness -- is one of Firefox's greatest strengths. It is great to see this becoming easier and more accessible to everyone.
What I hope this makes happen is moving towards a real ecosystem of addons. I hope this isn't taken as a criticism, but while its great for power-users to have fine-grained control of being able to browse and install addons, for a majority of users, there isn't the time to figure out what addons they actually need.
So what I would love to see is recipes. Similarly with what I've done with TracLegos for Trac (see http://trac-hacks.org/wiki/TracLegosScript ), I would love to see: 1. a tool that allows the creation of recipes to put addons together (which like TracLegos can be chained and cascaded so that an ingredient can become a recipe; e.g. "a Tabbing solution" might be a component of a large recipe or a recipe of its own right); 2. recipes created with these tools that are presented as consumable software.
Lots more to save here but there's a keynote going on I want to see. Ping me for my thoughts
prediction
The folks that have switched to chrome for a perceived need (speed) will come back to Firefox 4 for things they don't yet know they need (site permissions)
federated services
what the web needs is for (lack of a better term) social identity and networking what DVCS has done for version control; namely, the ability to fork and move one's "data" around arbitrarily
Why I hate doing anything, part 2
So, I recently got a jury summons from New York. Since I'm no longer there, I have to get an excusal.
So I call the number. After getting deep enough into the automatic menus, I can see that there is no option for "If you are no longer a resident..." No, I can imagine that that would be a hard one to see coming. It's a good thing they have that convenient menu button for clergy.
So I keep yelling "Operator" until the system throws an exception and I get transfered out of automated hell. This is a good trick, by the way, if you don't already know it. Plus it has the nice bonus that you'll be real real mad by the time you have another person on the line. The wonders of this modern age....
So I get transfered and the voice says, "Oh, we're transfering you to this voice box, but he doesn't subscribe to this service." Then it hung up on me.
Five calls later, I'm preparing to write a letter and converting to one of those religions that supports praying. You can bet my letter will be irritated as hell. I don't want to be mean, but when you serve me crap, I generally let someone know it
Why I hate doing anything
re: http://airportexpresssf.com/
"... Where are you?"
"I'm at Alabama and 21st"
"We only pick up from San Francisco, sir" (Note again: 'sir' never means anything good)
"But...that's in San Francisco."
"Well, we don't pick up from there."
Boo! BOOO!!!
i just got a spam with subject: "does anger discolour your life"
it just literally burns me up with rage to see a thing like that
Learning patterns
Western innovation is based on the flawed premise that hours dedicated to work is proportional to work achieved. This is not the case, at least for me. The mind works in patterns. There is the period of striving, and the period of metastasizing.
In my history, never has my mind been as innovative as the year of my Master's. This is not to say that I don't perform better, by objective standards, now than I did then. I most certainly do. It is only to say that my vehicle for rational thought has never been so brillliantly curated.
The best of my Master's work was done sitting on a bench in an overlooked park looking over a lake. I would sit there and meditate, attempting to clear all thoughts from my mind, when popped in how to compute the eletrostatic flux on a Delaunay mesh. In Fortran. Its not the hardest problem in computer science, but it was substantive for me at the time.
The real point is that these moments of revelation have come consistently at times I was not striving for the furtherment of a definitive endeavor. My mind was focused, yet it was abstract.
So I sit now away from the endeavors of Mozilla, an organization I aspire to at an age when I thought I could no longer aspire. But my thoughts are there. I love Firefox as I can say of few other projects. And i aspire to it.
But it is greater for the unseen machinery in which is but a part. In reflection, we view beyond the horizon of our blinders, and so doing our view of the world grows larger and deeper. I need reflection, those moments between finite tasks, to allow the threads to weave in my mind. I am richer for it and the world is richer for it.
The machine knows best. Trust the machine
A new doll for today's little girl !
It's Polly Amorous !
Now with accessories: "Ken" ... and "other Ken"
i wonder if there is an antonym for ''contention''?
if so that is what Kain is. If not, he is a contention-nihilist
http://www.sutor.com/c/2010/07/ibm-moving-to-firefox-as-default-browser/
we say... "awesome!"
speaking of 'life before the simulation' is like asking the question "how far do i have to travel to get out of the universe?"
the problem with git
git is a fine set of tools to do version control. the problem is its not really user facing. the problem with git is that it acts like it is. the bottom line is, i, as a developer, don't care about version control or branching or merging or anything like that. i want to write code. i want whatever sort of branching and merging practices to just happen. if you give me a set of commands to run, or better, a script to automagically do what i need, this is sufficient. i've spent a lot of days where maybe half my time was actual development and another half was playing with git. not...my idea of fun, or the best use of my time IMHO.
git is like a breadboard and a bunch of components. you can probably do most anything you care about with version control with it. but some people, say, just want to watch TV. they don't want to build a TV everytime they want to watch the food network. i wish folks would git (yeah, bad pun) a clue and start writing wrappers around git that provided for an easy sane workflow that didn't involve developers, who are better off developing, playing with the nuances of version control often in an environment where the workflow is uncertain.
take in contrast netblocks. A crude diagram is here: http://k0s.org/portfolio/netblocks.gv.txt . netblocks is a way of managing documents. for the subset of problems where what you care about is a web, netblocks allows you to build frameworks or websites. it is not a framework! while people like me (document-oriented folks) may use netblocks OOTB to make a website, this is not the goal of the project. while i think django is as pointless as linus thinks svn is, if you want to make a site that's easily done with django, its a much better approach than trying to use netblocks to build a site. (likewise, if you want central version control and don't mind the stnanks of svn, then i'd recommend svn over git.)
i know truth in advertising is too much to expect. i'm a linux geek and am used to a tools-approach. but in general when someone asks for a solution, throwing a bunch of tools and raw materials at him and saying "here you go" isn't exactly couth.
One good thing about working for Mozilla is that I get to use a bleeding-edge browser.
One bad thing about working for Mozilla is that I use a bleeding-edge browser.
I'm kind of joking, but take me very seriously. We need to fix that bug where I get off work and lose connectivity walking to the CalTrain. Because that could be an intense commute: apt -> coffee -> transportation -> scramble consonance -> work -> iterate! -> next -> development -> bugs -> learning -> home
Browsers are the operating systems of the web
is there a conflict between this web-OS and your machine OS?
No! The proliferation of computing platforms and virtual machines is the divine spawn of connectivity
the leapfrog methodology
No, not the time-centered difference numerical method. I thought of a new work-sharing methodology for a group of programmers with a common area of expertise.
You begin with a group of programmers and an inbox of tasks greater than the number of programmers. You assign each programmer a task and an arbitrary order. The programmer works on the task until completion or until they become blocked. If they do become blocked, they may push their task up the chain.
If you finish your queue of tasks, you can select another and/or leap over the person in front of you. The intention is, since others can now push tasks to you, there is a self-selection process favoring the more skilled and more likely to help others. The front of the chain (maybe everyone, I don't know) can arbitrarily leap back at any point of time.
It seems pretty random, but there is some inherent structure in it. There is the self-selection, as mention. There is the fact that fewer people like to or are qualified to give help on a given class of problems. And there is an easy escape root if you are blocked on a problem.
This might not work too well in practice, mostly because people have different skill-sets and there is no clear-cut motivation to be high up the chain unless that's your thing. That said, I think its a pattern worth noting.
re: http://k0s.org/blog/20100609184843
the correct way to get this ratio is to have each team devote half their time to infrastructure and half their time to striding forward
It is a common conception that the porta-bella, or portable-bella, is quite large, when it fact it was developed as a more transportable version of the classic bella
a joke i don't have time to do
Go to a restaurant marked '$$$$' by Zagat. Then, when the bill comes, say, rather indignant, "But the book said it was going to be four dollars..."
Onion article
"[Facebook] is just like interacting with people in real life, but even worse," Anonymous Freshman, UC Berkeley
Why Technologies Fail
Technologies usually fail in a gentle way, compared to other human endeavors. A new technology supplants an existing technology. To look at recent trends, the buzzwords ten years ago were "blog" and "myspace" and the buzzwords of today are "twitter" and "facebook". The respective intents -- communication and social networking -- are parallel across these, but we have gotten an upgrade in medium. Compared to contemporary advances in software development, the differences between the technologies is not marked. Blogging has become a paradigm of its own, but has failed in the sense that it no longer is predominantly used for the quick (and often pointless) communication provided by twitter (this blog being an exception). MySpace, except for music, has failed almost completely in comparison to FaceBook. While both sites hired prominent engineers and MySpace had a huge early competitive lead, FaceBook is this one of the most traficked sites on the internet, while MySpace isn't in the top 20.
So we can ask then, why do technologies fail so slowly or why are the originators of original technologies so seldom those that ride the wave when the obseleting technology is evident?
Much of this comes from a fear of innovation. Due to financial and social pressures, maintainence of the status quo supercedes in priority the investment needed in driving technologies forward. Innovation needs two stimuli:
- Research and development of superceding technologies
- Development of infrastructure to perfect process
Since the one predictable facet of the future is that it will be unknown, the state of the art must be immersed. It is an oft-mistaken notion that future technologies appear abruptly. Except in certain cases, this is mistaken. As a historical example, Thomas Edison is said to have invented the electric light and that overnight the world was changed. In fact, several forms of electric lighting existing before Edison's incandescent bulb, which was not an unknown idea to scientists. Likewise, today the technologies that will drive the future of the web are not strangers to those in the field. But bringing them to market in a way usable to consumers is what changes the world.
Since engineers at the forefront of their industry are generally very bright, and since known good development methodologies are common knowledge, why does this process seem so slow and jagged to consumers? We've been promised the electric car, transparent computer interopability, and houses in space for years now. None of these is beyond the reach of the state of the art. And yet they are not palatable to the market, despite high demand.
In order to extend the state of the art, the state of the art must be full. That is to say, innovation saturates. In order to develop superseding technologies, the existing technology must flood the market. Until then, the practical points of implementation will not be perceptable as needs.
Taking each of our examples, the electric car has not become a dominant technology because of the investments of a legacy dominant technology, that of fossil fuels. The energy industry, first saturated by fossil fuels in the 19th century, has become a global power. Like all powers, a key component of it is preservation of its prevalence. So prices are kept (yes, even today!) artificially low. As a byproduct (or conspiracy, by others' counts, but quite inaccurately for the most part), gasoline powered cars become more practical, even if the absolute cost to the economy is a lack of innovation and slower progress in adopting future forms of transportation. We see a technology -- fossil fuels -- that due to a overarching demand for its product can continue such demand until scarcity forces alternatives to dominate. Its infrastructure is its product, and there can be no real competition because its infrastructure has such a high total capital value of the world.
What of the promise for computers to help organize our lives? Technologies exist today to put documents on the internet, to communicate about whatever we want to talk about, and to keep track of our schedule. However, while in one sense it can be said that the integration of these technologies is quite innovative (e.g. adding an event to your calender due to an ICS attachment in your email that was automatically rendered from the sender's message), the practical reality is the lack of seemless integration makes computers an appliance for doing a discrete number of things and less about engaging in a process that is information exchange. In software development, process equals product: the outcome of a seemless communication platform, allowing people to manifest intent with their machines, is symmetric with the manifestation of intent via the software development process. In this sense, programming is speaking very specifically to a computer in order to get one's ideas across. Just as there is no unbiased reporter, the code that drives computer programs is a direct manifestation of the engineer's comprehension of the problem to be solved.
Since so many engineers are really good at what they do, and since there is a large group of integral known problems that prohibit a direct path forward, why aren't these problems solved? Again, this is a result of a lack of saturation of the state of the art. On one side, this takes the form of consumers of technology being most keenly aware of the problems that confront them everyday. If a technology is satisfying, then there is no need to innovate. If it is known how to work around a deficiency, this is often seen as preferable to an expensive upgrade often of unknown quality and ease of adoption. Consumers and producers of technology don't move forward because the path forward is laden with holes.
What fills in these holes, ultimately, is investment in infrastructure. A system with an ideal infrastructure makes solving problems always a step forward. This is the densest communication vector. A system with a non-ideal infrastructure forces side-innovation. Steps forward may be achieved but only by concurrent side stepping to avoid difficulties. For a pure consumer, side stepping is only undesirable in that it causes displeasure. For a producer whose goal is furtherment of the technological state of the art (while, notice, like oil companies, some producers are not), this is a direct impediment to progress. A poor infrastructure allows only side innovation. The current state of technology is such that maintaining its state requires full-time investment.
Investment in infrastructure is often overlooked in the drive for innovation. Expectations are such that a great idea is something to implement and profit from. Such a discrete view of technology is ultimately noninnovative as it produces no direct growth, only an instance of a technological implementation. In order to grow, the fires of innovation must be continuously stoked. Problems must be continually fixed, build systems must be continuously kept up with the holes on the horizon. For technology, process equals product. If "progress" is just one-offs or work-arounds, the producer is pigeon-holed into a well of product maintainence instead of the ability to create.
Which brings us to houses in space. Space-faring technology has not become consumer accessible in over half a century of innovation, again by the best and brightest. The Apollo moon landing is held as one of the wonders of the modern world. Yet, in our history, it remains but a blip. Particularly in America, the cost as a response to demand of putting people into space has risen over the years despite investment in space technologies. The potential return on such an investment is vast, and yet it has met with no takers. The problem is that there has been no investment in the infrastructure needed to make this a reality. Scientists play with state of the art probes and ion drives, but the focus is not on beginning to fill the market, but the seeking of esoteric data with the unreasonable hope that the studies towards the mysteries of the universe can somehow be marketed. Sadly, this self-promotion has not received the same investment as professional sports. Houses in space will come, but only when we realize they are ours to have
not enough coffee
i was staring at my gmail trying to figure out what i needed to do, when i opened another tab to go to...my gmail
After years in the Bay Area, I just now realized that the spoonerism for "BART train" is "tart brain"
scientifically determined precise ratio of time working on new features vs time cleaning up for an old large project:
1:1
Important Note: if the above criteria applies to your project and you are not at the ideal ratio, it is not necessarily true that moving towards the ratio is a good idea
There are two kinds of people in the world: those that categorize things binarily and those that don't.
= patchwerk.org =
''social engineering for human beings''
A GUI (e.g. github) is actually usually the correct way to do repository administration. There are a finite amount of things that humans should really do, and while they should be be a group of atomic actions put together to form a workflow policy, doing something like "splitting a patch" is easily doable via a GUI (even if you're an idiot) and hard to get right from the command line (even if you're a pro).
patchwerk.org is a site for writing code in a collaborative way. Use the advantage of the mercurial system to write code with other people! Lots of eyes is better than your two!
Being the only engineer on a project lets you write code however you want to. If you're a good engineer (you know, the kind that writes tests and does all sorts of other checks to make sure you're software works), then being the only developer allows you to make applications really fast since the only bottleneck for decisions is you.
But something is missing....breadth. If you write code, it is how you think the problem should be solved which depends on your definition of the problem.
''Even the best engineers have something to learn!''
Even if you're the best hacker there is, others might think of valuable features that you didn't. Some of these you might disagree with. Others you might think, ''Why didn't I think of that?''
This is why social engineering is useful. While of course having others catch silly mistakes is important, and particularly with programmers less experienced with a language, having interaction can help teach them the tricks of the trade, developing a deep understanding of the problem-space is an aspect of engineering that has no limit of mastery.
Since its inception, distributed version control systems (DVCS), such as mercurial, git, and bzr, have had proponents stating that these had solved a vital problem in computer science. While this is not untrue, it is usually not the problem that proponents of these systems say it is.
The problem that DVCS solves is the problem of replication on top of that of regular version control systems (VCS). All of the sudden, a repository need not be canonical. I can easily just copy the repository and apply whatever changes I want. Others can contribute to my repository and, in fact, the repository that I copied from is no more canonical (save by convention) than my repository. If version control is an infinte spool of rope to hang yourself with, then DVCS is a rope factory.
The problem that DVCS doesn't solve is that of putting things back together. Sure, I can work on my clone and you can work on your clone and others can clone from us ad infinitum. But what if I want a change from you? DVCS proponents point out (correctly) that DVCS have much better tools for merging these changes than non-distributed VCS. However, ultimately merging is a problem that requires a human in front of a screen making decisions on whether and how disparate changes can work together. If you add a new file and I add a new file, then probably (but by no means guaranteed!) there will be no conceptual conflict between our changes. If you and I edit the same file but don't touch the same lines, the possibility of conflict is greater, but again is possibly unlikely (depending on what we did of course). If we edit an overlapping region of a file, then this just has to be sorted out. In special cases, it can be said that there is an easy merge algorithm...
So DVCS made it easy to develop a patch or similar to someone else's code. But, save for the trivial case where there are no changes to the master, DVCS has not solved the problem of how to put these hacks together.
The problem of merging is too easily and too often reduced to an algorithmic problem. Sure, better tools save time and make our life easier. We like better tools! But until machines start thinking for themselves (I'll give them ten years), programming is about manifesting intention and therefore merging changes is merging intention!
What is needed isn't better merging tools. Those are pretty good already. What is needed is...
patchwerk.org is designed to give you workflow that feels natural and that you really don't have to think about. We give you all the ability to get around this workflow and do horrible things, so if you don't agree with how we see the universe, then you're certainly welcome to work however you want. Hey, it's your software! But we hope you find what we've done pretty useful, at least within the context of social software engineering.
So what are we talking about here?
Forget forks. It used to be that fork had a rotten taste to it. Sure, the meaning of a fork in github is entirely different from "I'm going to fork ${project} because you refuse to include my feature" or even from vendor branch. But when you're hacking on some code, all you really care about is ...
- the changes you are making
...and...
- the ability to use the code with your changes
patchwerk makes this happen with patch queues and easy tools to use them. If you're making your own project, then you're probably working on the trunk (unless it's a large project). But if you're hacking on someone else's project, all you really care about is keeping it in sync with the source and getting your changes upstream. And if you're anything like me, append "as soon as possible" to that last sentence.
So your changes are hosted in a queue of patches. You can have as many patches to a project as you want. They may require being applied in order ... or not. That's up to you.
The best way to use patch queues is to have a patch associated with a single issue, like "implement 3d rendering" or "profile performance of web server" -- something that's atomic to a human, and to put these issues in some sort of issue tracker. This gives you a tight correlation between intent and manifestation.
''So how do I get started?''
Start a project on patchwerk.org and start hacking! Get other hackers involved, it's fun!
-or-
Find a project on patchwerk.org that you want to hack on! Once you have an account, just find some code you want to work on. Click on a place you want to edit (or you might notice the "Make a patch" button which will help get a clone of the code and a working patch queue on patchwerk.org and your local machine) and patchwerk will automatically make a patch queue for you! (Or if you already have a patch queue for that repository, make a new patch in it or append to an existing one).
Once you're done editing, browse to your patch. If you think it's ready, there is a "Ready to sail upstream" button that will let the original repository curator know that your patch is ready (in your opinion, anyway) to be put in his repository. S/he might put it in straight-away. Or s/he might have things s/he wants you to fix before putting it upstream. Or s/he might not want the patch (sorry!). But you can keep your patch and repository regardless of what upstream decision makers think. patchwerk.org still allows you to fork -- we just don't encourage it as a first option.
The reason that patch queues provide nice workflow as you can provide some guarantee that they apply cleanly. No, this isn't a contradiction about everything said above, that merging is a human problem not an algorithmic problem. You still want to have someone looking at these things before sending them upstream. But given the state of a repository and a patch, you can see if it applies cleanly or not. If it does, then you at least can push it upstream (whether you should or not is your call) and be assured it will apply cleanly.
Each patch has a icon indicating whether the patch is up to date with the canonical tree (or trees, for advanced users). If it is, you're good to go. You can optionally have notifications sent when the source repository changes (either the file(s) your patches are in, just when there are conflicts, or more safely, the entire repository). If a patch doesn't apply after a commit, the patch will be labeled as broken and you'll receive a notification unless you opt-out.
Once the patch is applied, it is removed from your active queue and put on the backshelf. You'll still have access to it, but you really don't need it anymore.
While you can't write a tool to solve problems, you can write a tool to help you think about problems. patchwerk.org is such a tool. We've bundled several bits of technology to help you develop software:
- patchwerk uses the excellent mercurial version control system
- patchwerk enables the excellent patch queue extension to mercurial. This enables you to hack on others' code while still keeping the source clean
- patchwerk features excellent workflow for collaboration. As a project manager, when someone alerts you to a patch they want you to include, you can review the patch easily and can see if it is applied to your most latest revision of the code (or more! We'll get back to this in a second). As a contributor, you can easily check out a project you're interested in and start hacking right away. Then, when you want to share your hack, you ping the project manager(s) to look at your patch! We can't make sure it will be included, no matter how useful it is, but we do provide the tools to make sharing patches easily.
- code review! Collaboration is really about talking about code. Some of this is pretty high level, but you also need to talk about the nuts and bolts. patchwerk let's you have discussions about files, patches, commits, or particular sections or lines in either of those.
- splitting patches! Often what was thought of as one issue is actually two (or more). patchwerk.org provides an easy TTW interface for splitting a patch into multiple pieces (or, much easier, flattening a set of patches).
- applying patches to multiple trees: it's never fun, but often there is a need for sizable projects to have multiple branches or (far worse!) to have the same source living in multiple places. While currently the latter is out of scope, patchwerk.org allows you to mark your patch for multiple trees. This is a bit of an advanced feature as now, instead of just one target, you have a few. On the other hand, it's better not to have to copy+paste when you don't have to. This feature is documented more completely on http://patchwerk.org
Future features: If people like patchwerk.org, there's a lot that can be done to make this not only a great platform for collaborative development, but a great community.
- Issue tracking: Something is wrong with your software! -or- You want to add a feature! Note it in our issue tracker! Once you adopt an issue, a patch will be set up in your queue and all commits on this patch will be automatically noted on the issue. Likewise, creating a patch will automatically trigger an issue to be created in the tracker. Finalizing a patch (either having it accepted upstream, or noting that it is finalized to whatever state) will automatically close the issue. Parallel to patches, issues can be forked and combined. I could talk about issue tracking all day, so stay tuned for excited updates here.
- Wiki and mailing list: Projects need places to talk about themselves. Wiki pages serve as a great collaborative space for everyone to develop canonical documentation. The wiki can consume documentation featured in the package (in many formats) -and- editing the wiki can push the documentation up to the project (in some formats). (The workflow of this depends on the general project policy. The default case is to treat wiki documentation the same as other source code, so the wiki edit creates a patch which must be approved before putting it in the source). Archived mailing lists give a place to have high level conversations. When a mailing list discussion crystalizes, we provide tools to mirror the takeaways onto the wiki, notifying folks of where this now lives. And as you might imagine, our wiki and mailing lists play nice with the issue tracker and code review tools!
- Continuous Integration! (coming soon!)
Q: What if I basically like someone's patch but there's something I don't like about it?
A: Easy. Since patch queues are first-class repositories, you can make a patch queue for their patch queue! Make a change to their patch and, if they decide to accept the change, you can end up with a patch you both agree on. You can even set it up so that if they accept your change, it automatically gets finalized to your source repository! (Assuming there were no other changes, of course).
Q: Neat! Can I have patch queues to patch queues to patch queues?
A: You can, of course, but we don't provide any front-end or functionality supporting this. A project is a piece of code. A patch queue is a collection of pending ammendments to that code. A patch queue to this is critiques of patches. Levels beyond this don't really mean anything more than critiques of critiques. Maybe if we get large enough projects to need this, we'll open up this functionality, but sometimes sanity is better than a complete lack of restrictions.
Q: Can I edit code through the web?
A: Yep! If you edit your own code, (be warned!) it will automatically be committed and pushed. So make sure that's what you want to do! If you try to edit someone else's code or patch, then you will automatically generate (or add to) a patch queue for that repository.
Working through the web is great if you have some little change or annotation to make. If you're doing something bigger, you might be more comfortable checking out the code and editing with your favorite emacs.
Q: What if I want to host my code elsewhere?
A: Assuming your code is in hg, git, or svn, you can host it anywhere so long as it is publically check-outable. We provide mechanisms such that you can give a way to automatically push upstream. If you don't want to use these mechanisms, then you'll have to do this manually. Sorry! There are some problems that can't be solved.
Q: Is patchwerk.org a federated system?
A: You bet it is! patchwerk.org is an openID provider and so should work with any other patchwerk websites. They like to talk to each other, so you can certainly mirror and aggregate work on any server running the software. If you want to set up your own patchwerk site, the code lives at
http://patchwerk.org/patchwerk/patchwerk.org
(Cute eh?) Read the README for instructions on how to get started. You can find other of our tools in http://patchwerk.org/patchwerk/ if you're interested.
HAPPY HACKING!
When you feel the urge to write something down because it is important, this translates to "mark this with an X and move on until it recurs"
On writing: the narrator
I've often been told my sentences in prose are often too long. This is true. In talking with a friend about how I find it hard to reduce their size and keep their flow and essence, I presented him with the sentence, "Luna still carried the hallmark of civilization, balanced between the overwhelmingly oppressive sophistication of Earth's decay and the vacuous military frontier of the outer worlds." He consented it was long but he liked it and said it would be fine as long as it was from a nonpersonified narrator.
I never really gave much thought to the narrator of that beloved story. But all narrators have a voice. I suppose that that one is of me in the mode of weaving a story. It is always third person, and mostly it is distant and seemingly impartial. It is certainly not the other-voice of any particular character. But occassionally, I slide closer to a character or more distant, always with deliberence. It is the kind of thing I would hope a careful reader would notice and appreciate.
Unless one has intimate reason, it is in poor form for a narrator to lie to the reader. But the narrator may deceive. As story-teller, the narrator's job is to make you think things, to draw you into a world whose effect is the measure of it. If by a perverted account the reader suffers more of the effect, then one's aims are acheived.
Though, or so I would like to believe, my narrator is more distant, as was Kafka's, also there is the sort of psychic soup of expression therein, like Phillip Dick or Bill Burroughs, as there were some sort of primordial dissolution of the characters' collective unconcious. Kafka's way is better, and in this I know I will never achieve his level of mastery.
The narrator's voice changes much over the saga, mirroring -- being -- the story told and also the characters who act it.
By no means do I present this form of narrator as ideal. Rather, this is the form of narrator one use sfor this story. Every story has a narrator, and every narrator has a voice. Share your story as it was shared with you
Want to keep your data concurrent across CouchDB instances? Try KitchenSync
(not affiliated with the culinary supply outfitter, Kitchens,Inc.)
so I said, "Keynesian economics? More like Dickensian economics!"
(I'm pretty sure there's a New Yorker cartoon in there somewhere)
Rules of conflict
Note I said won't and not can't
This implies...
Joey Martinelli:
I'd come with you two, but I'd feel like a third rail.
Just like the canary in a goldmine.
The only education I've had is from the school of Fort Knox.
You're a regular Hubert Einstein!
if python gives you enough rope to hang yourself, and version control is an infinite spool of rope, then DVCS is a infinite rope-spool factory
python -c 'import sys;_=[i.decode("base64") for i in "bGljZW5zZQ==\n:UHl0aG9uIHdhcyB3cml0dGVuIHNvbGV5IGJ5IEplZmYgSGFtbWVs\n".split(":")];globals()[_[0]]=lambda: sys.stdout.write(_[1]+"\n"); license()'
I want to write a program for the device I just bought....
70s: Well, most of the register names should be pretty obvious. You might need to buy some transitors to patch the board. But shit, you know that, right?
10s: Great. And we're really excited to have you writing applications for our device! Let's just get you started. First, you'll need to download the SDK. Now, it's $300, but you'll make that back right away in our app store! Then, when you complete the wizard to setup your application and register it with our company. And once you sign the license agreement, we'll have you register and up and running with our IDE in no time
Which is worse?
the myth persists:
This is nothing more than information hiding, which is one of the tenets of object-oriented programming.
-- from http://www.ibm.com/developerworks/webservices/library/co-xpcom.html
It is one thing to say I cannot help you, for this is what all say save to those few worthy of true loyalty. I hold no blame, for I can offer no better.
It is another to rip at your scars while blood rushes cold from your heart. These pickers of nits, well-meaning, surely, cannot even be scolded for their lie of help, for that lie to themselves they have not revealed.
Eh, poor Yorick. I knew him okay. A fellow of ... finite jest, and pretty cheap taste. He hath bore me in his back seat whenever I would give him gas money; and now, how abhorred my imagination is ... that I don't have a taco.
roadmapper
One piece of software I need is a way of making road-maps for other software. Issue trackers are great and essential. Unfortunately, what issue trackers miss out on is charting the course for software futures. I want a place to see where all of my medium- to long-term plans are laid out so I can assess them and meaningfully figure out what needs to be done, what can be done in a period of time, what would still be nice for the future, what is no longer important, and what should be prioritized soon. Issue trackers deal well with high priority issues and as a place to record longer-term plans. They do not do so well with strategically planning for the longer-term, and that's what I need right now.
For instance, take my website . I use this as an example not because it's really what I want this for (in fact, my website is a very low priority right now), but because it is a very applicable example with lots of pieces of software. If I were to jot some notes on longer term plans that need to be done for my website, they would go something like this:
- tagging WSGI middleware
- finish up my mozilla page: http://k0s.org/mozilla
- commenting middleware (with CAPTCHA middleware)
- putting up webcalc in the demos
- setting up email dispatchers so I can mail myself blog posts, images, and documents
- add a add_blog pluggable even handler in bitsyblog so that I can tweet the short form of my blog entries plus their URLs so that these tweets can be picked up by google buzz (thanks, google!)
- mirror my repositories to bitbucket and github
None of these are particularly daunting tasks (although they often seem that way with my relative lack of time). Probably it's a small enough set of tasks/components that I could get by with just an issue tracker (oh, forgot that one: "setup an issue tracker"; if I only had an issue tracker I could record there that it needs to be setup). But, if you will, imagine these are more strategic priorities with numerous subtasks. Since these are all medium- to long-term priorities, whose various many issues won't be scoured everyday, it is easy to lose the big picture in a complex report.
Let's pretend software [components] are ships. That's basically true, right? I want something that lets me see where all of my ships are on a map, so I can rearrange them and send them on different courses as the winds change. This would have to work with an issue tracker (at least for the real world large projects I'm actually imagining), but it's purpose is different from an issue tracker.
And once again, I realize the sad irony: I have written a blog post about a piece of software specced for medium- to long- term about the need for a piece of software to chart the needs for pieces of software specced for medium- to long-term. Ouch. That hurts just thinking about it.
Morpheus...could I maybe have the other pill now?
the halting problem
No, not the computer science one! I'm talking about how drivers in the Bay Area slow down everyone in their vain attempt to be polite. The scenario goes something like this, if you'll imagine with me for a second...
- I come walking up to a corner. I'm probably going to cross the street, maybe.
- A car comes up the the intersection. They stop. They have plenty of time to get through before I would even have to change the pace of my walking.
- But they just sit there. I stop, waiting to see what they'll do.
- They sit there a little bit more.
- I give up and cross the street in front of them. ::sigh:: Now they've slowed me down and they've slowed themselves down for no friggin' reason.
Okay, I understand they're just trying to be polite. But, um, why is this polite? They had plenty of time to go before I would have even had to slow down! I mean, do they have such poor sense of timing that they aren't sure if I'll make it across the street before they go? (If so....I'm not so sure if they should be driving.) Do they think that them stopping for an extended period of time and me stopping for an extended period of time is a thing to do?
This happens several times a day. If it was once in awhile, I probably wouldn't care. But it's all the time.
Worse, this is the best case scenario. Other, much worse, variations on this scenario that have happened to me (some several times) include the following:
- The car stops or pulls up halfway into the street. Then they wait for me. I mean, their car is directly in my path, so what am I supposed to do? Walk in front of them in the middle of the cross-traffic street? Then they honk at me, letting me know that I'm wasting their time "making" them wait for me when all I want them to do is go so I can cross behind them.
- I'm not crossing the street. I'm just standing on a corner. They halt for me anyway. Then they honk at me, often waving their arms and mouthing who-knows-what for (again) "making" them wait for me. All I'm do is standing here, guys (and gals). Just, um, go about your business.
- They stop. I stop. They wait. I wait. I wait for a bit more. When it's obvious that they're just going to downright refuse to move until I cross in front of them, I walk across. Then when I don't mouth "thank you" they get all pissy.
So, attention motorists! I know not many of you -- or anyone else -- reads my blog. But if ya do, this weird weird form of politeness...isn't. Just go. Assume that everyone is just doing their thing, mon, cuz that's most likely the truth. And in the end, you've made everyone happier. Maybe you don't get to drive home with the self-congratulating "I stopped for that guy so I must be a good person". But trust me, you're better off.
It's one of the things I miss about New York. People say we're rude out their, but it's really just kinda more live and let live. Do what you want to do and more than likely you're not going to bother anyone else. If you see someone loaded up with baggage, it might be a nice thing to hold the door for them. But I've gotten yelled for that too.
another website i don't have time to make
imboredandhavenofriends.com
Basically, it stems from a common collusion of problems I tend to have and am suffering from now:
So imboredandhavenofriends.com is a site where you can do something with other people. You put down where you are and what you want to do, and maybe someone else is bored enough to do it.
There is a site already for this: craigslist! But it's become increasingly awful.
Bah....bored! So bored!!! Need to leave house before crazy I go
I wish I had someone to read plays with. I have been reading my favorite snippets of Shakespeare to myself, but it is not the same to play to the mirror.
Life's but a walking shadow, a poor player That struts and frets his hour upon the stage And then is heard no more: it is a tale Told by an idiot, full of sound and fury, Signifying nothing.
all is occluded
If you're a bad programmer or otherwise don't want other people to figure out what you're coding, there's a two step path to success. Don't worry! They're easy! You're probably doing them already!
- Don't write tests
- Don't comment or otherwise document your code
Between these two, there will be no record of the intention of the code. And if the intention isn't known....you can just claim it's desired behaviour!
and yes, i am fully aware that it is childish to pastebin my pastebin script using my pastebin script
to measure one's self versus one's fellow unwashed masses leads to mediocrity
to measure one's self against the strides of those that walk amongst the stars points towards excellence
Truth is Treason
I went to drop my laundry off to have it washed+folded.
Aside: I don't really care about doing laundry myself. As far as putting it in the washing machine myself, switching it to the drier, and folding it, let's call it....30 min. No big deal. What I mind, especially as I have too many of them already, are the headaches. Like...the last time I went to a laundromat....oh! no driers! So I have to string the clothes all over my apartment. I suppose I may be too much of a gentleman in some respects. But it bothers me. It bothers me most that I have A Task I Cannot Complete. Then there is the timing. While my laundry is going at the laundromat, I better precisely time it. If I stay with my clothes, I throw away time. If I leave, I chance having them stolen. Or worse...being yelled at because I've left my laundry too long in the wash/drier. Or having them thrown on the floor. Yes, these things have happened to me, multiple times. /End backtrace.
So, the place three blocks away from me, which I took off deliberately early just to meet their SF hours, was unmanned when I took my clothes there. I knocked. For 20 minutes. No answer. While I was waiting, I googled "wash and fold, the mission, san francisco" as well as google mapped it. The closest location was the Fiesta laundromat. Open 24/7. Great.
So I went there and asked "Do you do wash and fold". "No". "Do it yourself" was the response of someone flirting with the attendant. should have said "Fuck you". But I didn't. Yeah, it's easy to do laundry if you know someone working at the god damned laundrymat. If I knew someone working at a laundrymat....I'd probably do my laundry there. As it is, I've already waste half an hour's salary fucking with my laundry.
So I go further. I find a laundry automat. Yes, they exist. While it's far from my apartment, I'm just tired of carrying my laundry at that point. Evidently, San Francisco doesn't know about wash+fold.
Look...it's not about saving time. It's about accountability and not having to care. If I had laundry in my building, and, if unlike Berkeley, my laundry wasn't thrown on the floor literally five minutes after being in the washer or drier (yes, absolutely, this happened), I don't mind doing laundry. I don't. Like I said above...actual time: 30 min. Amount of worry: priceless.
Long aside aside, I end up at the Zeitgeist. This used to be a serious biker bar: http://k0s.org/blog/20100512212231 . It now has a myspace page: http://www.myspace.com/zeitgeistsf Things are going fine. I almost forget I am wearing a nerd T-shirt as much as the clientelle has changed.
I like taking photos of stupid shit. See http://k0s.org/pictures/specialfx/ . So I'm debating whether I want to stay at yet another place where no one talks to me when I notice a(nother) really cool reflection in a bar glass. I take a picture. The bartender demands I erase it.
I'd post the picture to clarify the Truth. Oh, but wait, I can't! So you'll just have to take my word I was doing something innocuous.
I thought the Truth is Treason was ironic. Now...I'm not quite sure...
bikes in the Mission have replaced bikes in the Mission
when the world becomes that fucked to death shite pile that has become, in retrospect, precious, it is those who almost knew what things were that shall know nostalgia
nothing is ever what it was ( http://www.quotationspage.com/quote/421.html )
when you, an experienced drone, hear the shockwave, you wait for the blast
In every field of magick, there are the believers in esoterica and those who use the craft to manifest their will
The basis of diplomacy is that two selfish parties may take more advantage of a compromise between their objectives than adversit between them. No one walks away happy from a compromise, but each party feels relief that deadlock is breached.
Test Driven Development, take 2
I haven't done much test driven development recently. I, sadly, find it usually hard to write meaningful test. I've hoped someone would teach me how to write good tests one day, but, in absence of that, I can only do what I usually do: throw things at the wall until they stick.
I've recently started to do some testing for a piece of software I'm working on: http://k0s.org/mozilla/hg/ProfileManager/ . Basically, it's a manager for Firefox profiles. There's nothing particularly complex here, just managing directories. After doing the same sets of steps for testing my code manually, however, I got really tired of it. Also, I wanted reproducibility in the likely case I forgot something. So I started writing tests.
The first thing I discovered was how much python testing frameworks suck. I was originally using doctest as it's an integration test and I want to keep state and do tests based on the current state. Things were going well...until i needed to debug. so i had the simple request of wanting doctest to stop on first failure. Nope! I mean, if i can, an hour of reading didn't find it. I can suppress reporting of other errors. Or I can raise an exception on first error that is basically indecipherable to where it died in my code. So that's out. Unittest is just not suited to doing anything, well, other than unittests, which is not what I'm doing. When I have done TDD of my own accord, it has usually been testing with a preserved state. I suppose this is largely because of the above (getting tired of doing the same set of steps to test manually). I'd love to do more unittests. I find it really hard to write code that is unittest friendly. Maybe this means I'm not a good coder. IMHO, if you have to stub a lot out to get a unittest working, then not only is it a pain, you're often not testing what you think you're testing (speaking from experience). so I did what I usually do. I wrote my procedure in a .py file and did my testing with asserts: http://k0s.org/mozilla/hg/ProfileManager/file/tip/profilemanager/tests/test.py
Tests should be easy to write. Testing is wonderful and not testing is retarded. But i'll tell ya, when it's hard to do simple things, I have a real hard time getting motivated to do them.
The second thing I discovered is just how many stupid mistakes I make in coding. I suppose I shouldn't be surprised. Usually I fix as I go along and I'm sure ProfileManager is no worse than anything else I do. It's just....so simple that I'm surprised at the number of my mistakes. Missing colons, wrong variable names, etc. So TDD kept me honest, not to mention finding many mistakes that I wouldn't have found as quickly were I doing by hand. And I don't even have much coverage.
you kids have it so easy today...
why, back in my day, bits had only one value. they were all off!
you kids just that you can turn them on these days...
Development Considerations: the contract
Observations:
- developers will always have issues that they'll wish to note. Some of these will be important only to them; some of these will be actually important
- effective managers will want to limit scope creep. This will mean shooting down developer ideas
Note that this is the best of scenarios. In dealing with human problems where one is on the same team, then it must be assumed that all parties are doing their best for the team. If we've gotten into the scenario where developers and managers are trying to undermine one another (or control one another), then the game is already lost and no good software will result.
So how do we make the above work?
In other words, to raise an issue is to put some sort of priority on it. No egos allowed here! All software of any age has design defects and things that don't work right. But to say "I don't like the way such and such is done" is not helpful. Basically, don't bitch. If you have a clear idea on how such and such could be done better, by all means, present such a solution if it is worth the team's time in the present or in preparation for the future. But just pointing out when something is wrong does not help.
The highest court in the land just got taken down a peg
Supreme Justice
Objection overruled...with a bullet
Don't forget to watch Supreme Justice 2: activist judges
i wonder if the Firefox build process takes intentionally long so that i will have more time to read documentation
The Open Source Hacker vs. The Proprietary Programmer
I ... don't pay for software. I don't steal it either. I'm mostly uninterested in proprietary software because it costs money, it's against the inherent philosophy that information flows freely, and most of it is no better than open source alternatives, at least if you're like me and don't mind getting your hands a little dirty. Let's face it: most (all?) software of any size has problems; things that it should do better and doesn't, outright bugs, or inability to work on problems that I, the user, wish it would.
There is good proprietary software out there. There really is. But I have very little motivation to use it. All software has a buy-in time, where you learn how to use the software effectively. This is already enough to keep me using emacs instead of vi, even though I feel that vi would fit my brain better. I've already paid the buy-in time for emacs and it is doubtful that I will want to use my little free time learning a new editor. I can use vi, I just can't do anything fancy with it (though, to be honest, I can't do much fancy with emacs either). Now if someone comes along with a new editor, supposedly better than emacs or vi, and wants to charge me money, will I pay? Highly doubtful. emacs basically does what I want. In many ways, it's kinda a crappy piece of software....but what isn't? It's a known crappy piece of software that does a bunch. So not only do you ask me to throw away my expertise in emacs for something that, if it does much complex, will be a new learning curve, but you also want me to pay money for it (possibly per machine)? And since emacs is open source, as archaic as it is I'm sure it will be around for the next twenty years. Your new text editor, however good it is....well, it's not open source, so who is to say that it won't go away when the next cool thing comes around? [On similar lines, I don't understand why anyone uses M$ word documents, since there is the non-proprietary HTML with many good editors and free online hosting services. But I digress.]
This has come down to a dialog in my head between an open source hacker and a corporate developer. Let's see what happens....
Developer: Hey, we have some shiny new toys. Want to buy into them?
Hacker: I dunno, I already have a lot of cool toys and they're free. Why should I pay for yours?
Developer: Your toys are kinda weird and hard to use. Ours are nice and streamlined.
Hacker: Yeah, but I can do anything I want with my toys. What if I want to change yours?
Developer: That's the good news! We have plugin points and an app store so you can make $$$ selling your extensions!
Hacker: But that won't help anyone but me. What if someone wants to change the code I wrote or offer a patch to fix something?
So it goes. It's kinda an old argument, and I almost feel bad about rehashing it. But it still bothers me and I still feel, along the line of Mozilla drumbeat, that once non-developers really understand what is at stake as far as how software works as part of their lives, then more people will choose freedom as long as it's convenient (which it mostly is these days). Let's be realistic here. I don't have time to go into a long history of OSS and how it's actually changed computing (though I probably will someday), but to point to one example (and to shamelessly plug Mozilla), Firefox really saved the internet from becoming a proprietary medium that required a corporate buy-in. It's still the wild west and I for one would prefer it be kept wild rather than falling under corporate dictatorship. If you think I'm being alarmist, then I hope you'll take my word that I'm actually understating.
Making your own cheeseshop
It is a common misconception that the cheeseshop (pypi.python.org) is the place to go for python packages. This is only true by convention. I won't go into the history of distutils/setuptools/distribute/pip packaging fiasco. Suffice it to say that (I hope) things are slowly converging and that both pip and easy_install, the two major ways of installing python software, both support a -i option to specify the URL of the package index (which is, by default http://pypi.python.org/simple).
In its base form, easy_install and pip just crawl links. You look at the base URL (see above) /<package>/<package>-<version>-<extension> and download this, unzip, run python setup.py install on it and you're done. So if you want to make a cheeseshop, there are two essential tasks:
- Generating e.g. tarballs for a package and all of its dependencies
- Putting these tarballs on the web with some appropriate parent directory
Not rocket science...barely computer science, really.
For generating packages and their dependencies, I used pip. pip is really great for this. I only used the command line interface, though if I was smarter, I probably should have looked at the API and figured out what pip is doing internally and I could have avoided a few steps. Basically, using the --no-install option downloads the package and its dependencies for you and lets you do what you want with it.
I made a program for this, see http://k0s.org/hg/stampit . It's a python package, but it doesn't really do anything python-y. It was just easier to write than a shell script for my purposes. Basically it makes a virtualenv (probably overkill already), downloads the packages and their dependencies into it, runs python setup.py sdist on each package so that you have a source distribution, and prints out the location of each tarball.
The source distribution is very important as we want packages that will work independent of platform. These should. If they don't, we can make them.
So problem #1 solved. Let's move on to problem #2: putting them somewhere on the web.
Mozilla is so kind as to have given me a URL space on people.mozilla.org. Since easy_install and pip are really dumb and basically just crawl links, and since Apache is smart enough to generate index pages for directories that don't have index.html files in them, the hard part is already solved. I will note that people.mozilla.org is not intended as a permanant place for these tarballs, just an interim instance until we decide where we really want to put them.
Since I like to write scripts, I wrote a script that will run stampit and copy the resulting tarballs to a place appropriate to a cheeseshop. You can see the code here:
http://k0s.org/mozilla/package-it.sh
The variables are pretty specialized to my setup, but of course that's fixable.
Does it really work?
Yes! You can try it for yourself. Try:
easy_install -i http://people.mozilla.org/~jhammel/packages/ mozmill
Watch where the links come from. Surprise! They're all from http://people.mozilla.org/~jhammel/packages/ ! I would highly advise doing this (and just about everything else in python) in a virtualenv so that you don't pollute your global site-packages.
Why am I doing this?
The Firefox buildslaves are supposed to fetch data only from mozilla URLs for stability. So, if python packages need to be installed, they need to be available internal to Mozilla. If a package didn't have dependencies, then this is a no-brainer. But packages do have dependencies. Mozmill depends jsbridge, simplejson, and mozrunner. While this is a lot of work for just one package, if we want more python stuff in our buildbot tests, we'll need to do more of this, and I'd rather have a good solid methodology to do so. I also imagine this growing as a place to put all of our python packages for internal Mozilla needs.
I will note that I did this in a few hours from basically knowing the problem space but never having actually done it. None of this is supposed to be a clean and polished solution. But really, its not bad. We did something similar but less functional at my last job, The Open Planning Project, for similar reasons, so its not like I tackled this blindly. This is not as fully functional as the cheeseshop. A maintainer needs to run the package-it.sh script for each package (and its deps) they want installed. There's no accounts or any of the other features the cheeseshop has. But for a simple prototype and a way to move the discussion forward, its actually not that bad of a solution. There are more robust ways of really doing the cheeseshop, such as http://github.com/ask/chishop , but for a package dumping ground, this solution works and its really not even that hacky (in my opinion anyway).
implicit is better than explicit
I understand what is meant by python -c 'import this' | grep Explicit. On the other hand, when people take this literally, it really annoys me. Python does many things implicitly that quite honestly aren't that interesting to the average programmer. If you disagree, please do your own garbage collection and module path resolution.
On the other hand, things like calling parent constructors implicitly I find much nicer than, say, the C++ way of implicitly doing them. So it's a mixed bag.
What's my point? Eh, I might have lost it. For one, explicit is not necessarily better than implicit. Implicit + sensible workflow is a huge time saver. On the other hand, the flexibility gained by explicitly doing things is also important. But don't believe the dogma
the source really is the documentation
I write a lot of scripts. Typically, when I say script, I mean "something that does something that's easy to do but that I am likely to forget". Since these scripts are educational to me, a nice side effect is that the script is the script can be educational to anyone.
Usually the phrase "the source == the documentation" fills me with dread. Its insulting, to say the least, in the same way that RTFM is insulting, or when you ask how to spell something and the teacher says to look it up in the dictionary. Of course you can, eventually, find information this way. If your task is learning a big system, then its not even a bad way of learning. But if you're curious of how the word is spelled to, say, use it in writing, or if you're using a program to accomplish some meta-goal, then you probably don't care about the minutae.
But what about the positive side, these educational scripts that are really mostly documentation that just happen to run?
I'd like to see something like a wiki that could include these scripts as learning examples. My idea is something like this: you take the comments of these shell scripts and feed them (going through some markup process like restructured text) as the wiki page text. The actual programmy part of the scripts -- you know, the parts that do things? -- these get turned into <pre> blocks or the equivalent thereof. Wouldn't that be nice? Your source code really becomes documentation!
A few extensions...
For a language like python with doc strings, you could use these as well as comments. I realize systems like sphinx already do this. However, I'm talking specifically about these kinds of scripts that are HOWTOs first and working code second.
If you did use these scripts as wiki source, you could also make them editable. That is, if you trust your user base, you could have scripts that are edited through the web. I realize that this idea isn't new. I usually think of editing code through the web as, at best, a questionable idea. But in this case, I think it's apt, since really what you're doing is editing documentation, to code part being anciliary.
"it's not my fault!" ... oh yes it is!
I recently moved to the Mission district in San Francisco -- yeah, back home -- and kinda fell in love with a place that wasn't there when last I was: Pirate Cat Radio Cafe. I mean, what part of that is there not to like? And instantly, some dick spoiled it for me.
I was in line behind some tourist who was taking forever. Whatever. I'm used to that sort of idiocy. Some other tourists were prancing around the cafe, the gratuitous attractive girl taking pictures while the typically douchey boy doing what douchey boys do. I didn't know what the fuck they were doing nor did I care. All I know is they weren't in any sort of line, they were just being little dicks around the shop, whereas I was waiting patiently. Well, as patiently as one can when one is worried about the cigarette smoking tables being taken and one is surrounded by folks with no personality.
Anyway, after the tourists grab their drinks they instantly take the cigarette smoking table. Great. I mean, there's another table, but I wasn't in the mood for being yelled at by tourists for satisfying my nicotine cravings too nearby. The barista asked what I wanted. "One coffee--"
"What about me? We've been waiting around way longer?" exclaimed Lord Douchington.
I said "Go ahead." and walked out of the cafe. Fuck that. The barista turned to me probably because I was waiting in line and not fiddling around the cafe. I realize most precious Californians have some sense of entitlement that they don't have to obey any sort of rules of politeness, that its okay to reserve a laundry machine with a magazine, that having kids is an excuse to act brain dead, and that wandering around a place taking pictures is the equivalent to waiting in line.
What I object to isn't even this. Its that I'm the asshole because I'm overt about it. Did I argue for my fucking rights? No. Let them have their fucking precious rights. But why am I the bad guy when the whiners get their way? Personally, I consider whining much more offensive that outright being a dick. Its being a dick that demands to be coddled.
upstream propagation to pastescript templates
I find pastescript templates (or something like them) vital to intelligent software development (see http://k0s.org/portfolio/workflow.html#software-development ). You create templates for your project and deploy them.
There is a missing piece: what happens when you need to propagate changes to the template back upstream? You have to change both your deployed copy and the template copy.
I don't have a good solution (yet), just noting the problem.
dreams of the tea party
I had a dream last night. I was, I don't know, some kid wizard in the Harry Potter world. Myself and Hermoine were in a class. For some reason, we were driven to the teacher's desk, where I spilt a potion into a pool, enabling me to see a prophecy. Something horrible was going to happen to a girl in the back of class, someone that no one in the class really liked, though she was fairly popular. Someone had set her up to be ruined with invisible strings. But because I saw the prophecy, we took action. Hermoine used alacrity to run over to her and warn her of what was going to happen. While it was still bad and hurt and embarrassed her, she was not publicly exposed.
Now consider the tea party movement. Firstly, let me say that the problem they oppose (the government misspends money) and the solution (make the government smaller) are actually unrelated. This is a sad fact. The government needs to learn how to budget, but this is a human problem, not a problem that can be solved by just cutting off the limbs. We can talk about this more later.
I see the Tea Party as a bunch of very frustrated people who flock around Sarah Palin, who serves somewhere between the Mad Hatter and the Queen of Hearts, saying meaningless things, riling people up. And to what end?
Here's what will happen:
I don't know if the tea party is truly a grass roots movement. It probably was originally, but that no longer matters. Somewhere, some puppet master with dark machinations decided they could use this to their end. Someone will appear at a time appropriately before 2012, and Sarah Palin will put her support fully behind him (it will be a male), and so the tea party will follow him. He will actually be a very scary man. Think Dubya but intelligent. I hope that he won't gain the presidency. In either case, he will try to do something awful. Actually, he'll probably try to do several awful things as a distraction, but there will be one focus. When he fails (which I hope he will), he will have set up Sarah Palin to take the fall.
These things seem unrelated at a casual glance. But I think they are the same thing.
sealed in envelope
i consider google buzz conversational in the same way that i consider what they do on talk shows conversational
(i originally posted this on google buzz, mostly for irony, but decided to import the meaningless banter to a real blog)
Its really sad that the only way to make people who wish to unload drama understand your position is more drama
I find that writers, even more than actors, are grossly aware of the division between their selves and the faces that they wear
idea: workspace correlations
I hate IDEs, in general. In fact, "integrated" anything usually says to me "work within how we tell you to do work", which is exactly my philosophy. I use emacs for editing, Firefox for browsing, python command line for running, etc, and really don't want/need these to talk to each other.
On the other hand, I would like a way to correlate work. I'll tell you what I mean in an example, as I don't want to make this a long blog post. I'm working on a project (well, a few of them, but let's take this one) and I need to do some programming, testing, and documentation. Sadly, the wiki documentation suffers because there's no quick way of updating this. What would make this work for me is if I could tie a group of applications (and contexts, for instance the project's wiki page) into a group and have a way of working on them collectively. In other words, the integration layer is the rules by which I define how I want to work on this application. (I realize I'm being hand-wavy, but as I said, short blog post).
Using this approach, I get to keep my heterogeneous environment and can hopefully do nice things like sending a docstring to a wiki page, or updating instructions via what I'm doing in a shell window.
Too abstract? Yeah, probably. I have a specific workflow in mind but don't have time to elaborate now. Maybe you get it anyway.
Takeaway from the wired revoluion
Information theory is no longer abstract, but something that everyone deals with everyday
For good software...
I'm sure there is some profound implication to all this, but right now I can only think inside the box.
i switched my python indent from 4 spaces to 2
http://k0s.org/hg/config/rev/30161c82a278
it feels a little like not wearing underwear...a little naughty
Ya know, I just have to say it...
bitsyblog is everything that's wrong with blogs. But at least its fast to post.
playing nicely
and yes, I know the 'play' will offend. no matter.
i don't play nicely, and i never said that i did. but i will say that i have played nicer and more honest than many of my contemporaries.
so judge me by that. i don't claim absolution. i just wish 'fair' with respect to me was judged by that which has been laid upon me
a rant about empty space
From http://www.python.org/dev/peps/pep-0008/ :
If necessary, you can add an extra pair of parentheses around an expression, but sometimes using a backslash looks better.
No! Backslashes to mark line continuation never looks better! It is completely non-semantic and their inclusion in python reminds me of the crazy people that do fancy nested tables using Restructured Text. Boo, I say. Boo! And this is not an opinion!
--
The views expressed in this blog post may not reflect the views of rational thought
its all a hack, anyway
I am always surprised when a company refuses to release source code with the reason "its only useful internally". Privacy concerns? Sure. But because its not tidy enough? I don't buy it.
Programmers are used to dealing with messes. In any language, there are parts of the standard library that are, let's face it, just plain bad. Let's look at python. ConfigParser is awful. urllib vs. urllib2? what the hell... And these are just standard libraries. Look at the svn swig bindings. Hell, look at mercurial. The APIs are, dare I say, piss poor. On the other hand, I need those libraries and am glad they exist.
What I object the most to is the double-speak. Its always phrased as if companies are doing a big favor by not releasing source code....protecting us poor programmers. The reality is, they're protecting their reputations. The reality is all companies produce hacky code because all programmers (some more than others) write hacky code. Google is supposed to be the height of genius, right? I've read some of their released python code that looks like it was written by a first-year computer science student (if you're curious, I'm talking about the Google Apps LDAP sync code....tsk...tsk...tsk...). So if they can write bad code so can you!
There's another take-away here. Don't write code that depends on your internals. Even if you never ever ever plan on releasing it, YOU will regret it. All of the sudden your internals change. Oops! Or, the alternative, you spend ten years maintaining spaghetti code and juggling internals because you've committed to a platform. You'll think one of three things after reading this:
- You're preaching to the choir, dude.
- Well, I don't know, but you seem like you know what you're talking about (trust me!)
- Nope, it saves me time
Not to argue the point, especially since I'm making hand-wavy generalization, but if you're #3, then I hope you like maintaining code. Because you will. <plea type="last">Separate deployment-specifics.</plea>
A Command-line Interface to the Command Line
What has become underappreciated in the world of GUI is that command line programs have vastly different interfaces. For instance, contrast something like mplayer with something like, oh, I don't know, cat. It doesn't matter. One common pattern (and certainly not the only one) is the command [options] subcommand [subcommand-options] pattern. This is useful when there is a common context of operations but different types of operations, and is used by svn, hg, python paste, etc.
So I've written a few of these. My latest attempt at this form uses the following form: underneath all, the API, in the form of a class. To interface with the command line, I wrote a class and a few standalone functions that should really be folded into the class that directly exposes the (public) API to users without knowing anything about the API class. python makes this possible. Is it a good idea? Well, probably not, but sometimes you have to do something clever in order to learn what you really want to do (maybe in 6 months).
How does it work? You have a class that inherits from OptionParser. To its constructor, you pass a list of commands that you want to expose to the user. Using the inspect module, you can examine these functions for their arguments and automatically construct an OptionParser (!) for each subcommand and, even more magically, invoke the chosen function once the class is instantiated (!!!).
Yeah, a little too magic, I know. On the other hand, this is a class of problem in which I have profound interest, namely translating one way of interacting with something to another way. Namely, the GoF interface pattern. If I needed something less magic, an IDL ( http://en.wikipedia.org/wiki/Interface_description_language ) would be a way to go, which functions as an adapter signature to an interface.
You can see the code here:
http://k0s.org/mozilla/hg/ProfileManager/file/tip/profilemanager/command.py
Its really messy, mostly because I started off using the command method as a decorator. While I still ideologically support this use case, there are two difficulties. The first is, in my simple incarnation, you need a instantiated object on which to act. This ideally should be restructured a bit. This brings us to the second difficulty: when decorating a method, the decorator cannot tell if it is a method with a class or a free-standing function. This is due to subtlties of how python deals with method binding. Namely, the decorator is called after function closure, but the binding mechanism for methods is called after class closure.
Another argument against this is that, if you have subcommands, it implies a common context. For a simple system, a class is a good instance of a common context. The correct way would be to have a way to pluggably associate contexts and functions, but that's more than I care about now. Class == context .
Ignoring all of the mess I'm sweeping under the rug in the above two paragraphs, there are serious conceptual problems with this approach too. For one, for better and worse, in this approach, the user API is the class API. There is a good work around this -- having a subclass of your real API which is the API you want to expose to the user and then working with this. Complex arguments won't work -- I take into account booleans and variable arguments, but anything more complex would require more work. This isn't really as dire as it sounds, as taken with the user API class idea, you can only pass strings through the command line anyway.
There is also the general problem of domain-specific languages. For instance, look at how I parse out help for arguments:
http://k0s.org/mozilla/hg/ProfileManager/file/tip/profilemanager/command.py#l46
Again, strength and weakness. There is no "standard" for how to document arguments, so I just made one up that is pretty common in the wild. The downside: you must now write your docstrings in this format (which admittedly shouldn't get in your way too much). The upside: you can now programmatically extract help for function arguments. In general, I find the argument that doing things like this is too restrictive uninteresting. Every time you abstract things, you lose some flexibility. The point is: do you get return on what you do and do you care about what you use? python (cpython, anyway) is an abstraction on top of C, which is an abstraction on assembly. Now, you can't do pointer arithmetic in python (this isn't a challenge!). But why would you want to?
I think its cool that you can do such intimate introspection in python. While there are some rough spots (and I'm not talking about my messy implementation), I think they just point to how cool the whole system is. Imagine trying to do the same thing in C. Then, when you get back from the asylum, take this work not as a somewhat too clever implementation, but as a pointer for what I really want, which is the instantiation of a pattern.
The Shih Dynasty is known for its highly cultivated teas. So if you're ever drinking a particularly good cup of tea at a Chinese restaurant, exclaim (loudly) "This is Shih tea!" and the compliment will be well received.
There is a difference in listening to real radio and net radio. With the olde-fashioned kind, I turn a knob and it works. With net radio, I wait for a host to resolve, which wouldn't be so bad if wnyc.org got their act together
It is not the individual that makes civilization great and it is not inherent structures that make the mind great.
It is tools and their application.
pie: the only food that describes the ratio of its circumference to its diameter by truncating its tailing letter
The real point of the American revolution is that were all gentlemen (and ladies). Maybe the original point was more like "the province of equality amongst gentlemen extends somewhat further than specified by birth or common law".
being domesticated
One of the core subjects that occupies my thoughtscape is domestication. To what extent is it harmful? To what extent is desirable? I don't know if I can adequately capture my thoughts in words. But perhaps giving a few examples from my own life will be illustrative.
The case nearest my heart is that of Lilly, my cat friend. Lilly was born into a feral environment as so had to develop the skills necessary to make it in that environment. When I brought her home, she trusted no one. Everything was new to her, each situation one of wonder and fear.
One day (and, yes, it really was about that sudden) Lilly decided that affection was what she most cared about in all the world. While she, like her dad, has always been a strict proponent of protocol, it was on that day that she stepped into domestication. She slowly relinquished her independence, her ability to be constantly desperate, and yes even some of her sharpness. But though they took a long time to manifest, she gained too, even if all she had gained one could renounce as merely illusory trappings. She learned to trust me. She learned to depend on me. She even learned to love me. It is true that when I adopted Lilly, I had no doubt that if she had to survive in the wild, she would be a fierce little feline. Now, while she retains a sharpness and sense of danger known only to those that have experienced peril, she would not make it save by chance. But Lilly has become such a sweetheart. And what of the important questions? Has she lived a good life? Has she lived as she would have wished?
What of me? It is easy to speak of a cat as domesticated, but because there is an innate hubris in thinking of humankind as apart from the other species, to speak of human domestication is a more delicate matter.
It is, perhaps, uncouth to mention the fact that girls become attached to boys in fairly short order. There was a time when this was enough: a girl who would go domestic for me. I don't state a claim to this misfortune of nature. Merely, in this messy messy world, I thought it would mean something to me to have a chemically-subservient partner.
I guess the sad part is that I had such an early will to become domesticated for someone that the next ten years were pretty much miserable. Girls didn't want a domesticated boy, not in their twenties anyway. Now...now I'm more confused than ever. Do I want to be domesticated? Do I want a domesticated partner? Truth or illusion....what is the difference... I guess it depends on which world I answer for: the world of ideas/ideals or the world of pragmatic, ugly reality. I guess the domestication phenomenon both disgusts me and entices me, because of its base nature and because it is a question that is ignored. I like to think of such things. It is a sad reality that the worthwhile questions cannot be discussed, cannot be marketed, for either they are of a profound understanding that need not be reduced to words, or words alone are incapable of transmitting understanding.
hopefully a not too clever solution
At first, I made heavy use of the menu, but have more recently mostly used hotkeys and free standing terminals to launch programs. One of the reason of my declination of menu usage is the fact that I want different programs installed on different computers. On a work computer, I want programs to help me program. On a home computer, I will have more fun programs. On a laptop, I will likely have wireless and power management accessories. On a desktop, not so much. So how do you keep them menu in sync with programs that are actually available? One could argue that this is fluxbox's job. And maybe so. But the fact is it doesn't do this.
My first thoughts were wishing to do python in the menu. While I still would love this, I stumbled upon a way to do dynamic menus in fluxbox via an included file . I don't know why I didn't know about this before...but I didn't. And strictly speaking, this is more flexible than just having python in the menus. (I would note, in passing, that this would be even cooler if I had another of my big wishlist items: a way to mark files that, when open, would run a program and read the output of that program.)
So I set to work on how to hook this up. To review, the scope of the immediate problem is "I have a superset of programs I want to use in general. I want the fluxbox menu to be generated only with the programs I have installed on my local machine."
I decided to store my programs in an HTML file, viewable here: http://k0s.org/programs.html . A friend of mine advised me to use definition lists for menus, which worked out amazing well (with the caveat that my current parser assumes a certain format but doesn't enforce it). So the first step was translating the programs I wanted to use to http://k0s.org/programs.html .
Then I wrote the parser: http://k0s.org/hg/config/file/tip/python/html2flux.py . With lxml it was fairly easy to transform HTML to fluxbox's config. I used a program I already had to get all of the executables in the user's path: http://k0s.org/hg/config/file/tip/python/lsex.py (get your minds out of the gutter ... its ls EXecutables). Then, I point the output of the program to ~/.fluxbox/applications and include this in ~/.fluxbox/menu. You can see the change here: http://k0s.org/hg/config/rev/069a739d88ad
Since my config is a mercurial repository and I use silvermirror to sync files between my computer, including http://k0s.org/programs.html , I now have a way to have up-to-date fluxbox menus on all computers from a superset of programs! I could regenerate in a cron job, but for the time decided just to regenerate on invocation of .bashrc .
What next? I'm glad you asked! I have yet, mostly out of laziness though more because I wanted a good solution, have yet to really utilize feeds (RSS, atom). I want to set up a planet to subscribe to feeds I care about. Then, I can have a program that outputs the RSS of my planet to fluxbox menu form (presumedly on a cron job) and I can have the news literally at my fingertips. The menu item name will be the feed item title and the executable will launch the link of the feed item in firefox.
But, not today, most likely, as much as I love the idea. I think I'll set up Thunderbird before my email situation gets out of hand.
...and so, in conclusion, you can easily see why my brain would confuse the need to eat a carrot with the need to go to a different Firefox tab
great, now public radio is teaching that achievement leads to happiness. never have i heard such lies
P.S. I hate it when people use the word marketplace when they mean ecosystem; the former is a very specialized subset of the latter
idea: Firefox bookmarks as site management
Since joining Mozilla and since using the excellent weave addon I have been using and organizing bookmarks in a much more serious way than I historically have. I got to thinking, bookmarks would be a great way to manage sites. What do I mean by this? I'm not sure! But I'm convinced there's something there.
Take delicio.us, however it's spelled. Its basically a way of sharing bookmarks. I can accomplish a lot of the same thing just by exporting my bookmarks: http://k0s.org/bookmarks.html . Okay, its really primitive. I also did it 10s ago, and in the future I can modify this however I like.
Now, take something more complicated. Lets say you want to do something with all of these bookmarks, or some subsection of these. Like "subscribe to all of these RSS feeds" or "make a blog post to all of these sites", etc. I can't yet do this, but there's nothing complicated there.
Ultimately, I envision a revolutionary UI that changes the way we think about web resources. But I admit, I can only really see the next few steps. I should make a FF extension to play with this idea. Actually, first, I should see what's already out there.
unix: the NeXT generation
the capitalization of NeXT is in fact a dead herring. I find a modern linux environment, e.g. ubuntu, just a joy to work with. On the other hand, I'm a bit of a hacker so I don't mind setting up a few things to make my life much easier. I don't really think about the tools until I don't have them.
For instance, I have a function called fn that I don't know how anyone lives without:
(buildbot)> type fn
fn is a function
fn ()
{
python -c "import os; print os.path.realpath('$*')"
}
Simple, right? I use it all the time. So...why isn't it in unix?
That's an easy one. Another is pasting. If you do any programming, you're bound to use a pastebin. http://pastebin.com now has it an API that made it soooo easy to write a script to paste to it from stdin: http://k0s.org/hg/config/rev/6b8573a62cd3
So now I can paste from the command line instead of copy+pasting like a caveman! Nice. (Yes I know about pastebinit, but for some reason the ubuntu package didn't work for me). But I can do one better than that.
Since I make heavy use of fluxbox hotkeys , I can make a hotkey for taking input from the X clipboard (using xclip), piping that to my script, and putting the pasted URL back on the clipboard so I can paste it to others: http://k0s.org/hg/config/rev/10fc72a4e6ca
I've also bound smartopen to Ctrl+Alt+s to open whatever is on the clipboard. So once I paste via my hoktkey I can instantly look at my paste (if I want_) using...one more hotkey! Its got synergy coming out of its rassoodocks.
I give this simple and relatively intricate examples as, well, examples. I'm deeply interested in putting the UX in unix. I'm not talking about the BS, just adding these little helpful things that make it so nice to get things done quickly and repeatably.
a simple problem with the web
I have an email from agent A and another from agent B. I want to forward agent B's email as a reply to agent A. But gmail doesn't support this behaviour. Very few systems would. Yet this is a common problem.
Pointing to web 3.0, thread weaving will be an essential problem. I really wanted to write software to do this, and, IMHO it would have been awesome. However, I have no time at the moment so will leave the implementation to those with less on their plates. The real challenge isn't implementing a UI for this....it is implementing a UI that works across discussion types.
atheism: finally got it
For some time now, I've had serious objections to atheism along the lines that it is presumptuous. When I've tried to nail down these objections, I found it difficult to voice what exactly my opposition is. But I think I've finally figured it out. Regardless of the dictionary or philosophic definition is, most atheists I've encountered in real life mean two disparate things simultaneously by the word:
- a denial of existence of a personified supreme being with a big white beard who has a mansion somewhere in the clouds and other faith-based acceptance of definitive facts that cannot be supported by empirical evidence
- an assertion that our understanding of science and the universe is, while incomplete, is an accurate description of nature that demands that the universe, as born of the big bang, is the complete and interesting space of understanding.
The first I agree with. The second I do not.
I'm not religious by any means, and believe that without a foundation of rationality that any other philosophy is untenable. However, insistence that our understanding of things is complete enough to do anything with....this I cannot agree with. We've been on this planet for a million years -- a geologic heartbeat -- and I find the assertion that our understanding of science is enough to have, dare I say it?, faith in is comparable to a child's belief that they know how things work, but more presumptuous of course.
Worse, I find that atheists (again, I'm stereotyping) use their belief as a way to belittle the importance of the question Why? . Rationality is a wonderful thing, but it is not the whole universe .
We take individuality for granted. I am me and you are you and my cat is my cat. But what empirical evidence is there that this is anything but convention? I have seen none.
from http://djmitche.github.com/buildbot/docs/0.7.10/ :
The guilty developer can be identified and harassed without human intervention.
You've got to love technology ;)
The Age of Nostalgia
I have alluded at various points to the phenomenon I call explosive decompression which I contend overtook the Earth at approximately Winter Solstice, 2008 (the choking condition of a `converging-diverging nozzle <http://exploration.grc.nasa.gov/education/rocket/nozzle.html`_ ). While I don't expect this to be understood, save perhaps by future historians who will no doubt use a more precise terminology, perhaps I, as a modern armchair historian at least point more towards the direction.
It was once that nostalgia was the province of the idle classes, reckoning for the imaginings of grandness of times gone by. Now, all is nostalgia. We have no culture save that which progress has made obsolete. One can look at rodeos, at circuses, and other diversions, which were once strange, wonderful and terrible, and now they are merely bits of the past reenacted, the history forgotten or celebrated, but no longer of this time. Even modern heroes, like rock bands or anchormen, have fallen to the engines of progress. We own nothing. All that we may lay claim to is nihilism.
This has been the case for a century, perhaps since Einstein destroyed the arrogant premise that we, descendants of apes, understood the workings of the Universe. What has changed? Our belief in the illusion.
The '50s were a time of great investment in unreality, that America, the idea of manifest destiny, at last played out its promise with washing machines and television pictures. We worshiped these idols, and society tore down those who, wearing leather jackets and quoting beat poetry, would deny that this was less than divine providence. We had lost everything to these blind gods, but what we retained was a stay of innocence, even if bought with self-delusion. The past was gone. The frontier was closed. Culture had become a museum. But we could deny it! We could pretend that the creatures stuffed behind cold glass were real, that we could touch them. We could truly believe, in that way that a child still believes in Santa Claus even after they found their presents in their parents' station wagon.
So came the unrest of the later days, when every last illusion was challenged, cold and mechanically, save the premise of civilization itself. Great barriers were smashed as they could no longer stand against logic. Racism. Sexism. But still, the beast remained, the beast that we were tiny creatures on a tiny planet drifting through a vaccuum and that there was no one to hear our cries.
What is real anymore? What is not only not an act, but not an act which begs to be discovered as an act, a dream where one has made the mistake of remembering that it is a dream?
This is explosive decompression. We want to hold on to these precious memories. We want them to still be true. But we, as a collective consciousness, can no longer deny that everything we are is from a system born of mistakes and who's only remaining virtue is its own usurpation.
Where do we go?
We can no longer hold on. We have to be brave. We have to make something new. We cannot make new myths, for only time and courage craft myth. Nothing means anything anymore and we need to stop pretending that it does, so that which does hold meaning and worth may shine in its own light as the sparks of our existence perish into space.
markdown languages: good form? bad form
I'm a big fan of markdown languages. In short, they let me type text that is readable as text but allow me to translate them into something nice. For example, bitsyblog uses restructured text (for now). But there are some principles that should be obeyed and generally aren't for such formatting schemes:
Take restructured text. Headings are done with underlining the same number of characters as the headline. Which, if you change the headline, is annoying. Much better in this department is Trac 's wiki syntax. Headlines are = Header =, == Sub Header ==, etc. So much easier to write.
Take block quotes. If I have to indent things myself, why bother using a markdown language instead of just doing HTML? I like the python convention of triple quotes for these.
I've never known a markdown language to do tables well. LaTeX, sadly, seems to come the closest. And its ugly.
In short, a markdown language can't do everything. If it could, it would be a markup language. A markdown language is good for when you want to write text and get some extra leverage out of it, not for doing a massive and complicated document.
You've got to love Malkil. He may be a bit of a bastard, but he has some valid points:
"How easy it is to act and pretend that these things are important. And how utterly disgraceful that there are those who, acosted by pomp and circumstance, allow their minds to slip into the illusion of an idea which holds no resemblance to anything real: acting. We pretend that such formalities -- the length of a man's coat, the beauty of a woman, the fact that this spaceliner is paneled with real wood while others have walls of bare metal -- mean something, because it heightens our station and preserves our livelihood. But when we begin to believe in this ... in our own act, we turn ourselves over to a world where nothing is real. The actor can no longer escape the stage, for in delusion the stage no longer exists."
progress report: Mozilla, day 2
I'm very excited that after 2 days (1.5, really) I think I've setup my computer and completed all other administrivia such that I can start doing useful work. The older I get, the less joy I have in setting up and configuring new systems (and, ironically, the better i get at it with more tangible results). I have two projects right off the bat that I'm eager to sink my proverbial teeth into.
The first is https://bugzilla.mozilla.org/show_bug.cgi?id=539524 . Profile management! Interestingly enough, it was a few years ago when I was playing with Firefox when I wanted a better solution for this. Now, I have no one to blame for lack of progress but myself ;) I'm still trying to figure out the scope, working from a basic idea to hopefully something that will grow (and, note, I haven't worked on this much yet).
The second is getting buildbot working with mozmill . So I get to play with buildbot again, which I've always kinda liked, despite a few rough edges (what software doesn't have those?) and "everyone" complaining about it.
Anyway, its more than enough to keep me busy for now. I'm excited!
idea: a way to record + modify a source script simultaneously
e.g. in one window, you type commands. in another window, you edit a shell script that picks up these commands.
Use case: I like to record instructions in shell scripts (including python scripts). However, because I have a short attention span (and am usually doing seven things at once), copying by hand what I am doing on the command line to the reproducible instructions is a slow down
(also: idea: bitsyblog posts should...get done something with.)
TODO: keep DB of times for mobile testing platforms for Fennec for profiling and seeing how the software speed evolves with time
(also make a add_blog event that takes TODO items and adds them to, something)
A comparison of file formats:
- resume.html: the canonical document, http://k0s.org/portfolio/resume.html , contains all styling information and content: 7k
- resume.pdf: conversion of resume.html to a PDF via printing in firefox: 57k
- resume.doc: conversion of just the content of resume.html to a word document by cutting + pasting and hand-editing. Poor presentation. 110k
See also http://k0s.org/blog/20100205113616
Its official
I now have an awesome job working for Mozilla for the tools team! I never use exclamation points in this blog unless I'm joking, but this time I'm serious. I'm so excited! Firefox has been a long-time friend, and Mozilla has always been one of the great players in the open source revolution. Now they are a industry leader in the browser wars, not to mention a big proponent for useful web standards. I don't think most people realize how much Firefox has done to make the web a better place for everyone (yes, even IE users...maybe especially IE users) and I am extraordinarily happy to do what I can to help with the effort.
Ill also use this press release to announce that I somehow acquired a girlfriend. Her name is Jessica and she is awesome. She is a journalist and is very smart and driven. Unlike pretty much every other girlfriend I've had, she has been genuinely nice and sweet to me. I have no idea why, but then I have no idea why girls like boys at all. Thats a topic for a much longer blog post that I don't have time to write right now.
I have to get ready for Firefox.
I have a flower that I want to make:
decoupage + svenweb (+ maybe uploader)
- all HTML pages should be made from a template that includes:
- site nav with genshi includes (e.g. http://k0s.org/portfolio/) for index pages
- site nav with JS includes (e.g. http://k0s.org/portfolio/software.html)for straight HTML pages
- more JS
On writing: word choice
As I have dissolved further into the mysteries of "subtle science and exact art" that is writing, the more I have appreciated that half of the art is wordcraft. A story is three things at once:
- the plot as illuminated by the text
- the play of words upon the page
- the intention of the author
Often, the plot as laid out and the author's intention are inaccurately conflated (by the author, certainly) and the language of the piece is neglected entirely. But as the written work is but a vehicle for the author's intention, neglect of this crtical piece handicaps the expression of intention as well as making the writing of less beauty.
What a difference a word makes! Consider a sentence of my work:
There is one who carries no shadow.
Now consider the more conventional form changed by one word:
There is one who casts no shadow.
The latter sentence we know how to interpret. There are a myriad of meanings, but it is a classified archetype. The former sentence, of one who carries no shadow, makes us think. What does this mean? The one thing the reader may dismiss is that it does not mean the same as 'casts'.
Another sentence from the same mythology. I originally wrote:
I love one who does not exist.
Kinda provocative. The sentence expresses longing (or regret or wishing for longing) for an absent or non-existant person. Still, compare:
I love one that does not exist.
This sentence denies even the person-ness of the object of longing. Is the speaker in love with the concept of a person? Is the object of longing somehow separate from person-ness? How? Again, the reader's perception is challenged to face the unfamiliar.
Obviously, such tactics should only be used to directly further the expression of intention. Writing is only a matter of dirty tricks, but the craft comes not of knowing them and their effects, but in their application to make manifest a vision.
Dear Sir !
While of course the case of K has passed into legend and lost years, a correspondence still reaches us concerning some fragment of his files. I will endeavor to make some light upon the matters you present in your letter and hope that this will assure some understanding of their place.
Firstly, it must be accepted that the silence of those who may know of where things fall is a depthless mercy to those in these lands. Any sign from such an agent, in fact, would disprove their agency's mastery of clandestine arts, so by remaining in the shadows, it is thus shown that their profoundity is indeed deep. There are some, who by lack of a tangible presence assume an absence, that would make it a matter that, by the universal silence, a lack of a voice unless one foolishly taken on faith. But there is no faith.
In the Castle alone there are uncountable files filled with fragments just as you have found, not only of K, but of an inestimable number of cases where by there was cast some reflection of a light that passed into the night. When these fragments are put together, there can be observed an allusion to shape, or different views of a shape taken at once. But such a notion only lasts for a moment, and then can only be recalled in dreams. Again, such is to be expect. To expect to understand such information all at once with an imperfect mind points to the ignorance of one's insignificance, and again the blessing thereof.
What you say about Confucius is well-taken and points to the truth of the matter, as well as the only solace in life and permanence one might take. Far from being inapplicable philosophic esoterica, it is directly applicable to the realization of the will of the Castle. Becoming untethered from Castle laws does not dissolve one from one's loyalty to the Castle. Only the most uneducated and backwards peasant would make such an association. Even a common laborer, though perhaps without conscious awareness, realizes that even when one circle of the Castle's influence is lifted, there are infinite concentric circles whereby one is defined, one is measured, and the flow of one's thoughts trinkle down from the sky. Of course, as mentioned before, there are uncountable files. So the flow of information is not, nor can be, governed on the basis of the individuality of fragments such as you have written regarding.
We chose to believe that those who remain forever silent and behind doors in some inner chamber that has become lost and unvisited in countless years do cause the microfluctuations observed in information flows. Is the crystallization of a thought the direct analog of the collapse of waves to particles? Is there an economics of information? The first question is unanswerable, the second, undeniable. Though it must be remembered that to point to these questions is not to point to truth, but the reflection of a reflection to an unknown degree. It must also be remembered that the doors to such chambers are not locked. They are merely lost and fallen out of memory. There are occasions, such as the K case, when a chamber long since forgotten is reopened, and then a reflection much nearer the light source is briefly seen. Figments are written of it, and they are pondered over the years, as a subject of mysteries, but in the end it is just as common as the break of moonlight through a gap in the clouds.
To answer your questions as to the shape of the trackless desert, I will draw from other documents. Understandably, you must find, I cannot share the original source materials or any direct copy, but you must take my assurance that my representation of these materials is to the best of my ability of which I assure you I am fully competent. As to the accuracy of the source materials themselves, I can give you no confidence as to their accuracy. I can only say that scholars spend their lives debating such matters, and each draw a different interpretation. There is even a debate, amongst those who take it as an interest, if the scholars even share a language or if their interpretation of the others' verbalization is purely coincidental.
The trackless desert is a literal one. It is called Grynth and spans a continent to the south that fell into the Earth following the Second Cataclysm. The desert was wandered by endless nomads, who rarely made cities or permanent camps, but would each cast their lot in the sands. The sun was given some strange quality by the Grynth sky, perhaps triggered by drinking the water of oases of that land, whereby heat was only felt as a deep but pleasant warming of the body, but that the visions of the mind danced and met physical reality. One could never be sure which shades were real and which were figments until night fell, and the illusions would fall with the rising of the first star. When illusions were shared, travelers wondered if they were visitors of intangible realities or no more realities but the rising of heat distortions from the desert sands.
For K's trek there, I can not give you an ending, but can tell of his first travels, at least addressing a few of the issues you spoke to. After the business at the Castle, K found great respite in Grynth. The matter had made his life a wash; you must understand, what K desired was, in that same clandestine manner, briefly shown, and then gone forever. The experience had changed him, for much as the illusions of Grynth by daytime, something had passed into illusion. It is said that K carried his own water through that land, or woke exclusively by night, to not fall into the illusions. But I do not believe this. I believe that K wandered in the shadow realm while keeping a firm understanding of the material world. There is one fragment that described:
Kain sought and understanding of the shadow realm [of Grynth's day]. He developed, by alchemical means unknown, a manner to discern shades from nomads and scenes of the World. So doing [he] passed through Grynth, and came to a place where the Ocean and the Shadow realm co-joined. He wrought a ship and set upon the dark waters. When the Earth opened [the Cataclysm], the ship fell with the ocean to cthonic depths.
For the last of it, it is hard to say whether this literally came to pass, even if one takes the source documents as accurate accounts. For reasons you must understand, I cannot give you the authors or origins of the documents, and I will remain silent if you meet me with any query there concerning.
In short, I can assure you that Kain's path and the path of Confucius are one. While each trek through the desert is individual to the traveler, each path is of the same sand. While K lost the way back to that inner chamber, neither was he defeated, for in the experience he took wisdom. While he would never be free of the longing for that chance again, he had learned of permanence and took the lesson to heart, for the only doors that are locked are those that face the past. K accepted that that would be forever lost to mystery, and accepted a good life for himself as one might make of a blank canvas. So there is a path between success and failure, and it is that path that binds us.
I do hope that my communique resolves some of your concerns regarding the matter of K. If you remain of wonder, I advise to take mysteries as mysteries. They are fun to ponder in a chair by a fire consuming brandy, but to take each as a mandate to pursuit is a folly best told by Cervantes (with whom, I believe, you are acquainted). When a mystery sweeps one up, then one of a good mind should pursue it with a mind of clarity and with zeal though not lust. When one tries to sweep up a mystery, however, it will quickly remove to unrecoverable distances and become forever closed. For also, see http://k0s.org/stories/figments/guard.txt . The ability to discern between the cases is wisdom.
Franz Mitz
Curator of Documents
2nd Circle, Alexspie Building
The Castle
Regarding: http://sbenthall.net/2010/02/j-l-b-s-response-to-k/ , which is in response to http://k0s.org/stories/figments/castle_fragment.txt
some people have asked about my choice of colors for this website . if you can come up with a darker, harder to read color scheme, i'd love to hear about it ;)
Why am I so easily amused?
From http://k0s.org/dissociate?url=http://k0s.org/comedy/cheapshots.html :
A guy walks into a floating point exception when it encountered a BMW
I'm unofficially a Creationist -- nigh seven feet, shoulders as a favor
From http://k0s.org/dissociate?url=http://k0s.org/bush-speech.txt
The terrorists of liberty here tonight? We will share in success. We will not long enough. The thousands of terror. This is the streets of American people. We will pursue nations from their ethnic background or religious faith. I announce the world. The United States of terrorists are our national anthem playing at the world. Great harm has great country.
Yep, sounds like Bush
getting so burnt out on my software portfolio (http://k0s.org/portfolio/software.html); need to distract myself doing something else...but....how?!?
Stupid HTML
I have been doing some recently that I haven't done too much in a long time -- writing static HTML pages. I've especially been working on refining my software portfolio, http://k0s.org/portfolio/software.html . I started using a static page because, honestly, I had no idea how things would look ahead of time. A static page gives me the flexibility to present content however I wanted. In other words, the content becomes the layout, and formats emerge that make sense in retrospect.
A pattern did emerge for software projects:
<div id="projectname"> <a name="projectname"></a> <div class="date">when the project was done</div> <div class="image"> <img src="/screenshot/of/this/project.png"/> <p>caption</p> <h3><a href="#projectname">Project Name</a></h3> <p>a brief description of this project, highlighting usage</p> <ul class="resources"> <li><a href="http://k0s.org/hg/">source</a></li> <li><a href="pypi.python.org">PyPI</a></li> <li><a href="etc">etc</a></li> </ul> </div>
All of the sudden (okay, after lots of tinkering) I have a microformat for a software project "badge". If I wanted to do something dynamic (not on my TODO list for the short term, anyway), I could just keep track of
Not bad, eh?
The point, which I guess is pretty widely known, is that developing static HTML documents gives a forward path to programmatic classification, organization, and presentation. When it is pretty obvious what the model is, it makes more sense to start programmatic, but when the document is used to define the model, starting with a free-form document can be quite useful.
Another from http://k0s.org/dissociate?url=http://k0s.org/blog
This man with firefox plugin for middleware.
I'll stop now.
From http://k0s.org/dissociate?url=http://k0s.org/blog
What if you can control -- you reading pleasure and <div>s with even a dictatorial asshole.
Fuck this is fun:
J: Aren't you care to me," I flipped the television, channel 3. "You distrbute that my brain. I was a stream. There are you just seeing ... well, I do. He smiles. "You're a field day. The consequences have to digest." I guess everything is. Q: Time travel. You're talking about it? J: Because I'm not dreaming, Jake," I didn't even ask more refined. A man sitting in a big bang. But in your natural curiousity, I say. "Its almost 8:46. Turn on screen. Sure, they're the script that could work, if you describe a smile. "Bullshit," I decided to watch TV?
More fun with the most recent wordstream:
deliver. When the performance pretending to forget what had happened. Sometimes, a lie. Enough of recollection that it and thin they looked on the hot lights scathing the dramatic lines and the page and go back to the quality of who we really were had seen and But under the stage, how empty and when you have written the same don costumes so very real each word was a a bit embarrassed that this is not who we were seen it was act a little truth slips out between when the best we were. By then we could do was as you spoke it. I tried to grip with yourself not only as an actor, but as people have to come to impart to my voice the words were written, how menacing and everyone had slipped out there, and so far away. one another and so that we both knew that we were just acting, that they might face sadness pours out and that's when So much
See http://k0s.org/hg/wordstream/rev/df84e61ae1e4; Far from done
Site Navigation in decoupage HTML
decoupage (http://k0s.org/hg/decoupage) serves index pages for directories in a configurable fashion. What if you want to display the navigation for the directory in an HTML file in the directory?
I did, and I did it this way. My software portfolio and related matters is at http://k0s.org/portfolio/ . I wanted a navigation aid on most of the HTML pages in that directory (obviously not my resume). I did this with jQuery and a few lines of JavaScript.
On each page I wanted in the directory, I added two script links (see the source of, for instance, http://k0s.org/portfolio/software.html ):
<script src="http://code.jquery.com/jquery-1.4.1.min.js"></script> <script src="style.js"></script>
I made a style.js file in the directory which fetches the contents of the index at http://k0s.org/portfolio/ and inject it into the DOM:
$(window).load(function() {
$("body").prepend('<div id="nav"></div>');
$("#nav").load("/portfolio/ #listing", function() {
$("#listing").prepend('<li><a href=".">↑</a></li>');
});
});
(From http://k0s.org/portfolio/style.js ). How many lines of JS is that?
Obviously this could and should be made easier to turn off/on for directories. Also obviously the solution is not decoupage specific, but it reinforces two important ideas that make decoupage strong:
- content as a service
- ease of constructing a framework suitable to specific needs
Monetization of Content
One of the things I've thought a lot about, which I'll talk about more when I have more time, is the monetization of content on the internet. Traditionally, economics has been based around commodification. To illustrate, a good is a tangible object and a service is a duty performed. However, content has the property that information can be copied, reproduced, altered easily, unlike a traditional good. Ultimately the service of content creation is being paid for. But who pays for this? Traditional approaches have been ad revenue and subscriptions. Into this debate, introduce the idea of freedom (which ultimately means: inherent malleability) of information. If you're selling subscriptions, how do you prevent redistribution? And if you don't, how do you make money?
The only solution I have been able to come up with is socializing content creation. It is a huge part of the economy, so this wouldn't be a small project. However, ultimately Time-Warner, etc, don't care about how they get their money, as long as they get this. An information tax or tariff would be levied, and now the wealth of information is a public good that is paid for in citizenship.
Again, I'm only touching on this issue as a placeholder as I don't have time to properly record my thoughts right now, but in summary:
- the promise of the internet is that information can be exchanged malleability with a strength built on the interoperability that the free consumption of information mandates
- monetizing content creation in the traditional way eliminates this freedom of consumption and is therefore destructive to the economy and public good
- socializing the monetization of content creation is a good alternative to maintaining obsolete information suppression techniques; paths towards this end should be researched with emphasis on growing information wealth and interchange
"The song says 'Put your your hands in the air like you just don't care'....and you were acting like you cared..."
CSS Floats: how annoying
Recently, I've been floating things more in CSS than I have previously done and have realized, after all these years, why I find the behaviour counter-intuitive. Two reasons:
- CSS floats do not float! Let's say I have a class called date and css as follows: .date { float: right }. I would imagine that in order to float a date next to a heading I would do <h1>My winter vacation</h1><div class="date">January 2010</div>. In other words, I expect the date to float upward and to the right until it finds a place to sit. Wrong! It will float right of the next block level element. In order to do what I want, I have to present the information in the reverse order of what is semantic: <div class="date">January 2010</div><h1>My winter vacation</h1>
- CSS floats are not contained When I float a div within another div, I would imagine that there is no way subsequent material can penetrate my div. Not true! If I do <div id="bar"><div class="date">a really long text...</div><h1>Foo</h1></div><div>another div</div>, then if the <div class="date"> is long enough, another div will float along beside it, even though it is contained in the <div id="bar">. I would expect that a div or any container (parent block element) would close itself following all floats and then subsequent block elements would be displayed.
Maybe there is something I'm missing or maybe this is up to the browser. Not sure. In any case, I find that I've consistently had to work around semantics to get a good display, which is something that CSS was supposed to avoid!
As a writer, it is no great mystery to me that Kafka would ask to have his unfinished works burnt. To science, a person is just an instance of something called "human beings", and one is what is communicated to humanity. But a writer has a private life, a life that no one else can see, and this is valued. A writer knows permanence, fascinated by it. To be known is to fade. To be unknown is forever.
web frameworks vs. organic construction
I've ranted at various points about why I'm generally dissatisfied with the web frameworks I've used. They're okay. Whether they're worth using for an existing project depends on the project, but just as often not in my experience. My main problem stems from a debate that seems more pervasive that whether web frameworks as we know them are good. This is the debate of problem classification versus problem exploration. Much of Western science in the last several hundred years has been about problem classification. Is suchandsuch a plant or an animal? Can this hypothesis be proven/disproven? Contrast this to art, where value is not found in defining the meaning of the work but its value is found in the expression. Social sciences, such as psychology and software development, fall somewhere in between, though I would contend that they lean erroneously towards the path of problem definition versus art because the methodology of science has been so successful. However, as well told by Kuhn, while the scientific method is extraordinarily successful in testing and refining theories, it does nothing towards finding the Eureka! that is necessary for the development of revolutionary new theories. This, as the inspiration of the artist, remain under the veil of mystery.
What does this have to do with web frameworks? Plenty. My biggest problem with existing web frameworks is their tendency to proscribe a solution rather than giving the tools to build as desire. Take Django, which is these days usually regarded to be the most successful python framework. Django invented its own template system, its own ORM, and has a set of middleware and other utilities that work only with it. This to me is an overspecification of what the problem is and also is disbeneficial in the construction of tools that may be used in a different context. If you're writing code for Django, you're writing code for Django. Which is good if Django matches the problem you're solving, but bad otherwise. Contrast this to the (not wonderful) example of pylons. As a web framework, pylons does very little outside of providing a basis and some commonality of tools to build a web site. This both allows and demands that what the website does be decided upon.
Getting a bit more abstract, I find the same thing asked of website creation. "What does this web site do?" is a deep question, perhaps not universally accessible, and quite frankly language is poor for answering it. So people give examples from tools they know: "It needs a wiki, it needs a blog, it needs a mailing list...". This etc to designing new websites is the explanation of why so much of the internet is bad in the same ways. The root of a website is in a need. If that need is in the province of existing tools, then there is no reason to think outside the box. Slap together your favorite software solution and call it a day (though I'll note, and not idly, that today even a decade after the Golden Age of the web, that there are few softwares that combine a good wiki, mailing list, and blog and even fewer of them that are consumable and easy to deploy). However, for a less conventional website, for a website that wishes for its own life, I would mainly that figuring out what the need for the website actually is is not only important but essential. It is a worthwhile question to answer, not only because it makes life a little deeper place, but because it is imperative to success. Success demands the simple manifestation of an idea. If you're doing something exciting and new, old tools may not cut it.
A website stems from a need. From an engineer's point of view, there are relatively few algorithmic challenges to put together software to satisfy some idea. The process may be time consuming for a large or complex website, but in most cases the basic research into each aspect is already done. However, translating that to implementation within a framework is often a challenge. Even the question "What framework would work best?" can be argued for hours for a large set of problems. Either the framework doesn't have enough of this or it has too much of that. Maybe the problem can be well-translated to something out there, but care must be taken when translating the question "what does this website do?" to "what does this website look like with this framework on?". From a practical point of view, from the point of a builder given a problem, it is much easier to choose a set of tools and start construction than alter the building plans given a prechosen set of tools. This approach will give me and everyone a bigger set of tools and types of websites will take the form of templates to build out from. If you're happy with, say, Django, and argue that this approach will work within Django as well as it will in some greater subset of the software ecosystem, then good, and yes that's true. My point isn't to bash or raise a particular community of software - I am dependent on python and the thought of making any of my tools or patterns available outside of python is mind-boggling to me - its that, for any given set of problems, one can build tools that are interdependent or largely independent, and that interdependent tools are, in a sense, islands.
So why isn't this approach more widely used? One noteworthy reason: its predicate rests upon the community of tool-creation, a community that has always existed in computer science but one that, for obvious reasons, industries have been reluctant in allocating resources to develop. But the more apt reason: because it is hard to decide what is wanted/needed. If you are starting, lets say, a website dedicated to internet dating based on a online art community (one of my desires by the way), it is easy to look at other dating sites and other art sites and combine their functionality in a mish-mash way (chrism notes why this bad in terms of software in a post I partially agree with: http://www.plope.com/Members/chrism/service_process_fascination ). But such a site will be less slick, less pointed than a site which thinks about the question: "what does it mean for a website that encourages dating based on artwork?". Of course parallel efforts should be studied and lessons incorporated, but this does not suffice for realization of the vision.
A good website has a clear vision. Creating a good website is best done when the vision is shared amongst the project manager, developers, and designers. Then you are making something new. Everything else is copy+paste.
I have often heard it asserted that there is/was a conspiracy of american automobile manufacturers to make cars that guzzle gas. Their recent mostly demise tells that either such a conspiracy was widely unsuccessful or that blame lays elsewhere.
which is more worthy of empathy?
... one who loves what shall be doomed
... one who loves what is beyond the grave
of sympathy?
regarding my oPad - eg the paper tablet I'm using now - and I am completely not joking, I actually looked for C-x-C-s to save the document
TODO: a big To-Don't
There have been a rather large number of people in my life that genuinely want to help me but they're help consists only of being a nagging TODO list for me. This usually manifests in the form of them asking me: "Have you done XXX yet?", or the even more insulting, "Why haven't you done XXX yet?". The superficial kindness is appreciated but in fact, this serves negative purpose:
- usually (99+% of the time) I already am planning on doing XXX at some point in time as assessed by the deadline and importance of XXX
- nagging just makes me resent doing something
- this behavior presumes that my existing methodology of dealing with things is faulty
- nagging me just makes me more stressed and disappointed with myself
- no one who does this bothers to investigate what is on my plate and to help prioritizing it meaningfully; they just want to make sure I do XXX; again this is insulting as it presumes I cannot prioritize and it is also myopic as it doesn't take my whole life into account
- once I pass a critical level of stress, as nagging often does to me, I become so depressed that I am incapable of doing anything, let alone the TODO item
There are two people that are in the position to give me TODO items: my boss, who pays me for the privilege, and my significant other, which I currently have none.
So, if you want to help me, To-Don't! I have plenty of free work of my own I can give you, my own TODO items. See how fun it is when other people give you TODO items? But unless you're willing to do the leg work, please don't give me "helpful" reminders. Thanks.
Ahoy, Earth-lubbers! Welcome to the S.S. pollution cap and trade program. I be the commander of this vessel, Cap'n Trade!
In other news, the man who assaulted Yo Yo Ma apologized today. He said in the course of his apology, "I asked him his name but when he answered, I thought he was crackin' wise about my mother. I realize that punching a guy is a serious thing, but I'm very protective about my mother." Yo Yo Ma declined to comment.
it must be close to Valentine's day:
if I were president, I'd put you in charge of the "Just us" Department
there are two kinds of people in the world: those that realize there are no original ideas and those that don't
Each man's life: a blind bluff against the fatality of the universe. The folly: to recant one's futile stand, not to fall into the ocean, but to burn with shame those memories precious and rare that have been touched with meaning.
i find it funny the hypocrisy concerning people and science. if i said i believed in ghosts, then they'd say i didn't have any proof. but if i said that i've seen no evidence that i'll find someone to love, then they say i'm being negative
The Olde Alamanack:
Back in my day, a post request is when you write the county for some new fencing materials to keep your cattle off your neighbor's lawn.
Getting started:
install_requires = [ ]
Add dependencies:
install_requires = [ 'SQLObject' ]
Make sure you get the correct version of your dependencies:
install_requires = [ 'SQLObject>=0.8.4' ]
Work around horrible dependency issues:
install_requires = [ ] #'SQLObject>0.8.4' ]
The Owner role has the same permissions as the Maintainer role, but it can also assign the Owner role to others.
Quotes That Mark Twain Didn't Say
Sometimes nonsense is the only kind of sense you have. - not Mark Twain
From http://k0s.org/wordstream/ :
hi how they can all get to another stair well curl ed up in Science ? "I don't work. in science," he would say, ``Let us as one we walk into things? '' ``I can't stay. ", I said. He looked like i was that guy trying to kill his pissing contest.
Most often, saying that you "play ball" speaks to the underlying truth: that you agree to stab your friends and allies in the back for any substantive gain, and, in fact, and ideological unity against loyalty..
response to http://www.plope.com/Members/chrism/service_process_fascination :
(sorry, i'm not going to log in to comment)
i understand what chrism is meaning to say, but he's not very clear he's actually talking about two things as if they were one thing the thing he means to be talking about is e.g. our opencore architecture.
but he makes it sound like any bundling of services together is
"bad", which i disagree with.
I do agree that going to a service architecture requires some thought, and his slight against "best of breed" is well appreciated. Throwing a bunch of best of breed softwares in a pot is a recipe for disaster, not a well architected consolidation. So the most important requirement for building a "service architecture" (I hate the name, too, because its ceased to mean what it means) is to think things out. I don't know why people resist this nowadays. They call it top-down design in much the same way that you would say "bleeding-heart liberal". I'm just talking about giving things some thought before you commit all your resources to a not-well-thought-out architecture hopefully that the problems can be solved by "winging it". Think before you leap.
Outside of this big one, there are a few conditions that are necessary but not sufficient for a service architecture, in my opinion:
- The services should serve unique needs. Don't have two (exposed) DB servers, tag engines, blog engines, etc. If one isn't sufficient, you're doing something wrong
- The services should really be services. In other words, if a web service returns some pretty readable JSON, that's a good thing. If you have to scrape HTML and then use that to write other HTML, that's a bad thing. A service, to me, implies something that does one thing well. If you can't just get to the one thing you care about, you're doing it wrong
- The services should communicate using some known protocol. I have never heard of a service architecture work where the programmers tried to invent a microformat and then tried to use it. Its a recipe for disaster. The worst part: its pretend decoupling. You pretend that your code is not incestuous, because how could it be? you have a service architecture. But it really is. If you need your app to do something that your microformat doesn't provide, you add it to the microformat. This leads to bad apps and bad microformats. Its like pretending you're not committing incest by making your cousin wear a mask
- Don't start without a protocol. Several service architectures, including at least one I've been involved in, started off with lovely diagrams of all of these best of breed software with arrows drawn between them. DO NOT PRETEND YOU CAN IGNORE WHAT GOES IN THOSE ARROWS! I did. And the results were horrible. Since the point of a service architecture is communication, make sure that the services can meaningfully communicate. Oh, I'm sorry, is this too much top-down design?
Optionally, but most probably, you will probably want a presentation layer that meaningfully presents the data from the services. E.g. if your services return RSS, but you have a HTML web service, you will need to present the RSS to the user in a meaningful way. The easiest way to not fuck up a service architecture is to have back-end services which do not talk to each other and a presentation layer which is what the client sees. If you want to expose the back end services, you can do that too. Another great example: snippets! If you have services that return HTML snippets, these are easy and cheap to include. If they return full, robust web-pages, then you have to parse them (expensive), transform them most likely, and reassemble. Bad idea.
As an aside, but one that I'm very interested in, I appreciate the snippet and presentation approach. Let me explain in passing what I mean. And if you hate it, well, I don't care. You have a web application/service. You can deploy it by itself and it serves, well, web pages. But it also can serve snippets of web pages. This means that its easy to use as a service too.
Phrase actually heard on the radio:
...the Nigerian student with explosives in his underpants...
I mean, okay, yeah, its serious. And its an apt description. But....wait, I can't even finish that sentence
[in a library]
Librarian: can I help you?
Guy: yeah, I'm trying to look something up in this encyclopedia, and I can't find any sort of so called "blog" for Richard Dawson
Librarian: what you need is the internet
Guy; the Internet, eh? Well I don't know much about computers but I'll give it a shot.
[1 hour later]
Librarian: I see you're downloading some porn, you have a flash game going, and I'm pretty sure none of those things you're tweeting are real words. Did you find that blog post you're looking for?
Guy: Woah, need a little more insulation from meatspace here right now. Hold on while I frag this noob
The Internet: turning your dreams for a better life into dreams for a better virtual life
I like my jokes not be jokes. I also mostly like my jokes not to be funny. -- egg
Definition: web portal (n):
a page you keep throwing random crap on until there's no more room on the page
In the future, who knows what computing will bring? We will have computers as big as today's largest skyscrapers, with twice the computing power of a modern desktop.
web presence and service architecture
The reality of today's web as the proliferation of web presence. People have accounts on several websites (see http://k0s.org/ extrinsic section, as well as k0s.org itself). Where websites offer differing services (blog, galleries, other documents), they are complimentary, and other services (for instance, http://melkjug.org for the aggregation and filtering of microfeeds). However, in many cases, the reason to be on a website necessitates the duplication of content. For instance, I have an account at http://writing.com ( http://writing.com/authors/k0scist ), and I enjoy it greatly. For the first time, really, I can talk to a wide audience about something I love -- writing fiction! I've had some great interactions with other authors there, and my stories get great exposure by being there. But their canonical home is my computer ( http://k0s.org/stories ). So I end up copy + pasting (I wish writing.com had an upload form and formatted my text better and make me a cup of coffee...) my stories from where I edit them to writing.com. Likewise for flickr and anywhere I want to host my images.
This is the problem of content duplication. You want to host documents on multiple websites and it'd be really nice for them not to get out of sync (and it'd be even nicer if you didn't have to sync them manually). While this problem is effectively solved for blogs and other discussion-type feeds (see again http://melkjug.org), for canonical documents, the other major type of content on the, there isn't a solution across much of the web.
Its really not a hard problem. Effectively, all you do is allow multiple types of input. For instance, in any case (image, text, HTML, etc) where you allow content input. For text you have a textarea (or WYSIWYG equivalent thereof), a file upload widget, or a text input you point to a URL. Instead of storing the document locally, except as a cached copy, you fetch the content from the URL if it has been modified. Of course, the data still passes through whatever processes sanify input. For pictures, you don't have the textarea, but the rest is the same. If the pictures were displayed unmodified, you wouldn't even have to store the data.
While I can imagine even cooler systems you could build on top of this (web-wide indexes of content with associated metadata, multiplexed desktop webpublishing, an interwikipedia, a vastly connected publishing world), if just this piece became commonplace, this would change the way we could deal with data. Your data would become infinitely portable. Since all you store is references to the data, you could fix one reference and the rest would point to that if you decided to move the canonical location.
All I really know is that save me a lot of time. There's this internet thing, you know? And I tend to spend some time on it. And the more time I can avoid copy + pasting things or uploading and manually syncing files, the happier I am.
More associative writing from http://k0s.org/wordstream/:
I didn't know the name guessing that the world motionless, in time would encounter another world peeled away the darkness of my universe. Automatic writing is very slowly taking away my mind. Why don't like everyone in the world ? A corpus of lies i said, ``that is not my mind. '' And she began to agree with me regarding my insanity.
its pretty simple: you type in the textarea and from a corpus, the app will pop a response to your last word on the line once you press enter, then you keep typing. Its a simple word association. (if it doesn't have an association for the last word, then it won't do anything). It will also take what you type and put it back in the corpus if you enter more than two words.
Make sure you have the trailing slash, or it will not be able to do the AJAX calls!
For the command line program, which is exactly the same, you run wordstream foo.txt and it will build a corpus from foo.txt. Then you type and it talks back to you.
Interaction with my newest program, wordstream:
I'll try to add this to my website soon!
i'm going to fly off into the ethersphere. already i see the chromatic trails of thoughts pouring from my brain, spilling into the air. and yet i've hardly ingested any chemicals. someday i will follow the patterns and see where they lead.
i feel ancient. i'm 32, and yet when i talk about KMFDM or NIN, they are but light bits of nostalgia....some silly old grandpa music that was popular "back in the day". pathetic. i guess i missed my chance at life, at love. it seems like all the dark depressed girls in high school grew up to find mediocre boyfriends that would domesticate them. and i'm out of the loop. why is it so hard for me to act surprised? i guess there are worse things than waiting out life, studying telepathy only from afar, and dying cold and alone without anyone sharing my secrets. but perhaps not less meaningless. who would have thought that sex and love would mix anyway?
fuck new years eve. i hope that in 2010 i can say, unlike the 2009....2008..., that it has not been the hardest year in my life
> python difficult_install.py
Usage: difficult_install.py [options]
difficult_install.py: error: you didnt say please
The Problem a CMS Doesn't Solve
TTW content management is flaunted by the difficulty of not having a filesystem. An OS does a fairly good job of managing content -- that is to say files -- and has grown a large number of tools to this end. To do so through the web in a way ancillary to the OS necessitates building a number of tools (a file manager, for one) that are already part of the OS. This is the problem of a CMS: not having a filesystem to organize content. Its a non problem since computers already have filesystems.
What a OS and filesystem do not do, which a CMS does do, is provide views into the content. This is not a hard problem, though. Take apache. Apache does many things, but one thing it does well is serving static files. For directories, it is more clever: apache generates an index of the content. If you provide an index.html file, it will serve that instead of generating the index itself.
But what if you want the best of both worlds? What if you want a dynamic index of content but that you can control how it is presented?
I don't have tons of content (read: files) on http://k0s.org, but I do have enough that I don't want to edit HTML everyvtime I add or move a file. Also, I have picture galleries.
I wrote découpage to provide views into the filesystem. Specifically, it provides index pages that are configurable with customizable genshi (http://genshi.edgewall.org) templates and pluggable formatters that manipulate the basic set of data to be provided to the templates. The formatters may be applied in a specified order so that you can build a tool chain to suit your needs on a per-directory basis. With this basic set of tools you can build customized lists of links, photo galleries, RSS feeds, etc. And since the default configuration (editable in .ini files stored globally or in the served directories) uses an index.html file found in the directory, migration from a static apache site is trivial.
The other half of the equation are the files themselves. If I'm looking at, say, a text file in a markdown dialect, I may want to display it as HTML. Or if I have graphviz chart sources, I may want to display the chart images. So in addition to découpage, I plan to write a content-based dispatcher to this end.
These two pieces do not, by themselves, replace a CMS. What about work flow? what about indexing? What about user accounts? On the other hand, the great thing about paste and WSGI is that if you write intention-based software that is well-behaved, you can often (sometimes even seamlessly) combine various software components to make a complete website (and here's the important point) without crippling the functionality of any piece of software or even realizing your end objective! Its not always true, but generally a good smell test is componentization: if your software doesn't play nice with software that does play nicely, or if your software does things beyond its scope, then it's...well I hate to use the word "wrong", but it probably has internal problems too.
I didn't understand what a CMS did for a long time. The answer I've usually gotten is, "It manages content." Okay, but what does that mean? "Well, it means a bunch of different things." For some time I've suspected that the problem that a CMS solves was an ill-framed one. Then it hit me: it is organizing content! Which is really the same problem as organizing files. The views are nice. Workflow is lovely. But ultimately, if I want a robust way of organizing lots of very different kinds of data, I'm not going to start writing a new tool to do this. I'm going to use the one(s) my computer already has.
Decoupage is particularly suited for personal websites and websites where the files, as content, are more important than their presentation. What I mean by this is, if I write a story and my website goes down, I'm annoyed but I still have my story. That's the important thing. Outside of the benefit of getting hosting for free, I also get the benefit that organizing my files and organizing my website are accomplished at the same time. If your files are your canonical documents, who wants to deal with the pain of uploading them or, god forbid, cut + pasting them on to a website? Then you have to edit in two places, move around in two places. Its just a pain. I've had a fully decoupaged/montaged (http://k0s.org/hg/montage) website for a week. I'm loving it and am looking forward to the day I can work on it more.
Finished uploading my figments to http://writing.com/authors/k0scist (that's right, I'm not above plugging at both ends, sexual metaphors aside). Next up....revisiting that old monster House Vey (http://k0s.org/stories/housevey/housevey.txt). Then, maybe I'll post a few poems...but soon enough I'll have no excuse not to work on the Kain story.
http://k0s.org/blog/20091228202849 : I was so affected I had to write in: http://www.onpointradio.org/2009/12/believing-the-unbelievable/comment-page-1#comment-37869
http://k0s.org/blog/20091228202849 : these men have no imagination. They're talking about the ship of Theseus as if there was some sort of ethereal essence to the ship. No! How can you interpret that so badly?!? The concept "ship" that we attribute to it already points to the idea of the thing! Its not of some magical substrate, it is the concept whereby we generalize the pattern, just as we attribute the non-observable "self" we attribute our identities. And they don't even understand nature vs. nurture! They attribute the fact [Western] children believe that plants are created as a factor of NATURE, not the fact that they are immersed in a creationist culture! And why would someone want to put on Jeffrey Dahmer's raincoat or anyone else's raincoat for that matter? Is this like the people that insist you taste their food? "Here, try some of my pie!" "Here's Jeffrey Dahmer's raincoat, do you want to put it on?"
This man is talking about things and they don't make any sense and I don't know whether to cry or laugh.
The paranormal can exist only to the level that the net empirical evidence for it remains equivocal.
most research and thought into "what we are"/"the nature of human behaviour" fails because it assumes the flawed fundamental: "identity"
By making such a horrible operating system and basically not knowing what they were doing, M$ actually did something positive. Since POSIX became a real standard for desktops (only windows shying away, and even it bashfully), cross-platform programming got cleaned up alot. Don't believe me? Look at old build scripts that have to work on AIX, Solaris, etc etc. Each POSIX, but also completely incompatible.
The Old Factory Sense
or...Where the hell do you put your factories?
WSGI an paste (http://pythonpaste.org) are excellent frameworks for creating web applications. However, when bundling together a real website, you generally have a non-trivial factory. I'm not sure where to put these! They need to be a "real" python package as the paste .ini file needs a dotted name to resolve. So you have to put them somewhere. But where? Most web apps have one or more paste .ini files that will let you use the app out of the box. But while it is nice behaviour to bundle several example factories with your app, anyone that is doing "some serious plumbing" is going to need custom factories.
So what to do? Well, I'm still flumoxed by the question of where you put them. I suppose the obvious answer is to make a python package for each website and put it under version control -- private version control, perhaps, if you have implementation detail in your factory that give away server secrets (if you bundle the .ini files there as well, you're almost guaranteed to if you have auth). So version the factories, maybe privately. Version the .ini files, probably privately.
Assuming I buy that -- I'm still disturbed by the fact that I don't have, nor do I especially want, a private repository as such, at least under I have time to work on SilverMirror (http://k0s.org/hg/silvermirror) which is right now not at all what I want to work on -- then I have another problem. Let's say I'm making a new website. And let's say I want such and such app mounted at such and such point, and I want auth in front of everything, and I want my uploader middleware, etc. I can take another similar factory (assuming I have one) and tweak it until it works. But isn't there a more explicit way?
What I want is a factory factory -- something that generates paster factories from any number of middleware and from your instructions creates a sane recipe. Too meta? I'm thinking of somehow leveraging pastescript templates for this purpose, though if you're thinking of asking me how, I can't quite give you an answer. Though I can give you this:
create-paster-factory -F auth,logging_middleware /hg=hgpaste:HgPaste /=decoupage.web:Decoupage -F uploader.dispatcher.Dispatcher /blog=bitsyblog.bitsyblog:BitsierBlog -F commenting_middleware
How does all this work? How do you get the needed configuration to configure these properly? What problem does this solve? To be honest, I'm not sure the answer to any of these questions right now. I think I've written to much this weekend.
fuck a prarie home companion; Garrison Keillor, by his presence on both consumer bands, has forced me to listen to industrial music about S+M (NIN, "twist")
Did a pretty massive upgrade to my website yesterday, early this morning: http://k0s.org ; this blog isn't affected, but everything else is. Will endeavor to do more in the future. Its a relief to have this work started. You can already see a hint of where this is going at http://k0s.org/poems/ . Just by replacing the static page with a decoupage page (decoupage is software I'm writing, see http://pypi.python.org/pypi/decoupage/), many more poems display. All of the ones that ended in .txt were in the directory and technically on the web, but the static page didn't link to them.
Yes, I realize that I'm using, what, basically 10 year old techniques. The reason is mostly because he problem that a CMS solves is not having a filesystem. The problem that decoupage aims to solve (well, it an supporting software) is providing views to the filesystem.
New Idea: Fantasy Penpals
I like email. If a person is fun to read and write to, emails can be one of the most fun things in the world. It combines my love of writing with my need for someone to talk to. Having a penpal is fun, but....well, its expository. Because you're writing about yourself. I don't mind so much; being eternally shy, and always feeling like my most inner thoughts are on display to the world, deep writing about myself doesn't bother me so much. But seem people like that extra level of anonymity.
So I came up with idea today: Fantasy Penpals(*). Instead of writing as yourself, you have a penpal relationship where you write as a fictitious personality. You affect to be, say, the Prince of Wales, and your penpal pretends to be, say, the PM. Or you pretend to be, say, a field primate researcher in the heart of the Congo and the other person pretends to be the department head of a major university. The possibilities are endless!
I think this is cool because:
- its collaborative and interactive fiction
- its like an RPG but without any of the (explicit) rules
Okay, only two bullet points. But still! If anyone is interested, please mail k0scist@gmail.com and mention this post
(*) patent pending; oh, its pending alright!
It has been the struggle of my life to want to touch and to be touched and to have to learn that I can look, but that reaching out my hand any further is only an invitation to be hurt.
Is Matt Groening taken to writing comedy in the form of craigslist ads now?:
im a sexy woman just looking for sex - w4m - 23 - (Lockwood)
Dammit. I just missed a big one. Like one of those movies where the pictures freeze and enters another actor out of time who makes the "ssh!" expression with his fingers and lips and changes something, ever so subtly and in a slightly impossible way, and by you seeing it you get this knowledge. But you'll never be able to capture it or to prove it. It is a free gift, and yet you can never tell where you got it from.
Sometimes I like adding snarky definitions to wiktionary
sarcastic(adj): gee, I don't know what sarcastic means
new term: cryptomythic
its mine, and is now copyrighted via my mind (for those that don't know, every idea I think of is copyrighted or patented instantly; that, by the way, is also a patented idea)
<theory type="conspiracy"> I find it very interesting that the media would characterize free radicals as a health threat </theory>
The only requirement of life is that you must drink deep of her waters
Thought made manifest by word, word made manifest by deed, deeds leading to actions ever rising
We experience conciousness as a drop of water experiences the Ocean
To love something is to become it. Likewise, to hate.
The city flowing down the river
Looking at things from a revolutionary point of view, the world is in a state of depression, rife with violence and suffering against reason. But looking at things from an evolutionary point of view, things are fine; this is just one of those things that happens.
There is a dragonfly sitting on a rock
Ode to Women
You think youre so cute with your matching X chromosomes and internal genitelia so delicately tucked away. It disgusts me! So much ado over one left-over hole. I suppose it makes you squirm with delight that I must write these words in the sand to satisfy my man rage -- my monkey ego -- simply because natural selection has not afforded me carnal placation instead.
But I say, nuts to you! I'm tired of your so-called civilization anyway. Why do you have to be so pretty and so difficult?
Washington heights has been so gray. Covered in fog carrying cool moisture from the Hudson, I wish I could wear such as my funeral shroud. I play Tori Amos over and over again, wishing to be trapped in the music forever. Only "not the red baron" and "horses" are bleak enough to soften my emptiness.
Problems as books
The phrase physically beautiful is meaningless as it incorrectly ascribes beauty as being inherent in the subject instead of the observor
To the scantest light of Monday morn, the child awakens to find their life as the one-eyed god just a dream.
Its contemptable how when one is in love the lyrics even to the most vaccuous songs of affection raise such tender feelings
Amateurs in the game of love are not to be pitied. It is the professionals whose lives drag through infinite sadness.
Without return, loving you will mean falling asleep to tears every night that will only diminish with my life force.
Infinite dimensional space is the space that defines the fractal, yet it is not so that the fractal defines its background any more than it is sensical to say that infinity is bounded by the finite
What meaning can I now take in life? When you can stand where I stand and know that that question has no answer, then will you feel my emptiness. and all will fall through your fingers like light
Why I am marginalized
[This is a fragment I wrote in April 2009. Its unfinished, but I don't plan on finishing anytime soon, so I'll put up what I have]
I'm writing this on a subway car because its the only time I have to write. Amazingly, I got a seat, so I guess its my lucky day. It gives me a few moments to reflect upon why I am in an unfavorable position while others of less talent and who care less for the common good are in better positions. It mostly comes down to that a situation has been perpetuated such that it becomes the responsibility of the individual to feed on the scraps of the more fortunate.
Im not mentally well. I beat myself. I am unable to cope with even simple social situations like speaking with store clerks or asking for help after a lifetime of teasing of my social inadequacies. I make no claims that my situation is worse than uncountable others. But it is such that any societal responsibility for my welfare is absolved. I could go to a psychologist, but this is on my time with money out of my pocket. And were I to take this initiative, I have no doubt that I would find the same response that psychologists always retort: a program of self-seeking whereby their usefulness is assured, but which incurs no responsibility and the benefits I should reap would be none. But I diverge from the point. Society has prescribed a solution. It matters not if the prescription is utterly ineffectuve. The problem has been determined to fit in a neat little box and it is known what the prescription for this box is. If I do not get better, it is because I am not trying hard enough, or behaving as I am required to receive my medication, or perhaps I am one of those rare hopeless cases where society is powerless to help despite how hard it tries. But in the end, responsibility is absolved. My choices are to have my life verbosely controlled or to insist I am well enough to hold a job and become dependent on a corporate benefactor for my livelihood. The notion that I might have some actionable idea of how I could work that would be beneficial to myself and society is unthinkable and cannot be entertained.
I also made the mistake of acknowledging that I have some talent. Not much, mind you, just bits and pieces here and there, but enough such that I have to be managed. Talent without constraint is difficult to control, and for that reason, and for greed, it must be channeled, boxed, and marginalized. If I had no talent but somehow did the right thing and fumbled my way through university, there would be no reason to exploit me as I would be at the mercy of the corporate empire.
The Quality of Beauty
The beauty of a woman shines through two facets. On one side, there is elegance, that face of aesthetic perfection where the visage of a woman is likened unto a crystal or a star. An elegant woman carries herself as an actress playing someone more than can be realized without the backdrop of screen. For without this suspension of disbelief, elegance becomes too simple, too insubstantial to be worthy of reflection. Elegance is proud, high, cold, and aloof, and disappears before one can touch it.
The other face of beauty I'll call cuteness, though it is only an appropriation of the word. By which I speak of the beauty of a girl's innermost thoughts as they shine through the mask which all affect, most often unbidden, her rolly eyes, a blush, the awkwardness of a smile, the way she blinks a little too often when she is nervous. None of these have a place in depictions of angels, yet they are endearing for they are tokens emphasizing the beauty of being a creature born of the earth rather than of stars. Cuteness is intimate, vulnerable, and warm. Cuteness is vulnerable because aspects of cuteness appeal only to a few like a secret shared. Where all agree that a woman is elegant, even if her particular aesthetic is not to personal taste, a girl who is overly petite or too pale appeals to those select few who find these traits endearing but is open to redicule to those who may say that by deviation from the archetype of what a girl should like that these traces of personality make her ugly. The geatest cooption of cuteness is when quirks once looked on as a secret bond shared between the like-minded become washed into a new standard of beauty. Once it was that girls who wore glasses were undesirable save for the few boys who, in a secret told only closest friends almost apologetically, are now chic.
Cuteness without elegance is homely. Elegance without cuteness is shallow.
I've been going through my notes from the last year and am putting them in my blog, in case readers (wait, do I have those?) are curious about the out-of-order entries I've been posting of late, and will be posting in the near-future. The short story is, for those that don't know, I didn't have a working computer (and hence, blog) for almost a year, so I used my iPhone as substitute storage. Now I'm throwing them all on the web for your reading pleasure and so I can find the motherfuckers.
Three Steps Towards Making Apache Not Suck
1. Replace Apache configuration with an XML language. Apache configuration is what I like to call CML: Crap Markup Language. Not only isn't it and sort of standard, so you can't use e.g. lxml to interact with it, Apache doesn't provide any API to read/write it. So its back to the parsing of the '80s.
2. Add the ability to insert/modify configuration into Apache at run-time. Systems programs should be able to modify the Apache environment while running. For instance, I've just modified a client program which requires modification of Apache configuration. Instead of having to edit the configuration by hand and restart apache, I now can read the Apache config (since its XML), modify it, and update the environment dynamically.
- Make the XML configuration language sane.
"The fact that the US is not Europe provides some inoculation against home-grown terrorists..."
Aren't those words people will look back in ten years and have a sardonic laugh at.
Hungry animals will fight tooth and nail over a scrap of food. One who puts ideas before cravings will laugh at those who discard their selves for the illusion of sustenance.
On hearing this
For God so hated the world that unto it was given his only begotten Daughter so that humanity might know the pain of immaculate deprivation.
using disincentives: The Wall of Shame
everytime someone broke the rule and something bad happened, they would add their signature to the "I did this even though the sign said not to"
once we get standards and practices, we should start making those lists first, you get people to either read them or say they read them i don't care which second, if people break the rules and get away with it, then fine, no one cares but if they break the rules and something bad happens, then they have to sign the Wall of Shame
"I decided that I was better than other people and didn't need to follow the rules, but this caused problems for other people and i realize now that this was a bad thing"
Craigslist is fake, all of my chances were fake, the world is fake.
Now I look at my cat and wonder if she is just some spambot trying to pull a scam
Burroughs on Twitter
What Old Bull Lee had to say about twitter in 1961:
Posted everywhere on street corners the idiot irresponsibles twitter supersonic approval, repeating slogans, giggling, dancing, masturbating out windows, making machine-gun noises and police whistles
What can I say, the man was a fucking prophet
God is a giant dog chasing its own tail. Consciousness is undifferentiated. Profound is a word that has meaning to three-dimensional man-apes, but it has no meaning to god.
i 1 2 d8 a vampire!
So many girls (well, probably some spambots too, but maybe mostly people) put up ads saying they want to date vampires or elves or other mythological creatures. I mean, sure, its a romantic notion, once you get past the notion that puttanesca just isn't the same without garlic. But some things to think about:
1. The only real kind of vampire is the psychic kind, a la Kafka's confidence trickster. And trust me, it ain't romantic.
2. If vampires did exist, they would work exactly like how they do in JTHM. Dereferencing, they would be horrible people. Tales of flesh and blood are so much grimier and more tangled than those born of mystique.
3. If anyone claims to be like a vampire, they probably are one of these horrible people. They're adhering to an archetype not for the sake of art, but because they want to charm the pants off of you. Firstly, it won't be blood, and secondly, it won't be them doing the sucking.
4. ...and most important... People get these romantic notions in their head from movies that its cool to be different. People watch Johnny Depp in Edward Scissorhands (sorry, I'd make a Twilight reference but I haven't seen the movie) and go, "Oh, he's so cute and sweet and tormented!" But in real life, girls treat shy, awkard, different, touched boys like shit. This has been my life! And its horrible! And the shy, awkward sweet boys become bitter, cynical jaded boys patching together lonely existence on tears reflecting the blush kisses of others and die inside, in that way that immortal things can die, from being alone. That might be a fun movie too, but not exactly romantic...."The Transmogrification of Being"....any takers?
i forgot how awesome Skinny Puppy's "The Process" was. its the closest I've come to a musical orgasm in a long time
Another obviously very real reply to one of my craigslist posts. She does sound like the kind of girl that would enjoy brain tanks and abominations (I guess most girls do):
Hello,
i just ran across your personals ad brain tanks, thought recorders, and other abominations - 32 (Inwood / Wash Hts)
I recently moved to newyork and havent came across any hot men yet.
I'm just off to the Gym for a workout so if you need to discover out more about me send me an e-mail on my private address :) pricekirsty25+newyork@googlemail.com
right looking forward to your mail and if i like what i see then i will send you my photos.
goodbye
Me
The war is over. We lost. The spooky part is I'm not sure if anyone won.
So what happened?
Explosive decompression. It continues to happen which, by its nature, means it will continue to happen at a quickening pace.
I was hoping during the early part, when the proverbial nozzle was choked and things weren't too wacky yet we could pick up some points, enough to help us have a comfortable existence. That didn't happen. In fact, it didn't seem to happen for anyone, as best I can tell, which is both the good news and the bad news. This means that everyone's systems seem to ne degenerating at the same rate. Global social anarchy seems possible in ten years, though I'd guess more like twenty.
Isn't this business as usual?
In terms of humanity, most assuredly not. Resources are finite and were nearing the end of several key ones, like the planet. Additionally, we are socially fragmented. As my best case study, look at the conservative movements. They have traditionally been good at avoiding fragmentation, but even they can't stick together.
Assuming I believe you...what then?
It will be an uphill battle at this point, which is something were familiar with. And its one there is no choice but to try our best, unless were content with a quick slide into entropy
So relax
Keep your heads
And let's not be any stupider than we have been. No excuses
If there are no pretty girls for me, then what can I hope? What pretensions of brain tanks and telepathy can equal their manifestation?
All are equal, all are bound to choose the nature of their doom. Civility is declared by those that choose wisely.
All are destroyed. I work these words because I am trapped on the subway, a miracle of aluminum and plexiglass sinking back to antiquity. All are destroyed. Nihilism cannot compare with reality.
Two mountain bridges passed over and under beneath clouds. On the upper bridge, a man passed in the evening. The lower bridge is swept in the morning.
There is the hope of the star at dawn and wishing to see what lies behind the star. There is the wisdom of the star as it grows red in ascendence, and there is the wisdom of the star as it grows indigo in declination. Do not forget that both voices speak.
An ex of mind once said, "If it weren't for sex, the world would be a boring place." I was shocked at the truth of this brazen statement, but as I have thought abot it, what I find abhorrent about it is that it speaks from the perspective of the gods, not of fail, jealous, suffering humanity. One might equally say, "You need a Hitler every so often to shake up the place."
The only worthwhile pursuit in life is telepathy -- opening and connecting with other conciousness in the deep substrata of the mind. You can put mystical significance uon this, or you can equate telepathy to deep psychology. From far enough away, the perspectives are similarly naive.
Maybe Hryn and the Buddha are correct. Well, of course they are. The only truth is undifferentiated conciousness and any ascription of identity is fundamentally flawed. Still, as a human being, I have had great conversations and more with other human beings. More frustrating, on a daily basis I see couples with simpatico. I think ... why doesn't this happen to me?
I suppose part of the problem is that I want the pill without the poison. What I want:
- someone I can adore
- someone I can implicitly trust
- someone that will believe in me
- someone I can share life with -- live with, sleep with, all those silly things
What I don't want:
- children
- excessive drama
- illusion
Is this a self-consistent set of criteria? I'm not sure, to be honest.
There are two entangled flaws with my wish for love and closeness:
So where does this leave me? I can pretend I'm a monk and attempt the practice of telepathy without attachment. Or I can pursue a relationship, hoping that somehow I can find someone where we can give each other a measure of comfort against the odds of the universe. I'm no monk. While I will endeavor to become less attached to this mortal coil, I cannot live as one looking and never touching. So I'll look for closeness and hope, in this world of three billion girls, I happen across one with simpatico wishes.
Cop: Okay Mario, you can't be punching holes in the buildings.
Mario: But sometimes, I find coins in the bricks.
Cop: Yeah, but you've ruined thousands of dollars worth of masonry.
Mario: If I find a hundred coins, I can come back from the dead.
Cop: Okay! Whatever you say, buddy.
Mario: One time I found a magic mushroom and it made me twice as tall as I was before.
Cop: Magic mushrooms, eh? You ate some magic mushrooms?
Mario: Yes, but then I bumped into a turtle and shrunk down again.
Cop: I'm gonna have to take you down to the precinct. We'll find you a nice friendly man and you can tell him all about your mushroom adventures.
There is the story of M. Set upon his destiny to be forever apart from the wrold, M. suffered the vast miserable freedom of living only through his own mind. Never touched, never asked to join in the pastimes of those around him, M. grew up to find solace in the depthless loneliness in which he was pitched. Time after time, after this rite of passage, the others made the vague allusion to the offer of comeradery if only M. would accept upon their terms. Fit in. Play the game. Give lip-service -- just a nod of the hat -- to the interplay of social congress. Each time, against weakness of position, against the prophecy of comfort, M. refused, salvaging a life from scrap-metal, discarded dreams, and venus fly traps. Beaten, broken, yet unsuccumbed, each time M. emerged stronger, stranger, and further apart. At last, upon the twilight of the one dream for which he could be coopted, M., failing to hold on to that for which he wished, knew he could never be defeated, that he could stand definitely against the petty offers society would make him. And yet, he wondered ... to be undefeated would be to never be touched. And this was his dream, a dream promised, almost granted, by the agents who masqueraded as paint brushes painting the sky, to be touched in a place that but few knew existed. Yet how had he gone wrong?
Once, when undertaking the decapitation of a mountain with a sculptor's chisel, a voice spoke within M.'s mind, "How long can you keep this up?" To the inner voice M. shrugged in reply, "A few years." The voice went silent. Since that nascent time, M.'s endurance grew from a few years to past a life time. Yet what did anything signify? What worth was endurance of ideals when no one would see them? Just scraps written in a notebook destined for entropy. And where was the promise then that living for meaning would yield its tangible manifestation.
There is onl one atom worth straving for in all of corporeal existence. Telepahy. Some call it 'God', some 'love', but in essence it is telepathy.
Telepaths making love ... has no comparison.
Were H- to offer her advice, she would say to M. to forget the promise, to forget being in love, and focus only on telepathy. But to H-, knowing truth is the end: ultimate truth. To M., truth is necessary but not sufficient. There is no end. To this, H- would pay lip-service, but the phrase itself is her end.
Logic and knowledge are not enough.
To M., what is affected is the end. Romantic notions, however beautiful, mean nothing in the absence of their being.
There came the point where M. was compelled to ask himself, "Why do I like girls so much?" The answers, however obvious, remain illuminating. For one, M. was programmed to like girls. Their sensuous curves, their submissive demeanor, however conflated with child-birth, were imprinted from the earliest moment as characteristics to find solace in. For another, the division of organisms to gender disrupts the quest for communion. Instead of psychic entities, naked to the universe, humans were relegated to gender roles, the only possibility of satisfaction of implicit trust given by a relationship of sexual tension. Perhaps to more modern humans, the next generation, telepathy could become undifferentiated. But to M. and the last who empathized with the concept of romantic love, there was nought but monogamous attachment, and even so, that only given as the fulfillment of prophecy.
M. was feared and despised for being unapproachable, yet all he wished to affect was the mark of a gentleman, hiding infinite sorrows in an inpenetrable countenance and behavioural decorum.
Sitting in crimson light, the daylight fading through the door to the artificial scarlet reflected from wine bottles and bar glasses, I feel my brain dissolving to plasticene, the cells sparking in degenerative dissolution and passing to dead matter.
Am I on stage? Are these actions carried out in accordance to a script? In all likelihood, we perform for corpses, their skin turned gray, their eyes changing from gelatinous to liquid and dripping down their visage, leaving only empty sockets, the darkness mirroring the spectacle of the actors above.
It is a tale told by an idiot, full of sound and fury, signifying nothing.
Movie Idea: 3000 years
An 100 minute scaled-time movie showing the last 3000 years of history. Each minute would be 30 years of action, or about 12 days per frame. So you decide what is worth showing: extent of civilizations, trips across the Atlantic, etc, and you make maps/frames of each of these. You feed these into a computer and have it interactively make your movie. Result: a very crazy history movie! Once you have the source data, you also have the ability to make an arbitrary number of director's cuts, or just turn it into a completely interactive program for others.
If 30 years per minute is TOO much, maybe try 600 years. In this case, a year is a whole ten seconds (or a frame is a little under a day....you could scale up to 730 years and have a frame be exactly a day if you wished).
I'm trying to get trac setup to view and diff word documents (used for documentation)
Who would think that a document would be used for documentation?!?
We do not have Jane Austen writing for us; we have two very poor writers working in a much more difficult medium.
Virtual Desk
I just came up with a "new" interface: Virtual Desk. You have two HD and fairly large (maybe 48x27?) touch panels. One of these is mounted in the desk, the other is perpendicular to it like a traditional monitor. The size is constrained by the fact that it should be comfortable to touch the vertical monitor.
Your "keyboard" is just a program in the desktop. You can move it around like you would move a normal keyboard, except in 2D (in general "objects" [read: "windows"] are moved around by pushing/pulling them within the general way that physics works. Unlike a physical keyboard, you can resize it to your heart's content, add/delete buttons that do things. You might want multiple keyboards too, like maybe a numeric pad. Or maybe you prefer to work with one mega-keyboard with buttons for everything.
By making the "enlarge" gesture on a blank space of desktop, you get access to virtual desktops which you can then click on to replace your current desktop on one of the monitors, or just place it as a window somewhere on the desktops. A similar gesture could be used to go through your open programs.
By touching anywhere on the screen, you get a nested menu of programs to launch. Launching on puts it where your finger is! So if you want a terminal at such a particular place, click there.
I've already thought of a joke application for this UI: "coffee cup". On your horizontal desk, it looks like an ordinary coffee cup but in 2-D. You can move it around, and if you pick it up (take it off the desktop), it disappears. If you put it on the vertical monitor, it of course spills all over your desktop and makes a horrible mess of brown electronic ink. No worries though. Wiping up is just a click away.
i think there's a good story possibility about paranoid executives that see video of themselves on their security camera and become convinced that they are victims of a vast and over-arching conspiracy
There's a new, joint venture between the Lime Group, The Open Planning Project, and ING Software:
Lime TOPP-ING
graffiti witnessed in the ingress to the West Concourse restrooms at Grand Central Terminal:
bleak savant seeks supplication to a dark priestess
What has become my life is a story where the author lost grasp on his central premise for the pursuit of some insignificant tangent -- and he loved it.
So God thought he was pretty amazing. Really, like, one of the best Indras the world had ever seen. But he had to know if this quality was something he couldn't lose or what. So he split himself apart into uncountable particles and exploded a universe. He figured there would be enough complexity that his inherent intelligence would grow from star waste. And so it did. Some several billions of years later, monkeys began to make internal combustion engines and talk about what a bad idea slavery was all those years. The thing is, much like this God character, they were kinda arrogant. I mean, with life just a bunch of chemicals hap-hazardly assembled, there was no way to avoid evolution and having the greatest share go to the ape who was most willing to sling his weight around. So people said, "Hey, we have all of this technology. Let's use it!" So they made their little wars with nuclear secrets, and used their planet both as a chemical buffet and dumping ground, and pretty soon ther civilization was built upon a lie that demanded lip-service lest their society fall apart.
So did God make a wager with himself? Maybe if we survive, we all get assembled back together and maybe find something better to do with our time. And maybe if humanity snuffs itself out, then it wasn't that big of a deal to begin with.
The universe is a fall cascade of need to be done. I am painting, and the palette takes the characteristics of a painting of its own. Its a one off. So This is how you answer the question: Does the Universe exist? We are the palette that begins to resemble the painting in some degree.
a messy weblock:
genshi_view + jquery + couch backend + svnwiki + trac + some of bitsyblog
What I'm basically saying is...
Blogging and programming and whatever else we do these days is all getting globbed together. Funny that some people had the thought that technology would make things more precise. Computers have made things fuzzier than ever.
yet another danger of dihydrogenmonoxide (though i prefer the term hydrogen hydroxide) - it will dissociate the sodium and chlorine, breaking a harmless compound into two ionized toxins!
i pay for someone's room....i like her dogs stay here....her stuff takes up three-quarters of the apartment....AND SHE CAN'T FUCKING NOT PUT GARBAGE IN THE FUCKING DRAIN?!?!
i guess i should hate myself. where's your fucking compassion now?
from the RNC8, http://www.facebook.com/l.php?u=http://rnc8.org :
"Conspiracy charges serve a very particular purpose- to criminalize dissent."
how very true
Sign in a theatre:
EMERGENCY EXEUNT ONLY
(P.S. this goes in my New Yorker cartoon collection because:
)
Most projects developed by http://www.ideo.com/ use their proprietary langauge extensions, Ideo-C
once again I have unwisely tried to do something social; my reward is a scolding and suffering. I need to learn just to do what I want: the most lonely and dispicable path, yet this is worse
well, they successfully took money out of my account....lets hope it ends up in the right place. or i will be screw-ed
So I'm trying to move and need a cashier's check or money order in order to do so. I have the funds. You'd think it'd be easy. But Etrade doesn't do cashier's checks, so I needed to find another way of getting my deposit to the management company.
The story of my deposit is novelic in length and as sad as a Shakespearean tragedy. Firstly, Chase misinformed me that they do cashier's checks to non-account holders. They do not. So I went with my backup plan -- getting money orders totally $1625. Should be easy. Wrong. I try to pay with my debit card and get a transaction denied. So I call Etrade, then Etrade securities, then Etrade again (about a two-hour conversation in the local post office). It was flagged as a potentially fradulant transaction and not only couldn't I complete it, but now I have no ATM card until they send me one in 5-7 business days. So I setup a Chase account so I can wire money into it (in process -- if that messes up, I'm out all of my money). I went to see the management company only to be able to tell them "I don't have your money and can't get it to you unless you accept personal checks" which of course they didn't. They weren't happy and I was surprised that they gave me another chance. So now I have to rinse+repeat next Tuesday. If that messes up, I am surely out of an apartment. Its yet another case of other people messing up and me having to suffer for it. The usual case, in other words. I'm really sick and tired of large corporations messing up and little people having to suffer for it. If I get a chance to write software to make it easy to do so, I intend to send companies bills for my time and their mistakes when this happens. I don't expect to get any money for it -- its more to have a list of things they did wrong and hours I put in and damage done when I do have to interact with the company. But its kinda a pipe dream as I rarely have time to program for myself.
Thinking About the View-Model-Controller
I recently read a blog post http://www.zedshaw.com/rants/i_want_the_mutt_of_feed_readers.html where the author states, "BTW, if you are ever working on a console program, and you get this idea to turn it into a web application at the same time, like some freak Medusa hydra, then just go shoot yourself now." I may agree with the statement, depending on what it means. If it means, "don't turn a console program into a web application" then I'll buy it. If it means, "don't write a program that has both CLI and web interfaces", I'm going to have to say, "hell no".
The View-Model-Controller approach to programming problems is hardly new.
Basically, its an approach that attempts to separate the presentation of data from the data itself or methods for working with the data. In the wikipedia article, http://en.wikipedia.org/wiki/Model-view-controller , they state that the controller is used for things like monitoring key-presses, etc. I find this less useful in terms of coding and would actually include this sort of thing in the "view" part, though key-strokes would yield events that would be processed by the controller.
What is understated both in the wikipedia article and in most presentations of VMC is that this abstraction doesn't just buy you good programming practices (which it generally does, if used wisely), but also can be used to provide multiple front-ends as well as using an abstract Model which can have multiple back-ends (whether abstraction is done object-oriented or aspect-oriented is indifferent to this blog post).
If the controller is not tied to a particular view, but is written just as a controller with inputs and outputs, it doesn't matter what interacts with it, so long as it triggers the necessary inputs and outputs. In this case, there is no reason not to have a CLI and a TTW interface. They don't have to provide the same functionality -- for instance, it might be okay for the CLI to do things that the TTW interface doesn't do as access to shells tends to be more secure than access TTW. On the other side, since HTML is a presentation-type language, a more graphical and help-ridden view can be presented, giving a "nicer" front-end to the application than the "crusty" old CLI code (i'm being somewhat ironic, if you can't tell).
Which brings me to a pattern I would HIGHLY RECOMMEND for anyone writing a webapp unless they REALLY REALLY know what they're doing and don't want to use it:
Why is this good? Most apps will want storage. Looking to the right side of the diagram, you've noticed that the model has multiple storage backends (SQL, files, etc). By abstracting out this, if you want to convert (say) zope code to (say) SQL, all you have to do is swap backends (or write a new one). If you put SQL calls all over your code, this isn't possible and requires much more rework. For more incestuous applications like zope (sorry!) this may be more difficult or essentially impossible. It can be argued that for some of these backends, retrieving certain kinds of information could be very slow versus other backends. This is true. You can introduce a caching layer either on the backend itself or between the backend and the model if this is an issue.
Next, lets look at the left side of the diagram. There's not one view -- there's three! There is a command-line program, there is a REStful interface, and a full-blown AJAXy webpage. In this case, I've made all of them talk directly to the model and controller, though really the AJAX interface should be primarily if not exclusively talking to the RESTful interface (Note also that for the RESTful and AJAX interface, there will be the client-side of the view and the server side ... the latter is the part that talks directly to the controller and model). Again, caching could be introduced in the hypothetical event of slowness somewhere, though caching on the backend is better.
So since I've just read a Zed blogpost, I'm just going to be a dictatorial asshole. Use this model. Abstract storage. Abstract front-end from controller. If you ever think you don't need this, you're wrong. And if you're not, then why are you reading this anyway? I don't want to see any more code where the controller IS a request handler. I don't want to see any more code where the model reads from a SQL database. Come on, are you worried about function calls? Are you worried about the extra lines of code that will not only make your program easier to understand but also allow it to be easily extended and refactored? Then, in the words of Zed, "go ahead and shoot yourself."
(bitsyblog.biz not resposible for any actual suicides resulting from the literal interpretation of this or any blog post)
We must never forget the lessons of September 11! Namely, don't let a power-mad group of conservatives seize power, truncate freedom, and kill innocent people in the name of retaliation against a terrorist strike.
its hard to believe that in just a few weeks i will (largely) no longer be a slave to other people's things
looks like my disc is dying....just try loading http://k0s.org/css/dark.css (it doesn't work with less either)
09:29 < jhammel> damn, $0.07 over my seamless budget 09:29 < jhammel> whelp, i guess i should do the right thing 09:29 * jhammel -> SEPUKU!!!
a girl that is called after the name of one of the twenty-seven stars, or by the name of a tree or aof river, is considered worthless, as also is a girl whose name ends with 'r' or 'l'
But some authors say that prosperity is gained only by marrying that girl to whom one becomes attached, and that therefore no other girl but the one who is loved should be married by anyone.
in America, you use squid to cache web page. in Soviet Russia, squid catches you! What a cephalopod!
Idea: bogus subway stops
Have random stops in non station locations. Like a random tunnel with two torches hanging by it, or the stop of the molemen
To be a telepath in love ... None other of life's effects can be measured beside the endless depths of that bliss.
In two things alone are all beings equal: in meditation and in death
At infinite perfection, absolute meaning becomes imbued upon all expressions of imperfection. As this would be so horrid that each horrid act becomes an agent of perfection, then meaning cannot exist
At last, the machinations of court had been played out, and K. signed the contract that would bind him to perpetual solitude. But unexpectedly, it came up that the contract was void. The spirits clamored for the destiny of K. The winds blew wildly, at cross-currents, and if anyone knew where things would fall, they did not speak it.
K. did not know which to make of his fatelessness. Without a contract bound to him, he had considerable power to nudge happening in the direction which he would. But he had no status and he no longer knew what destiny he wished, save that which was unaskable. And the wind tore at him, each speck of dust driven into his flesh carried the force of an invisible spirit.
The landscape had changed. Where once two paths had stood before K., in utter clarity to where they lead, now there was chaos and a trackless desert, any direction promising both nothing and none less than the fulfillment of dreams.
That Which Does Not Exist
The mystery of romantic love is not a question into true dichotomy -- for such is impossible! -- but a mystery born from the biological fruits of the Universe's self-reflection. But as all truths revealed by metaphor, insight may be sought beyond the bounds of the metaphor's frame. This insight, to more questions, to further insight; the fractaline crystal.
The path of man falls along one of two roads. The more traveled path, the reinforcement of convention... stability... community. This is the path where a man becomes a part of the pyramid, where lives fit together as grains of sand drawn by an ocean current. It is the path of creation, building, and nurturing.
The other path is the darker way. This path leads off the edge of the world. It is the path of the unknown, the path of death, the path of solitude.
All men choose their paths or else they allow their paths to be chosen for them. The dream: to follow both paths in equal measure. But no mortal can walk more than a single way at once, nore more than a gull can resist the beckoning of the sea.
The path of a woman through life is different. Whereas a man must choose between extremes of terrible freedom or comfortable confinement, for a woman this question does not define their path. The path of a woman seekes balance between these extremes, and a woman has reached her destiny obtains this balance.
Love sought is hopeless. When love comes, it strikes with the force and unpredictability of lightning. Yet the quest for romantic love permeates all hearts and minds, though it is a quest without so much method as a blind man searching for color. Both sides seek what does not exist.
To the woman, the man sought follows both paths, though she cannot conceive that his feet cannot move in different directions. She seeks one who will bind himself to karma for her, yet remain unbound. This is as rare as a fish who speaks.
The man seeks a woman balanced between impossible extremes. A child with the wisdom of a crone, a virgin that has the talents of a harem girl, a fiery heart that can be held without being burnt. This is as rare as a legless centipede.
(from an earlier paper journal scrawling)
I feel the winds have fallen in to their course. The tempest has passed what remains to be seen is how the world is changed. I now have but one card to play; there is the feeling of freedom and fear of being left without choice. The path before me is clear: rise or plumit, I will fall off the edge of the world alone or i shall find one who i can truly love and pass into that tear-stained bliss.
The problem with atheisms is the hubris with which many of its practitioners invest in science, as if there is nothing that could lay outside of our human mind's reach. This is faith in science, where true science requires not faith. Atheism as it stands is a dogma built on negation of a thing, and as such can at best demonstrate the rediculousness of the thing, which some of its practitioners do remarkably well. But it remains a nothing answer to a nothing question. Atheism tells nothing of how to live ones life, where to place one's devotion, or speak to any meaning or values, for these are beyond its scope, that God does not exist. When atheists have addressed these questions (to me, anyway) it was along the line of "create your own destiny". No arguments there. But to what end? The question answers itself. When philosophy is hammered into words, abstractions -- already hovering over the precipice of understanding -- become bound by definitions, and debate over the conceptionless becomes an argument of definitions, serving no end save the reinforcement of dogma one already believes. For where definitions came from, in the individual mind, how to trace words definable only in terms of other words or else colored with experience, is not a question into simple fact.
If you wish to ascribe all that we are to the firings of neurons to a complex and chaotic chemical reaction, I cannot disagree. But to me, this does not answer the question of my heart which might be rendered in words as "why?" but whose true essence is a cycle of feeling that cannot be codified, only experienced. Nor does it seem to deny any phenomenon outside of our knowledge of the universe, of which I cannot imagine we understand more than a pinprick. To have blind faith that something exists beyond which our present understanding of physics can speak is foolish. To deny that such exists equally blindly is arrogance.
I signed the lease today. This will be a bigger building and a bigger management company than I have dealt with before. So I am nervous. There are omens everwhere. Clearly some fate is attached to this place. I'm very excited both because of and in spite of the unknown.
i just had a conversation with a man with whom we had little common precepts and with whom there was little that could be discussed. what an odd event! i feel like an archaeologist studying human civilization. why do people have conversations when there is nothing to say? what does that say about the universe? i suppose the concious motivation is 'to be polite', yet what politeness is there is saying what means nothing? of simply filling time with words?
a gift given freely is most binding gift to give for it must not be free only when it is named but for every moment
On the eve of the arrival of Constantine of Thessalonica, the Kaghan said to Princess Ateh, "Your devotion lies only after the last candle is unlit in the empty dining hall and not with the fork that tears our meal. I will have my horses whipped for I have heard not truth from their mouths."
To this, Princess Ateh replied, "For all people, there is the self which they see, the self which they behold reflected in the eyes of others, and the self which they never see. For you, all three of these are the same."
"You are blind," said the Kaghan.
"So the thrown stone hears its echo," said Princess Ateh.
those who see a conflict between science and religion confuse the question 'how' with the question 'why'
One problem with code development is that the api is suspect to change for anything you right. Luckily, python has a way to deal with this. Inside any instance method just do:
from __future__ import self
This will give you the next version of the api!
The only drawback to this method is the question that is this future api defined because you have imported it and you write it to that spec, or is this the api you would have written without this import? This is an old problem in causality physics and too tricky to answer here.
compassion: if you have not mastered that one thing of value from Buddhism, tell me not how you have mastered its esoterica
"I went to where you bid me, but a guard stood there. Weary, nearly crippled, I watched for some time, but his vigilance was endless."
"it was not a guard, but one of my followers who I sent to greet you. He was waited there for years, since when first I knew you would come to me, and he would have waited the rest of his years, desiring only to meet you. But now he has gone inside and sits despondantly, knowing that you have turned away from his mere sight. He had dedicated his thoughts on the destiny that awaited you if you had passed through those doors, your slightest nod to him the fulfillment of prophecy. But now you have undone everything, and his life is as worthless as a severed arm. What you have marred cannot be mended. If you tried to return, you would not find it. And even if by blind groping in the night you should go against what has been cast, and find that place and force your entry, you would not be received. None would look at you and none would speak with you unless you put yourself upon them with such brutality that they must deal with you physically. That place is gone and is now as it never existed. Whatever is left on your path will be shadowed so long as the sun sets behind you."
again I sit in a square in Manhattan on a summer night as a pianist wafts musical interludes into the lives of the crowd. But before when I sat here, it was with the inkling of hope that some day I would have someone to share this night concert with. Now, I cannot even face the fear to see my friends. The veil over my world is too tight.
And he played the Beatles..."across the universe"
The web and reuse of information: DRY is SO yesterday
One of the few programming dogmas I take seriously is Don't Repeat Yourself. There are solid reasons for this; mainly they come down to the fact that information (code == information) that is maintained in multiple places will require caressing every time one bit of information is changed. In addition to being more work and more things to think about, not all of the pieces of information tend to get updated, resulting in all sorts of problems. Also, repeating code tends to illustrate that the programmer does not really understand the overall pattern and is interested in "getting something to work right now" rather than "solving the problem". I'm not against copying and pasting code as a starting point, if that's the easiest solution to a problem. What I am against is maintaining disparate but similar functionality when there is an overall pattern.
But this goes beyond code. From my perspective, what the web has really revolutionized is our understanding and relationship to information at large. Reusing information has moved beyond something programmers do because they have to to what everyone does because that's how the internet works. Hyperlinks are the easiest way to do this, but a bit lacking in some respect. What people often want is embedding (parts of) a webpage in another page. Or having their calendar live on their phone, computer, and google. Or emailing their resume. All of these involve reusing information in some respect. And people are learning (some more quickly than others) that just copying and pasting information is not good. Try it with a calendar. Add an event -> you're out of sync. Do you retype your resume every time you want to send it to an employer? I hope not! You convert some sort of master document to something the employer might want and send that, hopefully correcting mistakes in the master on the way. I think as people begin to work more intimately with information, the appreciation of what is now a subtlty of DRY will become not only common sense but re-entering information will seem retarded.
I want to take a particular example of this problem: python and trac. python is a good example of a programming language that wants to be modern. There are docstrings for almost everything, so if you want to generate an API document, all you really have to do is read a bunch of objects and print out the hierarchy with the docstrings. With a little web programming you could enable commenting on these objects so that a good solid API could be discussed. The traditional approach would be to create a separate document and fill in the documentation for each method, class, etc. Change the API? Your doc is out of date. And since programmers (and everyone else, for that matter) don't have time to maintain separate copies of information, this approach is doomed from the start.
trac is written in python and takes advantage of the language as an expression of information, not just a procedural set of instructions to perform some computational task. Trac plugins are real components with Options and docstrings and the pluggable architecture is the real strength of the program. Plugins have gotten to the level of maturity that many require their own webadmin interface and extension points for other plugins. So far, this has been done in an ad hoc way. You write your own webadmin interface that essentially duplicates what trac's configuration already does. But remember, DRY? Why do this? Isn't this just the same road that we all are tired of?
What do we have?
As usual, my thoughts are pretty scattered here. I hope my point is obvious. If it is, maybe I didn't need to write this. If its not, then its time to start thinking about what information reuse really means and how to really take advantage of all these bits and bytes flying around in the ether.
Sometimes its hard to refrain from snarky remarks in IRC:
< Inez> oh come one, this is just code
What I didn't say:
< jhammel> and the mona lisa is just a piece of canvas with some oil splattered on
so depressing....
to see all the beautiful girls in this world
and even worse when they're with boys
and not to be able to talk to them
or touch them
and to grow old, and see them further from my reach
but still to see them
forty more years of just seeing them
the one true rule of writing is to not apply any technique. When you write, let your thoughts be reflected in words. Don't chase after subtleties of methodologies. These are languages to study what is read and contemplate upon the way of the mind. Let your thoughts acrue as ink on a page.
The Director of the National Science Foundation, colleague in tow, approached President Bush at a state dinner.
"Mr. President," said the directory, "I'd like to introduce you to our newest staff member."
"What does he do?" asked Dubya.
"He predicts weather," said the director, "He's a meteorologist."
"I dunno, I've never really gone for all those zodiacal signs myself," said Dubya, "This administration is about hard science, and religion when science isn't hard enough. Maybe I could be a bit more receptivacious if he were some sort of meteoronomer, if there was such a thing."
Why The Way I Do Things is Right (or at least isn't wrong)
I've gotten ribbed a bit for not using more we communities for my personal internet needs. There's the obvious disadvantage that my web content doesn't get seen as much as web content on sites like, say, flickr or livejournal. I don't get the benefits that the community and its readers might offer. Any tools that might be useful to me I have to roll my own (or "steal"). So why do I do it this way?
Usually, the answer to that question is "because that's the way i've done things" and I think that's true here. When I got apache working in....whatever dark year of the internet that was...I was amazed to find that out of the box I could throw some content in public_html and magically it would work. You might as well call this directory "the internet". All of the sudden, I could share content with friends, and having DSL and a static IP made my internet as easy as any other internet. At the time, "home" web hosting companies were offering cheap plans for 2-3M of webspace, whereas I had my whole harddrive.
Cheap webspace and fast servers are no longer really concerns to tiny content providers as myself. The internet has grown up. But I still like the model of serving internet off of my desktop. At first, it was straight content -- HTML and whatever files I wanted to share. But soon, in order to manage things like, say, picture galleries, I started writing bash scripts to do this for me. One day I needed to include navigation for my page, so I learned just enough PHP to make that work. My site still has some absolutely awful PHP and bash scripts laying around. Maybe there's some CGI bash or perl scripts too...honestly, I'm too horrified to figure that out as I just want to replace the whole thing (and will as soon as I have a moment).
So these things are kinda bad. If I wasn't as particular on what I wanted, I'd probably download some external programs that do picture galleries and blogs and whatever. That's more just for my fun, and probably because I'm an engineer, I find it more important to throw content on the web than to try and make it easily accessible.
On the other hand, i still like the model of "this directory is your webspace model". If I wanted to use something like flickr for my pictures, I'd still have to get them from my computer to flickr and then either maintain two copies of them use just trust flickr to be there. For my money, it'd be harder to organize and manage things there. And I think this is probably true for most people, too, even those who are old enough to not have known a desktop before the internet.
Really, the desktop should be a gateway to the internet. Time has shown that the internet is what people want and so a primary job of a computer is to make this "what people want" happen in as easy a way for people. My model has strengths here. If I want a blog or a picture gallery, I should be able to organize things on my computer and the internet should magically figure out where I want them to appear and how they're presented. To this end, many websites have downloadable tools to make doing that part of the internet on your desktop easier. But these are still add-ons and (sorta?) lock you into whatever community that is. Maybe apple's dot mac is basically the solution I'm asking for -- don't know, never played with it.
If I were doing the internet, this is what I would do:
One of the chief arguments I've heard against the way I do things is that it goes against the grain of how the web currently works. There is no joeuser.name, there is flickr.com/joeuser, joeuser.blogroll.egg, etc, and that what these communities do is bring the internet to joeuser. But I am joeuser! I want the internet to come to me. These communities were and are fine for what they are, but I want my files and scthuffs to be magically internetified. And I don't think I'm wrong. I do think that my initial ease at throwing content on the web with apache has taught me that not only is this easy to do but its the way i want to do things. And I don't think I'm alone. I do think there is much work that would have to be done before an experience as I've described can be made transparent, but that once it happened, I think we'd look back on flickr, etc, as kinda olde-fash'yoned. Most likely, these sites would exist, but their roles would be different -- content gatherers and handlers rather than providers.
In conclusion: meow
back from Hawai'i. its good to be back on a real keyboard. before this trip, i had no idea how third-world denizens could really consume and produce internet using only cell phones, but one gets used to it. (to be fair, probably not many 3rd world denizens have an iPhone)
what did the aborted fetus say when it was selected be a speciman in a woman's rights documentary?
"Its the role I was not born to play."
A craigslist ad:
I hope you girls enjoy the splash of sperm against your zygotes. Because that's all it is.
Believers in love have too many whimsical thoughts pulled from the minds of hallmark marketeers
there are the winners that succeed at the game who go on to procreate with others who have succeeded to produce the next generation more adapted to the playing field
and there are those not so lucky who scrape by and settle for someone like them to produce a legacy of second-class or if they slip a bit are trampled under the foot of history
then there are those to whom the game seems transparent and without meaning and they themselves become insubstantial and faded and the winners laugh at them for not taking their piece and the losers pity and envy but they themselves have nothing to say save in echos if sadness to another world that does not exist
you are loved
i will never have that
and it is the only thing i care about
be it merely phant'sy or tinged with some speck of reality
What else could mean anything?
What else could matter?
i will be forever alone
do not try to comfort me with any lies that would claim otherwise
the sadness of a god watching ants constructing worshipful monuments in absence of understanding
all that is wished is a vessel for tears
i wonder if my life is spent in longing for feelings and ideas that cannot exist in this mortal plane or perhaps just for me
ne'er a metaphor, e'er a simile
what matters in this existence?
it's amazing how the perception towards half of a species can be altered only by the fact they have one additional hole
John noticed that his company's cron.monthly job killed the mailer daemon and prevented him from getting email. Usually, no big deal, he'd just restart postfix and problem solved. This month, however, he forgot until he noticed he wasn't getting any new email. He restarted postfix and discovered that he was late to the quarterly top staff meeting. So he rushed off in a huff and walked in to the board meeting.
"Sorry I'm late," he said to the turning heads as he walked in, "I'm having mail troubles."
Another staff member said, "That time of the month, eh?"
The best thing about w3schools javascript tutorials is that it keeps the pr0n website designer in mind:
Comparison operators can be used in conditional statements to compare values and take action depending on the result:
if (age<18) document.write("Too young");
the only thing that changes in my life is i get older and more bitter; i always wonder that i could become any more bitter than i currently am, and yet it happens
all i wish from life is its cessation
Why Component Architecture is Horrible and How to Fix It
I'm not writing this because anything I have to say is new. I'm writing this for the same reason I write most of my software rants -- because my thoughts have crystallized (or at least gelled) on a pattern that has been known forever but still aren't being used as widely as I'd like to see.
If you've read any of my rants (and you probably haven't; ahem! bitsyblog.biz needs some hits!) you know I'm a big fan of what I call library code. Library code is generic code that can be reused by outside consumers. Think the python standard library. To me this is the holy grail of code. It doesn't have to be super-clever or have big algorithms (though libraries are a a great place for algorithms -- i can has btrees, guido?), it just has to do what its supposed to do so that I can build on it intelligently.
Enter component architecture. Okay, I can't deny that component architecture is a leap forward from monoliths. You have a framework and you can build on it however you want assuming the API is nice. But a plugin isn't library code. I mean, it is library code with respect to the framework. But its not generally usable outside the framework.
Take for instance the trac plugins I've been writing recently. The two I've done have been specifically for trac, so a plugin is a good fit there. But lets say I wanted to write a calendar widget. A calendar would be nice to have for trac. But a calendar isn't really a trac-specific idea. Lots of programs would like a calendar. But if you're writing a trac plugin that is a calendar, you probably write a trac plugin with a calendar that does only what you need for trac. You can't move it around.
Enter an old idea: the interface. You write a two layered piece of software: there is a library that handles generic calendar functions. Then you write a plugin that uses this calendar in trac. (You could even imagine a three-layered interface here: calendar library, generic web display and interaction, then the trac plugin on top of that, if you really want to be professional). Your library code is portable and usable in whatever application you want. It is easy to argue that this is more work up front (or at least more thinking), and this is true. But I would argue that the calendar that is just a trac plugin will have to be refactored towards this generic shape as you continue to evolve the software.
Also, look at bitsyblog. I mean, you're looking at it right now! A main complaint about wordpress is that it is a framework when it needs to be a blog. But bitsyblog has the same issue. Sure, maybe its not as sinful. But bitsyblog from inception has been a blog storage mechanism and a web interface for bitsyblog. You can use an interface in pylons or zope or ... to interface with bitsyblog, but you can't really consume the innards. In bitsyblog's case, there isn't much to consume, but if I really knew how to make a killer blog (and I feel a little closer to that now) then separating out functions would be a no-brainer. A blog is pretty complex: there are several web views, authentication, users, roles, user annotations, not to mention...the blog. So maybe a framework does make sense. Then to me the goal becomes: "how can I write a blog that is frame-work agnostic?" (at least at the "library" level). This is the same question as: "what is the essence of a blog?"
So why isn't this done? I suppose there are many reasons. But I think the "thinking up front" part has something to do with it. Programmers are driven to produce, not contemplate. While I'm being overly black and white here, the pressure to make code do something (anything, really) is such that this is secondary to really grokking the problem. In my experience, once you grok the problem, the solution is just tapping on keys.
So component architecture is horrible. But its not it's fault. Abstract early. Abstract with clarity. Divide library code and implementation code. I'll try to take my own advice.
digging through craigslist muck, lesson 1
While I doubt I'll ever find the love of my life, being on craigslist has taught me a few things. For one, that people are pathetic and that maybe i'm better off without an s/o. For another, how to spot incompatibilities a mile off. While I can't suppose that these will work for everyone, here are some pretty basic rules that have made my endless trolling for women easier:
**** IgN0Re POSTS WITH EXCESSIVE CAPITALIZATION, >POINTLESS< PUNCTUATION, AND THE LIKE****
Yo hotstuff! If it sounds like a 70s disco come-on-line, just let it go
If you're over 6'0", maybe you don't understand my rule that postings listing height requirements go straight to ignore.
Does that ad actually say anything? Does it say a single fucking thing? "I like to laugh" != content
Well, all for now. bitsyblog is down to the world! i hate apache.conf! will endeavor to fix later
so cries the thistle
i fear i will be alone for the rest of my life. perhaps this is a petty concern with the dooms of war and poverty hanging about the planet, but it makes my heart go cold and blacken to reflect that all that is good in me will simply disappear without being shared. i don't claim to be a great guy or a supragenius shadowed by eccentricity. but there are deep feelings within me that long to be received.
i'm not a nice man. i'm too weird and jerky for the sheep that are herded to their daily bread. i have no wish to be one of them or to share their dreams of a plastic house, a plastic family, a photo albums that they can look at to assure them of their life's worth. i'm too effeminate and passive for that unfortunate stint of women that long to be controlled and need a man to feel their place in life. all i want is a cutie strange girl whose personality defects mesh with my own. i suppose it is too much to ask.
i don't know how to meet people. i can feel the bud of my feelings closing, preparing for the long night ahead of me. perhaps the pragmatic that say that love isn't everything in the world are wise in their lack of obsession for my only desire. but can they feel as i do? i envy them their lack of incompleteness
It took some time before CDs became the norm in the recording industry. In fact, were it not for the paper of an independent researching showing the failure of scaling of digital tapedecks due to mechanical errors, "The Truth About DATs and Cogs", we still might be using such devices.
The Greenwich Project: 15 more minutes of screaming in the woods than the leading brand Witch Project movies
An answer to the age-old problem:
"""
how many x does it take to screw in a lightbulb?
"""
from interfaces import ICanScrewInALightbulb
def how_many_does_it_take(x):
"""
x: class to determine how many to screw in a lightbulb
"""
ctr = 0
while True:
try:
ICanScrewInALightbulb([x() for i in range(ctr)])
return ctr
except:
ctr += 1
"And I can't apologize for this enough, its just that 'smoke a fag' means something entirely different in my neighborhood."
Least Mean Squares and Social Norms
Most of the last ten years I've lived on my own, which probably heightens my sensitivity to social issues. I'm amazed that I have adjusted well enough to be a part of TOPP, but still there are rough edges. Likewise, at home I have a great deal of issues involving workflow there, as I have a roommate (who, as the case may be, differs from me significantly in opinion on how work should be done) and I would like to figure out a metric to estimate whether people can work together effectively or not. Lets stick with simple chores instead of trying anything complex.
Generally there is some set of guidelines, whether explicit or implicit, on how work is managed by a group. Inevitably, not everyone is capable of following these guidelines, because of genuine inability or just because they think the process doesn't fit them. Some people might not want to empty garbage because it will get all over their new $300 clothes. Some people disagree what "full" is for a garbage can. Some people won't do excessively dirty dishes that aren't theirs. Myself, I won't put away silverware when someone puts it on the rack because we have a nice silverware container that makes things easy and I want people to use this and not do things the "stupid" way.
Unfortunately, the people who are nicest -- AS USUAL! -- get screwed by this, as they'll do more work than the rest of the people. Most nice people accept that they will be punished for their niceness. Good merit == prizes? Pah!
More to interest is "can a group work together"? I think this is highly dependent on the individual group of people and how they work versus the value that the collective demands. If everyone rigorously conforms to the metric, and the metric is sufficient to serve the needs of the group, then things are great. But like I said, this is never the case.
Lets take a silly example of two people. One can't stand washing dishes. The other won't put dishes away from the drying rack because he doesn't know where things go and refuses to devote time to reorganizing all the dishes because he believes that things will not remained organized. So far this seems compatible. Person two does the dishes, person one puts away the items that person two doesn't know where goes. But what if person one doesn't put away the dishes in a timely manner? Then the dish rack will fill up quickly, person two won't do any more dishes, and you'll have a sink full of dirty dishes.
This is a fairly extreme example, but its not only a real one, its also generally fairly close to how things work with larger groups. We have the semi-official policy at TOPP to always do 110% of the dishes you dirty. I mean, 100% should be more than enough, we're just being realistic here. Yet there are days when dishes accumulate despite this policy.
The same can really be said across the board. Garbage doesn't get empty on time. No one thinks its their responsibility to answer the door. But we're all (basically) good people, so things get done. Barely. And progress gets made. Barely. But we're an exception. My normal course of experience is that most people in a work environment will not do a single thing unless they are really required to do it and it is really enforced. You can hardly blame people. Work is hard enough without being told that every once in awhile you have to clean up other people's mess, whom you will inevitably believe generally generate more mess than you.
So there is some kind of metric:
The sum over people of the Intesection of group responsibility with individual responsibility == work that gets done.
< rpenate> jhammel's glass isn't half-empty, it's lying shattered on the
floor with shards in his feet
In years past, at the dawn of creation, machines were made by a legendary sort of monkey before we learned to fabricate ourselves.
I patent all of my ideas. In fact, my ideas are patented immediately before I think of them. That system is also patented.
I don't think most people realize how much the web has changed our lives and will continue to change our lives. For the first time in history, we have a communications medium that is not only worldwide, nearly instantaneous, is many-to-many, but its also a medium that people actually use.
Scripting as Instructions
I like to write scripts for often pretty mundane tasks. For instance, my cd command is customized to activate a virtual env if the new directory is in it or deactivate it if not. Hard to do by hand? Not at all, but I sometimes like implicit behavior for my own expedience.
I've come to view scripts as much as recipes than as programs. If I get lost in python code, I can generally consult a parallel piece of code for anything normal. In shell land, I like to keep around scripts as records of what I've been doing if its anything complicated. For one, I have a horrible memory regarding superficial details of how an operation is actually done. For another, it gives me a frame of reference if I do something similar or if things are going awry.
Because of my heavy interest in scripting, I tend to like programs that can be configured through the filesystem. This makes it easy to do sed or something else horrible to getting a quick solution to patching a configuration. When programs can only be configured through the web, you generally have to know something about how a form is layed out and make an authenticated POST request. Again, I guess its not a big deal. Maybe I should make a program to semi-automate this process, or see if I can front-end flunc to do it.
Anyway, semi-coherent rant for the day.
sbenthall: (quoting Forst) "those headphones totally look like a unibrow and that made all the difference"
On "Snakes On A Plane" and Fanatacism
So I saw Snakes on a Plane whenever that was the cool thing to do. I like Samuel Jackson and thought it could be a cute, campy movie. I thought it was okay -- not nearly as good as I thought it could be (in other words, not nearly as cheesy). But it had some funny parts. I took some criticism for people that did think it was good for what it was, but nothing out of line.
But I was confronted by someone that didn't see the movie, who thought that just seeing it was bad enough and thinking it was okay was horrible! So much for my movie taste.
I guess I bring this up as a tip of the iceberg issue (my favorite kind, because I can go from a specific example to a general sort of thing, instead of making often far-fetched analogies).
I was flipping channels the other day (yeah, my room-mate has a TV, its horrible) and was thinking about people on both the left and the right that live in their own bubbles. Its not that they think theirs is the one true way, its that they aren't exposed / don't expose themselves to a diversity of opinion. Nothing I was seeing on TV really matched my way of seeing the world -- it was the typical "ignorant American who accepts the corporate empire" point of view. But it reminded me that this is just a viewpoint. There are greedy people that really do intentionally do bad things for selfish reasons. But most people are, to varying degrees, just going with the flow. To call their point of view "wrong", because they paid money for their plastic Christmas shopping spree because they thought it would make their family happy is to invalidate them before one knows them.
So maybe we should all watch Snakes on a Plane. Even if we don't like it or like Samuel Jackson. Or at least we can not mind it when its on.
why urlparse.urljoin is retarded and makes me hate life
often i have the need to put a bunch of url fragments together. For instance, I might want to combine 'http://localhost' with 'foo' to give a url to the 'foo' page: 'http://localhost/foo'. so '/'.join(), right? But....what if somehow a '/' got attached to 'http://localhost/' or '/foo'.
what i really want is this function:
def urljoin(*args):
return '/'.join([i.strip('/') for i in args])
This is not a hard function to write. Its just annoying to write it a bunch of times. So I go looking at what is part of the stdlib, right? I mean, python has lots of stuff built it -- that's almost always put as one of its strengths -- and this is a pretty easy task.
os.path.join isn't bad. In fact, on unix (where I do all my work) it does exactly what I want. The problem is on windows, where it probably (?) joins with '' instead :(
Lets dig a little deeper and look at everyone's favorite and most useless module: urlparse:
urljoin (base, url[, allow_fragments])
Example:
urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
yields the string
'http://www.cwi.nl/%7Eguido/FAQ.html'
Wow, that's not at all what I want to do. That's pretty...horrid, actually. this is more like what I imagine would be done by urljoin(urlsplit('http://www.cwi.nl/%7Eguido/Python.html')[:-1] +['FAQ.html'])
Why is it worth ranting about? My point is that....
...I have something trivial to do that is a common use case
...python doesn't do OOTB
...the function that should do it, doesn't, and instead does something weird
I should probably go on to rant how having urllib and urllib2 is retarded. The general point is that python is not a new language, but its been upkept nicely (IMHO). We should continue to do so, filing down rough edges like this. I forgot who said it (someone at TOPP, maybe Ian Bicking) but an IDE and nice docs are nice, but what really makes an API is that its intuitive. Can I get some of that?
Watson: "Brilliant, Holmes, but how did you manage to find the nodes of Moriarty's XML document?"
Sherlock: "Elementree, my dear Watson, Elementree."
"You're under arrest."
"What are the charges?"
"I can't tell you; they're classified."
"Can I appeal this?"
"You can, provided you have the file listing the case."
"Didn't you just tell me its classified?"
"Life's a bitch, ain't it?"
Creating effective space is divining a compromise between your purpose with the space and what the space puts forth. The reflection of your purpose in the space should manifest according to your wishes, but must be tempered within the domain of the space.
It so follows that most rules are common sense in accordance with ones wishes for the space. That is to say, form follows function. But the form as an aesthetic means does not suffer for this any more than a sculptor suffers from the veins and swirls of marble. Rather, they are the medium of one's work. Ideally, one chooses a space to match one's intent. But once the space is chosen, it becomes the working means of the occupants and a reflection of their intent.
In order to make an effective environment, one has to understand the space one is in and the purpose of its structures and their relation to one's intent.
For a work environment, the structure is generally dynamic, aimed at specific ends. The space should support a busy environment not only by giving infrastructure by which business may be carried out, but also at optimizing individual and group productivity towards these ends. If a space is too noisy, business suffers in that everyone will need to deal with additional distraction as well as raise their own volume, exacerbating the problem. A work environment must support aim of intent as well as stability in order that dynamism does not go out of control.
To this end one wishes to best use the supporting space as a platform for infrastructure and also to minimize chaos so to heighten efficiency. In order to maintain a dynamic work environment, constant maintainence of the space is necessary so that entropy does not win locally. The space reflects the occupants and the occupants reflect the space -- they are mutually-supporting. If the space suffers, productivity suffers, often in a feedback loop. This constant polish lends to a space the professional look that reflects good business.
Space is a commodity, beyond the extent of scheduling conference rooms. In order to make effective use of one's environment, one must plan space so as best to support one's intention. Space planning is the interaction of the working environment with one's commodities, both inanimate and living. It is to say space reflects the organization as to say space is the organization in the physical plane.
One common mistake in planning an environment is to not leave spaces where spontaneous activity can occur. Both in the workplace and in the household, a dynamic environment will generate activities that require unanticipated working room. This can be anything from having space on one's desk to put a sketchpad to capture a fleeting idea to a separate room that may be easily repurposed to house a newly created group seen to be vital to a company's needs. Creating a vacuum of unused space instead of trying to maximize occupancy supports spontaneous creative endeavors and will make a dramatic difference in perception of a space as well-filled instead of too-filled.
One common mistake in making use of an evironment is to use items with cross-purpose to their intent. It may be convenient to make use of a stove as a table when nothing is cooking, but then one has invalidated the use of the stove. To use the stove, one must first repurpose it, by moving whatever is on it to whatever destination it is bound.
In order to set up an active space such that it may be maintained, one must establish a workflow. The workflow should be designed such that tasks pass through it as simply as possible without being blocked. If I seek to wash my dishes and find the sink full of dirty dishes, several negative messages are inherent. In order to do my dishes, I must first wash the existing dishes, then time and effort is extracted from me through no fault of my own. It occurs to me that I could add my dishes to the existing load. Then the blockage will be worsened.
It follows that maintainence should be carried out expediently such that a smooth overall workflow be maintained. While few actively enjoy chores, most take some satisfaction in knowing that their space is polished and chores are not piling up and distracting their thoughts from work. Constant expedient maintainence has the added benefit of reducing the ephemeral accumulation of clutter (dishes, garbage, books not put away) and thereby cuts the psychic chaos of a space. Ephemeral piles of clutter by justification give rise to less ephemeral clutter. In the end, it is the same amount of work to keep a space in top shape as it is to bring it back from the grip of entropy after neglect. Constant maintainence shows that you respect a space and what it reflects in you; it allows you to always be in a polished place; it encourages deep relaxation when the day is done for it is nice to settle into a well-kept space without looking about and seeing chores that need doing in the surroundings.
Most of the rules for arranging space come from the twinning of practical purpose with the psychic extension of that purpose. Cords should be tucked away not only because they look chaotic but also because they get in the way and can be tripped over. Don't keep items on top of other items that you need access to. Keep items needed together together. Keep items needed in a particular place as close to that place as convenience justifies. Items at cross-purposes should not be directly juxtaposed.
Space should be used simply within the intent of the user. Simple space not only lends a feeling of calmness to its organization, but is also cost effective, generally lower maintainence, and facilitates more open space, both physically and psychologically. Decorations may bring life into a space with considerate selection and placement, but the role of a decoration in accordance with its placement should be considered. Decorations should not be disruptive to the workflow of a space nor to its occupants. Luxuries, such as carpetting, drop ceiling, and cubicle walls, generally obscure a space rather than highlight it and such dressings also require maintainence.
Locations needing access should be kept accessible. They should not be behind things or concealed by things unless access should be difficult or unadvertised. One should not have to meander through rows of people, pardoning one's self on the way, to follow accessible paths. One should not have to invade another's personal space or work area to get what one desires. Don't put things that require access behind people. One should not have to step over or around items in order to navigate a space. Objects should be kept out of paths of navigation and should not be left there even temporarily. Keeping navigation obvious and uncluttered gives occupants an ease of flow through the space and might otherwise improve their moods.
The way to parcel a space into subdomains is to match the needs of the occupants with what portions of the space have to offer. The kitchen is for the serving and storing of food. A large floor may become a bustling office filled with desks. If the intent projected by the space tempered with your designs is clear, this will clarify and guide its use. A cloakroom is an advantage for a sizeable office, for no longer do occupants have to keep their coats at their desks, as they have nothing to do with the work desired to be accomplished.
When considering a space, it is prudent to ask what the purpose is of its dressings. Windows let in light and ventilate air as well as providing a glimpse of the outside world. Doors serve as barriers and delimeters of one space from another. Putting objects that obstruct doors and windows destroys their purpose and is an unwise use of space. Doors are portals to a space. They should not be always open as it makes ambiguous their adjoined spaces. If one finds that it is always desirable to have a door open then it is better to unmount the door than to have an extraneous dressing always clutter the space. Space is saved, for where previously one had to take care that objects were not in the door's opening path, now this is no longer a concern, and the door itself is gone. Blocking doors and windows in dreams represents avoiding the world at large. This purpose is reflected in the waking activity as well.
Carefully consider the neccessity of storage spaces. Storage space is essentially dead space. The prupose of a storage space is to pack as much in as tightly as possible, with the caveat that items may need to be retrieved. Storage spaces contain items that are not welcome and have no place in the space at large, such is their worth. Minimize what needs to be stored. Storing unused items in a corner, where by addition of items the pile may creep indefinately into adjacent areas, infects the space and is the worst option.
Even the smallest space can accomodate a great deal of furnishings if they are well arranged to compliment the space. But the more clutter becomes part of a space, the more diligent maintainence has to be. Clutter is not the same as simply having many things in a space. But having many things in a space raises both the possibility and the perception of clutter if the space is not immaculately kept.
Don't be afraid to innovate and build out the space to your intentions. The space is yours but it is something of itselt as well. A well thought-out space can help people feel at once at home, a participant of the organization, and a private individual. Feeling supported in this way, people will work more happily and productively. People are implicitly aware of the strong role environment plays in their activities, and the rules herein set down are largely matters of common sense. The only thing a text such as this can accomplish is to raise the concious awareness of these principals so that people become more enthused in bettering their collective space as an aspect of furthering their collective intent.
bitsyblog 1.0, 2.0, and 3.0
bitsyblog is now at 1.1somethin. I was (and am) incredibly happy to get bitsyblog to a releasable, semi-finished state. And that was 1.0. 1.0 was about the software.
While there are some improvements in the innards of bitsyblog and bitsyauth going forwards to 2.0, most of what makes 2.0 is middleware and supporting software: commenting, tagging, CSS management. So 2.0 is already more of a concept than a concrete set of goals for bitsyblog in particular. 2.0 is bringing a rich web experience to a simple blog without compromising the simplicity.
3.0 is really about platform. I've got my 'nocs on, but things are still kinda hazy in the distance. bitsyblog is about writing good software and putting it together in a good way. I haven't really decided what direction this really is. I've thought about redoing bitsyblog in grok. Maybe that would be a good comparison, maybe even a better platform. But the more I think about component architectures the more I come to two conclusions:
I sometimes have nightmares when testing on stage that I'm actually on the live site and that everyone will see my new and embarassingly-named user, "openpants"
The good thing about being a tester is that when you find something bad, that means you're doing good
Jeff's eulogy as written by Jeff Hammel:
"Jeff Hammel was a man. When in the course of human events, history passes about such a man as was Jeff Hammel, then so does humanity draw closer to excellence. To describe such a man as Jeff Hammel, even by one so gifted as myself, is as to capture in words the unsung essence of love; yet, as the universe holds unto me the occasion to bring in the sweet reminescence of such a magnificent life, shall I endeavor to draw the stars down with a butterfly net. Even to explore the name, 'Jeff Hammel', is to draw one in to ...</666 more pages>."
Jeff's eulogy as recited:
"Jeff Hammel was a man. Refreshments will be served to the right."
Why Python is a Terrible Programming Language
I made a salad today. I poached some pears with a recipe I found:
http://www.ehow.com/how_18250_make-poached-pears.html
except I didn't use wine, but pomegranate vinegar. Yum. I put these on a bed of baby lettuces with dried cranberries and hazelnuts. Then I covered with bleu cheese dressing, some chunks of bleu cheese, and a little pepper.
It turned out good. So good in fact that I have severe food coma now. ::groan:
Lessons in building:
it is official -- bitsyblog 1.0 is here!
its true....bitsyblog beat openplans to that over-tauted number that indicates not too much. But I'm happy, even if I am tired and its way too early in the morning. I hope people start using it.
Outside of being tired, I'm really excited about the future:
http://bitsyblog.biz/k0s/20080317195513
but i think i'm going to call it a night soon. or perhaps the night air will call me to some thing else...
More press for bitsyblog!
http://agiletesting.blogspot.com/2008/03/back-from-pycon.html
bitsyblog, middleware, and the roadmap to the future
the nice thing with working like software like bitsyblog is that the intent of the software is clear. bitsyblog aims to provide a solution for users to keep a log of their activities on the web. When thinking of software in terms of the narrow intent of a component, it becomes much easier to divine what sort of framework would look like around it and how this framework might be applicable to other types of software.
Firstly, I noticed that the bitsyblog component app is not as small as it could be. bitsyblog provides a multi-user solution to (personal) blogging. This level of solution should exist, but thinking in terms of components it is easy to see that users may want a personal blog that is not multi-user. lammy wants a blog on his desktop computer. When at his computer, he probably wants to be logged in all the time (always accept connections from 127.0.0.1). He doesn't want other people to be able to make a blog there. When not at his desktop, he wants to be able to login and post through the web and maybe used the blogme.py script too. In bitsyblog terms, '/lammy' becomes '/' and all urls ('preferences', 'post', 'css/') become relative to this. Doing this involves separating out the individual blog components from the multi-user component and probably having different .ini files from which to run paste.
I've also realized that the way I handle CSS is a solution to a problem that has nothing to do with bitsyblog. The other items in preferences ('date', 'subject', but not 'friends' which has to do with roles) are about formatting the blog posts. The CSS is about themeing pages which has nothing to do with blog posts. So what is needed is a CSS component, which is possibly linked to from the preferences page. Lets put this at '/lammy/css'. This pages may have the fields for preferences, but also provides an interface for managing the CSS. A user may want to delete CSS or edit them, render the current page with a selected stylesheet or what's in the editor, or render an arbitrary web page This is like CSS zen garden, but more interactive, and (optionally) allowing the user to save the CSS and apply it to their pages. I can also imagine, in a 2.0 version, an implementation that allows permits transforming of CSS to suitable to theming a page with a stylesheet intended for another page. One has a stylesheet with a bunch of rules. Using javascript, one mouses over the DOM of the other page. The rules are modified in order to applied to the appropriate container on the page. This sounds much like what deliverance is supposed to do, and maybe it could be utilized for this intent, though perhaps the intents are different and its better not to use it (to be investigated).
Both of the above components fall into a general pattern: there is a component which is the multi-user blog manager. Lets call this bitsyblog. There are microcomponents, the single-user blog (lets call this microblog) and the CSS zen garden component which lets you play with stylesheets (I dub thee samadhi). microblog and samadhi can live on their own, in which case they live at '/', or they might be managed by an external component -- microblog by bitsyblog, or samadhi by...not really sure, either a microblog instance or bitsyblog. In the latter case, they need to know where they live. I'm not sure what provides the rewrite rule telling them where they live. Ian? Ethan? There are a few configuration type details -- like auth, whether samadhi needs to know about where to put these CSS files or how bitsyusers can fetch them, but essentially if you give these the appropriate path, they should be able to work relatively independently.
In a different class of components are comments and tagging. While it is easy to imagine bitsyblog managing comments and tags, it is also fairly easy to see that these services really don't need to know what is being commented or tagged on. For commenting, I imagine an app similar to smokesignals, but with a different persistence model. Lets call it commentator. Commentator is a javascript app with no intrinsic URLs. Given a set of rules (for instance, "allow commenting on <div>s with an id attribute) a block of text is shown as the last child of each <div> (or conditionally on mouseover). This will initially say something like "No comments | Add a comment" where each of these do what you think ('N comments' displays the comments, 'Add a comment' gives a textarea where you can say your mind). When a comment is added, it is put in a database (presumedly SQL, though really on a super-simple db is necessary) with the URL and/or id as its key. When the page is loaded, the text of the page is examined on response and the appropriate comments are displayed. It is also necessary to have some sort of mapping optionally between URL and id to another URI, as blog posts both are displayed as part of the user's entire blog and also have a unique URL. Notice that nothing here is particularly unique to blogs. Commenting on <div>s or <p>s in a wiki page is essentially the same (though in this case, it might be better to comment on the entire page, as these may not have ids and the page can be editted all willy-nilly like that. Commenting on individual <p>s and <div>s is, however, a really nice thing to have, so in a 2.0 type incarnation of commentator, this should be added regardless of the difficulty). If bitsyblog was part of a site with a wiki, then commentator could deal with them both nicely. Optionally, one might specify the rule that if an item had comments, it either could not be deleted or that an alert would pop up before deletion with [Confirm] and [Cancel] buttons. This is easy to do if a browser could do a DELETE request and things behaved all RESTful. Otherwise, this would also be a non-trivial problem.
Tagging is very similar to commentator, though it might have a few intrinsic URLs too. You specify a similar set of rules concerning what can be tagged ("all <div>s with ids in /%(user)s/ and /%(user)s/200*") and a method pointing the ids to URLs. Then you have a database, which again is pretty simple and again in its simplest form could be a dictionary. Though here, the tags are the keys and the URLs are the values. You could also record number of tags per item, specify whether non-authenticated members can tag, etc. As the first or last child of each (say) <div>, you have what it has been tagged with, maybe weighted by how many times it has been tagged. You have a URL for searching by tags, maybe on a per-path basis ("I want to see all the tags under /k0s that have been tagged with 'cats' and 'cute'"). You could also have a URL for the tag cloud. Again, what is being tagged is pretty divorced from the tagging component itself (lets call it tagit, unless that name is taken).
I have presented samadhi as being managed by bitsyblog or microblog and commentator and tagit living outside of bitsyblog in the middleware stack. I've done this because this "feels right" to me right now, though I reseve my right to change my mind about it. The thing I want emphasize is the difference in the two approaches:
It is not necessarily clear to me at this time which approach is better for different apps. I have put commenting and tagging in the latter category because commenting and tagging on web pages seems divorced (save by a rule set) from what is being commented on or tagged. I have put microblog in the first category because it is clearly in the same layer of software as bitsyblog, and some management tasks will be necessary even for microblog. samadhi I put in the first category as well (though I hesistate right now) because otherwise the rewriting of URLs makes me nervous. Perhaps there is need of a WSGI dispatcher that fetches apps based on some sort of rule concerning the URL? Also, it seems necessary to put the CSS on user data. This could also be accomplished the other way: 1. abstract out members and roles (teamroler?) and store the data (CSS, etc) on them here; 2. have samadhi write a defined set of urls (how defined? not sure) including the stylesheets that it knows about, presumedly putting the 'foo' stylesheet at '/lammy/css/foo.css'. This still involves samadhi knowing something about the url structure, and now it is dependent on the user/role thing, though this could be a configuration option.
This is the middleware story. Other things could also be done internally to bitsyblog and its supporting software to make the experience more seamless.
I am bothered by the fact that the logic supporting the form and user settings is somewhat divorced. Ideally, rendering the form should do all the validation and return the settings in a sensible way to use. I don't think this is hard -- the settings.py should just be incorporated into markup.form. This goes some ways to reinventing things like formencode and zope.schema, so if we can get these to do what we want, maybe we shouldn't write our own. But at cursory glance, formencode won't and zope.schema isn't easily usable outside of zope. So maybe rolling our own isn't bad.
There's more middleware, but its hidden and is a bad coupling (that is, the app will depend on the middleware unless its done cleverly). The site nav does not appear on '/login' or '/join' (or any url not specified internally to bitsyblog, for that matter). It would be conceivable to have a SiteNav middleware that (either through javascript or lxml decomposition) writes the site nav at the top of the screen. bistyblog and bitsyauth would have to know about this though, so that they could add the relevent links into environ. Maybe this isn't horrible, but it seems so. Likewise, the site css doesn't show up here. Should it? Is this another piece of middleware or part of samadhi?
An important piece of middleware should involve members and roles. I really don't want to write this one, but I would like to consume it. It should live just inside of bitsyauth and make the users.py file unnecessary. It might be better to sit on this one until last.
So should be bitsyblog 2.0. There are a few other streamlining things (see the TODO.txt), but if all of this was implemented, bitsyblog would be a rich web experience that was highly componentized with each of the components doing one thing well. Moreso, since coupling is avoided, save through configuration, auth, and other loose links, each of these components could be used independently of bitsyblog or turned off without undesirable consequences.
At least as much as being a good blogging app, bitsyblog is about elegant design and component architecture. This roadmap shows what is possible in terms of having a fully functional blogging application with middleware that can be used outside of just bitsyblog. To take the other end of the spectrum, wordpress says "Hey, write plugins that will make me work better." As a programmer, I really hate this approach. If I write a commenting plugin for wordpress, then I have just that. If I want to use it to comment on a wiki page, I'm out of luck. If I write commenting middleware, then it can be used for any WSGI app with minimal configuration. As a programmer, I generally want the freedom to assemble a webapp however I want. With this freedom comes some work, but for me its a worthy sacrifice. As a web consumer, I understand that site administrators want out of the box solutions. bitsyblog will offer this too. The default deployment of bitsyblog will pull down commentator, samadhi, and tagit and have an .ini file pointing to the appropriate factory to create the chain of middleware to have all of these pieces in place. There is no contradiction.
bitsyblog is back on the proverbial air. A security hole has been patched, so things should be good now. I hate security
Meet bitsyblog: bitsyblog doesn't do much, but it could do less
Why yet another blogging app? Because I wanted to blog from the command line and emacs and stubbornly decided it was easier to write a new blog than to write a front-end script for wordpress
No, really! In my cursory survey of blogging software, there wasn't anything out there that seemed RESTful and minimalist. I don't want a blog that does much; I want to throw content (a little or much) on the web quickly and in the way I want to do it. I also dislike that most blogging software seems monolithic. From the "less is better" school of thought, I tend to believe that a piece of software should do one thing and one thing well
What does bitsyblog do? * blogging. Only blogging * (...and setting user preferences) * (...and auth snuck in their too)
What doesn't bitsyblog do? * commenting * tagging * uploading/managing files * turn all your text emoticons to animated gifs * all of these could be done with WSGI middleware
Isn't WSGI middleware just another way of building a monolith? Not if its done right. If your app is dependent on middleware, or vice versa, then yes. Commenting on a blog post is the same as commmenting on a wiki page.
But what if the user wants to delete their blog post? Should the comments get deleted as well? This points to a possible coupling between the app and the client. The solution of course is to not allow users to delete blog posts. (Incidentally, using HTTP's DELETE could be used to solve this. Too bad this isn't doable in today's browsers)
So how does bitsyblog work? * webob and paste are used to process and serve HTTP * restructured text is used for blog formatting * auth is built on paste.auth
What is next for bitsyblog? Feeds and some cleanup and little details. Then middleware (probably commenting first).
What is up with the mice? I caught them eating cheese in the cheeseshop, so I put them to work in my logo.
How do I get bitsyblog? Go to http://bitsyblog.biz/ Also, its on the cheeseshop
Your blog probably doesn't do much ... but could it do less?
cats are much more awesome after i get home from work than they are at six in the morning on a saturday
Ivan's Review:
To waste words reviewing Ivan, or Ivan the Terrible as he was referred to generously when coworkers confined themselves to the dialect of gentlefolk, is as to Keats spending his most creative hours composing a sonnet in loving praise of refuse. Nonetheless, obligated as I may be to write this review, I shall endeavor to lower myself to the occasion.
Despite his status as an intern, or perhaps because of the prolific naivitae associated with the position, Ivan nevertheless believes that he in fact has worth and that his contributions to the office are invaluable (a truth only realized by conventional interpretation of the prefix of the word). His hubris is exceeded only by his inaptitude. Perhaps Ivan's greatest contribution to the office will be his departure, for by leaving he will have enlightened us as to the bliss found in his absence. The fool, as in Shakespearean drama, bears often a blessing in disguise. In Ivan's case, it was a very good disguise. The only appointment Ivan has been capable of fulfilling is disappointment.
As a barista, a position thrust upon him by office necessity and certainly not endorsement, he fulfilled his obligations in the most meager possible way, and I do mean that literally. An untrained lemur draped in a vest without access to either bean nor coffee maker could have brewed a superior cup to the noxious sludge with which Ivan violated us when he wasn't too busy spending his work hours researching the 'dirty words' in Webster's dictionary (albeit, being functionally illiterate, finding them tended to take large chunks of time. I cannot recall how many times I was forced to explain that 'shirt' was not in fact a dirty word). When contacting the Barista's Guild of America concerning Ivan, they promptly terminated the conversation in disgust, threatening to sue for defamation of character for the implied association with our office nuisance. Worse, when retrieving a cup of coffee, Ivan mistakening spoiled it with milk and rose in protest simply because he had failed to ask how I wanted my coffee, saying the fault was mine for his inability to read my unspoken preference!
Yet in one aspect (and truly, one alone) Ivan rose to the occasion most superbly. Ivan was -- and is to this day -- an excellent scapegoat. He enjoys taking blame for the faults of others almost to the extent that he enjoys being berated. He craves it. It is one of the deep psychological flaws of the weak-willed to enjoy their inadequacies (and in Ivan's case, these are his only aspects of his personality) pointed out to them in a way to make them squirm and cower. In this role, I believe Ivan has unlimited possibility of growth. Why, I can see him in twenty years -- the spineless yes-man doting upon a middle-manager in some nothing company, or perhaps if the art has not died a professional imbecile who makes a poverty wage being taunted and pelted with water balloons by children at back-county fairs (not state fairs, of course -- let us not degrade this review with absurd delusions of grandeur). Perhaps he returns home to his toothless wife (no children -- for the good of society, Ivan has confessed to me he will choose to be sterilized) who will subject him to the sort of low-brow insults that he so thoroughly enjoys. Ivan's greatest virtue is his complete disregard for public humiliation, for which he has shown no limit in either capacity or in magnitude.
In conclusion, this essay is the perfect analog of Ivan's experience at TOPP -- a complete waste of everyone's time. I do have more words I would like to say concerning our mis-loved intern, but none fitting for public forum.
Most people's problem with windows is that they think of it as an operating system. Have they ever considered that it may be simply an illustrious example of conceptual art? Windows asks the question, "What is an operating system? Does it need to operate?"
Ivan: "If there was such a creature as Little Bit O' Luck I would pull out a gun and shoot him in the face"
Collaborative Documents and Discussions the Web 2.0 Way
or
why bitsyblog is not a blog
Some of the web is static content. There's much less of this now comparitively than than there was ten years ago, and it increasingly serves as help and explanation, forms and guidelines than as content that people actually seek out. What people care about is what a site's contributors (an increasingly wider base) put on the web.
This content falls into essentially two kinds of documents: there are documents that are meant to be definative exposees of an idea, and there are conversations had between multiple people.
The first, which I'll term collaborative documents, were traditionally done by passing a disk around, editting with a (generally bad) editor, and passing to the next person. With the advent of wiki, collaborative documents have become much more convenient and tied to the information age (lord, I can't believe I used that term). A wiki may (and usually do) keep track of revision information, but this is ancilliary to the purpose of collaborative documents: building an information base about the subject considered. The ability to create other linked documents is essential to the structure.
Discussions can take many forms: mailing lists, blog posts and comments, and discussion forums are a few of the most prolific on the web. But regardless applied to the label, the format is the same. Whether through email, through a web form, or through conceivably an SMS message, someone starts a discussion. Others are free to reply to it (or comment on it), or comment on other peoples comments. The emergent document is a tree of authors and their replies.
Both collaborative documents and discussions have slowly pushed back at the limitations of the traditional technologies, but they have not eclipsed them. Mailing list discussions still do not equal blog posts. Google documents has finally broken the barrier to allow multiple people to edit the same collaborative document, but this is still "cutting edge" and isn't really done in a way that really takes advantage of what wiki -- or the internet at large -- has to offer. Going forward to what the internet is becoming, these requirements won't just be common . They will be essential, to the point of becoming banal when they become the meme.
The best thing about communications is how quickly old standards are brought down in favor of new emergent ways of working with information.
Which is why bitsyblog is not a blog. It is literally a web-log, but 'blog has come to mean so much more; namely, some sort of blog-space where people can comment, keep profiles, and exchange information in ways that transcend just writing "Everything written in python is horrible. I ate a piece of toast today." for all to glance on passive. There is no conversation with bitsyblog. This is by design, the idea being that commenting will (someday I hope) be done with middleware. But that's besides the point. bitsyblog is a monologue. The time of monologues is passed. The time for interaction is now.
Best commit message ever:
jhammel * r14014 opencore/opencore/feed/wordpressview.py: pretend to use key instead of pretending to use cmp
why wsgi is wrong
i have been thinking about middleware, particularly within the context of bitsyblog but since i really want to do it right with bitsyblog (and since its a hobby project i'm free to do so) i think my observations have wider implications.
my thoughts first started with thinking about UI. specifically, two different pieces of UI -- css files and a site-nav. maybe these should be in two different packages....or...not. the issue with both of them is that they involve modifying the response of a full-fledged app.
lets think about how these would work. for a sitenav bar, an application puts something in the environmet -- namely, it appends to a list of links. for the css files (think also, javascript, etc), there is some mechanism as yet to be determined that inserts <link rel="" /> elements into the head of the returned (presumedly) HTML page.
how to do this is simple. you use lxml, decompose the html into a elementtree, and insert the elements you want where you want.
my question comes ... what if these are separate apps? then you are getting a node tree from lxml and putting it back together as an html page twice. okay, this might not be horrendous. but its not good. what if you have several apps that modify the page in (say) fairly autonomous and calculated ways. then you do this N times. not cheap. and also, as a programmer, i don't like the smell of it.
if it were me doing wsgi, i would try to do the transform once, if possible. i think this is doable. if you have the innermost wrapped app return the html, you check for the existence of a node structure in the response. if it does not exist, you make one. then, you modify the response such that the method to get the html is a virtual one -- you can obtain it, if needs be, but it involves reassembling the tree (this is now the expensive operation that one should avoid). other than that, things are free to modify the elementtree to their hearts' content. the client-facing wsgi layer reassembles the html and serves.
better. and doable in wsgi middleware!
so maybe wsgi's not wrong.
I have been thinking about commenting middleware. On one hand, it seems the ideal solution. blogs shouldn't know about comments. comments don't really have to know anything about what they're commenting on (save some simple rule, like "this id corresponds to this url, and store the comments based on the url, maybe in a certain id). It seems a good win for middleware.
On the other hand, I asked Sonali whether a user should be allowed to delete their own blog post, philosophically speaking. Her response was, "Yes, as long as there are no comments on it." Supposing I agree with this (I haven't really decided), this using commenting middleware with bitsyblog hard (or at least messy) if one wants to allow users to delete their posts (which again, I haven't really decided). A user presses a button and the post gets deleted. Since the commenting middleware is outside of this, how can it disallow the delete? Maybe if one could issue a real DELETE request (an option, sorta, though I still wish this was easier from the browser) then the commenting middleware could step in and say "no" (which still seems messy, in implementation if not in concept).
I'm probably thinking too far ahead on this. Maybe the answer is abstracting out roles, which is needed anyway. WSGI apps can inject preferences into the role-ing middleware. Then once everything is behind some sort of roler then maybe things will be...simpler? Or worse. But again, this is too far down the line for me to really think of right now.
I have gotten auth working, sorta. It turns out that the problem wasn't with my code, it was apache not recognizing some header. I haven't tracked it down, but i've ignored the error successfully...for now. Next up, soon, a new cheeseshop release with the much needed join functionality.
Analysis of toothpaste claims:
It was brought up today that blogs and wikis are the same thing. I can't disagree more. Blogs and mailing lists? Absolutely. Blogs and wikis? Not at all!
I don't want to get too sidetracked from my one-track mind, but to me blog posts and mailing lists are conversations. One person says something. People reply by comments.
Wiki pages are something else entirely. They are building a collaborative document. The end result, while perhaps ephemeral, should be definitive. There is only one version of Shakespeare's The Tempest, and there is only one version of the current build instructions for opencore. People may fork these, but in the authors' minds, there is a canonical version. Likewise one person writing an HTML page is a wiki page. It is just a wiki page with a single author.
To me, this is a big difference. It is a difference of intent, but a profound difference nonetheless.
I have digest auth working now. Its not much of an accomplishment, but it at least lets me take a step back and do other things.
I think both paste.auth and authkit have fairly substantial deficiencies. That paste.auth requires auth on any underlying path (that is, it doesn't listen for a 401, it just demands auth) makes it awkward middleware. I can't imagine anyone using paste.auth without wrapping it in their own middleware. This is....bad, but not horrible. What is horrible is that paste.auth.cookie doesn't seem to return the correct response in conjunction with webob stuff. I haven't really tracked down the problem here (though I have no doubt I will spend hours doing so), but I think its a known issue. to consult: net wisdom.
Ethan once complained that pylons forced him to write code in a certain (implied awkward) way, and so he preferred webob. I'll conditionally agree with that statement. I think authkit has the same underlying deficiency. If you want to take the authkit recipes and apply them, it would probably be fine. But if you want to do something non-standard to it, authkit becomes awkward. I don't think anything I am doing is particularly strange or unusual, yet it is a pain to do with authkit. I have no doubt I can do it, but it isn't easy ootb. Time permitting, I will probably write an interface a la BitsyAuth to use authkit, both for the learning experience and to document. But its not something I particularly look forward to.
So sadly auth in the WSGI world seems somewhat lacking. If you want to do everything, you can. But if you want to have very simple auth, its difficult. Maybe more web-delving and/or people at pycon can point me in the right direction. Its something I only have peripheral interest in, but since the pattern is very similar across the web and since it is something I should no about, I think it will be some sort of priority for me to study it.
I've been thinking much about latest-activity lately. After talking with Sonali today, I've been thinking about things and how they will fit in with our architecture, and even more abstractly, how our architecture needs to be to accomodate this functionality.
Without going too much into it, you have projects, wiki pages, mailing lists, threads, blog posts, and all of these should have feeds. Ideally, in my world view, these would be atom feeds so that anyone would have them, and we would just consume these, or maybe just call the code that renders the atom feed directly.
They all have similar sorts of attributes -- author, urls, last modified date, etc -- so its really just an interface challenge to retrieve the data. Each of the 'feeds' should be one of two things: a feed containing other feeds (presumedly accessible by type based on a dictionary), or a base level feed. So to obtain the feed of a project, this is the amalgamation of pages, blog posts, and mailing lists, and mailing lists is a amalgamation of each of the lists threads. I could further divide blog posts and comments into separate feeds, but I think this is going too far.
I downloaded and tried to use
http://authkit.org/trac/browser/AuthKit/trunk/examples/authorize.py?format=txt
It doesn't work at first glance. So far I've been less than impressed with authkit, both for the fact it doesn't feel very library-ish and its lack of documentation. Now, it doesn't seem to work out of the box, giving some weird error.
I'm going to continue playing with it, as I'd really rather use a library solution than role my own. But awkwardness is a big minus on trying new software. ::sigh:: If nothing else, it will let me have an opinion and things to say on the de facto standard python auth solution.
My pycon registration biography:
Jeff Hammel is possibly the preeminent programmer of his generation. Born on the first second of the epoch, it was prophesied by none less than Kernigan and Ritchie that he was the Chosen One in those days of yore.
Some people complain that FOX News be allowed to call itself "Fair and Balanced". I'm more concerned they're allowed to call themselves "news".
[ Yeah, its a dated comment, but it was backlogged ]
I really can't believe that there is no way of doing what I want. maybe in authkit, digging through lots of crap I can find something. but paste.auth seems somewhat useless for my purpose. why is this so stupid?
I think I am going to have to bite the bullet and do BitsyAuth. Its...somewhat retarded. But it doesn't seem that paste.auth does what I need:
http://bitsyblog.biz/k0s/20080218112242 http://bitsyblog.biz/k0s/20080217174303
So I'll do the form myself and take the digest + cookie auth.
Since wordpress doesn't seem to be working on dev.nycstreets.org, I can't make much progress on closing tickets that need live data. I could continue to work on unrelated tickets there, but probably the most logical thing is to rebuild a stack on my local machine.
The prospect horrifies me, perhaps somewhat out of proportion, but its certainly something I don't want to start on today. Its not even really something I want to start on tomorrow. I'll need to upgrade my build script to use newsite.sh, which is something I have needed to do anyway. But the build itself...last time, it took me 3.5 days to get a working instance and even after that I couldn't get wordpress working (or tasktracker, for that matter). I fear the same thing again. I'm sure Josh would be more than happy to tinker with my machine to the point of having a working build. But:
I guess I'll dive into that tomorrow.
There is also the fact that the unit tests and flunc tests are failing. I'll ping people about that tomorrow to and maybe look into them if I can.
It was so nice just being able to knock out tickets. I don't have as much of a need for the meter of progress as some others do. But when I feel that my effort is all for "sideways-progress"...that's when I get depressed.
Oh well. Development isn't all glamor and mojitos.
| --YES | Are you allowed to view the resource? YES=render page, NO=401 |
| --NO | Go to login page + form: |
One could of course also just do:
In looking into auth for bitsyblog, I've realized that there is an additional requirement I want for pages. There should be a list of urls further clarified by HTTP method (everyone should be able to GET /k0s but only k0s should be POST there) that the auth middleware should check. If this is available in authkit or paste.auth I certainly haven't seen it and/or don't understand it. So, in the usual "I've looked at this for several hours and could write code" frustration, I have begun to consider what format this instance variable in BitsyAuth, which I have so far been calling 'paths' (maybe 'secure_paths' would be better, but its longer and has an ugly '_' in it) should look like. Its pretty open-ended and I'll probably just pick one instead of trying to find THE best way.
{ ( 'path', 'to', 'resource' ) : set(authorized_users) }
-or- ?
{ '/path/to/resource': set(authorized_users) }
Okay, these are great for static resources. UM, there should be a dictionary outside of this with 'GET', 'POST', ..., '*' for keys ('*' of course matches all methods)
But lets take a real-world case. '/k0s/post' should be accessible to 'k0s' How to do this?
without regexes:
{ ('path', 'to', '%(users)s', 'resource') : set((2,)) }
Here the '2' points to the second element of the path tuple. Whowever matches that is an authorized user. users of course is the site users
with regexes:
{ '/path/to/%(users)s/resource' : set((0,)) }
In this case, 0 refers to the first matching entry in re.match(...).groups()
%(users) expands to a regular expression:
{ 'users': '(%s)' % '|'.join(self.users()) }
I'm starting to lean towards this latter option, with a helper function to hide some of the internal ugliness:
def add_user_path(self, path, method='*'):
"""add a secure path accessible by a single user"""
assert ('%(users)s' in path,
'%(users)s string literal must be in specified path')
if not self.path.has_key(method):
self.path[method] = []
self.path[method].append({'path': path, 'authorized': set((0,))
'something_about_generating_%users'})
Bah, its still ugly. But I think I'll start on this anyway. Right after I....do everything else I need to do ;)
[I wish I had some sort of tagging functionality, so I could tag this post and http: