<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel>
  <title>WatchHisBeardGrow.com Academic Web Blog</title>
  <link>http://www.watchhisbeardgrow.com/</link>
  <description>Academic Research, Interests, Achievments and Activities of Andrew W. Haddad</description>
  <item>
	<title>Let There Be Light!</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=24</link>
	<description><![CDATA[That's right! and God is not saying it, I AM!
<p>Here are some images of my lighting work for Interactive Computer Graphics.<p>I wrote the code here from scratch. The only portion of OpenGL function I use is "drawPixels." All the math and all the programming is my work. I am very proud.<p>Ambient Lighting<br><img src='http://watchhisbeardgrow.com/res/ambient.jpg' width='80%'><p>Diffuse Lighting<br><img src='http://watchhisbeardgrow.com/res/diffuse.jpg' width='80%'><p>Phong(Specular) Lighting<br><img src='http://watchhisbeardgrow.com/res/phong.jpg' width='80%'><p>Here they are combined nicely.<br><img src='http://watchhisbeardgrow.com/res/combin.jpg' width='80%'><p><h3>Texture</h3>I have also been working on textures.<br><img src='http://watchhisbeardgrow.com/res/texture.jpg' width='80%'><p><img src='http://watchhisbeardgrow.com/res/diffusetexture.jpg' width='80%'><p><h3>Building Blocks</h3><img src='http://watchhisbeardgrow.com/res/points.jpg' width='80%'><p><img src='http://watchhisbeardgrow.com/res/wireframe.jpg' width='80%'>]]></description>
</item>
<item>
	<title>Java-like instanceof</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=23</link>
	<description><![CDATA[So I was hoping c++ had a Java-like instanceof function. It didnt as far as I could find... Lame. Instead I have to include an enumerated value in all of my subclasses to determine which subclass of a light i am dealing with... This sucks.
<pre><code>
enum type {AMBIENT, DIFFUSE, PHONG};

class Light{
public:
	Light(unsigned int color, float strength, type lightType);
	unsigned int getColor();
	type getType();
	virtual void update(vector<TMesh> meshes);
protected:
	type lightType;
	unsigned int color;
	float strength;
};
</code></pre>

Thoughts, anyone? Is there a better way?]]></description>
</item>
<item>
	<title>Forward Declaration</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=22</link>
	<description><![CDATA[Something tells me Forward Declaration as a means to avoid Cyclic Dependencies in C++ is a bad idea... I am using them anyway because it seems to be a super simple solution to what can be a REALLY ugly problem... Anyone have any thoughts on this? I am interested in hearing what others think. All I know is Java handles this for me and C++ doesn't. Some people claim it means I have probably made some bad design decisions, but I have a hard time believing that (not because I am perfect, but because if it was a bad design thing, Java would probably stop it from occurring as well instead of handling it for me.)
<p>For those who dont know what I am talking about, I will give a quick example: I have a class which contains a reference to another class in the header. The second class I mentioned contains a reference in its header to the first class I mentioned. For each I must include the header of the other class. This causes a "Cyclic Dependencie."
<p>Here is an example of a Forward Declaration:
<pre><code>
#ifndef SCENE_H_
#define SCENE_H_
#include <windows.h>
#include "gui.h"
#include "framebuffer.h"
#include "tmesh.h"
#include "path.h"
#include <vector>

class Light; // THIS IS THE FORWARD DEC.

class Scene {
private:
	FrameBuffer *fb;
	vector<TMesh> meshes;
	PPC *ppc;
	vector<Light> lights;
.
.
.
#endif
</code></pre>]]></description>
</item>
<item>
	<title>Sliding Window Buffer</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=21</link>
	<description><![CDATA[The last few days I have been writing some utilities and data structures for use in my STCP (Simplified Transport Control Protocal) Layer. I have never really done a code-review over blog before but I figure it cant hurt.<br><br>Nor have I posted much code here, so its a good test for my formatter.
<br><br>What I have been working on most recently is the Sliding Window Buffer to keep track of data being passed to the application layer  and to the network layer. It is not done because currently it does not have any of the reliability utilities it will require. eg production into specific locations in the buffer and the ability to peak into specific locations in the buffer.<br>Anyway, here is the code: (oh, I have to warn you... It has been a while since C/C++ was my main language so some if this stuff may be bad ideas. I am happy to take any <em>constructive</em> criticism)<br><pre><code>

#include /<assert.h/>
#include /<stdlib.h/>
#include /<stdio.h/>
#include /<string.h/>
#define BUFFER_SIZE 3072

struct sliding_window_buffer{
  int window_start;
  int window_end;
  char *buffer;
}to_application, to_network;

static void init_buffer(struct sliding_window_buffer *swbuffer, int start){
  swbuffer->buffer = (char *)malloc(BUFFER_SIZE);
  assert(swbuffer->buffer);
  swbuffer->window_start = start;
  swbuffer->window_end = swbuffer->window_start;
  for(int i = 0; i<BUFFER_SIZE; i++){
    swbuffer->buffer[i] = '\0';
  }
}

static void consume(struct sliding_window_buffer *swbuffer,
		    int bytes, void *ret){
  if(swbuffer->window_start == swbuffer->window_end 
     && swbuffer->buffer[swbuffer->window_start] == '\0' 
     && swbuffer->buffer[swbuffer->window_start+1] == '\0'){
    //IT APPEARS THE BUFFER IS EMPTY, THERE IS NO DATA TO CONSUME
  }
  else{
    //IF THE DATA TO CONSUME DOES NOT CROSS FROM END TO BEGINNING
    if(swbuffer->window_end+bytes<BUFFER_SIZE){
      //COPY THE DATA TO BE CONSUMED INTO THE RETURNED VOID*
      memcpy(ret, swbuffer->buffer+(swbuffer->window_end%BUFFER_SIZE), bytes);
      //SET THE MOVED DATA TO THE NULL CHARACTER TO EMPTY THE BUFFER
      memset(swbuffer->buffer+(swbuffer->window_end%BUFFER_SIZE), '\0', bytes);
      //MOVE THE END OF THE WINDO TO ITS NEW LOCATION
      swbuffer->window_end = (swbuffer->window_end + bytes)%BUFFER_SIZE;
    }else{
      //THE DATA STARTS AT TH END AND CROSSES TO THE BEGINNING OF THE BUFFER
      //MUST CONSUME IN TWO PARTS AND THEN COMBINE THE PARTS TO RETURN
      void *part_one, *part_two;
      int size_of_part_one = BUFFER_SIZE-swbuffer->window_end;
      int size_of_part_two = bytes-size_of_part_one;
      part_one = malloc(size_of_part_one);
      assert(part_one);
      part_two = malloc(size_of_part_two);
      assert(part_two);
      //GET PEICES
      //THIS RECURSIVE CALL SHOULD TAKE CARE OF MOVING OUR WINDOW
      //AND RESETTING THE BYTES
      consume(swbuffer, size_of_part_one, part_one);
      consume(swbuffer, size_of_part_two, part_two);
      //REASSEMBLE
      memcpy(ret, part_one, size_of_part_one);
      memcpy((char*)ret+size_of_part_one, part_two, size_of_part_two);
      free(part_one);
      free(part_two);
    }
  }
}

static void produce(struct sliding_window_buffer *swbuffer, 
		    int bytes, void *prod){
  //IF THE BYTES TO MOVE ARE NOT TOO LARGE FOR THE BUFFER
  if(bytes<BUFFER_SIZE){
    if(swbuffer->window_start == swbuffer->window_end 
       && swbuffer->buffer[swbuffer->window_start] != '\0' 
       && swbuffer->buffer[swbuffer->window_start+1] != '\0'){
      //IT APPEARS THE BUFFER IS FULL, THERE IS NO ROOM FOR YOUR DATA
    }
    else{
      int space_left;
      //DECIDE HOW TO CALCULATE THE AMOUTN OF SPACE LEFT
      //DEPENDS ON THE ORDER OF THE START AND END OF THE BUFFER
      if(swbuffer->window_end>swbuffer->window_start){
	space_left = swbuffer->window_end-swbuffer->window_start;
      }else{
	space_left = swbuffer->window_end-swbuffer->window_start+BUFFER_SIZE;
      }
      //IF THE BYTES TO MOVE IS GREATER THAN THE SPACE LEFT
      if(bytes > space_left){
	//FIT THE SIZE TO MOVE IN BYTES TO THE SIZE LEFT IN THE BUFFER
	bytes = space_left;
      }
      //IF BYTES WILL FIT BEFORE THE END OF THE BUFFER
      if(bytes+swbuffer->window_start<BUFFER_SIZE){
	memcpy(swbuffer->buffer+swbuffer->window_start, prod, bytes);
      }else{
	//BYTES SPAN FROM END TO BEGIN
	//WILL REQUIRE TWO COPIES
	memcpy(swbuffer->buffer+swbuffer->window_start, 
	       prod, 
	       (BUFFER_SIZE-swbuffer->window_start));
	memcpy(swbuffer->buffer, 
	       (char*)prod+(BUFFER_SIZE-swbuffer->window_start), 
	       bytes-(BUFFER_SIZE-swbuffer->window_start));
      }
      swbuffer->window_start = (swbuffer->window_start+bytes)%BUFFER_SIZE;
    }
  }else{
    printf("ERROR: BYTES ADDED WERE LARGER THAN THE BUFFER");
  }
}

void destroy_buffer(struct sliding_window_buffer *swbuffer){
  free(swbuffer->buffer);
}

int main(){
  //SOME TESTING... NOT STRENUOUS
  init_buffer(&to_application, 200);
  void *half = malloc(strlen("some_bytes")/2);
  consume(&to_application, strlen("some_bytes")/2, half);
  printf("Empty: %s\n", half);  
  void * some_bytes = malloc(strlen("some_bytes"));
  memcpy(some_bytes, "some_bytes", strlen("some_bytes"));
  produce(&to_application, strlen("some_bytes"), some_bytes);
  consume(&to_application, strlen("some_bytes")/2, half);
  printf("first 5: %s\n", half);
  consume(&to_application, strlen("some_bytes")/2, half);
  printf("second 5: %s\n", half);  
  consume(&to_application, strlen("some_bytes")/2, half);
  printf("third 5: %s\n", half);  
  destroy_buffer(&to_application);
  return 0;
}


</code></pre>

edit: I am not taking this down, but I just noticed that though it compiled nicely, I forgot to run it... haha. I got some nasty errors. I will replace the code here when I figure it out.
<br><br>
edit: It has been updated. It was pretty obvious. I was thinking I had malloc'ed the buffer struct, so when I went to destroy it, I tried to free it and well... that was illegal!]]></description>
</item>
<item>
	<title>Rip Van Winkle Awakes</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=20</link>
	<description><![CDATA[I have not written in FOREVER, but I wont say any more about that because it does not make for good content. Instead I want to talk about my first few weeks at Purdue.<br><br>Grad school started like 3 weeks ago and it has been in full swing since day one. Before classes even started, I had my first assignment. Before I tell you about that, I want to tell you about my classes.<br><br>So I am taking Interactive Computer Graphics, Computer Networks and Algorithms. All three courses are PhD qualifying courses and so I will most likely be taking three Quals this semester. I hope I pass them all. If I can, then I only need one more Qual(Programming Languages I hope). The PhD qualifying progress is quite intensive. Instead of going into detail, I will just point you to the <a href='http://www.cs.purdue.edu/academic_programs/graduate/curriculum/doctoral.sxhtml'>degree description</a> on the CS homepage.<br><br>Ok, so homework so far has been NO PIECE OF CAKE. The first assignment in networking was the implementation of an HTTP server in C/C++. In order to test the server, we wrote a multi-threaded load generating client and then a report on the results of our server. (some of the ugliest code I have ever written. I am not happy with the way it turned out.) The next assignment in Networking is the implementation of a reliable TCP layer to sit underneath our server. Other than the simplification of some parts of the TCP layer, the main difference between my TCP and the real underlying TCP is that my TCP will handle dropped packets. I am getting better with C and C++ with everything I do, so hopefully I will be happier with the end result of this project.<br><br>In Computer Graphics, my first assignment was to implement some 3D Vector and Matrix classes and show that they work using OpenGL graphics.<br><br>There is so much more that I could say about my upcoming projects (programming and written homeworks) but I will just leave it all at that for now.<br><br>I am beginning to feel overwhelmed. With the amount of work which is required here. Ball State was a walk in the park compared to everything I have to do. I am sure its because it is grad school, but the professors leave much more up to the students. So far I have not really been taught much of anything. They just tell us to go off and learn it for ourselves... Its kinda weird.<br><br>Wish me luck, this is not going to be easy...]]></description>
</item>
<item>
	<title>MS Silverlight on FF</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=19</link>
	<description><![CDATA[Ok... I know I have not posted in a while and I am fairly sure no one cares and this is just here for me at this point, but I wanted to ask in case someone, anyone, was reading... Are you as surprised as me that Silverlight runs on FF?

I never saw it coming... I think Microsoft made a smart move here. I thought they were gonna make it only work on IE7 and 8... Nice work MS... You have surprised me... ]]></description>
</item>
<item>
	<title>&amp;quot;NuCube&amp;quot; - Working Title</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=18</link>
	<description><![CDATA[Howdy. I picked up an old project recently. Sometime last semester I started writing a 3D puzzle game. Its really just another color matching, block dropping, puzzle game. At the start of the game, you see a 4x4 grid in which you are expected to drop different color blocks. Combinations of 6 or more are destroyed, dropping any boxes which may have been placed on top of them. The 3D aspect adds an interesting challenge of remembering what blocks might be hidden from view. I never got it into working condition last semester, but in just a few short sessions I managed to get it into a playable state.<br><img src=http://www.watchhisbeardgrow.com/res/nucubeinplay.png><br>The camera rotates by holding down the right mouse button and dragging. You can move 360 degrees around the cube, but I opted to remove the ability to change the vertical angle. It added an unnecessary level of complexity to an already overly complex user control system. Speaking of which, the controls to move the blocks around are WASD but they do not move with the camera, so if you move 180 degrees from the original position, you have effectively reversed the controls(Not Fun). I am open to suggestions on how to fix that ugly aspect.<br><img src=http://www.watchhisbeardgrow.com/res/nucubeinplay2.png><br><img src=http://www.watchhisbeardgrow.com/res/nucubeenter.png><br>As you can see, by the opening screen, I could use some nicer graphics, but I am not an artist. Maybe I can get an artist friend to make me a cool logo or something.<br><img src=http://www.watchhisbeardgrow.com/res/nucubeend.png><br>Here is a link to <a href="http://www.watchhisbeardgrow/res/NuCube.zip">everything</a>. Its pretty large because I think the source may also be in the runnable jar. Just Unzip it and open the runnable jar (should work if you have Java installed. If you dont have java installed, then you need to install it anyway, so go to <a href=http://java.com/getjava/>http://java.com/getjava/</a>) - Oh, and lastly, I wanted to say that I used <a href='http://www.jmonkeyengine.com/'>JMonkeyEngine</a>. If you dont already know, its a nice scene graph based 3D game engine. That is all for today I think. Later!]]></description>
</item>
<item>
	<title>Butler Undergraduate Research Convention</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=17</link>
	<description><![CDATA[Yesterday, a co-researcher, a professor and myself(sounds like the start of a bad joke.) went to the Butler Undergraduate Research Convention (URC). One of the things I realized is that it can be quite difficult to present the same poster over and over again. At the beginning of the session, I found myself uninterested in the things I was saying to people. Eight months ago I had been so proud of my work but after already presenting the same poster at the CCSC MW Conference and the Ball State Student Symposium, the third feels blasé. 
<br><br>I had a great experience about half-way through the session which really turned things around for me. Two woman stopped by our poster and after a brief introduction to the material, they were very impressed. They immediately claimed to see the benefit of usability focused software development. It made me remember why i enjoyed the work in the first place.<br><br>Looking back I think the women (or at lease one of them) were there simply to show an interest and make us feel good about ourselves. And it worked. I realize the point of these little conventions, especially these unjudged events, is to simply give us newbies some confidence and introduce us to the research community. Honestly, it is of great benefit. I think it could be of great benefit to give a talk sometime in the near future. Organized public speaking, as opposed to a classroom or off the cuff study session, is somewhat of a plague for me. As soon as I plan out my thoughts and create an outline, I just end up falling all over my words. I much prefer to have a general idea and make up the rest. It feels more honest anyhow.]]></description>
</item>
<item>
	<title>A Successful Study Session</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=16</link>
	<description><![CDATA[So, yesterday, my Algorithm Design and Analysis class had a study session to prepare for our test on Friday(tomorrow). I walked into the session and immediately took the lead. We worked through all of the problems and helped each other learn/relearn the material. It was really neat to see everyone working together and having a good time.<br><br>
I am gonna sound like I am bragging, but I promise that my ego is not the point of this post. Everyone was so thankful for the hard work that I put into answering questions and explaining the concepts that I even received several personal emails thanking me for stepping up and taking the lead.<br><br>I love the feeling of taking a marker or piece of chalk in hand. Then using that instrument to recycle knowledge to others. It was absolutely the most affirming experience I have ever had. If there were any doubt in my mind as to my career decisions, they are gone.<br><br> Ok, so I am stroking my ego A LITTLE, but can assure all that the confidence I now feel will be very important to my future. I am confident in my choices, I am confident in my abilities and I am confident that we are all going to KICK THE CRAP out of our Algorithm's test tomorrow. :)]]></description>
</item>
<item>
	<title>Weight Off My Back</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=15</link>
	<description><![CDATA[I got an email from Purdue University today. It contained some good news. I am so happy I have been accepted into the Purdue University Computer Science Graduate program. The only problem is that the CS department did not offer me any funding, so I will have to look elsewhere. I am still waiting on a response from NWU. If they offer me money to go to school, I will certainly go there.
<br><br>
Wish me luck! If you have any suggestions on where to look for funding, let me know.]]></description>
</item>
<item>
	<title>WordCloud- Per reader request</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=14</link>
	<description><![CDATA[If you go back to the last <a href='./posts.php?id=13'>post</a>, there was some enthusiasm about beer and pizza. I wanted to make my readers happy.
<br>
<img src='./res/beerandpizza.png'><br>
Are we happy now?<br><br>Personally, I dont think this is nearly as interesting.]]></description>
</item>
<item>
	<title>WordCloud</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=13</link>
	<description><![CDATA[I woke up this morning and was a little curious as to what words I was using most in my blog, so I created a word cloud. I thought it might be kinda neat to see how the topics I choose to write about change. So this is the first of what I hope to be a semiannual occurrence. Anyway, without further ado, here is my first word cloud:<br><img src='./res/wordcloud1.png' width=650><br>
I think my favorite part about it, is in the very center, you have computational, education, computer, science. It was exactly as I thought it would be and exactly as I had hoped.<br><br>
I would love to hear what others think when they see this, so leave me a comment!]]></description>
</item>
<item>
	<title>SIGCSE Final Update</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=12</link>
	<description><![CDATA[Ok, so I just realized I never finished my thought process on the SIGCSE conference. Instead of getting into a deep conversation about a topic that I do not know enough about to really say anything meaningful, I think a simple list of the topics that inspired me and got me thinking will do the trick.<br>
<br>
<ul>
<li><strong>Free and Open Source Software(FOSS) in the classroom</strong> - The questions I have are along the lines of "What are the implications of exposing open source software to students?", "What are the risks involved?", "How can an educator be sure the students are not picking up bad practices which exist within the current codebase?"</li>
<li><strong>The Future of the CS1 and CS2 Programming Language</strong> - It appears there are many schools using python as a first language. If this is the case, why? What makes this dynamically typed, interpreted language better than what has been used in the past?</li>
<li><strong>Computing in K12 Education</strong> - Something I wrote about recently is my interest in primary and secondary education. I do not believe my K12 education prepared me for my career as a CS student. School systems need our help to promote analytical and computational thought processes. I have an interest in giving back to my community through the promotion of those skills.</li>
</ul>
<br>
I am sure there is more there, but I need to get to work. Hopefully I can keep these questions on the back burner. I think many of them would make good research questions.<br>
Also, lastly, I just came across this... <a href='http://xkcd.com/554/'>WebComic</a>]]></description>
</item>
<item>
	<title>SIGCSE Update #3</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=11</link>
	<description><![CDATA[Ok, I am on the road back to Indiana and I figured now would be a good time to think about some of the papers that I saw presented and some of the panels I attended.
<br><br>
During one panel on FOSS, their was a question asked about a LAMP(Linux, Apache, MySQL and PHP) project. The question was about the kind of security which was implemented in the system (eg Did it protect from SQL injection, cross site scripting, etc. Did it filter user data which was presented to the browser?). The response and I quote, "I do not know what you are talking about but [non-sequitor response]..." I could not believe my ears. How can you feel good about introducing the LAMP concepts without talking about LAMP specific security issues? If there are professors out there teaching these topics, and not understanding the basic ideas of internet security, then the web is doomed. Period. Now I know at this point someone is thinking, "Ha, listen to this pompous fool. Surely I can break his website and then I will make him look like the jerk who doesn't understand LAMP security." Well, Thats fine with me because I never claimed to have all the answers, and furthermore I am not teaching it to students. And I do have at least a minimal understanding of these topics.
<br><br>
Ok, enough ranting... On to the purpose of this blog.
<br><br>
I did see alot of motivating things today. I thoroughly enjoyed the Nifty Assignments panel. Everyone presented some great assignment ideas and I love that so many of these CS1 assignments are media based. No offense to my CS1 professor, but I wish we could have done some of these Nifty Assignments. [not that text based adventure games are not nifty, because they are! ;)]
<br><br>
I also enjoyed the Present and Future of Computational Thinking panel. It reminds me of the lack of conversation about computational thinking in my K-12 schooling. Not only did my school not offer any programming, but the idea of completeing our work in a computational way was not something we even heard about. At one point in the panel, a speaker mentioned a National Science Foundation(NSF) program in which a graduate student goes to a K-12 school and teaches science. As far as I know, the program does not specify the science topics to discuss and they would welcome the teaching of computer science and computational thinking. This sounds like something I would beinterested in doing and I think I am going to take a further look at this NSF program.
<br><br>
I think that is all I am going to say for now. It is dark and I cant read my notes well enough to know what I want to write about next. For anyone who went to SIGCSE, I hope you all enjoyed yourselves, as I did.]]></description>
</item>
<item>
	<title>SIGCSE Update #2</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=10</link>
	<description><![CDATA[Ok, so day two is done with and I am exhausted. To be honest, I am not sure what I have to say. I have seen so much and I am still trying to digest everything.
<br><br>
Though, I would like to write about the talks I have seen, I am not sure I am ready to do so. Instead, I will write about the fun volunteer activities that I was lucky enough to partake in. We had a pizza party where  I stuffed myself stupid with pizza and salad. Then, they gave away some cool prizes. I did not get any of the cool software but I did get a book on game design using DirectX 10. I am certainly going to do some experimenting. I will have to compare it to my adventures in JMonkey. 
<br><br>
As for now, I am going to a bar next to the hotel. I have been there the other nights and they have great food and drinks. For the beer drinkers out there, and maybe any Chattanooga people, check out <a href='http://www.terminalbrewhouse.com/'>Terminal Brewhouse</a> If I may suggest, go for the Oatmeal Stout. Its a chocolatey, nutty, hearty beer. Maybe, I will be in the right mind to= right about the talks tomorrow. Or maybe I will do some writing on the long trip back to good ol' Indiana! :)]]></description>
</item>
<item>
	<title>SIGCSE Update #1</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=9</link>
	<description><![CDATA[Day one of the (Special Interest Group on Computer Science Education)SIGCSE conference is about halfway through completion and I am not as inspired as I would have hoped to be by this time.
<br><br>
To start, the keynote address was by a long time SIGCSE member/chair, Elliot Koffman. I was not impressed by his talk. It was about as exciting as a Programming Languages history lesson... Mostly because that is exactly what it was. I appreciate knowing about the past of computer science but I can think of a million different things that would make a better keynot address.
<br><br>
The talk I am sitting in on now is Using Open Source Software to Engage Students in Computer Science Education and I am hoping it will impress me. I will have more updates to come, but I had a free moment and thought I could put some of my thoughts on "paper."]]></description>
</item>
<item>
	<title>Woops!</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=8</link>
	<description><![CDATA[Ok, so I dont know if anyone has even noticed, but my account has been down for about a week because I was hosting some illegal mp3s for my little sister and my hosting company found them. I have removed the offending content and I am live once more... In perfect timing as well. I will be at the SIGCSE conference in Chattanooga the next few days and I am excited to write about everything I see. It has been a long time since my last post and I have some catching up to do!
]]></description>
</item>
<item>
	<title>Somethings in the Works</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=7</link>
	<description><![CDATA[I am recently revitalizing my enthusiasm for creating 2D games. I have been playing lots of them and its been making me want to start writing another. Now, I dont have too much time on my hands right now so this project will probably get held over till I get my degree and I have the summer to poke around. <br>
<br>
I will be working with two good friends on the project. One is CS student and the other is an Animation student - both out of BSU. The game is the Animation student's original idea. We played with it last semester as a 3D game but the project came with an ugly set of problems (mainly focused on 3D model formats). We used <a href='http://jmonkeyengine.com/'>JMonkeyEngine</a> to deal with all the heavy lifting which gave us time to experiment with some of the challenges that a first time 3D developer faces. <br>
<br>
I am certainly proud of our work but the game was initially conceptualized for 2D and we want to realize the creators original vision.<br>
<br>
As far as gameplay goes, I am not sure what to expect and I can't really give you anything to wet your whistle(there is just not enough structure defined yet). It will be a tale of adventure and heroics based around the main character (whos name slips my mind but sounds like the name Corey - sorry). <br>
<br>
I think we are planning on using the <a href='http://slick.cokeandcode.com/'>Slick</a> game engine (we have used it before and are looking forward to its familiarity). If you have another suggestion, we are certainly open to anything. XNA came up in some discussion, but I dont think that idea will hold.<br>
<br>
Anyway, we are really looking forward to the summer when we can put alot of time into this. I have to go get ready for work/class or I would keep rambling. Later!]]></description>
</item>
<item>
	<title>Expositum et Placitum</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=6</link>
	<description><![CDATA[I wanted to talk a little about all the cool things going on this semester. As if I have not found myself busy enough, I am excited to have the opportunity to disseminate some of my work and as well as absorb some small bits of academia.
<br><h3>Absorption (Conference)</h3>
In early March I will be volunteering for the <a href="http://www.sigcse.org/">ACM Special Interest Group on Computer Science Education (SIGCSE)</a>. In volunteering, I get to attend the conference for free as well as gain full access to all the great resources (Papers, Workshops, Food!).  It is a fantastic opportunity to meet the top educators in Computer Science. (Its time to mingle and network!). Maybe by then I will have been accepted to a grad school or two and I can meet some of the faculty.<br><br>I love conferences. I get to expose myself to all the neat things people are working on and it can be a great motivator. In general, my brain comes back aching and full of new ideas, it is certainly worth the time I have to take off of classes and work. <br><br><h3>Dissemination (Undergraduate Symposiums)</h3> As I wrap up my undergraduate experience and move on to bigger better things, I find myself reaching towards anything to prepare me to for graduate school. Included in that last effort to gain some experience is my inclusion in the <a href='http://bsu.edu/research/symposium/'>Ball State University Undergraduate Symposium</a> and the <a href='http://butler.edu/urc/'>Butler Undergraduate Research Conference</a>.
I hope to present two projects at each of the symposium and maybe even win some money doing so. If I can show that my work is prize winning or worth being funded, it would be a big win for my resumé. For anyone who knows my work, I will present my poster and work on Usage-Centered Design. I presented this work at the CCSC conference last semester and I believe it was well received but did not win any awards. I look forward to talking a little more about it. <br><br>Since everyone likes pretty things (even when those pretty things aren't functional) I will be presenting my work on the 3D game I built with two other students last semester. Game might be a little overzealous, but that was the intention - even if in the end there was no real game play. Since I have not actually written the abstract, I am not sure from what viewpoint I will be writing the poster. Most likely I will address Advantages and Challenges of Interdisciplinary Undergraduate Research... In fact, that might just make a good title. <br><br> This busy semester is filling up fast, but with a lot of good things.]]></description>
</item>
<item>
	<title>Is C++ a Cruel Joke?</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=5</link>
	<description><![CDATA[A friend sent me this link after a discussion about how I was programmed in C++. You can skip the introduction on the page, just read the "interview" with Stroustrup. It really made me laugh.
<br><br>
<a href='http://www.phy.duke.edu/~rgb/Beowulf/c++_interview/c++_interview.html'>Is C++ a Cruel Joke?</a>
<br><br>Enjoy]]></description>
</item>
<item>
	<title>Faults in CS Curriculum</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=4</link>
	<description><![CDATA[I came acrorss this <a href="http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html">article</a> this morning during my daily coffee/internet/puzzle session.
<br><br>
I am amazed at how well the curriculum he describes fits our CS Curriculum at Ball State University. I was sitting in Algorithms and I thought it might be good to know if Tzeng was planning on using Lisp for all the assignments, so I asked a simple question. "What language do you expect for assignments in this course?" He asked me what I would like to use and I told him I am open to anything.
<br><br>
He said he would not require it, but since I was interested in working in lisp, he would do his examples in lisp and I am welcome to work in lisp. This is great I think. I am excited to have a course where I can get some practice and experience from a real Lisper. This small amount of back story is not what I was reminded of when I started reading the article, but it was the reaction of the students who sat around me. I heard at least 2 out of the 4 other students sitting near by say "I only know Java." I can't believe this. I know this course is labeled 324 which TECHNICALLY comes before Programming Languages(335?) but how can they not be exposed to anything else? I certainly see the benefits of Java as a first language, but dont they want to see what else is out there? I wish there was some way to teach CS 120 and 121 in a way that could include an introdution to other languages just to wet the apitite of these students.
<br><br>
Furthermore, I see a lot of the "Pitfalls" of using Java as a first language(though it was really my second) appearing in myself. What is interesting is that I noticed most of them before I read the article, which is why I wrote an implementation of a Binary Tree. I knew it was something I should have been able to do very easily but I feel that due to the soft professor who made the early, stepping-stone courses (Discrete Math, Data Structures) in our curriculum a waste of my time, I struggled with such a simple data structure. I do not want to implicate any one or point out anyone's personal faults - that is not my intention
<br><br>
My only point is that Ball State cant be the only school with these issues. Having an interest in CS Education and hoping that you share my excitement in the field, I wanted to point out my thoughts. I don't have any comments on Formal Methods but I also don't hear much about them. (probably because the authors are right.)]]></description>
</item>
<item>
	<title>Word Tree Visualization</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=3</link>
	<description><![CDATA[The last couple of days I have spent some time working on a fun project for myself. The idea came to me when I was working on a project for Operating Systems. The project was simply to parse a file and count the number of characters in every word. Essentially, that built built and I just kept growing the idea. First it was just storing the words in a simple C++ vector and counting the number of words, discrete words, and characters. I then sorted the vector they were stored in and printed out all of the words.<br><br>Next, I decided it would be interesting to implement it as a Binary Tree. Easy and fast sorting, and really fast searching. Since it had been so long since I programmed in C++ I decided it was best to build it in Java. Now comes the really fun stuff. I was going to try and implement it in <a href='http://prefuse.org/'>Prefuse</a> but had one heck of a time trying to figure out how to add data to the structures (graphs, trees, tables) without using some silly XML syntax. I decided that in the end it was not worth it. Later, I happened across a graph implementation in Swing.<br><br>I took that approach and ended up(after hours of time) with a pretty neat visualization of WordTree. It works pretty quick. Even the bible gets parsed and displayed in only about 25-30 seconds. Smaller documents like the Declaration of Independence load fast and redraw smoothly. Anyway, it was alot of fun and I thought it would be cool to share.<br><br>Here is the <a href="/WordTree.jar">Jar</a>.<br><br>To run the jar, you will have to supply the text file as a command line argument. Something like this should take care of it: 'java -jar WordTree.jar "C:\Documents and Settings\awhaddad\Desktop\test.txt"'<br><img src='wordtree.jpg' width=600><br>I hope you give it a shot. I think its pretty strong for only about 2 days of work.]]></description>
</item>
<item>
	<title>First of Many Issues With LOP and DSLs</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=2</link>
	<description><![CDATA[<p>I recently started re-reading Martin Ward's paper on <a href="http://www.cse.dmu.ac.uk/%7Emward/martin/papers/middle-out-t.pdf">Language Oriented Programming</a> and the first hitch I ran into was a claim he made about the ease of portability when moving from one implementation to another. Here is a simple example of what I mean and why I have a hard time grasping this claim. Let's say you have a DSL which a user can use to specify the structure of a Graphical User Interface, specifically a Java Swing GUI.</p>
<div id="code">
<p>Window</p>
<p style="padding-left: 30px;">Title My Window</p>
<p style="padding-left: 30px;">Menu</p>
<p style="padding-left: 45px;">Layout Horizontal</p>
<p style="padding-left: 45px;">MenuSection</p>
<p style="padding-left: 60px;">Label Actions</p>
<p style="padding-left: 60px;">MenuSectionItem</p>
<p style="padding-left: 75px;">Label New File...</p>
<p style="padding-left: 75px;">Action NewFile</p>
<p style="padding-left: 60px;">MenuSectionItem</p>
<p style="padding-left: 75px;">Label Open a File</p>
<p style="padding-left: 75px;">Action OpenFile</p>
<p style="padding-left: 60px;">MenuSectionItem</p>
<p style="padding-left: 75px;">Label Save File</p>
<p style="padding-left: 75px;">Action SaveFile</p>
<p style="padding-left: 60px;">MenuSectionItem</p>
<p style="padding-left: 75px;">Label Close</p>
<p style="padding-left: 75px;">Action CloseApplication</p>
<p style="padding-left: 45px;">MenuSection</p>
<p style="padding-left: 60px;">Label Edit</p>
<p style="padding-left: 60px;">MenuSectionItem&nbsp; </p>
<p style="padding-left: 75px;">Value Copy</p>
<p style="padding-left: 75px;">Action CopySelection</p>
<p style="padding-left: 60px;">MenuSectionItem&nbsp; </p>
<p style="padding-left: 75px;">Label Paste</p>
<p style="padding-left: 75px;">Action PasteFromClipboard</p>
<p style="padding-left: 75px;">.</p>
<p style="padding-left: 75px;">.</p>
<p style="padding-left: 75px;">.</p>
<p style="padding-left: 30px;">Panel</p>
<p style="padding-left: 45px;">Layout VerticalBox</p>
<p style="padding-left: 45px;">Label Calculator:</p>
<p style="padding-left: 45px;">TextBox</p>
<p style="padding-left: 60px;">Label CalculatorInput&nbsp; </p>
<p style="padding-left: 60px;">LegalCharacters 1234567890+-/*()</p>
<p style="padding-left: 45px;">Button</p>
<p style="padding-left: 60px;">Value Calculate</p>
<p style="padding-left: 60px;">Action CalculateValue</p>
<p style="padding-left: 45px;">Button</p>
<p style="padding-left: 60px;">Value Reset</p>
<p style="padding-left: 60px;">Action ResetValues</p>
<p style="padding-left: 60px;">.</p>
<p style="padding-left: 60px;">.</p>
<p style="padding-left: 60px;">.</p>
<p style="padding-left: 60px;">Continues...</p>
</div>
<p>Now of course this doesn't make too much sense because a calculator probably would not have a menu bar with those particular actions implemented, but I am tired so deal with it...&nbsp; Anyhow, I think we would all agree that this would be much easier than writing in the Swing API. The syntax is clean and simple. It really only has 3 rules.</p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New lines with 1 string of text are the definition of a new object/container.</p>
<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A line which contains 2 strings defines characteristics of the super-container.</p>
<p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Containers can be nested inside of each other.</p>
<p>&nbsp;</p>
<p>Now what would the Swing implementation look like?</p>
<p>&nbsp;</p>
<div id="code">
<p>JFrame applicationFrame = new JFrame("My Window");</p>
<p>applicationFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p>
<p><br /></p>
<p>JMenuBar applicationMenuBar = new JMenuBar();</p>
<p>JMenu actionsMenu = new JMenu("Actions");</p>
<p>JMenuItem newFileMenuItem = new JMenuItem("New File...");</p>
<p>newFileMenuItem.addActionListener(new ActionListener(){</p>
<p>.</p>
<p>(Action Implementation to Create a New File)</p>
<p>&nbsp;</p>
<p>.</p>
<p>});</p>
<p>actionsMenu.addItem(newFileMenuItem);</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p>(Continued for all Items and All Menus.)</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p>applicationFrame.setJMenuBar(applicationMenuBar);</p>
<p><br /></p>
<p>JPanel calculatorPanel = new JPanel();</p>
<p>calculatorPanel.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));</p>
<p>calculatorPanel.add(new JLabel("Calculator:"));</p>
<p>.</p>
<p>.</p>
<p>.</p>
<p>(Continued for all objects in the Panel)</p>
<p>.</p>
<p>.</p>
<p><span style=""><span style="font-family: courier new,courier;">.</p>
</div>
<p>I don't know about you, but I can safely say I would much rather write a GUI in the DSL I created for designing GUIs, but that was not my initial point. My original point was that Martin Ward states in section 2.1.4 of his paper <a href="http://www.cse.dmu.ac.uk/%7Emward/martin/papers/middle-out-t.pdf">Language Oriented Programming</a>: "In this case only the lowest level language will need to be ported to a different machine or operating system, and this will be a simple task."</p>
<p>Let's say for example that your Swing implementation needs to be ported to C (unfortunately I can't show the implementation because I am not at all &nbsp;experienced in creating GUI applications in C), I can only imagine the ported implementation would be just as difficult to write in C as it was is Swing. Martin Fowler gives a good example of translating a DSL into the low level language in his article <a href="http://martinfowler.com/articles/codeGenDsl.html">Generating Code For DSLs</a>.</p>
<p>I don't have any strong conclusions to make on this topic, I just think maybe I am missing something. If you have some insight, please share!</p>
<p>&nbsp;</p>]]></description>
</item>
<item>
	<title>Language Oriented Programming and DSLs:The Simplest Introduction</title>
	<link>http://www.watchhisbeardgrow.com/posts.php?id=1</link>
	<description><![CDATA[<p>Recently, out of interest and as research I have been doing a  lot of reading on the topic of Language Oriented Programming (LOP) and more  specifically Domain Specific Languages (DSLs). For  those who don't already know, LOP is a term coined by Martin Ward in his <a href="http://www.cse.dmu.ac.uk/%7Emward/martin/papers/middle-out-t.pdf">paper</a> on the subject. Admittedly, the paper was a little over my head the first time I  read it but after perusing more of the literature I feel like I am ready to go  back and take another look. For anyone with any interest in the topic, I would  suggest the same tactic. A quick survey of the internet, your favorite search  engine or blog tracing will certainly land you on the blog of Martin Fowler. In  particular, he has an entire article base on <a href="http://martinfowler.com/bliki/dsl.html">DSLs.</a></p>
<p>On my adventure into this world of growing interest, I have  accumulated a small set of links that I would suggest to everyone with interest  in these topics.</p>
<p>Here is that list:</p>
<ul id=postlist>
<li> <a href="http://martinfowler.com/bliki/dsl.html">Martin  Fowler's Bliki on DSLs</a> servers as a fantastic springboard into the literature. </li>
<li> <a href="http://www.onboard.jetbrains.com/is1/articles/04/10/lop/index.html">Language  Oriented Programming: The Next Programming Paradigm</a> - In particular, pay  attention to the information on Language Oriented Programming in general, and  steer clear of the specifics about creating DSLs in  MPS. Though the information is great, I would not suggest it as part of an  introduction to the material.</li>
<li> <a href="http://jroller.com/rolsen/entry/building_a_dsl_in_ruby">Building a DSL in  Ruby</a> - This tutorial is a great introduction to Internal DSLs in Ruby. I believe it is greatly simplified but, I have  often found that implementing an oversimplified exampled really helps open my  mind to the possibilities.</li>
</ul>
<p>I am really looking forward to delving deeper into these  topics. In particular, I want to take a deeper look at Ruby and Functional  Programming. It's difficult to see the potential of an internal DSL, taking  advantage of the relaxed syntax of Ruby, without having a better understanding  of Functional Programming and the interesting semantics of passing functions  around to create language structures which are uncommon if not impossible in the  Object Oriented Programming Paradigm.</p>
<p>I wanted to make one comment about the industry's interest in  Internal DSLs. Though I see why there is so much hype  about the topic, I wish the idea of taking advantage of a language's syntax to  make understanding code easier was not considered a special focus of the  programming languages community. To me, an Internal DSL is nothing more than  good programming practice. I think it's the responsibility of the programmer to  name functions and variables in a way that best suits the human reader.</p>
<p>I plan on writing an entry specifically about External DSLs so I will refrain from speaking about them for now. I  hope I have influenced you to do some reading on these topics. If you have any  good articles on topics that you think others or myself would find helpful,  please post them for us!</p>]]></description>
</item>
</channel>
</rss>