Tuesday, May 22, 2012

Triple partitioning mac book pro with osx windows and ubuntu

I made a lot of mistake before I got it mix right.

Originally I had osx with no boot camp installed.  So I thought I'd make a new partition using disk utility and then install the windows xp I had.  My plan was to have it become upgraded to windows seven.  Once I created the fat partition, I popped in the xp disk and restarted.  The the blue screen showed up and asked me to  partition or leave it alone.  I chose to leave it alone since it was already partitioned as FAT32.  The computer restarted and instead of going to start up, the computer told me to press "ANY" key to start from disk.  I pressed buttons and found myself back at the partition selection.  It was like deja vu since I had just been here.  I selected the option to partition the FAT.  I had thought that maybe it required a reformat.  I chose this option because it was 32 GB in size; he same size of my FAT partition.  Little did I know, that it would wipe my entire HD.  Windows installed normally.  I discovered my mistake when I tried booting up mac.  it was gone.....I was momentarily horrified but was soon relieved upon realizing that I still had dropbox.  Oh, trusty drop box.  This is the reason I use you in the first place!  Ive had a history of reinstalls and drop box had been there to make getting my precious files back more painless.  The only sacrifice would be time.

I had to pull up my old snow leopard install disk since Lion was out there somewhere and i probably couldn't get it back until I downloaded it again from the app store.  SL installed normally and I was able to redownload LION from the app store.  lion installed normally.

since everything was fresh, it would be a good time to make a partition.  3 partitions to be exact.  I wanted ubuntu and windows 7.  I added windows and installed it.  was able to load both osx and windows.

Then I created a new partition for the ubuntu.  Unfortuanately, windows refused to work.  all I did was add a partition.  I didn't even install ubuntu.  So then I thought maybe, I need to make 3 partitions in the beginning.  So i resized osx, and added two FAT partitions.  One for windows and one for ubuntu.  I started with windows 7....again....and it installed alright.  then i tried ubuntu.  Set up was painless  but the install method was weird.  I chose the option to install ubuntu along side osx.  It took me to a slider that asked me how much space to put into this and into that.  The problem was that I had no idea what these two pieces were for!  50-50 seemed appropriate.  I had thought that I would find myself with the option of which partition to install ubuntu in, but I was not graced with such an option.  It started installing without hesitation.  osx and  ubuntu were good, but win seven was gone..... =_____=

disk utility revealed that ubuntu wrote itself right on TOP of of windows 7.  Nice... thank you ubuntu... thank you....

back to square one.  two fat partitions.  install ubuntu first and be more careful about how to install it in the right partition.  No luck.  Had the bright idea to make one FAT partition and one FREE SPACE partition.  ubuntu seized that space without asking me anything.  The good thing was that it filled out that entire partition for its own; which was exactly what I was shooting for.

now for windows.  installed it normally.  but ubuntu disappeared.. so I reinstalled it... then win 7 disappeared.  so i reinstalled it... and then ubuntu disappeared AGAIN!  GOSH was i tired of this....

Did some searching for a solution and many people used this THING called rEFIt.

oh did I mention that my recovery disk disappeared too?  Yeah, the one that lets you reinstalled lion.  If this were to crash that I'd have to install everything starting from SL all over again, so as a precaution I burned lion on to a dvd-r.  It took longer to load up, but worth it.  after all, how often would I find myself in this position?

rEFIt was a painless install.  there was a nice script that installed it automatically.  I restarted the computer and poof! all the partitions are there!!!!!  Ya know how one of them was missing?  well, REFIT made it visible! and it worked!!!!

The only problem was that by default, the machine started up with grub recovery and once it got there I had no clue what to do except restart.  After a while I got fed up with always manually choosing OSX as a start up disk.

The refit.config file has the commands needed to choose mac as start up by default.
i.e.  "default_selection M"


I found it funny how if I selected ubuntu or windows they both would lead to GNU GRUB which gave me options to  start up start up as ubuntu , osx, or windows.  a bit redundant, don't ya think?  I'll try finding a way to fix it, but for now I'm happy.


below is a quick guide on how to triple partition your mac osx.
1) installed osx on the entries disk if you haven't already.

2)use boot camp to get windows support software.  NOT NOT USE BOOT CAMPTO INSTALL WINDOWS

3)use disk utility and make two partitions.  One shall be FAT32 and the other shall be free space.

3.5) download and install rEFIt

4) install windows on the fat32.  You may need to format it to ntfs

5)install ubuntu and choose the option to install along side osx and it will take up the entire free space partition.

Saturday, May 12, 2012

GNU companion

Another day of research.  Sam tells me that he wants me to run some test software.  Probably some sort of script to send a simple msg.  Right now they are able to send wireless messages but they aren't able to receive it.  Maybe they are receiving junk.  They aren't sure cause there is no manuel.  Guess and Check is your friend....

Sam sent me a link to a gnuradio tutorial and it instructed me to open gnuradio companion; a GUI.  They said that the keyword was "grc" but when I tried it, it would only open the command line version.
"gnuradio-companion" was the command line that opened upi the GUI.

wit lab research special counter

After working with the grad students in the wit lab for a few weeks, I became bored of how stuff failed to work.  I felt like I was spending a lot of time on this project but not getting any real work done.

I got fed up with waiting and took matters into my ow hands.  I came to this wit lab because I wanted to contribute my VHDL and FPGA knowledge.  So I asked the professor G chen Who was working on the VHDL stuff.  At the time there was no one working on it.

He knew that I desired to work on an FPGA project.  so he told me to make a "special counter".  The idea seemed simple enough.  count a few signals and TADA! magic.....I wasn't sure what was so special about the counter so I pressed for details as to what this was.  Was there a state machine to describe this?  Was there some documentation?  He pointed to a box with knobs on it.  It looked like a VCR except it wasn't.  This machine was the special counter that professor wanted.  What bothered him was that the counter wasn't customizable enough, so he wanted an fpga implementation of it to have more control.

The only problem was I had no idea how to start.

I needed some advice from someone more knowledgeable them me.  Professor Vahid probably knew what to do.  As I explained the problem to him, I began to answer my own question.  Seems to be a habit of mine to ask questions I have at least ONE answer to.

The problem was balancing what the professor wanted verses what the actual machine does.  It confused me as to what this machine is suppose to do and I wasn't sure how the professor wanted to customize it.  I asked, but no details surfaced.

"as a base.....start with something you do know how to make.  make it similar to the machine on your professors desk.  Ask him if thats want he wanted and if he says no, then you can make changes to accommodate" said Vahid.

It was what I needed to hear.  I was trying to swallow the entire meal instead of taking it one bite at a time.  What professor G chen wanted was a mystery so what I had to do was make something that wasn't a mystery.

Mistakes were made in the process of creating this device.  I wasn't sure what it was suppose to do.  My first assumption was that a transmitter would shoot out a trigger signal to the receiver and then after a short delay it would send a byte of information to the receiver.

I made a bunch of fancy state machines which took a LOT of time to create and conceptualize.  only to realize that it wasn't what the professor wanted.  Its not as bad as it sounds cause I was close.  Instead of  sending a byte of information, he actually wanted a "rising edge" counter.

*face palm*  that would have saved me soooooo much time and effort..... if I did a rising edge counter, instead of what I was TRYing to do  then I would have been done a week earlier.

I made some modifications such that the number of rising edges would show up on the seven segment led screen on my spartan 6.  The numbers showed up obviously, but they were inconsistent.  I used a wave form generator as input to my device and my device would count the rising edges it would get.

why was the numbers in consistent?  was my spartan board too slow?  was it my programming?
I attempted to simplify my design and the error eventually shrank, but it wasn't good enough for me.  I wanted 99.99% accuracy.

I anazlyed the test bench results again and again and noticed a ridicules amount of delay.  This delay may have been responsible for over counting or under counting.


It must have had to do with the nested state machines I was using.  My last card was to get down and dirty with low level implementation.  Gates.

I went ahead and made my own adder and register and all the parts needed to make my counter come to life.  The amount of code for this ended up being WAY smaller then my previous implementation with state machines.  I even paid attention to what RTL design xilinx was generating for my code.  if I had used a state machine it would have been a huge mess.  But since I was making everything, it would be much easier to read and I was have certain expectations as to what SHOULD be there.  If a latch formed and a combinatorial loop formed, I knew there was a problem in my design.

Doing it in the low level really really really paid off.  I had no errors and there was hardly any delay.  If there was a delay, it was all expected.  Seeing as how my device runs at 100 mhz, a delay of one cycle probably wouldn't matter much especially when my input device wasn't going to be any faster than 10khz.

I was able to create a generic mux that used one hot encoding in its select line.
a decoder was made to translate binary number into their hexadecimal equivalent.
I made a counter that would count from zero to 9 and then would over flow.

There are only two things left for me to do.  I need to add another register between the four digit decimal counter and the interface to the seven segment.  while the counter counts, it will need to be saved somewhere and that register is where it will need to be saved.

A state machine would need to be made (either literally or figuratively) to control when the counter would count ,  pause or reset.  it would need to control the register like when it would receive the new value.  shouldn't bee much longer before i am complete.

One thing that would could also do is to make a clock divider in the way that gang specified.

one input has the clock  and it would have several outputs.  the first would be
clock/256 then
clock/256/256 then
clock/256/256/256 and so one.

You want your AN sm to rotate slowly rather then as fast a possible.  It probably doesn't matter that much but for some reason I'm concerned with using too much power.





Wednesday, April 11, 2012

Wit lab research

After a long time of being Mia, I went back to the wit lab and asked if I could continue research. This morning I entered the lab to find out what I should be doing next. I did come prepared btw. Sam told me I needed Ubuntu so I tried making it work on my Mac as a separate Partition. Unfortunately I wasn't successful. Despite following the online instructions it simply didn't work. My back uphold was to install it via VMware fusion.

VMware fusion installed Ubuntu without a fuss.

When I finally arrived he told me that there was a software I had to install. One of the phd students had the sOftware on a USB. He was there yet and would be there until later in the day.

I assumed that the software was a special software that you install on to Ubuntu .
As it turns out, the USB that the Phd student had was just a installation for Ubuntu .

I totally wasted my time waiting for this USB. I guess it was my fault for not asking what this software was suppose to be.

Since I already had Ubuntu I just had to download gnuradio.

If I had asked more questions and was more vocal about what I had already done, the. I could have saved time. Instead of spending the morning waiting and reading I could have spent it figuring out the gnu radio.

The phd student was named Lin . He helped me install the gnuradio via a script offered by the download website.
The installation was a partial success. It failed when trying to clone
The Git repository containing the gnu radio 3.5.3

After reading documentation of how to install manually without
The script I came to realize two things.
1)Lin downloaded the gnu radio tarball even though he didn't need to
2)the script needed adjusting

The purpose of the script was to automate downloading and installing gnuradio and various other things needed to interface with the usrp device.

Lin didnt not have to download the tarball. He could have simple placed the script in an empty folder and ran the scripts and it would have been A-O-K

When the Git failed at check out I asked Sam
for some help but he didnt quite understand the
Problem so he suggested trying an older version.

It wasn't correct but I helpped me figure out the real
Problem. In th script it clones the latest repository from
Git. The URL called by the script wasn't working.
Luckily the gnu radio website offered an alternative
Link. After changing the script to call the alternate
URL, the installation completed without a complaint.

The moral of the story is to never assume.
If you choose to assume, be vocal about what your assumption
Was. That way you would get a complete understanding .

Ps
They told me that the gnu radio didnt install when they tried Ubuntu on a virtual machine.
I think the real problem was in the script. Since Sam was familiar
With the error message he got about Git failing at check out,
I theorize that it was the same message he got long
Ago. This message was probably the same one that
Stopped them from successfully installing the gnu radio
Software on the ubuntu virtual machine.
It's only a guess though.... I could be totally wrong.

Pss
There is a way for osx to run the gnu radio. You have to use
FINK or MACPORTS. I will attempt it with my snow leopard partition.

Tuesday, March 6, 2012

Client server in Operating Systems

 There are several methods of a client communicating with a server.  But why do you need a client and a server?  The applications are numerous.  One example would be using ssh to log into your school's cs account.  In this accound they give you space and no matter where you log in, you get the same "desktop".  You have access to your account and all your programs and files.  It looks and behaves as if every computer you log into becomes you local machine.

In reality, the computer you are logging into is a client and it contains none of this information.  It is stupid and doesn't have a mind of its own.  When you interact with the client the client will always notify the server of the changes and and ask "WHAT DO I DO?!?!"  the server will answer it when ever it feels like it.  When it is ready it will make changes as needed and then it will tell the client what to do.

The client "mounts" your disk on to itself.  It connects to the server and accesses your disk.  But to get that access it needs to mount your disk onto itself.  The server has the disk stored on it somewhere.

The client has a read cache but it doesn't have a write cache.  It just isn't practical to have a write cache.  Instead the client must have its data written directly to the disk (which is stored in the server)

After this question a questions started to brew.
I had an Interview for an Internship some time ago and they basically gave us some code and had us implement a few things.  There were two applications.  A client application and a server application.  The server would always be running in one terminal.  In another terminal a client might be running.  The server is always on and it waits for a client to talk to it.

In our assignment, the client would send the server an ASCII character.  The server would recieve it and it would increment it by one.  (i.e. send A  recieve B)

The interface of the code was nearly identical.  At the time I didn't give much thought to it.  I didn't have the luxury to ponder about what I had just witnessed.  But as i sit in class learning about this topic I begin to wonder how one application speaks to another application.

on the highlevel, SURE it sends a message to the server.  But how?

a SOCKET

Sounds rather familiar.  My TA Sean Foley told me about this.  I didn't much about it except that it's used to send a string. 

The pieces are comming together.  The socket is the middle man that allows the server and the client to communicate.

if the client and server were on the same computer then having a single SOCKET (aka fancy message buffer) would be fine.

But lets say that you computer is the server and my computer is a the client.    It wouldn't make much sense to have a single socket somewhere in the middle.  You would have to pretty much connect to two computers.

So instead, your computer has a socket and my computer has a socket.  The socket is allows external input.
When my computer wants to talk to your computer, my computer will send its message to your computer's socket.  the socket is a buffer, so eventually the your computer will notice it and take action.  It will then respond and send a message to the client's socket.

end

This reminds me quite a bit about implementing the UART is embedded systems class.  Although these devices could be done syncronously, it would be more practical to have a handshake protocall and ahve then opperate asyncronously.  In my design of RXD, I would take in the signal and then save it into RXD's output buffer.  the RXD would then tell the TXD that it has permission to read . 

However, it seems that in the socket example, the buffer would be on TXD.  RXD would write to TXD's buffer and then tell TXD that it should look at its  buffer.

its kind of like the mailman(RXD) stopping by and giving you mail and then telling you(TXD) to check it.  Maybe I should try implementing this again using this version of design.

Saturday, February 11, 2012

IO Redirection and pipes in Eclipse (and xCode)

I have a program that produces two executable files.  One is called "render" and the other is called "runsim".

The way that i would run the program is to open up a console/terminal and enter:
"./runsim < env0 | ./render"

render handles the graphics and runsim controls the movement of the objects. "env0" is a textile that holds that parameters of what the graphic is.


If you want this to run in eclipse there are two things that you must do
1) use your custom makefile
2) add command line arguments to the make file

*it is assumed that you are using linux

To use your own make file you must go to:
properties-->C/C++ Build --> Makefile generation
Then
you must untick "Generate Makefile automatically"

(You might have to set the build location)

Now if you want to be able to use command line arguments such as pipes and IO redirects it is helpful to simply add new stuff to the make file

Simply add
<name> : <command line arguments> 
===============================
For example lets say this is my make file
===============================
all: render runsim
render: render.o
     render.cpp thing.cpp thing2.cpp -o render

runsim: runsim.o
     runsim.cpp it.cpp. it2.cpp -o runsim
----------------------------------------------------------

I would add "special: ./runsim < env0 | ./render"

==============================
the resulting makefile
==============================

all: render runsim special

special:
     ./runsim < env0 | ./render

render: render.o
     render.cpp thing.cpp thing2.cpp -o render

runsim: runsim.o
     runsim.cpp it.cpp. it2.cpp -o runsim
----------------------------------------------------------

When you build using this makefile, eclipse will actually run the command line specified by special.
Now if only I could get it to work on osx.  If you run the above example on osx it will actually complain about "<" saying that there is no rule to make target.  I tried getting it to run on Xcode 4 but it doesn't like it.  it won't even work on the console.  There must be a special character that OSX like to use.  If anyone knows how this is done, please share**

**UPDATE this can work in Xcode 4
(The problem i had was that Xcode was inserting spaces instead of tabs
in my makefile.  makefiles require that you use tabs not spaces (marked <tabs>)

==============================
special = ./runsim < env0 | ./render
all: render runsim 
<tabs>$(special)
render: render.o
<tabs>render.cpp thing.cpp thing2.cpp -o render

runsim: runsim.o
<tabs>runsim.cpp it.cpp. it2.cpp -o runsim
----------------------------------------------------------
Alternatively, if you don't want the command line arguments to run when you "make all"
you can modify it such that you would have to type "make special"

==============================
CMD= ./runsim < env0 | ./render
all: render runsim 

special:
<tabs> $(CMD)

render: render.o
<tabs>render.cpp thing.cpp thing2.cpp -o render

runsim: runsim.o
<tabs>runsim.cpp it.cpp. it2.cpp -o runsim
----------------------------------------------------------

i'm not sure how to make Xcode invoke make special.  right now all it does is the default
meaning that it will run make all since "all" was the first one it saw.  If somehow I could
have it run make all and then after that make special.  I do not know the answer to that.  If anyone out
there knows, Please share.








Saturday, January 28, 2012

using custom Makefile in Xcode 4

If you are like me, you are new to the whole IDE thing.  If you are like me, you are used to using makefiles.  Yes, I am talking about c++ Make files.

however, If you are like me, you want to use the power of Xcode to help you manage your code.  So lets get started.

The reason I make this tutorial is because most of the stuff available is for past versions.  sure, you can dig through Xcode 4 documentation, but chances are, you won't find it.

Lets give a brief introductions as to what IDE's do.  Here are my favorite features.
1) Auto- complete
2) debugger

Auto-complete really helps when you hate memorizing function names.  It also helps when you don't want to miss spell anything.  for example what if you were working with an object but you forgot the name of the function?

Lets say we have an object "tempObj A" ; // tempObj is the type and A is the variable name
I simply have to type "A." that is "A" followed by a "." and it will give me suggestions.  This is a very powerful tool and may be the reason you stick to IDE's

The debugger is very powerful.  Much better then using the GDB in terminal.  even though I had learned about the GDB in my intro to CS classes, I never bothered to use it.  This is where IDE's make debuggers actually useful.  When you run your code in debugging mode you can step through each line of code.  You can even enter the function you were to call.

ok
Now to xcode.
If you are like me, then you have been using EMACS to edit all of your code.  And if you are like me, then you want to use XCODE as an editor.  You also want to use it so that you can "make" your program.  By the end of this tutorial, you will be able to use a custom make file that will run your code.

1) Start a new project and select the empty
2) On the left you will see your project file.  click it to highlight.
3) Look for the work target.  Now click the button to make a new target.
4) create an external build system and follow the prompts
5) now targets should have a bulls eye looking thing under it.  in the directory text box you are ring in insert the path to the directory that holds your makefile
6) now you need to add the files to your project. file-> add files to ....

now assuming you were able to make your program by typing "make" in the terminal.
you should be able to press the big play button at the lot left.  It will compile your code.

But thats not all....you want it to run, right?
Well you have to edit the scheme.
once you do that, go to the run tab and change the executable to the name of your executable as per your make file. (i.e. a.out)

now when you click the big play button, you should be able to build and run the code.

Unfortunately.....you won't be able to make use of auto complete.

at least not yet =)

lucky for you I spent a very long time trying to looking at Xcode and reading documentation in order to tell you the short cut on how to do it.

if you want to enable autocomplete, you have to go under target membership.  Unfortunately, the external built target doesn't like to be checked.  So what you have to do is make another target but choose command line tool.

after you make it go back to "target membership" and check the box.  You will have to do this for every file you select.  Kind of annoying.

Just so you know, I may in the future add pictures to this blog.  But only if you readers are having difficulty understanding my explanations in text.