Monday, August 21, 2006

A brief roundup

Mike and I met for the last time today as Mentor and student.

Mike believes my acheievements this summer are fantastic and that what I was trying to do - coming from a background of no programming experience on Objective-C and Cocoa - was not easy at all.

Mike said that, at best case, I might have been able to get a little bit further with the project. We spoke about the need to buy Stuart a beer to say thanks for all the hard work he put into reviewing my code.

Mike told me that even if I didn't get as much done as I would have liked to, there were students who did *much* less than I did.

I told Mike that I'd be staying on to continue the ever-waging war against the bug list in Camino. I also let him know that when I destroyed my laptop I almost gave up.

I normally transcribe our IRC conversations into prose, but I want to keep this bit as it was:

15:31 <@pinkerton> there's a lot of documentable work here, and a lot of growth and progress, and it's obvious that you learned even more than that just from the experience.
15:31 <@pinkerton> so i'd say it was a successful summer.

I'm looking forward to speaking to Mike, as a friend, in the future :)

I will be posting a longer and much more boring review of my summer experience so you'll probably want to avoid that when I post it next week ;)

Sunday, August 20, 2006

T-1: An overview as requested

Mike requested that I detail my achievements this summer.

  • I can (arguably) write Objective-C code.

  • I am becoming increasingly familiar with the Mozilla code review system.

  • I have designed and nearly implemented a new method for allowing people who use Camino to use a scrolling tab bar.

  • I have made headway into solving the dragging tabs issue.

  • I am now being included on newly filed tab related bugs, I think this means that the triagers think I might know some things about how tabs work in Camino.

  • I have become involved in the Mozilla community through the mailing list, IRC channels and MozillaZine forums.

  • I engaged in conversation with developers on different projects (Adium and PSMTabBarControl) to see how or if we could work together.

  • I produced a set of implemenation sketches based on feedback from the community and things that I'd been thinking about.

  • I submitted 13 work in progress patches on Bug 319777

  • I destroyed my laptop and lost a week's worth of work as a result.

  • I submitted 2 work in progress patches on Bug 160720

  • I started gathering some feedback from people as to how the second iteration of the new tab overflow management interface should look. This is part of my determination to continue my work after the deadline in order to see some of my code make it into Camino.
Things that I've achieved that are important to me, personally:
  • I am now more able to deal with project related stress. This will be very useful when it comes to writing my dissertation.

  • I now understand the value of backing up your home directory. This will also be very useful when it comes to writing my dissertation, and also as a good lesson to learn in general.

  • I am able to take criticism of my work and look at it as constructively as I possibly can. Stuart has spent most of the last 2 months reviewing my code submissions and even though he is strict and insists on doing things his way, he seems to be right and is always willing to discuss why and most importantly, he isn't rude about it.

  • I am able to work with a group of people who are in a different time zone, have different interests in the Camino project, have different opinions about which direction things should be moving in.

  • I now know that the first time you try something it's probably not going to be right and that things will probably never be right the first time round but that is no reason to be disheartened.
Things that I wish I had achieved:
  • I had managed to get a single positive review of my code, and in return, a super-review from Mike.

  • I had managed to make more progress on the tab dragging aspect of my project

  • I had managed to get some real usability feedback of my work from a larger group of people than Smokey and Stuart

Friday, August 18, 2006

Penultimate Meeting

After 3 weeks without having a formal meeting Mike and I met today to discuss what the end-game was for the project.

I showed Mike the image the I sneaked out yesterday showing the overflow menu coming back. He said that he thought it looked cluttered and that right-click on either of the scroll buttons would work. He liked the idea of using dividers to split up the menu list showing which tabs are overflowing on either side.

Mike was pleased to see that I've made some progress on dragging tabs and he is keen to see the work that I have been doing between submitting WIP1 and WIP2 of 160720. There are some cute problems associated with |shouldDragFrom| so I'll need to get some pencil and paper out to sort it.

I've got to plough through lots of work this weekend but Mike believes that there should be a middle-ground compromise of reaching the immediate deadline and thinking about my work over the longer term of getting the code into Camino.

We have set a meeting for Monday at 9AM EDT to have a final mull over the project. I've got to write a summary on my blog this weekend of what I have achieved and learnt this summer, where I have made mistakes and what we can take from this whole experience.

I had some concerns about today's meeting because it has been a long time since we had spoken, but it turns out that I really do just worry about nothing most of the time.

Thursday, August 17, 2006

T-4: A sneak preview

This pop-up menu is only visible when tabs are overflowing, it allows quick access to any tab and also provides a contextual overview of all of your tabs.

Tabs above the first divider are overflowing to the left, tabs after the 2nd divider are overflowing to the right. This is just a little sneak peak because there are still some interesting problems to iron out before I could even dream of showing a video. A massive thanks to James for suggesting the dividers idea in the comments.

The buttons at either side are capable of showing their state - they are greyed out when it is not possible to scroll any further in that direction.

After I properly hack the code relating to selecting a menu item, the tabs will slide to show this tab in the tab bar.

I am much happier with the interface that I am now working on.

I'm off out to the pub to have a birthday beer with my friends.

You can make statistics tell you whatever you want! (Camino almost has the same 'market share' as Safari!)

This information is based on the previous 1,000 visits to my blog

Safari: 26.5%
Camino: 26.1%
Firefox: 23%
Mozilla: 10.8%
Internet Explorer: 7.8%
OmniWeb: 2.2%
Opera: 1.4%
Galeon: 0.1%

We all know that statistics can be skewed to mean different things.

You could probably say that these show that most people who are reading my blog are reading it using a Macintosh - Safari + Camino + OmniWeb = 54.8%.

You could also say that Gecko based browsers are the most popular - Camino + Firefox + Mozilla = 59.9%.

All that I am going to read into is that there are nearly as many people using Camino as there are using Safari and that makes me smile.

Happy birthday

I am 23 years old, time to get back to work.

Wednesday, August 16, 2006

T-5: New proposal for approach to overflow management and tab dragging

A more solid proposal for how overflow management and tab dragging could work in Camino in the future. I've spent a lot of time this summer working on ideas that were never really well set, but I've done a lot of listening and this almost feels like what people are expecting to see

An overview

When you open up too many tabs to fit in the tab bar then overflow management will change the appearance of the tab bar as shown above. This new tab bar has a set of pop-up menu buttons - one at either side - and a set of scroll buttons - one at either side. This allows people who use tabs heavily to retain their access to the pop-up menu that they are used to, or for casual users to use the scroll buttons like they would in Finder.

The pop-up buttons

The pop-up buttons at either side behave exactly as the single pop-up button currently behaves in Camino, with a few extensions.

When you click on a pop-up button it presents you with a list of tabs that are overflown at that side. This keeps a sense of position in the tab bar over the currently visible tabs. If you click on a tab from the pop-up menu then that tab is made either left-most or right-most in the tab bar - this depends on whether or not you click on a menu item in the left or right pop-up menu respectively.

As a result of selecting the tab at the bottom of this list you have selected to make the first tab left-most. One of the complaints I have received with regards to what I was working on was that it was difficult to tell whether or not you could scroll in a direction anymore because the difference between an active and inactive button is not always obvious.

An attempt to deal with this is to remove the pop-up menu button and scroll button from the tab bar if there are no overflown tabs in that direction. I believe that this goes some way towards eliminating any such confusion.

The scroll buttons

The scroll buttons allow you to slide along the tabs to change the tabs that are currently visible in the tab bar. You can click and hold the mouse on a button and the tabs will continue to slide in that direction until you release the mouse, or, there are no more tabs left to slide.

Dragging tabs

Dragging tabs is something that people have been asking to be able to do for years. The way that is is done in the bookmark bar does not give you much feedback while you are dragging and plans are to make tab dragging more interactive.

To drag a tab you can pull the tab out of the tab bar. This will cause the surrounding tabs to slide to fill in the space that the tab you are dragging is leaving.

If you want to drop the tab within the current set of visible tabs then just drag it back into the tab bar and this places that tab where your mouse pointer is located at. This happens while you are dragging the tab, letting go of the tab finalises the placement. Pressing escape will allow you to change your mind and the tab will go back to where it was before you started the drag.

Dragging to a totally different part of the tab bar

If you want to drag a tab from it's current location to a totally different part of the tab bar then you can hover over a scroll button with a tab image dragging. This will cause the tabs to slide in that direction until you find where you want to put your tab.

When you have found where you want to put your tab, move the mouse pointer away from the scroll button and drag it into the tab bar to place it there. Easy.

One of the problems with dragging is that if you have access to a pop-up menu and a scroll button you might think you can drag and drop into the pop-up menu. That is not possible using Apple's implementation and I've already spent the summer twisting the way that tab view items work so the thought of twisting pop-up menus is daunting. In short, you will not be able to drag a tab into a pop up menu until Apple support that.

Some questions:

  • Is the UI too clunky having both a pop-up menu button and a scroll button? Would it be better to have a scroll button that allowed access to a pop-up menu using a right-click or a Command-click?
  • Are there any really obvious defects in this design that I just cannot see because I've spent nearly my whole summer working on it?

I'm sure that you can see that I am pretty good at Photoshop. I know all the best tricks and even managed to make my images look like I did them using pen, pencil, paper and blue-tac. Blogger crashed on me twice while writing this post so I'm a little bit challenged for patience right now.

Hope to receive some really useful feedback so that what I am now working on will be what people expect to see in Camino.


After some great feedback, I'm looking at this...

When tabs are overflowing there are 2 buttons at either side which show an enabled or disabled state depending on whether or not you can scroll in that direction. There is also a pop-up menu at the far side of the tab bar which contains a list of all the tabs that you have open.

When you click on the pop-up button the tick represents that tab that is currently selcted, as you can see, the tab with title "tab2" is the selected tab.

If you select a tab that is not currently being shown in the tab bar then the tabs slide to show this tab in the tab bar. Perhaps in the middle as has been suggested.

Tuesday, August 15, 2006

T-6: Almost dragging between windows, propsed detailed plans for new tab overflow interface nearly ready

I have spent most of the day battle with trying to get a deeper understanding on the NSDragging protocols. When a user drags a tab from one window and into another the tab needs to be simultaneously removed from the source window and added to the destination window.

I could remove the tab from the tab bar when the user drags it out the bar, and then add it into a tab bar when a user drags it into a tab bar, or create a new window if the user releases the mouse button when they let do of the tab when they are not in the tab bar. Somebody just pointed out to me that they would expect this to remove the tab item.

Any thoughts?

Monday, August 14, 2006

T-7: Wedding (Off topic), Dragging, Cheque

The wedding was quite the event. The bride looked beautiful, I've never thought that brides looked beautiful in photos, but in real life they are stunning. She was so nervous that she had tears rolling down her face. I had to work hard to keep the stiff upper lip.

We had a buffet which was nice because it meant that you got to eat what you wanted instead of what somebody else thought you might. A waiter spilt a bellini all over me as soon as we sat down at the table so I had to go and change into ... jeans and a t-shirt. How shameful! I washed up my suit jacket as best as I could so I could wear it over and still look a little bit smart. The father of the bride told me that it was alright and I still looked smart so that was good enough for me.

People in England can smoke indoors, this was quite a strange thing because we have had a smoking ban for nearly 6 months now. Also, the English don't have ceilidhs (from what I was told), they have discos. I couldn't really get into the disco but I love nothing better than a ceilidh. We got a bottle of wine from the bar and it tasted like acid. We had to mix it with lemonade to make a punch.

I rewrote the tab dragging patch. What I wrote on Friday was total nonsense and this morning's offering was much better. I am writing a custom image for the user to drag, but suspect that this will be an iterative process because I can't see exactly how to get what I want but can easily create a transparent rectangle with borders. The patch now supports dragging to arbitrary places and should support dragging between Camino windows shortly.

I received my midterm paycheque from Google today and cashed it with my bank. I was pleased with the greater level of communication that LH engaged in with us during the issuing of this cheque and might even send her an e-mail to let her know that it is appreciated.

I've asked for a meeting on 28th August to have some post-project chat with the Camino team. It is important to talk about things when a project is over because there are always lessons to be learned.

Friday, August 11, 2006

T-10: Tab dragging WIP demonstration

Without further ado,

Tab dragging first demonstration (Yay!)

Things worth noticing:

  • Dragging favicons is still different to dragging tabs
  • Dragging a tab does not affect the state of the information inside the tab - I have shown this by dragging a tab that contains some text in the Google search field. This works for audio and video too (I love Ze Frank)
  • Things might look a little bit slow to react. I think that is because I'm still developing on a 700MHz G4 with 384 MB RAM.
Things that I might appreciate feedback on:
  • When should tabs switch position? As soon as the mouse pointer is hovering over a different tab? When the mouse pointer is more than a certain % across the tab you want to move it to?
  • How much animation does this need to become a useful tool? Does it need any animation at all?
I have found it quite difficult this week with Mike being away at WWDC, I wish I was at WWDC.

I am going to a wedding this weekend (not mine, don't worry!) so I shall return on Monday and sit infront of my computer until the end of SoC. There might even be some time for sleeping and eating and washing.

PS I am super scared of submitting my patch to BugZilla because I know that it is hacky and that Stuart will roar at his computer screen when he reads it.

PPS Sorry to the people who read all of my posts for the whiney state of affairs that you have had to put up with recently, it's full steam ahead from now on.

Thursday, August 10, 2006

T-11: Stop cheating, Desmond.

I noticed that the way I was dragging tabs was totally cheating and so I've had to go back to the drawing board to try and do it correctly. I had a massive panic about having to store entire tab view items because that would be a nightmare that I'd rather avoid. I think I can do it using the index of that tab that a user starts their drag from. I'll find out about that tomorrow.

I went out for coffee with some friends this afternoon. One of them asked me if it was weird to be outside with real people. I've not done much of that since I decided that I wanted to make some extra work for myself and poured juice all over my laptop.

A little snippet from IRC that made me laugh:

23:36 < froodian> !seen ardissone|away
23:36 < thebot> ardissone|away was last seen 17 hours, 58 minutes and 43 seconds ago, saying '!seen froodian' in #camino.

Wednesday, August 09, 2006

T-12: Mostly rambling today

There was no T-13 because I had a super mega headache and only worked in the afternoon.

As everybody knows it takes at least an hour in the morning to read your e-mails, everything that you check everyday in your favourite RSS reader, and your favourite Web 2.0 site (this one takes too much time). Then all of a sudden it is 10.30am and it is time for coffee. Since you make your coffee from a coffee machine, you like to take some time to really enjoy the experience. After you come down from the shakes of your stronger-than-something-strong-coffee.

Then you start to watch Ze Frank and then it is 11.30 and you've not even opened XCode yet. But it is alright because you've been thinking about the mountain of code that you need to write. You've got loads of ideas about stuff but unfortunately the code base you are working with is soo complicated sometimes you struggle to find where you need to start.

I've been having fun with the NSPasteboard seemingly losing the tabs that I place in it while I am dragging them. This didn't happen 2 days ago so I must have done something stupid between then and now. I've also had some fun playing with NSAnimation and NSTimer classes, but these ventures have not been very successful. It's hard to learn how things work without toying with them to understand them, but I've not really got much time left for understanding.

And so the daily grind continues.

Monday, August 07, 2006

T-14; WWDC

14 days to go and still soo much work to do.

WWDC is happening today. I hope they release new Mac Minis, I've been waiting for Revision 2 to buy one.

I had a great conversation with Stuart Morgan last night about scrolling tabs. Dragging tags is nearly there, I just have some peculiar problems. Dragging tabs doesn't work with overflowing tabs yet because the mere thought of dragging from a NSMenu into the tab bar makes me wince.

I'm preparing an e-mail to send to Jon Hicks to get his thoughts.

I'll be posting a video demonstrating draggable tabs within the next 48 hours.

Thursday, August 03, 2006

Re: Disaster

I have been quoted £719 to repair my MacBook.

£432 for a new logic board
£90 for 2 new 256MB sticks of RAM
£75 for a new top
£62 for a new Airport Card
£60 for delivery.
I didn't even catch whether or not this price includes VAT or not, eek.

The lesson to be learnt here is do not drink anything near your laptop. But that was pretty obvious anyway.

I have almost got tab-scrolling back to where it was and tab-dragging is nearly back to where it should be too. I'm just having a bit of a mental block when it comes to dealing with resizing the window programmatically.

Nearly all of the tab-dragging code has been re-done and it now makes much more sense. I've taken Stuart Morgan's comments onboard and implemented them. However, as a result, I've touched many more files than I had before.

I promised #camino that I'd submit tab-dragging tomorrow evening so I had better get back to XCode.

Tuesday, August 01, 2006


This will be the only post that I make that is unrelated to GSoC.

I have spent the last 4 days in Paris on my summer holiday.

I visited the Notre Dame Cathedral and was overwhelmed by the unbelievable architecture in the building. It was quite a spiritual experience, complete with a singing choir.

I visited Musee de Louvre and found their diverse collection of art fascinating. The Mona Lisa is not tiny, contrary to what many people say; the Venus de Milo was impressive, as was the whole collection of French sculpture; the Egyptian collection was fantastic, there was even a mummy! I could have spent days in the museum...

I went to the top of La Tour Eiffel and was almost sick when I looked down and saw high up that I was. There was no queue and I walked to the 2nd floor, which I regretted about half-way up! I also visited the Trocadero and took some photographs.

I met a friend and we had some coffee, sushi, and a bottle of Petit Chablis. The wine in France was fantastic and very well priced!

I didn't see L'Arc de Triomphe, which was disappointing.

I ate frogs legs, which have the same texture as chicken; fresh crepes which were amazing; far too many pain au chocolat; and drank lots of wine.

I will certainly go back to Paris - time and time again.