I took advantage of the fact that some wave developers were passing by our office and wrote a wave robot during a jam session. This robot monitors what is being typed and makes it easy to convert to different units. If you type "100kg (? lbs)" it will replace the ? with the correct value of 220 after you type the closing parenthesis, for example.
I went a bit further and tried to be sensible with the significant figures. I didn't want it say '220.462262 lbs. So I examine the number of significant figures from the original number and try to duplicate it in the result. If you say "100 kg" it'll put "220 lbs". If instead you enter "100.0 kg" it'll put "220.5 lbs".
Test revealed, however, that this wasn't good enough. If I put in "1 inch" in would convert this to "3cm", a 18% error. I put in an extra rule to increase the precision if the error was greater than 10%, which got these corner cases.
What's interesting is that it took more time to write the conversion routines than it did to hook it up with wave. If you use Google App engine in Python or Java it's dead easy.
Google Wave is really a new way to communicate and collaborate, even without robots and gadgets. With robots it goes to a whole new level. You really should take a look at the wave api documentation.
The code for my converter is available here and the robot is called convertsy@appspot.com.
Sunday, June 28, 2009
Tuesday, April 21, 2009
Grub Could be A lot Simpler
Today I reinstalled Windows XP on my son's machine (my old machine). Ubuntu works perfectly with sound, video, and internet, but Windows...
In Windows, I had no sound, no internet, and problems with the video card. Then when I tried to update, it said I can't use and English version of XP in Brazil!
So I reinstalled with a Brazilian version of XP which blew away the boot sector (and thus the menu for selecting Ubuntu is gone).
There are some good instructions here on how to restore grub, but jeez, such a simple program has to be so much work:
I suggest they fix grub with tab completion so that I can just press "r " and get:
In Windows, I had no sound, no internet, and problems with the video card. Then when I tried to update, it said I can't use and English version of XP in Brazil!
So I reinstalled with a Brazilian version of XP which blew away the boot sector (and thus the menu for selecting Ubuntu is gone).
There are some good instructions here on how to restore grub, but jeez, such a simple program has to be so much work:
sudo␣grubWorse, it's even picky about spaces, you need to put a space (shown above as '␣') or you'll get an error message, you've got to be kidding me. If you forget the sudo, it gives you useless error message instead of mentioning that running as root is probably a good idea.
find␣/boot/grub/stage1
root␣(hd0,1)
setup␣(hd0)
I suggest they fix grub with tab completion so that I can just press "r
restore my goddamn boot menu!It should just figure out the rest, possibly asking a question if there's any doubt.
Speakers Housing Part II

Today's a holiday (Tiradentes Day) , so I finished off my speakers!
This time I even tested them (last time I was so exhausted that I didn't even want to know if they worked or not).
I ended up putting the screw covers on with contact cement - I don't know how long they stay up there.
One project completed!
Monday, April 20, 2009
Speaker Housing

This weekend I finished my speaker housing so I can have some sound on the veranda.
It was a lot more work that I had hoped, I'm still sore. My reciprocating saw didn't survive the experience either.

Unfortunately, I still have some work to do:
- put some edge strip laminate in the missing parts
- plane down this piece so that it's flush.
- Hide the screws. I bought some covers, but I realize now they won't work, all my screws are flush and they must be protruding.
Thursday, April 16, 2009
How I'd Improve the Nintendo Wii

Nintendo is coming out with the Wii MotionPlus, which improves the already revolutionary controller. It started me thinking on what else Nintendo could do.
For instance, one or two cameras could be mounted on the TV pointing to the players. This has been done before and makes for some fun games. It also could be used to improve the playability of the games. Imagine a sword fight where you can physically jump out of the way of the sword!
Today if I want to play a quick game on the Wii Fit, I have to:
- Drag out the Wii Fit platform and turn it on.
- Find the Wii Fit DVD.
- Eject the game that's already in the console, home that my son saved his game and put the DVD somewhere.
- Put the Wii Fit DVD in the console and restart the console.
- Move and click the cursor to select the Wii Fit game.
- Go through several screens and warnings.
- Select which player I am.
- Start playing, whew!
- Drag out the Wii Fit platform and turn it on.
- The Wii suspends my son's currently game and shows me a list of games that run with the Wii Fit.
- Allows me to select the game by gesturing to the screen (using the camera, I should need the wiimote for something a simple as this). It loads up the game nearly instantly from it's internal drive. It already knows who I am since it used face recognition from the camera.
- Start playing.
Wednesday, April 08, 2009
Wake on lan works
I previously tried to get wake-on-lan to work and had no luck. I was never sure if my code was wrong, or if a firewall was filtering the command of if my motherboard just doesn't support it (probably the latter).
Today I got a new computer and the old wake-on-lan.py worked!
So here's the program that works for me.
In the BIOS settings I turned on both "PME Event Wakeup" and "Power On Ring" (neither of which is written "wake on LAN").
I'm quite happy with the computer, it has a very silent power supply and I also got a 22" Samsung LCD to go with it.
No I'll have to go and setup my old computer for Victor.
Today I got a new computer and the old wake-on-lan.py worked!
So here's the program that works for me.
#!/usr/bin/env python
import socket
import struct
import sys
def wake_on_lan(macaddress):
""" Switches on remote computers using WOL. """
# Check macaddress format and try to compensate.
if len(macaddress) == 12:
pass
elif len(macaddress) == 12 + 5:
sep = macaddress[2]
macaddress = macaddress.replace(sep, '')
else:
raise ValueError('Incorrect MAC address format')
# Pad the synchronization stream.
data = ''.join(['FFFFFFFFFFFF', macaddress * 20])
send_data = ''
# Split up the hex values and pack.
for i in range(0, len(data), 2):
send_data = ''.join([send_data,
struct.pack('B', int(data[i: i + 2], 16))])
# Broadcast it to the LAN.
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(send_data, ('255.255.255.255', 7))
sock.close()
if __name__ == '__main__':
machines = {
'hera' : '01-23-45-67-89-AB',
'zeus' : 'CD:EF:01:12:45:67',
}
machine = 'scott'
if len(sys.argv) > 1:
machine = sys.argv[1].strip()
wake_on_lan(machines[machine])
In the BIOS settings I turned on both "PME Event Wakeup" and "Power On Ring" (neither of which is written "wake on LAN").
I'm quite happy with the computer, it has a very silent power supply and I also got a 22" Samsung LCD to go with it.
No I'll have to go and setup my old computer for Victor.
Monday, April 06, 2009
Weight Log
I've put together a web site to track my weight and exercise.
But mostly it's to play with Google App Engine.

In the process I discovered two things I didn't know about before:
I'm not going to do an app a week like Web App Wednesday, but Google's sure making it easy to put up a site.
But mostly it's to play with Google App Engine.

In the process I discovered two things I didn't know about before:
- The Google Visualization API. It's a very neat way of putting up charts easily. One nice feature is the separation of data to data views. You can, for instance, download (via AJAX) one table with six columns and produce 5 charts from it with 5 views, very neat.
- You can use some libraries for free (i.e. it's doesn't count for your application's quota, and you get updates without having to manage it). For my app I used the dojo library.
I'm not going to do an app a week like Web App Wednesday, but Google's sure making it easy to put up a site.
Saturday, April 04, 2009
Hard Drive Cloning in Ubutnu
I'm buying a new computer, but the new computer is without a hard drive nor a video card. My computer is going to Victor who's has increasingly found it difficult to buy games for his computer, even games that are 4 years old. Victor will get my old 120 Gig drive and I'll just use the 450 Gig drive that's also been on my computer for a while.
I've been running my computer off an older 120 Gig Maxtor with another 450 Gig used for backup and some larger files. My idea was to offload all the files off the 450 Gig (to my 1 TB drive my video server) and move all my stuff from the 120 to the 450 and just use the 450.
I searched the Internet but it was not clear what the best method was to use.
In short I:
My usual m.o. when getting a new drive has been just to put it in the computer, and mount it as a separate folder. Now that I've done this once, I think I'll clone the drive instead and use the older drive for backup, etc.
I've been running my computer off an older 120 Gig Maxtor with another 450 Gig used for backup and some larger files. My idea was to offload all the files off the 450 Gig (to my 1 TB drive my video server) and move all my stuff from the 120 to the 450 and just use the 450.
I searched the Internet but it was not clear what the best method was to use.
In short I:
- Copied off all the old files off my 450 Gig drive using rsync.
- I used GParted to clone the 120 GB drive to 450 GB (using copy-paste!). I created a bootable "live" version of GParted CD from here.
- I unplugged the 120GB drive and just left the 450GB in it's place.
- I used an Ubuntu boot disk to create a boot partition.
- Rebooted, and it worked!
My usual m.o. when getting a new drive has been just to put it in the computer, and mount it as a separate folder. Now that I've done this once, I think I'll clone the drive instead and use the older drive for backup, etc.
Sunday, February 01, 2009
Toilet seat up or down?
These are some of the important questions in life.
The Way Women See It
Put both the seat and the seat cover (lid) down.
The Way Women See It
- If I didn't have you in my life, I would never have to bring the toilet seat down.
- If I forget to check that it's down, I'll end up sitting in toilet water.
- Men could pee sitting down, if they wanted to.
- You are already getting free sex, it's the least you can do.
- If I didn't have you in my life, I would (almost) never have to put the toilet seat down.
- 9 times out of 10 when I go to the toilet it's to urinate. Having to both lift the seat up and put the seat back down seems like a lot of work.
- Peeing sitting down takes longer, and doesn't get the last drops (especially when you get a little older).
- You're being selfish for not put up the seat for me, why shouldn't I be selfish and not put the seat down for you?
Put both the seat and the seat cover (lid) down.
- If you have to put the seat down, it takes as much work to put one down as two.
- It can make the bathroom look nicer.
- It's a lot more sanitary, but you have to put it down before you flush.
- Equality for the sexes!
The Tipping Point
I just finished reading the Tipping Point and started thinking.
I realized that a site like Good Reads, is a place for "mavens", people who love books come there and tell others what books they should read. The whole publishing industry should pay for this site and encourage these mavens to flock there and give their opinions.
It also made me realize that Good Reads needs more work on developing their network. Make it easier to find others that have the same interests as you do.
Also from my work on orkut I realize that competition is very powerful. You see that your friends have 300 'friends' and you feel inadequate, and work to build up your list of friends. The same could happen to books, you see someone with 100 books that they have reviewed and you start wondering what's wrong with you. You start buying, and reading more books - and giving opinions about these books.
I realized that a site like Good Reads, is a place for "mavens", people who love books come there and tell others what books they should read. The whole publishing industry should pay for this site and encourage these mavens to flock there and give their opinions.
It also made me realize that Good Reads needs more work on developing their network. Make it easier to find others that have the same interests as you do.
Also from my work on orkut I realize that competition is very powerful. You see that your friends have 300 'friends' and you feel inadequate, and work to build up your list of friends. The same could happen to books, you see someone with 100 books that they have reviewed and you start wondering what's wrong with you. You start buying, and reading more books - and giving opinions about these books.
Friday, January 16, 2009
Love the Canon Xsi
I bought the Canon Rebel XSi (aka EOS 450D) digital SLR and have taken some pictures. After using the typical consumer compact camera (like the Canon Powershot SD) for a a few years using these modern digital SLRs is like going from a Corolla to a Porshe. The speed a which it can focus and shoot is incredible, I could depress the button for 4 hours and take pictures at 3.5 pictures per second until the battery runs out. I also got a 8 gig memory card (only about $20.00 these days) and am thrilled that I can take more than a 1000 pictures with no problems.
I tried my wifes older Canon EOS film SLR lenses and they worked flawlessly. I was surprised that the image I saw in the viewfinder was the same as what came out in the final image as well.
Having the large 3" LCD means I can reliably review my image and make decisions about what to delete which I used to always do on the computer.
I've been waiting for years to buy a digital SLR but it had hovered around a $1000 for what I was looking at, now it's more like $650 (with lens!). I wanted something that would work with my older film lenses and a big LCD and some sort of anti-shake (the lens of the XSi has that). Perhaps the only think I'm missing out on is taking video which is just starting to come out for digital SLR cameras (for a price).
If I think back to my first digital camera that had only 640x480 image size and could hold only 24 images, it's quite a difference!
I tried my wifes older Canon EOS film SLR lenses and they worked flawlessly. I was surprised that the image I saw in the viewfinder was the same as what came out in the final image as well.
Having the large 3" LCD means I can reliably review my image and make decisions about what to delete which I used to always do on the computer.
I've been waiting for years to buy a digital SLR but it had hovered around a $1000 for what I was looking at, now it's more like $650 (with lens!). I wanted something that would work with my older film lenses and a big LCD and some sort of anti-shake (the lens of the XSi has that). Perhaps the only think I'm missing out on is taking video which is just starting to come out for digital SLR cameras (for a price).
If I think back to my first digital camera that had only 640x480 image size and could hold only 24 images, it's quite a difference!
Sunday, December 28, 2008
Dynamic Typography
I'm fascinated with kinetic typography, especially the work of Lawrence Lessig. If you like to see more of the genre you can go search google.
I wanted to do my own. I could always try using open office Impress or PowerPoint, but they are too limited in what they can do and repeating the same fancy effect on two slides takes twice as long.
My first attempt was to use the Processing language, but it was a lot of work and the language is less than ideal (sort of old school).
My second attempt was with PyGame, which I've been meaning to learn more about. It could work, but I found that the font's weren't anti-aliased (but I think I was doing it wrong) and creating the library was proving to take a long time.
The I remembered Bruce, a presentation program written in Python and supposedly using PyGame. When I downloaded the latest source, I found that it was using Pyglet and Cocos2d instead. These two were exactly what I needed, powerful and flexible and I could animate a bunch of objects at the same time independently.
I've found for each slide I need:
- List of objects (the words):
- For each object:
- it's initial setup (usually offscreen)
- it's "on animation"
- it's "off animation"
Doing transitions between slides is easy with cocos2d, but I normally just use a quick fade transition.
The code is still rough, my aim is to have a library of effects so that doing a cool presentation won't require too much work.
The code lives at code.google.com.
I wanted to do my own. I could always try using open office Impress or PowerPoint, but they are too limited in what they can do and repeating the same fancy effect on two slides takes twice as long.
My first attempt was to use the Processing language, but it was a lot of work and the language is less than ideal (sort of old school).
My second attempt was with PyGame, which I've been meaning to learn more about. It could work, but I found that the font's weren't anti-aliased (but I think I was doing it wrong) and creating the library was proving to take a long time.
The I remembered Bruce, a presentation program written in Python and supposedly using PyGame. When I downloaded the latest source, I found that it was using Pyglet and Cocos2d instead. These two were exactly what I needed, powerful and flexible and I could animate a bunch of objects at the same time independently.
I've found for each slide I need:
- List of objects (the words):
- For each object:
- it's initial setup (usually offscreen)
- it's "on animation"
- it's "off animation"
Doing transitions between slides is easy with cocos2d, but I normally just use a quick fade transition.
The code is still rough, my aim is to have a library of effects so that doing a cool presentation won't require too much work.
The code lives at code.google.com.
Sunday, December 14, 2008
The rise of programming for artists?

I've been using the Wiring language for doing my Arduino programming and this week I played a little with it's big brother, Processing. I think Processing is a nice tool for beginners and has a great set of libraries, but not my cup of tea for programming. I think what it offers is one tools set (including IDE, libraries and language) so you don't have to waste time figuring out which libraries or IDE you'll need to download as well.
I've also just come across Context Free which is a language for making pretty pictures like the one above.
Wednesday, December 10, 2008
G1G1
I bought two OLPC (aka XO) laptops and gave one to a needy child through the G1G1 (Give One/Get One) promotion. In fact I gave two laptops since Google matched my donation (thanks Google!).
It's already arrived at my Mother's house, it'll be interesting to see how it's changed since the beta machine (which I still have, but I can't upgrade anymore without bricking it).
Maybe the dollar will go down in 2009 and the price of materials as well so that they can start selling the laptop at something near $100.00.
It's already arrived at my Mother's house, it'll be interesting to see how it's changed since the beta machine (which I still have, but I can't upgrade anymore without bricking it).
Maybe the dollar will go down in 2009 and the price of materials as well so that they can start selling the laptop at something near $100.00.
Sunday, November 30, 2008
Got my wife on Unbuntu
My wife, Renata, has been complaining more and more that Windows is getting slower and it's a pain downloading and installing anti-virus software all the time. I occasionally tease that I don't have any of these problems, I don't even have an anti-virus installed on my Ubuntu machine.
So finally, this week, she said that she wants to a dual boot machine, like Victor has.
Compounding the issue is that over the past few weeks our Internet provider had been getting slower and slower, of course, making Windows appear even slower than normal.
I downloaded the DVD version of Ubuntu 8.10 which took a week with this slow connection and, of course, it didn't work (I believe her machine does like booting with a DVD). Luckily, some time on Friday our Internet provider fixed their problems and I was able to download the CD version of 8.10 in about 40 minuts.
In the meantime I backed up her machine to my hard drive which was much slower than it should have been (about 8 hours). I need to debug our network to see why we aren't doing 100 Mb/sec like we should be.
When I finally got her machine to boot with the CD and had everything backed up, I found that Ubuntu was unable to partition the hard drive. I ended up going back to Windows, running chkdsk /f and defragmented the drive.
After all that I was able to partition without problems but then it failed to boot into X, ugh. Luckily she wasn't around to see all this... I hit Alt-F1 and looked at the /var/log/Xorg.0.log and saw lots of errors related to her Wacom tablet. I unplugged the tablet and I was finally able to install Ubuntu, whew.
So far, so good. She printed a receipt from a web page, and it just worked! Thank you CUPS.
I plugged in her Wacom tablet, and it worked too! No rebooting or playing with xorg.conf, cool!
She needed Java for a web site, and I installed it remotely from my machine and that worked after she restarted Firefox.
Additional programs I installed for her:
Skype, sun-java6-plugin, qalculate, wine, openoffice.org.l10n-pt-br, r-base-core (R language), unison-gtk, rdiff-backup, Amarok, vlc, and gnome-mplayer
Stuff I installed for me:
ssh, unison-gtk, rdiff-backup, subversion, gnome-vim, ssh, python2.5, python2.5-wxgtk2.8, python2.5-scipy, and ipython.
So finally, this week, she said that she wants to a dual boot machine, like Victor has.
Compounding the issue is that over the past few weeks our Internet provider had been getting slower and slower, of course, making Windows appear even slower than normal.
I downloaded the DVD version of Ubuntu 8.10 which took a week with this slow connection and, of course, it didn't work (I believe her machine does like booting with a DVD). Luckily, some time on Friday our Internet provider fixed their problems and I was able to download the CD version of 8.10 in about 40 minuts.
In the meantime I backed up her machine to my hard drive which was much slower than it should have been (about 8 hours). I need to debug our network to see why we aren't doing 100 Mb/sec like we should be.
When I finally got her machine to boot with the CD and had everything backed up, I found that Ubuntu was unable to partition the hard drive. I ended up going back to Windows, running chkdsk /f and defragmented the drive.
After all that I was able to partition without problems but then it failed to boot into X, ugh. Luckily she wasn't around to see all this... I hit Alt-F1 and looked at the /var/log/Xorg.0.log and saw lots of errors related to her Wacom tablet. I unplugged the tablet and I was finally able to install Ubuntu, whew.
So far, so good. She printed a receipt from a web page, and it just worked! Thank you CUPS.
I plugged in her Wacom tablet, and it worked too! No rebooting or playing with xorg.conf, cool!
She needed Java for a web site, and I installed it remotely from my machine and that worked after she restarted Firefox.
Additional programs I installed for her:
Skype, sun-java6-plugin, qalculate, wine, openoffice.org.l10n-pt-br, r-base-core (R language), unison-gtk, rdiff-backup, Amarok, vlc, and gnome-mplayer
Stuff I installed for me:
ssh, unison-gtk, rdiff-backup, subversion, gnome-vim, ssh, python2.5, python2.5-wxgtk2.8, python2.5-scipy, and ipython.
Thursday, November 20, 2008
Wednesday, October 22, 2008
Build Status Monitor

I bought the SparkFun LED matrix to go along with the Arduino and here's what I've built.
I basically smiles when the build is green and frowns when it's broken.
You can find the code at google code.
I wanted to have is scroll messages across and there's code to do that, but in the end it was just too annoying since it sits in front of my desk. I have a routine ready, however if I want to give someone a message.
To get the text I used wxPython and I draw the text in a buffer, then I look at the pixels one by one and those become the LEDs to turn on. One nice addition is that I can pass Unicode characters and thus it's relatively easy to show special characters like ⚘♂✔✖✈☝ although 8x8 pixels is often not enough and I have to fix them by hand.
Another bonus the that program works from the command line so you can print larger messages:
./text2pixels.py --size 30 --bold --font "Delphine" Arduino
###
# ##
##
## ##
#### ### ###
#### ### ## ## ## #######
##### ### ### ## ### ### ########
###### ## #### ### ### ### ### ### ### ### #########
### ## ## ###### ########## ## #### ### #### #### #### ###
### ### ## #### ### ########### ## ### ### ### ##### ## ###
### ### ##### ## ### #### ### ### ### ### ###### ## ###
################## ### ###### ### #### ### ### ### ### ### ###
################## ## ######## ### ###### ### ### ### ### ## ####
##### ## #### ###### ### ## ######## ### ###### ### ########
### ###### ### ### ####### ## ## ##### ### ####
#### ###### ### #### ## ## ### ###
### ### ## ## # ## ##
####
##
./text2pixels.py --size 15 --font "Winks" Scott
######
##########
#############
###############
################
################# ##### ###### ############# #############
############### ######## ######### ############ ############
############# ########## ########## ########### ###########
####### ### ############ ############ ########### ###########
###### # ############# ############ ########### ###########
###### ############# ###### ##### ########## ##########
###### ############ ##### #### ##### #####
###### ###### ## #### #### ##### #####
## ###### ##### #### ### ##### #####
#### ##### ##### ##### ### #### ####
########### ##### ######## #### ####
########## ######### ######## ### ###
######## ####### ###### ### ###
#### #### #### # #
Sunday, October 12, 2008
Fun with SmartFun's LED Matrix
I had some fun this weekend with the sparkfun LED matrix. It's a little bit expensive at $35.00, but looks like it could have a bunch of cool uses.
Programming it I had to learn about SPI and I ended up writing my own SPI routines in processing.
I've put the code up at led_matrix_tools and some of it is very reusable.
Note: I wrote this on October 12th, I just noticed now that I never sent it.
Programming it I had to learn about SPI and I ended up writing my own SPI routines in processing.
I've put the code up at led_matrix_tools and some of it is very reusable.
Note: I wrote this on October 12th, I just noticed now that I never sent it.
Saturday, September 27, 2008
Electricity in Brazil
Brazil has a strange relationship with electricity. Something like 95% of the electricity in Brazil comes from hydroelectric, yet they charge an arm and a leg for it.
A few years ago we had the "Apagão" (big-unplug or big-turn-off) where you had to halve your electricity consumption from the same time last year. This was because it hadn't rained enough and the water was getting too low behind the dams to make electricity. The real problem, of course, is that the government hasn't been investing in new electric generation plants. Worse was, that after the emergency, everyone had learned how to use less electricity (by buying compact fluorescent lights (at twice the normal price), for example) and was being more energy efficient, so the hydro company increased the prices. Why? Because they weren't making enough revenue!
At my home they charge R$0.5684/kWh which is about USD$ 0.3072/kWh. That's 204% more than the New York region ($0.1508/kWh) or 217% more expensive than California and is only less expensive than Hawaii (source).
On the farm they charge only R$ 0.2795/kWh, which is 203% less expensive. When it comes to electricity the rich pay for the poor.
If I were to live in a favela, I would get my electricity for free, seriously.
A few years ago we had the "Apagão" (big-unplug or big-turn-off) where you had to halve your electricity consumption from the same time last year. This was because it hadn't rained enough and the water was getting too low behind the dams to make electricity. The real problem, of course, is that the government hasn't been investing in new electric generation plants. Worse was, that after the emergency, everyone had learned how to use less electricity (by buying compact fluorescent lights (at twice the normal price), for example) and was being more energy efficient, so the hydro company increased the prices. Why? Because they weren't making enough revenue!
At my home they charge R$0.5684/kWh which is about USD$ 0.3072/kWh. That's 204% more than the New York region ($0.1508/kWh) or 217% more expensive than California and is only less expensive than Hawaii (source).
On the farm they charge only R$ 0.2795/kWh, which is 203% less expensive. When it comes to electricity the rich pay for the poor.
If I were to live in a favela, I would get my electricity for free, seriously.
Friday, September 26, 2008
Portuguese Words that are Odd in English
Puxe (pronounced "push") - means pull
no - means "in" or "at", "no happy hour" would be "at 'happy hour'"
sex - means "Fri" or sexta feira. Sexo would be sex.
uai (pronounce "why") - it's an expression similar to "look", "well".
no - means "in" or "at", "no happy hour" would be "at 'happy hour'"
sex - means "Fri" or sexta feira. Sexo would be sex.
uai (pronounce "why") - it's an expression similar to "look", "well".
Subscribe to:
Posts (Atom)


