Wednesday, December 22, 2010

GNOME Outreach Program for Women report - Week 1

This past week and a half I started coding for GOPW. I started with some bug-fixing as a way to "warm up". :)

So far, 8 commits:

AgeCommit messageFilesLines
4 min.Start monitoring storage folders if they exist when cheese starts, and a fix for bug 637798 commit.2-2/+8
29 hoursBurst mode session can be cancelled with a "Stop taking pictures" button. Fixes bug 6377981-47/+42
2 daysButton area does not get hidden after returning from fullscreen mode.1-0/+3
2 daysStart "Save as" dialog in home folder1-0/+1
4 daysCheck if each Webcam directory exists before filling thumb view1-22/+28
5 daysDon't create Webcam dirs (in Pictures and Video user dirs) unless there is content to put on it, fixes bug 5630585-27/+51
6 daysCommand line options for starting in wide and fullscreen modes, fixes bug 5978202-5/+49
14 daysAll ui buttons now have tooltips, fixes bug #6229743-2/+14

Daniel Siegel and me were chatting a lot during all this, discussing ideas and options for the bug fixes.

After this, the plan is to finish the feature for selecting video and photo resolution separately, and then start with the sharing features. We want to upload pictures to picasaweb, facebook, etc. Other option is for me to play with overlays, I would like to get any animated gif and put it over the video, that would be fun, especially when cheese can be used as a video chat app. We'll see, this last idea is for the distant future anyway.

Tuesday, December 21, 2010

Full planet weather timelapse

This is the most recent weather time-lapse video I made:




Now with music! =P
Making this was really simple thanks to the image filenames following a predictable pattern. At first I thought I would need to do something really complicated like image recognition, or something with image layers to automate this, but luckily it was not necessary.

Here is the complete script:

#!/bin/bash

wget --limit-rate=100k -e robots=off -U "Mozilla/5.0 (compatible; Konqueror/3.2; Linux)" -np -l1 -r  -A .jpg -N  http://goes.gsfc.nasa.gov/goescolor/goeswest/overview2/color_lrg/older_images/

wget --limit-rate=100k -e robots=off -U "Mozilla/5.0 (compatible; Konqueror/3.2; Linux)" -np -l1 -r  -A .jpg -N  http://goes.gsfc.nasa.gov/goescolor/goeswest/overview2/color_lrg/

wget --limit-rate=100k -e robots=off -U "Mozilla/5.0 (compatible; Konqueror/3.2; Linux)" -np -l1 -r  -A .jpg -N http://goes.gsfc.nasa.gov/goescolor/goeseast/overview2/color_lrg/older_images/

wget --limit-rate=100k -e robots=off -U "Mozilla/5.0 (compatible; Konqueror/3.2; Linux)" -np -l1 -r  -A .jpg -N http://goes.gsfc.nasa.gov/goescolor/goeseast/overview2/color_lrg/

mkdir temp
mkdir temp/west
mkdir temp/east

cp goes.gsfc.nasa.gov/goescolor/goeswest/overview2/color_lrg/older_images/*.jpg temp/west
cp goes.gsfc.nasa.gov/goescolor/goeswest/overview2/color_lrg/*.jpg temp/west

cp goes.gsfc.nasa.gov/goescolor/goeseast/overview2/color_lrg/older_images/*.jpg temp/east
cp goes.gsfc.nasa.gov/goescolor/goeseast/overview2/color_lrg/*.jpg temp/east

rm temp/west/latest*.jpg
rm temp/east/latest*.jpg

mkdir temp/west/lower
mkdir temp/west/upper
mkdir temp/west/full

mkdir temp/east/upperbig
mkdir temp/east/uppersmall
mkdir temp/east/full
mkdir temp/east/lower

mv temp/west/*22.jpg   temp/west/lower
mv temp/west/*52.jpg   temp/west/lower
mv temp/west/*30.jpg   temp/west/upper
mv temp/west/*45.jpg   temp/west/upper
mv temp/west/*15.jpg   temp/west/upper
mv temp/west/*0000.jpg temp/west/full
mv temp/west/*0300.jpg temp/west/full
mv temp/west/*0600.jpg temp/west/full
mv temp/west/*0900.jpg temp/west/full
mv temp/west/*1200.jpg temp/west/full
mv temp/west/*1500.jpg temp/west/full
mv temp/west/*1800.jpg temp/west/full
mv temp/west/*2100.jpg temp/west/full
mv temp/west/*00.jpg   temp/west/upper


mv temp/east/*0545.jpg temp/east/full
mv temp/east/*0845.jpg temp/east/full
mv temp/east/*1145.jpg temp/east/full
mv temp/east/*1445.jpg temp/east/full
mv temp/east/*1745.jpg temp/east/full
mv temp/east/*2045.jpg temp/east/full
mv temp/east/*2345.jpg temp/east/full
mv temp/east/*0245.jpg temp/east/full
mv temp/east/*45.jpg   temp/east/upperbig
mv temp/east/*15.jpg   temp/east/upperbig
mv temp/east/*9.jpg    temp/east/lower
mv temp/east/*1.jpg    temp/east/uppersmall

ls temp/west/lower/*.jpg -rt > filelist.txt
ls temp/west/upper/*.jpg -rt >> filelist.txt
ls temp/west/full/*.jpg  -rt >> filelist.txt

ls temp/east/upperbig/*.jpg   -rt >> filelist.txt
ls temp/east/uppersmall/*.jpg -rt >> filelist.txt
ls temp/east/full/*.jpg       -rt >> filelist.txt
ls temp/east/lower/*.jpg      -rt >> filelist.txt


mencoder "mf://@filelist.txt" -mf fps=12 -o no_sound.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=4000 -vf scale=640:480
mencoder -oac copy -ovc copy  -o output_movie5.avi -audiofile music.mp3 no_sound.avi

I'ts really basic and intended for running it once, and then deleting all the folders. Enjoy!

Monday, November 29, 2010

How to edit grub files so Ubuntu boots after installing Fedora

Recently I installed Fedora 14 as a third OS, having Ubuntu 10.10 and Windows XP in other partitions. I told Fedora to install the grub loader, and now I had this in /boot/grub/grub.conf :

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,5)
#          kernel /boot/vmlinuz-version ro root=/dev/sdb6
#          initrd /boot/initrd-[generic-]version.img
#boot=/dev/sdb
default=0
timeout=5
splashimage=(hd0,5)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.35.6-48.fc14.i686)
    root (hd0,5)
    kernel /boot/vmlinuz-2.6.35.6-48.fc14.i686 ro root=UUID=e0a1c43c-0bc5-4762-b497-16f99a6e8bc8 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
    initrd /boot/initramfs-2.6.35.6-48.fc14.i686.img
title Fedora (2.6.35.6-45.fc14.i686)
    root (hd0,5)
    kernel /boot/vmlinuz-2.6.35.6-45.fc14.i686 ro root=UUID=e0a1c43c-0bc5-4762-b497-16f99a6e8bc8 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
    initrd /boot/initramfs-2.6.35.6-45.fc14.i686.img
title Ubuntu 
    rootnoverify (hd0,2)
    chainloader +1
title Windows XP
    rootnoverify (hd0,1)
    chainloader +1

 But when I tried to boot to my Ubuntu, it didn't work. This is how I solved it:


We will need to edit some files as root, the easiest way to do this, IMHO, is to open terminal and run
sudo nautilus
so we can browse everything as root and edit what we please, or
sudo gedit file_to_edit
to just edit a single file as root.
But Fedora does not allow you to "sudo" by default.


And if you try

su
nautilus
or
su
gedit


It doesn't work. (http://forums.fedoraforum.org/showthread.php?t=253687)
So let's add our user to the sudoers file.

Open a terminal, run
su
(enter password)
visudo
page-down to the bottom
press "insert" key to start editing, and add this line to the bottom:

laura ALL=(ALL) ALL

where "laura" is your username. Press esc, and then type
:wq
to save and exit. (A more complete guide for this can be found here: http://fedorasolved.org/post-install-solutions/sudo )

Ok now finally we can "sudo nautilus". We need to edit /boot/grub/grub.conf from our Fedora root partition.

We can comment the lines

#splashimage=(hd0,5)/boot/grub/splash.xpm.gz
#hiddenmenu

(by placing "#" in front) if we like. This is so the grub menu appears when booting without pressing any key, it is easier that way to reboot several times and always see the grub menu. You can uncomment it again later.

Now open a nautilus as a normal user, and make sure the partition where your ubuntu root resides is mounted. (Click its name if it doesn't have the "eject" arrow to the right) Now that mount will be visible from your root nautilus. (??? Why do we need to do this? it is a mystery: nautilus as root does not list all available disks or partitions like normal-user nautlus does).

(Here we see the root nautilus to the right, where the partition mounted as "127 GB Filesystem" in the normal-user nautilus, is shown as a long UUID).

Then open /boot/grub/grub.cfg, we will not edit this file, we'll just copy some lines from it to the fedora /boot/grub/grub.conf file.
It will contain something like this:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then

[snip]


### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.35-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos3)'
    search --no-floppy --fs-uuid --set 3089130e-0a2e-4f80-8eee-a3030a6810ea
    linux    /boot/vmlinuz-2.6.35-23-generic root=UUID=3089130e-0a2e-4f80-8eee-a3030a6810ea ro   quiet splash
    initrd    /boot/initrd.img-2.6.35-23-generic
}

[snip]

This is the part we are interested in:
linux    /boot/vmlinuz-2.6.35-23-generic root=UUID=3089130e-0a2e-4f80-8eee-a3030a6810ea ro   quiet splash
initrd   /boot/initrd.img-2.6.35-23-generic 



copy these lines to your Fedora /boot/grub/grub.conf and replace the word "linux" to "kernel". It should look like this now:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,5)
#          kernel /boot/vmlinuz-version ro root=/dev/sdb6
#          initrd /boot/initrd-[generic-]version.img
#boot=/dev/sdb
default=0
timeout=5
#splashimage=(hd0,5)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora (2.6.35.6-48.fc14.i686)
root (hd0,5)
kernel /boot/vmlinuz-2.6.35.6-48.fc14.i686 ro root=UUID=e0a1c43c-0bc5-4762-b497-16f99a6e8bc8 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
initrd /boot/initramfs-2.6.35.6-48.fc14.i686.img
title Fedora (2.6.35.6-45.fc14.i686)
root (hd0,5)
kernel /boot/vmlinuz-2.6.35.6-45.fc14.i686 ro root=UUID=e0a1c43c-0bc5-4762-b497-16f99a6e8bc8 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
initrd /boot/initramfs-2.6.35.6-45.fc14.i686.img
title Ubuntu 2.6.35-23-generic
root (hd0,2)
kernel /boot/vmlinuz-2.6.35-23-generic root=UUID=3089130e-0a2e-4f80-8eee-a3030a6810ea ro quiet splash
initrd /boot/initrd.img-2.6.35-23-generic
title Windows XP rootnoverify (hd0,1) chainloader +1

I marked with red the modified parts. After updating the Ubuntu Kernel, you need to modify this file again so you can boot Ubuntu using that new kernel. Well, that's all for today, hope this helped someone. If you know better ways to do this, your input is welcome in the comments. I read somewhere that it's better to install Ubuntu last, because it recognizes installed OSs better, but I haven't tested this.

Friday, November 19, 2010

Yet Another Person attempting to build GNOME with jHbuild ;)

Just a quick post with some links to people who said it earlier and better than me:

http://www.vuntz.net/journal/post/2010/09/23/My-love-for-jhbuild
http://blogs.gnome.org/aklapper/2010/09/19/jhbuilding-gnome-3-0-no-fun
http://gnomedeveloper.blogspot.com

Also, this is a good idea:
https://bugzilla.gnome.org/show_bug.cgi?id=313147 so http://live.gnome.org/JhbuildIssues is more visible. Maybe add it to http://library.gnome.org/devel/jhbuild/unstable/index-info.html.en somewhere?

I know that building the bleeding-edge GNOME with jHbuild is not really necessary for people starting to contribute, but it's an experiment I wanted to do, and it serves a good purpose: I'm learning a lot on the way.

Maybe I will file some bugs when I encounter any clearly module-related problem, since that is another way to contribute.

Friday, November 12, 2010

Hello Planet GNOME!

Yay! I was selected! I'm in!

I felt, and still am, really happy about being selected as a participant in the GNOME Outreach Program for Women. I think is a wonderful opportunity, not only for the participants to learn a lot and get to know a vast community (that otherwise we may never would have explored, out of not noticing we could), but also an opportunity to create tiny "ripples of expanding information" and awareness amongst our contacts and personal circles. "Hey, if she could, I could too!" or "Contributing to an opensource project would also look great on my resume".

I think this video about Google summer of code sums up very well at 8mins 52 sec how intimidating the first steps into an opensource project can be. I felt that way for sure!


That's another reason this program is so great, by offering mentorship to participants in this way everything is really less scary.



(Those are screencaptures of the video I linked above, by the way).
It is even more difficult (to not be scared) if you are a woman. The topic of women in computing is a can of worms, but inavoidable: this is an outreach program for women after all. Why do we need extra encouragement? Ah, how I would like to be able to explain the complexities of being a woman in this world.

If you are a male, has anyone ever told you "Oh, so you are interested in doing X even when you are a BOY? Cool, I'm sure you can do it as well as any woman!" Implying X is made/done by and for women by default. Would you feel confident after that?

We say that ourselves: "Hi, I can do this as well as any man!". Yep, it's true, but why do we need to say it?  Because it was drilled into our heads, culturally, all our lives, that we are "the others", that if we do X (code, for example) that's uncommon and surprising. Lots of young school-age girls start to drift away from math, science and technology because of this perceived "that's for boys" thing. And they miss the opportunity of having better income as adults, they settle, instead, for boring and worse-paid "female" jobs.

Yep, I told you it was a can of worms ;)

I hope no one gets offended by this, it's not meant to. :)

-------

So! I will be working on Cheese Project with Daniel Siegel as a mentor, he has been very nice and helpful. I really like the application and I'll try my best to add new cool features, it's a lot of fun. I'd also like to thank everybody else for being so friendly, welcoming and encouraging. I'm really grateful to everyone involved!

I'd also like to say "Congratulations!" to the other seven participants, and "Stay around, don't go away, apply again next time!" to all other applicants.

So, what else can I tell you about myself? I live in Buenos Aires, I have a five month old son (that's an extra challenge: to find time and energy to code while taking care of an infant, but also a possibility to all technical mothers out there, as Marina Zhurakhinskaya said to me a couple of days ago, to participate in opensource projects if they are at home with their kids).


I started to like computers in the BBS era, I was a sysop of my own BBS back then 15 years ago, receiving calls in my 14400 modem. I'm working towards my bachelor's degree in computer science. I worked the last five years as a Visual C++ software developer in different companies.

And that's all for now, this was my introduction to people at http://planet.gnome.org where these posts will be aggregated. I will be reporting my experiences and progress weekly, so stay tuned! :)
See you around!

Wednesday, October 20, 2010

Just dodged a bullet

I just dodged a bullet by not upgrading to Ubuntu 10.10 (Maverick). I could have found the hard way that my video card drivers are not supported.

From the release notes:

"The new Xorg 1.9 available in Maverick is not compatible with nVidia based chipsets that use the (nvidia-96) and (nvidia-173) drivers."

Hmm that sounded suspicious, didn't I have an nVidia card?

$ sudo lshw -C video
[...]

description: VGA compatible controller
product: NV18 [GeForce4 MX 4000]
[...]

$ nvidia-settings

NVIDIA Driver Version: 96.43.17

D'oh!

Will I be able to test the new release without buying new hardware? It all depends on AaronP now =/

Wednesday, October 13, 2010

GNOME Outreach Program 2010

Last days, I've been trying to do as much as possible to be selected for this internship:
Cool, huh? Even if I don't get selected in the end, I'm having fun and learning a lot already, I come from a windows environment so I'm learning as I go. I found a universe of new knowledge that seems infinite to try and grasp. And it's really exciting.


My next step? Maybe try to do this: http://live.gnome.org/JhbuildOnUbuntu
I would like also to post here about what have I done already, and little its and bits of things I'm learning. If it weren't for this program I would have never found the courage and motivation to start. And I thought that addressing/grouping programmers by gender was a bad idea. If this hadn't been targeted to women, I would've never had applied.

I want to thank everyone involved, especially Daniel G. Siegel who helped me with my first steps in Cheese project.

Monday, January 18, 2010

Satellital weather videos II

Continuing with the topic from last post, let's see how to convert the .tif files found in http://goes.gsfc.nasa.gov/goeseast-lzw/argentina/vis/  (visible light). Download them:


wget --limit-rate=100k -e robots=off -U "Mozilla/5.0 (compatible; Konqueror/3.2; Linux)" -np -l1 -r -A .tif -N http://goes.gsfc.nasa.gov/goeseast-lzw/argentina/vis/
Convert them to  .jpg:
convert -limit memory 1 -limit map 1 goes.gsfc.nasa.gov/goeseast-lzw/argentina/vis/*.tif goes.gsfc.nasa.gov/goeseast-lzw/argentina/vis/img_%03d.jpg

(Note: change %03d to %04d if you want 4 leading zeroes in your filename, for example if you have more than 1000 pictures to convert, so all files end sorted sequentially) .

And now we convert the pics to video just like before:

mencoder "mf://goes.gsfc.nasa.gov/goeseast-lzw/argentina/vis/*.jpg" -mf fps=8 -o output_vis.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=4000 -vf scale=640:384

Ready. We upload to youtube...



Hope you enjoy this and create your own weather videos!

Satellital weather videos

I always liked satellital weather videos, so hipnotic and fascinating. For some reason, when weather channels on the TV or weather websites publish such videos, they are very short, even 4 or 5 frames, leaving me hungry for more.

Luckily, there is http://goes.gsfc.nasa.gov where we can find satellital pictures from the last weeks showing different parts of the planet. We just need to download them and convert them to video.

This is how I did it using Ubuntu. This works for sure in ubuntu 2.6.31-14 (Karmic Koala) or higher, it works in lucid too. We open a terminal, go to a chosen directory and type:

wget --limit-rate=100k -e robots=off -U "Mozilla/5.0 (compatible; Konqueror/3.2; Linux)" -np -l1 -r -A .jpg -N http://goes.gsfc.nasa.gov/goeseast/argentina/3band_color/


This downloads all the images from http://goes.gsfc.nasa.gov/goeseast/argentina/3band_color/ to a directory named "goes.gsfc.nasa.gov/goeseast/argentina/3band_color/" (This dir will be created automatically).

Now we convert all these .jpg to video with the command:

mencoder "mf://goes.gsfc.nasa.gov/goeseast/argentina/3band_color/*.jpg" -mf fps=8 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=4000 -vf scale=640:384

That's it, now we have a video named output.avi that we can, for example, upload to youtube:



If we gather enough images, our video will get longer and more interesting. Running the same commands in a few days, will download the new pictures (ignoring the ones we already have) so we can generate longer videos by getting more pics than NASA stores at a time. I mean we can store all the pics we want from NASA before they delete them, if we keep downloading them from time to time. Imagine a weather video showing an entire month!

// TODO: crop the images to remove that jumpy black rectangle in the bottom.

The problem I encountered with this is that sometimes, NASA has pictures taken at irregular intervals of time, so the video seems to get faster or slower randomly. That's an interesting problem to think about, what to do when we want to generate a video from images but we have frames missing. Do we fill the missing frames with blanks?