Sup.

•December 23, 2009 • 1 Comment

Haha, the second half I promised to have done the next day took a week.

Whatever, here it is.

Onward from 0.2,

I knew I had to do something about being able to open an unlimited amount of windows, and the way I set up the new window to close on F11 pressed no matter what module opened or is using that same window chrome.

Keeping focus in Inbox – Shredder and continuously pressing F11 would get this.

And although this was the first problem I knew I needed to solve, it actually ended up being the last and most important, not to mention just in time.

My train of search

led me through one long tunnel, at some parts with zero illumination and seemingly no way out, but eventually the I saw the light at the end. But by then I had already driven into it before I noticed it was there.
Reading about folder and message manipulation in Tb, I figured I needed to get familiar with some interfaces, mainlynsIMsgFolder and nsIMsgDatabase. With this move came a triumph, my first step forward was to deal with the issue of being able to fullscreen with no message in focus.

if (gFolderDisplay.selectedMessage) {   // Ensure a msg is selected before FSing

+1
So continuing on the tracks of message interfacing, I tried to accomplish one of the more  ambitious goals which was to get next/prev message subjects or whether or not they are junk displayed in the new window chrome, but I couldn’t get this in even testable condition by submission time, so it was dropped from 0.3.

I chose to focus on the more core needs, like getting toggle functionality working, which simply asks for a boolean flag to point out whether or not the window is open. This is the part of the tunnel I was referring to with the all the lights blown out. Several hours of trying lots of different things, but at the end of the day the best I could do was getting toggle on but in a recursive fashion. That is to say, every new window opened would instantialize the flag anew for itself, and to close the new window would require moving one layer back and pressing F11 to toggle off. It was progress, and was still worth all the ass ache, which only made sleep that much sweeter.

The new day started and I wasted no time heading off into #extdev to ask my question on keeping variables between windows. Funny thing about my relationship with IRC; I notice I spend most of my time trying to answer my own questions, and the times I do go to the dev channel to ask a question I’ll usually take which short answer I get and run away with it to go Google it and generally crawl back into reclusive problem-solving. Something to work towards.
Anyway, I got a little push in the right direction, and although the term I searched provided by (icantrememberwho) wasn’t what got the job done, it linked in relevancy with something called window.opener, and my troubles evaporated.
That is 100% scam free toggle, baby.

But it wasn’t good enough.

For I began to wonder if vars left out in my javascript would mean that they become global variables, a curiosity I satisfied with a few mxr searches to try and find some kind of pattern with vars outside of any kind of bracket. It turned out true, any vars left outside brackets are preceded with a g, to indicate they are global. (ex: gFolderWhatever)

Time was running out, so I hit up #seneca for anyone with javascript knowledge wanting to get a little bit of last minute contribution cred.  To my great fortune, humph was around and gave me the correct way to use vars in my code’s case. It worked, I lost definition on my vars. What I was missing was using this._, and solving that was one step forward and two steps backwards. I understood js variables inside an object, but it pulled me back a step to recursion again.window.opener wasn’t cooperating with the rest of its classmates [see what I did there ;)] and each window would have its own respective object instantialization.
The light! It has abandoned meh.

For a few hours, I busted my brain trying to correctly sync my variables between windows to the point where I wondered if the mozilla community would forgive me for just sticking with sloppy global variables in an extension, but then it hit me.

var fsner = {
fs: null, // fullscreen window handler
dbView: null, // nsIMsgDBView mail database handler (still to come)
onLoad: function() {
this.initialized = true;
if (window.opener)
this.fs = window.opener.fs; // sync handler between two chrome windows
},
...
if (window.opener)
window.opener.fs = this.fs; // sync handler between windows

This is one of those facepalm discoveries, but no less valuable than the straight forward ones read on a tutorial: seeing as how var fs is contained within var fsner, it would make sense to call window.opener’s fs from within fsner (DUHHHH).

if (window.opener)
this.fs = window.opener.fsner.fs; // sync handler between two chrome windows
},
...
if (window.opener)
window.opener.fsner.fs = this.fs; // sync handler between windows
}

And well… that’s it. A hell of a journey to 0.3 and a product that doesn’t have a high school project feel to it.

Submitting

this baby was just as much of a pain. =)
Looong story short, I had to adjust, rebuild (that whole chrome registry problem I was having hasn’t gone away (3xlonger to do stuff)), and repack near 20 times, not only that, but if you can see that I submitted my extension with only half of the information on it written out. Posted the _actual_ info bit on the extension, and my tester, Joe, pointed out that it still says 0.2 on installation. install.rdf hadn’t been updated.

iouvbaoifjesauoigfhoiasmvieoshaofijeaisouvoaiueon igfsaoepifyeoiasv;fyep;afvyias’[iefasop’euosayhgf98 2

=)

And so here I stand–before all ye gracious souls who spend/waste the time reading along to my epic saga, even though there are no love scenes–confident that this will not be my last post.

Closure? Hell no.

•December 16, 2009 • 1 Comment

I may be in semester end party mode, have said a few goodbyes, and just chill and wait to see what comes next in life after grad., but I know for sure this project is not finished.

Message Fullscreener (fsner), the Thunderbird extension, has gone 0.3
Try not to faint in overexcitement.

What’s New

This time around, the code has gone through a series of changes and upheavals, sometimes for the better, and new essential features that ensure the extension doesn’t act a fool on the user. At this point, it is truly something that can work, and moving forward from here will be mostly cosmetic. Here’s what I got:

What used to be
-F11 in main Tb win opens new chrome win (unlim. times)
-F11 in chrome win closes win (even if chrome win was opened for a different purpose)

Is now
-F11 from both windows call upon the same js function
-Now with REAL toggle action!

What used to be
-The user can fullscreen no selected message which opens a blank win

Is now
-F11 does nothing unless a message is in focus

What used to be
-Use of global variables to work with OO structure

Is now
-Correct use of js’ object var instanc. (rudimentary lesson)

[Note* my time is fleeting, I must continue from this point tomorrow]

Crunch time

•December 7, 2009 • Leave a Comment

I did it again. -___________-
I don’t hate progress. I’m just not a creature of habit. Routine scares me.

But anyway, on to what’s important. It’s crunch time, 0.3 due soon, and I hope I’m ready to ship by then.
On top of that, I paired up with a classmate, Andrew Grimo, doing Multi-Touch gestures on Thunderbird with the Mac touchpad - which is pretty damn slick – and am aiming to contribute what I’ve learned about extensions to aid him in the conversion of his project into an extension.
So that’s what’s been up lately.

Hurdles and speedbumps to date:

Installing Tbird on my Windows machine for deving-
(I didn’t save the compiler error verbatim before I fixed this)
Downloading the source went smoothly, but when it came to make -f client.mk, it seemed the Gods of Asgard hath forsaken me. On my Vista machine, I downloaded all the necessary tools and then some; 2 SDKs for good measure, WinV and Win7, and both would give me a Correct SDK not found error. Wanting 0×06100000, it got 0×06000000. So I #extdev’d my issue and in effect made a bit of a chump of myself. The error itself provided the answer: to append –with-windows-version=600 to my .mozconfig file. Well it was more along the lines of “use –with-windows-version” which means nothing at face value, but a Googling illuminated my path.
Slow and steady wins the race counts in reading too. Who’da thunk =).

Chrome registering-
This issue wasn’t (still isn’t) very much fun. First off, it took about an hour for me to figure out why my extension’s changes were being saved but not implemented into Tb with each startup (that’s what chrome registering is). On the Fedora machine, this problem is nonexistent. While I asked on #extdev what its beef with me is, I had to work around this problem by deleting or renaming my extension’s GUID file in my Profile folder: fsner@buddhatron, open Tb, close, revert my file, open Tb again, and only then would I get the re-registering startup of project’s chrome. #extdev is still going to get back to me, eventually.
And dragons exist.
But I can’t discredit them, this problem is a toofer. The trunk has, for a while now, managed chrome reg on every startup, so it’s a bug I’m going to have to really bore into.

Moving on…

So, Andrew, I have stacks of great reads for you, some are a bit outdated but the lesson is very much the same.
Basic extension tutorial demonstrating OnLoad eventlistener (Don’t worry about the extension part too much, I’ll help you in converting)
Getting Started with Extensions
Building a Firefox Extension
Custom Preferences
On Page Load
Yeah, it is quite a bit, but I tend to like having a number of interchangeable samples from which to pick up patterns.

From what I have gathered from all these, and I sincerely hope I’m not blowing hot air on this: addEventListener is built to either catch an event within the original program code which will fire off any of your own specified functions/commands in your extension, or override it completely so that your extension’s functionality becomes the standard operation. The most basic example of this can be seen at the bottom or at the top of any overlay JavaScript file > window.addEventListener(“load”, thisextension.doOnceLoaded, false); So in layman’s terms, the native load function is captured and fires off our doOnceLoaded() function within our thisextension var.

Whether or not the code in the tutorials can override the native functions, I don’t really know yet. You will have to give it a try and get back to me. If it really is like overlaying front end, there should be a way to remove/omit native code and replace it.

My next baby steps

Not much has been accomplished on 0.3 to date, I regret to inform. Most of my time on this milestone has been spent reading tutorials only one or two ladder steps above what I was ready for (Humph’s mention of nonlinear learning springs to mind), but what meager progress I have made has given me those 2 steps I need to go back to those lessons and get to business. I, myself, gained much from those links I retrieved for Grimo, and am ready to make quick work of what is ahead.

Will report back with a demonstration of getting the first/last messages to disable next/previous nav buttons once that is accomplished.

Toodiloo until then!

Trudging on through 0.2

•November 22, 2009 • Leave a Comment

Check it out world — an on time release (although this blog post isn’t)!

There isn’t much new, but I plan to make up for it with some pretty cool stuff for 0.3.
So after the first release, the feedback I got suggested less UI, so that was what I tried to work towards in terms of achievement.

This release seems very scrawny in comparison to the amazing progress being accomplished by other students of my class, mainly the Processing.js crew. But check it out–here are some of the goals I have set up for my 0.3 milestone:

  1. Code a function to disable next/prev button if current message is last/first
  2. Code a function to allow seeing a short
  3. Code a function to allow skipping spam using navigation
  4. Test extension’s display flow on a netbook
  5. Navigation buttons that look nice
  6. Consult other netbook users and seek review on basic UI left available

This release point is the result of one four-hour and one three-hour sessions in my office, where all I need to test front end code between edits is a lightning quick firing up of Thunderbird. These two days of work resulted in a total of +7 -2 lines of code, but I find victory in the fact that that is 7 hours of material I don’t have to learn again. I moved forward from understanding how to add elements to nodes (in layman’s terms: to insert a new control with its own attributes and programmability into item groups used in the base code of Thunderbird) and got comfortable with a new set of different controls and attributes.
My first aim was to get rid of the top toolbar to free up a good chunk of vertical space for the message content portion, so my plan of attack was to ask if element removal is possible in the #extdev channel. I was hooked up with two attributes to choose from, removeelement and hidden.
Removeelement sounded like a bucket of fun, so I gave that a try on the whole mail-toolbox toolbox. That actually ended up being kinda volatile, as the fs window would no longer recognize any selected message, and simply show a blank white inner space. So I dug one level deeper into the node and removed the two toolbar elements individually, one at a time, and found that it was the top [File, Edit, View, etc...] that shouldn’t be removed. Ever.
But even with one toolbar taken down, it still doesn’t look seamless. So the out-in-the-open answer became hidden. mail-toolbox hidden=”true”, that is. Great success!

Next thing to do was add a Prev & Next button for navigating through emails with the mouse. It took me about almost two hours and several different placements to get the feng shui just right and make sure that they wouldn’t warp or displace themselves like this:
s1
s2

w1
w2
but the two young buttons seem satisfied in their new home behind a spacer. Their auto-fitting with the vertical space was fixed by simply removing the align=”end” attribute I put in. Now they just need funky arrow icons to express their adolescent creativity, and stuff.

Oh yeah and I fixed the minimum version of Thunderbird problem. I set it to 2.9.*, since it seems the safest bet any 3.0pre build.

Also along this road I tried some other attributes that ended up not being necessary, but still cool tools to understand. The first is observes, which I noticed was on a most of the toolbox items, and insertbefore/insertafter. observes is like a radio to a broadcast tower, a broadcaster, sending the signal to adhere to any changed default attributes in the broadcaster. There’s a better explanation here. And have a XUL element reference also for good measure.

And along this road a few more cool feature ideas popped into my head;
People might like to be able to see or know if the next or previous message is junk and would prefer to skip it.
Perhaps add an easy way to zoom the size of text, both in and out to accommodate many different display settings.
A drop down list of message folders (inbox, sent, deleted, etc), with folder change going to the latest non-junk message, but I’m not dead set on keeping this idea if testers don’t feel it necessary.

Will keep you updated.

An observation on technowizardry

•November 18, 2009 • Leave a Comment

future

If only our attention spans could stretch longer than our own lives, or our perception of time was in a range where every dawn could be seen as a beat of the Earth’s heart, we could notice something awe-inspiring:

the speed of innovation is increasing.

And not only that, but the speed of complete infrastructure redesign is also increasing.

If we think about the elementary meaning behind the word ‘tool’ and what it symbolizes – a construct, something external, that is designed with a purpose, and quite simply allows us to do what we are not biologically engineered to accomplish au naturel. The knife is a tool. Plausibly the very first tool, which may have been inspired by our teeth. What our primitive brethren couldn’t penetrate with a finger nail, tear with their hands, or sever with their teeth, they employed a blade. This cause-effect relationship based on necessity is the one pattern all technology follows. Keep that in mind.

So, life before the tool was indeed a world we would not recognize, as its advent brought with it a paradigm shift, albeit slow and progressive.

plugit
We could consider harnessing of electricity as another paradigm shift. Ask yourself, did binary matter to the Empire of Rome? Doubtful.
By necessity, the human world evolving into an age of electrical power required a new infrastructure of logic, which was quite simply power-on/power-off. From there, binary developed into boolean algebra, which developed into complex computing commands based on laws and rules, functions and variables. None of this would have had any implementable purpose in the eras that predate the 1800s, there simply was no necessity for these entirely new leagues of information.

Shift happens.

The internet is nothing if not a total paradigm shift. Information has gone from a physical block of stuff on a page to nonlocal storage! Knowledge is no longer something that needs to be touched, held, and transported across space and time to be exchanged. We have tapped into the world of the formless and amorphous, I believe this signifies a step in our progression towards the divine, nonphysical universe. The necessity is there. I don’t know if you’ve noticed, but we’re running out of space; space to park our cars, space to place houses with backyards and driveways, etc… Space is an abstract constant, and it is finite by design.
As the ancient Chinese saying goes: Round Heaven, Square Earth. The brilliance of this understanding strikes me in noticing that the square is the most space-efficient shape we can employ, and illustrated in how right angles dominate the designs of our structures. It just seems very appropriate and captures the essence of this tangible world of ours.
It also makes one look deeper at Da Vinci’s Vitruvian Man.
But I’m getting off topic.

And I cannot exclude the Open Source revolution. It is another delocalization, but this time of the power to forge and manufacture digital tools. In this context, imagine a factory no longer manufacturing/distributing a product, but now offering the knowledge on how to make that product yourself instead. That is how you empower the consumer.

So what comes next, you may ask. What new system will reinvent the court in which we play ball, and will it come in our lifetime?
I can only tell you that you ask silly questions. The future is meant to be unknowable, that’s how it is programmed. If you went back 70 years and told someone that you heat your food in a box that zaps it with invisible, electromagnetic energy without even heating the air around it, they would tell you to lay off the drugs. Even the pioneers of the television thought the appliance would be a passing fad, and never would have believed seeing a TV in every household.
And it is probably less a matter of ‘will‘ shift occur in our lifetime than ‘how many‘ shifts. Let’s never forget, the speed of change increases exponentially.

The stone age – several tens of thousands of years.
The bronze age – a few thousand.
The industrial age – 300 years.
The chemical/plastic age – one hundred.
The information age – 30 years old.
The Biotechnology age ~ 10 years.
And who knows, the nanotechnology age might last a whole 8 minutes.

Over the course of our existence, all these tools go from just things we use to extensions of our very selves. We are the tools we use, we are the machines that compute and manipulate, and we are a different class of creature as a result.

But in the scope of what comes next, there seems to be a new trend in technological advancement (other than ever-more intelligent robots), and that is an evolution from the use of input artifacts like keyboards and mouses to a more intuitive system of manipulation. Through this branch of innovation, we can see that we are really working towards hybridization with our creations, whether consciously or not. How better to illustrate how we are become ever-more united with our machines on a personal/mechanical level than with progress like muscle-based input, Mattel’s Mindflex, the thought-based interface of Audeo, and something truly astounding called SixthSense.
Seriously. It’s like the internet all over again.
Nonlocality of information is going even further in that access will delimit itself from a local computer, and the invisible infinite can be carried with us and plugged into real life objects with real time plugging in to hyperinformation.

[*Note of interest: As if SixthSense's hardware costing no more than $300 was amazing enough already, its software has gone open source.]

The world is just freaking awesome.

Bring me my towel!

•November 15, 2009 • 2 Comments

So, it happened again. Went on involuntary hiatus from productivity for a while, but plenty of scattered little steps were taken during this little stretch of silence.
I’ll try to remember as many as I can.

First thing’s first; in my quest of getting my first tutorial extension working, I found out that the reason why my work wasn’t showing up was because of (I’m assuming) something to do with the extension wizard trying to take a shortcut through the naming convention. For lack of understanding the whats, whies, and hows of this; I’ll just demonstrate.
It was something along the lines of

overlay id="fsner-overlay"
xmlns="http://www.mozilla.org/keymaster/gate....only.xul"

where it should have been

overlay id="fsner-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"

+1 hurdle cleared.

During my time of apparent inactivity, I spent a lot of it struggling to understand the web that connects the functionality of fullscreening used in the browser (ie, Firefox) on mxr. In fact, I spent a lot of time trying to understand things on my own as I’ve become accustomed; searching examples and learning from the patterns that emerge in the samples I find. At first glance, someone like me would think it completely possible to familiarize oneself with a majority of the need-to-knows from wallflowering and digging through the banks of existing code.
Actively understanding that the community is here to take a chainsaw to that learning time was long overdue for me, and it was only until I decided to face that which I keep avoiding, which is asking for help, spoke to Humph about my performance, and was reinvigorated to get into the groove of things.
Either out of being uncomfortable with the unfamiliar, or just shy on tech IRC channels, I remained stuck in a state of reluctance to move forward. It seems even in all my zeal to get started and face the things that afflict most if not all beginners, agreeing with the necessity to be brave and try things before one is ready is a very different thing from actually actively realizing when when the fear has got you down.
Humph reassured me with the wisdom that big steps are not your friend, briefly held my hand in the #extdev channel where I emerged from my cocoon of silence, and generally offered me exactly what I needed: guidance rather than criticism.

And so I present to you:

My superbly sub-par 0.1 release, weeks late.
FSNER >499516
Please try, comment, and criticize.

What this extension does:
-Provides a command under Tools menu
-F11 opens a maximized window focused on the selected message
-(in new window) F11 closes the window // essentially toggle-action
-(in new window) Right moves to next message
-(in new window) Left moves to previous message

What comes next [additions/revisions for 0.2]
-Shave down the UI in the new window & remove unnecessary buttons
-Add icon buttons for navigation
-Remove the redundant statusbar label “FSner is GO!”
-Correct the minimum version requirement for the extension
-Optimize viewability for different display settings

[Instructions; save the .xpi on your disk, start Thunderbird (3.0.* branch), go to Tools>Add-ons>Install, select fsner.xpi, restart Thunderbird]



I think that’s it for this episode. I still have much to catch up with, and need to redeem myself for having stayed at home and feeling unwell during the FSOSS ‘09, making me unable to write that 2,500 word document on my experience at the symposium.

Be sure to stay tuned.



Extension Development-related readings:
-Chrome Registration
-Overlays
-Keyboard Shortcuts
-Showing JavaScript errors in chrome console [fascinating]

Pick up that can

•October 19, 2009 • Leave a Comment

In the same spirit of posting about my over indulgent laxness for the last little while, this post will embody the other side of the coin. The combine officer in my head is back from paid vacation and has fresh batteries in his stun baton. Therefore, it’s time to hit the bricks.

So I could feel the reflex to avoid productivity start to wane, and sat my rump down at my office last Thursday with the necessity of getting some work done in good focus and clear view. I began by taking another swing at those astonishingly trivial steps I left undone for far longer than they’re worth: took a good look at the Xming website to find the Xming installer that didn’t require a donor account, rubbing shoulders with two other public domain Xming related downloads that I simply didn’t see the last time.
Cross out X server confusion from my list of (derrrr) moments.

My next campaign for conquest was copying files/directories on Ireland remotely from my Windows machine, which was met with fortified resistance as my google searches were of little help, but ended in triumph when I downloaded WinSCP and felt comfort beyond measure with its GUI interface over command line operations. I could now get started on using Ireland’s full power from home.
Another one down.

Next step, I pulled the latest Thunderbird build off hg (Mercurial) and compiled; a process that took no more than 4 minutes – not quite enough for a good sword fight – and was ready to give the extension tutorial a thorough run through this time. Steps 2, 3 and 4 took much longer than necessary, as I used the extension wizard to create my necessary files and directories, then spent time trying to untangle the wad of yarn that was my understanding of how chrome.manifest talks to install.rdf which refers to content/ which contains myfirstext.xul which communicates with messenger.xul which adds a widget for the extension that doesn’t use the name of the root directory of my extension!
*breathe* huff…

Don’t even get me started on step 5, I’m honestly just glad it was done for me already by the wizard and was one less thing I needed to understand on the language level before my first run. Then 6 said something about Profile directories, and I damn near had a conniption trying to find it. I eventually figured out it was one of the alphanumeric jumble named directories by process of elimination and eventually placed my extension name file in the right spot. I was now ready to give it a run for its money.

NIGHTMARE!
Something as basic and practically idiot-proof as a Hello, world! addon was still rebelling against me. I was promised that Hello, world! would be next to the number of total messages in my inbox, but only to find there was none. I felt ripped off.
However….

I found myself stuck in a wtf moment.
Then came the light bulb with “check tinderbox” written on it lit up in a blinding, fluorescent green light, unable to make itself any more obvious than an ostrich at a tennis match.



Linux comm-central bloat was burning.

I packed my things and went home. =)

I’ll think of a title for this tomorrow.

•October 19, 2009 • 2 Comments

This entry is about slacking off.
d

But not really of the legitimate variety.

It’s the reason I’ve gone nearly three weeks with no new posts, let alone had any progress to post about.
It was like a relapse into bad habits, living day to day saying ‘I’ll do it later” and not even really caring that the snowball keeps getting bigger.
I remember clearly myself being practically excited to start failing – the kind of failing that entails having moved forward in order to hit a roadblock, then benefiting from the experience. Failing at resiliency to failure sounds more appropriate in my case.
Humph himself said it quite loud and clear; if you’re not able/willing to get in the groove of releasing early and releasing often, then you really need to think about whether or not you’re in the right place.

So, I thought.

[Breakpoint]
Note of attention to the reader: Although the tone sounds like I’m in an excessively bad mood, this post is about constructive self-criticism, not being hard on oneself, but nor about underplaying the valuable lesson.
Think of it as a cleansing. And I’m currently feeling wonderful.
[/Breakpoint]

I’m thinking I must have jinxed myself when I even mentioned my at the time victorious battle over my zombie hunting addiction coming back to haunt me, then began to crave the gore and thrill of glory. Then for hours at a time. Then multiple times a day.
I don’t need to tell you how nefariously easy it is to backslide into undead slaughter galore after hiatus.
But back on point, I think it’s important to recognize that I’ve been all talk to this date. That enthusiasm towards getting immersed is not being reflected by my work, as I tend to do the bare minimum of what is asked of me.

And in all brutal, horrible sounding honesty, the project I consciously decided to dedicate myself to for the last little while was not at all school related, but one involving craft, and was due last Saturday. I completed it, of course, and felt a strong, although guilty, sense of satisfaction with that finished product. This project was for something called Boxwars, and entailed making weapons and armour out of nothing but cardboard and tape then have them destroyed in battle against other box warriors. It was a special event, one that wasn’t open to anyone who wanted to jump into the battle but had to be hand selected by the big cheese, Skull Man, and I just so happened to be one of those select few, on top of the fact that it was to be my first box war as well.
10+ hours of construction that went towards 30 minutes of destruction. A strange way to dedicate one’s inappropriately delegated time, but the costume was a big success and the battle was extremely fun. All the while, I felt undeserving of the experience. If anything, I’ll definitely start feeling the sting of the whip come deadline time. That seems to be my problem: I tend to wait until I’m in a crisis.

I’ve compiled a list of things I couldn’t understand/figure out that held me in a mental block from advancing forward, or other general setbacks, in order of encounter:

  1. file transfer between my Windows PC/laptop to the Ireland.proximity machine using putty (derr)
  2. getting around the X remote graphical utility website (derrrr)
  3. reluctance towards getting dirty with Thunderbird: Start Hacking
  4. failed attempt at the extension tutorial.
  5. zombies
  6. a few hours of fruitless mxr browsing on fullscreen functionality
  7. just thinking about all the stuff that had to be done



Dear readers, duly recognize this writing as a personal call to clean up my act, and take heed from this account if you know you row the oars of the very same boat as I.
But worry not, for the story doesn’t end here. It ends here.

Coordinates 0,0,0

•September 29, 2009 • 1 Comment

Starting position.

Begin timer t;
me.move(direction_);
braceForImpact();

Behold my Initial Project Plan for my first Mozilla development undertaking.
My target is Bug 499516.

In short, I am going to implement a toggle fullscreen mode on the content pane of Thunderbird similar to Firefox’s F11 hotkey — although, unlike Firefox, some essential UI will remain for navigating.

I will be keeping this blog and the News section of my project wiki continuously up to date on my progress through this first hack, so I hope whoever reading through this will gain just as much from the mistakes, lessons, and tutorials I bump into along the way.
In addition to these resources, CDOT’s Blog Planet is a great place to buzz around and find the same detailed accounts of students like me working on projects that may be of more relevance to your curiosity.

Version Release Date Schedule

-v0.0 (Initial Project Plan)

-v0.1 (Oct 19)
Release aim: Implementation of functional fullscreen toggle on content
Knowledge gained: Rudimentary understanding of hacking front end

-v0.2 Release (Nov 16)
Release aim: Tighten display settings resiliency, add navigation functionality
Knowledge gained: Firmer grasp on open source manipulation on massive applications

-v0.3 Release (Dec 7)
Release aim: Finalize incomplete features, cross platform debugging
Knowledge gained: Comfort with a wider span of operating systems and their programming tools

My work is pretty well cut out for me, I have some JS, XUL/XML and CSS learning to do, and the wonderful thing is I won’t be alone. Hovering around the CDOT planet I noticed the blogged Project Plan of a classmate who is tackling something relatively similar also dealing with similar languages and Thunderbird front-end programming. I shall offer my allegiance with the benefit of cooperative learning and mutual contributions. Because, y’know, two noobs are better than one. =)
As far as experts of the community go, I haven’t gotten in touch with any at this current juncture but it is seated near the top in my to-do list.

Right off the top of my head, my biggest worry is my Olympic class laziness which has been known to betray my zeal towards large and meaningful things from time to time. However, I have confidence that my zombie hunting addiction can eventually be tamed.
Beyond that, there is that tendency of mine to work very slowly out of fear of unfamiliarity and confusing myself along the trail of learning the knowledge base.

I plan to remedy these with diligent effort and determination, resiliency to failure, and extending my hand for a shake all around the world and get to know the good folks of collaborative programming.

Currently reading: Start Hacking

9/30/09 Edit ******************

Recent updates from today’s IRC walkabout calls for an update on my project spec.
Upon recommendation of davida on #maildev, the fullscreen project will be taken on as an extension as opposed to trunk development, as apparently the latter is a lead weight of difficulty that is easily worked around as such. The general point is not to work on the core app, but to work in an extension first, that way I can work without necessity of review and such, and the work can later be bundled or ported to TB3.next. Ideally, UI jobs are rather difficult to do on trunk.

Aside from that, humph introduced me to Bryan Clark, a highly recommended contact when Thunderbird is even mentioned, and Mikey has apparently already communicated with Clark. I am currently wallflowering clarkbw’s blog, and feel the need to share this simply LOLtastic adaptation he has made to Isocube, a little ingenious inanity called Cubed Mail.

Looking forward to working more closely with both Clark and Mikey, and I want to shout out a thank you to David Ascher for his presence in today’s events.

New readings:
- Thunderbird Extensions
- Building Thunderbird Extensions
- Mozilla Cross-Reference
- Bugs by Reviewer Datatable
- Thunderbird Dev Tips&Tricks
- Thunderbird – Editing Config Files

New channels:
#maildev
#extdev

What’s the first thing a diver does when he jumps in the water?

•September 25, 2009 • 1 Comment

He gets wet.

Short version of today’s productivity: I downloaded, built, and ran Mozilla Thunderbird off a rather lovely Fedora machine, as well as through ssh from my laptop. You know, I realize that I sometimes miss being an all around noob; you can be impressed with even the smallest things.

+ recount the things I’m trying for the first time:
1) actual use of ssh
2) using a Linux operating system
3) downloading a source repository
4) building a source repository
5) having my own office (openly shared with other devs, but I get to furnish it with my toys, and the chair is appeasing)
6) XML, XUL, Javascript
7) any form of sophisticated front-end programming

The intimidation from this much unfamiliarity was actually sort of fun knowing that I have all the resources to get things done at my fingertips – the tutorials, wikis, IRC contacts, bugzilla’s mesh-like structure as an info hub – there’s really nowhere to go but up.
I did run a few speedbumps along the way; creating the directories under the root user from when I helped a buddy make an account on the machine, and having no access to them from my own account. A brief IRC conversation with @humph shed light on what I did wrong and from there I chowned my way to victory. I now also know the basic operation of bugzilla as a user, and adapted quickly to the archetypal world of operations without GUI interfaces.

But I would have to say the best part of today was the desk in the CDOT office I get to call my new domain, and a powerful machine to use as my base of operations. The place is clean, quiet, and has a great view of the lovely ladies commuting between the S and Tel buildings, and the row of parked motorcycles. <3
And perhaps best of all, a place to conduct all-nighters fit for a sinister mastermind.
Yes. This is going to be fun.

Oh yeah, and no more swimming pool analogies, I promise.