<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;DUQHQXwyeip7ImA9WxBUGUo.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355</id><updated>2010-03-07T10:55:30.292-05:00</updated><title>Jose M Vidal</title><subtitle type="html">Putting the magic in the machine since 1980.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JoseMVidal" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="josemvidal" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEQGQHs8eip7ImA9WxBVGUs.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-2587493860175000057</id><published>2010-02-23T18:02:00.003-05:00</published><updated>2010-02-23T18:05:21.572-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-23T18:05:21.572-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Learning Java Videos</title><content type="html">Last semester I taught &lt;a href="http://www.csce145.com"&gt;CSCE 145&lt;/a&gt;, our introduction to Java programming class. For that class I created a set of videos that teach the basics of Java programming using Eclipse as an IDE. The videos were very popular with students, especially those really new to programming. So, if you are a student interested in learning to program, go &lt;a href="http://vimeo.com/channels/csce145"&gt;check them out&lt;/a&gt;.&lt;p&gt;

&lt;center&gt;
&lt;object width="450" height="253"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5879969&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=01aef0&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=5879969&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=01aef0&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="450" height="253"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/5879969"&gt;CSCE 145: Chapter 1: Introduction to Java&lt;/a&gt; from &lt;a href="http://vimeo.com/jmvidal"&gt;Jose Vidal&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-2587493860175000057?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/2587493860175000057/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=2587493860175000057" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2587493860175000057?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2587493860175000057?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/02/learning-java-videos.html" title="Learning Java Videos" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkMMRH85fSp7ImA9WxBVFE4.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-2994034002327626346</id><published>2010-02-17T13:14:00.000-05:00</published><updated>2010-02-17T13:14:45.125-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T13:14:45.125-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Current Research Talk</title><content type="html">This Friday at 2:30pm in 300 S. Main B102 I will be given an informal talk about our current research projects for our &lt;a href="http://www.cse.sc.edu/~fenner/csce791/"&gt;CSCE 791 class&lt;/a&gt;. This is open to anyone else who is interested. It will be a long rambling and highly disorganized version of &lt;a href="http://www.jose-vidal.com/2009/11/ongoing-research-projects.html"&gt;my previous 7 minute talk&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-2994034002327626346?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/2994034002327626346/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=2994034002327626346" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2994034002327626346?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2994034002327626346?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/02/current-research-talk.html" title="Current Research Talk" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DkINR3g7eip7ImA9WxNbEUk.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-1098080938042530276</id><published>2009-11-13T14:30:00.083-05:00</published><updated>2009-11-13T15:36:36.602-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-13T15:36:36.602-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Ongoing Research Projects</title><content type="html">Every year our department has 7-minute madness presentations in which we faculty present our ongoing research. It is a great opportunity to hear about all the innovative research going on in our department (especially in the area of multiagent systems, of course :-). The slides from my 7-minute talk are below.
&lt;center&gt;
&lt;iframe src="http://docs.google.com/present/embed?id=dhh5qxv8_912crfj24cj" frameborder="0" width="410" height="342"&gt;&lt;/iframe&gt;
&lt;/center&gt;
&lt;p&gt;For those of you who could not make it, and since I ran out of time after just a couple of slides, I write a bit about each project below.&lt;/p&gt;
&lt;p&gt;
We have a lot of &lt;a href="http://jmvidal.cse.sc.edu/papers/index.html"&gt;papers&lt;/a&gt; published on  &lt;b&gt;distributed combinatorial auctions&lt;/b&gt;, especially on &lt;a href="http://www.jose-vidal.com/2009/07/best-way-to-bid-in-distributed.html"&gt;bidding algorithms for the PAUSE auction&lt;/a&gt;. This work was done with &lt;a href="http://www.cse.sc.edu/~mendoza2/"&gt;Benito Mendoza&lt;/a&gt; who received his PhD in May and is now working at Exxon on multiagent simulations. I continue to work on this topic but with a slightly different focus: viewing these distributed auctions as &lt;b&gt;negotiation networks&lt;/b&gt;.
&lt;/p&gt;&lt;p&gt;
The &lt;b&gt;iCoach&lt;/b&gt; project is with prof. Sara Wilcox from the department of exercise science. Chuck Burris, and undergraduate, has been developing on the Google App Engine a webapp that will send customized SMS messages to users by first gathering information from the user's phone, pedometer, and online information (where he is, via GPS, how much he has moved, via pedomenter or accelerometer, what his plans are, via his google calendar, etc.). There is a lot of information about us on the net, and the new smartphones will give us even more. However, aside from collecting and displaying this information back to the user in a pretty graph, there has been very little research done in to &lt;em&gt;how to use this information to improve our lives&lt;/em&gt;. That is what we study. Our initial system is being designed to monitor, educate, and coach first-time pregnant women. 
&lt;/p&gt;&lt;p&gt;
The &lt;b&gt;wikitheoria&lt;/b&gt; is another Google App Engine webapp we are building, and by "we" I mean Jon Mayhak and Jason Rikard. The project is with prof. Barry Markovsky from the Sociology department and can be summarized as "wikepdia meets stackoverflow for sociologists, with added semantic structure". Our goal is to build a site that will enable and &lt;em&gt;encourage&lt;/em&gt; sociologists to post their models using a common ontology (set of terms with agreed-upon definitions). The common ontology will also be developed on the site. The current site is currently being tested by forcing a graduate class of sociologists to use it.
&lt;/p&gt;&lt;p&gt;
The &lt;b&gt;port simulation&lt;/b&gt; project is very new and its joint work with prof. Nathan Huynh from the department of Civil Engineering. Nathan is an expert in ports and trucking problems. In our initial collaboration we are looking at the problem of how the crane operators in a port should act or cooperate. The job of a crane operator is to pick up those big containers, one at a time, and put them on the trucks as the trucks arrive. The containers can be stacked up so sometimes the crane operators have to do some re-stacking of the containers, which wastes a lot of time. We are building an agent-based simulation of this problem and trying to find best strategies for the operators.
&lt;/p&gt;&lt;p&gt;
Andrew Smith is a new PhD student who has already written a paper on &lt;b&gt;supply chain resiliency&lt;/b&gt;. Using standard models of supply-chain formation we generated sample chains and then tested these topologies for resiliency to single-point attacks. That is, if one node goes down how does that affect the network as a whole. In the paper (not yet published) we present a numerical measure of resiliency and our test results show how it varies given the number of relationship resources (a measure of sociability) and size.
&lt;/p&gt;&lt;p&gt;
Andrew is also continuing his work with Karim Mahrous from Sandia National Labs on &lt;b&gt;media dispersion and influence&lt;/b&gt; as part of his PhD thesis. This is another agent-based modeling project, albeit a much larger one for which we only have to develop small parts of the code, which aims to model how news travels in a social network. The project will cover everything from broadcast media, to multicast media (twitter), to one-on-one via electronic (SMS) or good ol fashioned conversations over lunch.
&lt;/p&gt;&lt;p&gt;
So, if you are a graduate student and find these ideas interesting, you can sign up for my &lt;a href="http://jmvidal.cse.sc.edu/csce782/index.html"&gt;Multiagent Systems class&lt;/a&gt; in the Spring which will cover the basic background knowledge needed to build, and understand, multiagent systems. If you are from a funding agency or company with a few bucks to spare for research, I would &lt;em&gt;love&lt;/em&gt; to hear from you!

&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-1098080938042530276?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/1098080938042530276/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=1098080938042530276" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1098080938042530276?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1098080938042530276?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/11/ongoing-research-projects.html" title="Ongoing Research Projects" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;D0YDQ3k8eCp7ImA9WxNVFk0.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-4277686331306243116</id><published>2009-10-26T20:44:00.002-04:00</published><updated>2009-10-26T20:59:32.770-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-26T20:59:32.770-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Capstone Projects</title><content type="html">A blog post by Joel Spolsky on &lt;a href="http://www.joelonsoftware.com/items/2009/10/26.html"&gt;Capstone projects&lt;/a&gt; complains about how many of the top CS departments do not teach their students how to write large programs or how to work in large teams. Perhaps. 
&lt;p&gt;
Here at the University of South Carolina, I created our &lt;a href="http://jmvidal.cse.sc.edu/csce492/"&gt;CSCE 492&lt;/a&gt; back in 2000 to address these problems. 492 is our capstone software project whose main goals, as I see them, are to:

&lt;ol&gt;
&lt;li&gt;Give the students the experience of working in a large (100 pages of code or more) software project.&lt;/li&gt;

&lt;li&gt;Give them the experience of working in a group.&lt;/li&gt;
&lt;/ol&gt;

Our 492 projects are definitely not the type of project that can be finished in one or two days. They are much more significant than that. Still, on my first few years teaching it I learned that students do tend to postpone work until the last month. Thus, I have established certain guidelines.
&lt;p&gt;
Each group has a &lt;b&gt;weekly meeting with me&lt;/b&gt;. In these meetings they give me their progress report and I keep track of of how much has and has not been achieved. We also set priorities for the next few weeks. Lack of progress is duly reprimanded, as any manager would do.
&lt;p&gt;
At the midterm there is an &lt;b&gt;integration demo&lt;/b&gt;. Modern programs include several number of third-party libraries, from web frameworks to 3D engines, depending on the type of program being built. Students tend to underestimate how long it will take to install apache, mysql, mod_perl, library-X, put it all into svn, and get all that mess of code to say "Hello world" reliably. The integration demo is a proof-of-concept milestone which assures all of us that yes, this can work. After the demo all that is left to do is add all the features.
&lt;p&gt;
Finally, there is the &lt;b&gt;shared code repository&lt;/b&gt; (I use code.google.com). Not only is this a tool that all professionals use, but it also helps me keep track of what is really going on, or not going on, in the project.  Of course, it also helps the group coordinate their activities, as it was designed to.
&lt;p&gt;
So, yes, capstone projects should be an integral part of every Computer department's required curriculum, if the department is interested in creating graduates who can write software.
&lt;p&gt;
Still, I have to admit, it takes a lot of time to manage, advise, and code review 3 to 5 different projects at the same time. That might be the reason other universities either don't do this or leave their students on their own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-4277686331306243116?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/4277686331306243116/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=4277686331306243116" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4277686331306243116?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4277686331306243116?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/10/capstone-projects.html" title="Capstone Projects" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;AkQAQ385fip7ImA9WxNTEko.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-8234704724824335029</id><published>2009-08-14T14:02:00.002-04:00</published><updated>2009-08-14T15:32:22.126-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-14T15:32:22.126-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><title>All Applications will be Web Applications</title><content type="html">&lt;div class="separator" style="clear: both; float: right;"&gt;
&lt;a href="http://3.bp.blogspot.com/_mMuRlDPULDs/SoWiYvsN2xI/AAAAAAAACA8/vQqU64oquXw/s1600-h/board.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mMuRlDPULDs/SoWiYvsN2xI/AAAAAAAACA8/vQqU64oquXw/s320/board.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;
I often mention this in my &lt;a href="http://www.csce242.com/"&gt;classes&lt;/a&gt; and other talks: it is clear that the majority of new applications will be web applications (not all of them, of course, that is just standard headline hyperbole).&lt;/p&gt;

&lt;p&gt;
Jeff Atwood gives &lt;a href="http://www.codinghorror.com/blog/archives/001296.html"&gt;some more reasons&lt;/a&gt; as to why this is happening. Basically, people like web applications because they don't have to install them or worry about what happens when they get a new computer, business like web applications because they don't have to worry about installing their custom software on every PC. We can see old desktop applications, Quicken, being replaced by web versions &lt;a href="http://mint.com/"&gt;Mint&lt;/a&gt; which are better in many ways.&lt;/p&gt;

&lt;p&gt;
But the real draw of web applications lies in the interconnectedness they allow (see the photo above for an example). These applications are also services and provide REST API's for other applications to plug into them. In this way each application is also a programming library (remember DLL's and .so files?) and a database with up to date information. Thus, even the so-called desktop applications of the future will also be web applications in that they will suck down data from the web, like Google Earth. I am still trying to figure out what the proliferation of all these REST APIs and microformats will mean for multiagent systems, but I can't help but feel that this is good news for the field.&lt;/p&gt;

&lt;p&gt;
So, what does this mean for a new student? First of all, &lt;b&gt;it is still programming&lt;/b&gt;. While you might be using a slightly higher-level language, you will still be writing for-loops, recursive functions, and lots of if-then statements. No one has invented a language that can eliminate those. Thus, nothing much changes. One still needs to have solid programming experience and knowledge of algorithms.&lt;/p&gt;

&lt;p&gt;
On the other hand, &lt;b&gt;the architecture for web applications is different&lt;/b&gt; from the standard desktop. In a standard desktop application you write event handlers that run whenever the user clicks on a button. In web applications this becomes more complicated. You can write your JavaScript to handle events from the user, just like in a desktop application, but you also have to deal with the client-server communication (AJAX magic). This raises all sorts of very interesting questions about what activities should be handled in the server versus the client. For many of the current set of applications the decision seems easy (gmail) but it is not as clear for others: should mint.com generate their pie charts server-side or client-side? The decision depends on the user experience you are after as well as the capabilities of the client and server devices and the network that joins them (wired, wireless, reliable, spotty).
&lt;/p&gt;

&lt;p&gt;
It is very exciting to realize that allowing others to use your software is as easy as emailing them the URL, and that they can use your software on their PC, netbook, smartphone, set-top box, kindle, etc. etc.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-8234704724824335029?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/8234704724824335029/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=8234704724824335029" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/8234704724824335029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/8234704724824335029?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/08/all-applications-will-be-web.html" title="All Applications will be Web Applications" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_mMuRlDPULDs/SoWiYvsN2xI/AAAAAAAACA8/vQqU64oquXw/s72-c/board.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;Ck8ESHoycSp7ImA9WxJVFk4.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-6020103877150600846</id><published>2009-07-03T10:05:00.002-04:00</published><updated>2009-07-03T10:20:09.499-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-03T10:20:09.499-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Best Way to Bid in a Distributed Combinatorial Auction?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_mMuRlDPULDs/Sk4I97s2GCI/AAAAAAAAB-Y/fAvGS_QaGJw/s1600-h/ca.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mMuRlDPULDs/Sk4I97s2GCI/AAAAAAAAB-Y/fAvGS_QaGJw/s200/ca.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;During the last year Benito Mendoza examined how different bidding strategies (really, algorithms) fare under the PAUSE auction. I would like to go over these results but first, some background.&lt;/p&gt;
&lt;p&gt;
A &lt;a href="http://en.wikipedia.org/wiki/Combinatorial_auction"&gt;combinatorial auction&lt;/a&gt; is one where there are many items for sale at the same time and bidders can place bids on multiple items. For example, a bid might be &lt;span style="font-style: italic;"&gt;"I'll pay $10 for items A,B, and X." &lt;/span&gt; These bids are then sent to the auctioneer which must find the set of winning bids that maximize revenue—&amp;ndash; problem that is NP-complete. Check out this &lt;a href="http://jmvidal.cse.sc.edu/netlogomas/ca.html"&gt;visualization of a combinatorial auction&lt;/a&gt; that I developed for class.
&lt;/p&gt;&lt;p&gt;
In the &lt;a href="http://jmvidal.cse.sc.edu/lib/kelly00a.html"&gt;PAUSE auction&lt;/a&gt; there is no centralized auctioneer. The auction instead proceeds in steps. At the first step we hold parallel English auctions for each item. That is, everyone bids on every item individually. Thus, at the end we will have a (temporary) winning bid for each item. At the second set there is one auction but now all bidders must place bid-sets that cover all items in the auction, but they can use bids that the other agents placed before. Also, they can place bids that cover two items. For example, an agent might place a bid-set that includes a bid from itself for items A, and B, as well as bids, from other agents, for items C, D, and F. By restricting the agents to place complete bid-sets we are, in effect, forcing the bidding agents to solve the winner-determination problem using the existing public bids.
&lt;/p&gt;&lt;p&gt;
Well, sort of, because bidders are selfish they will want to place the bid that wins them the most items, for the least money (the bid-set that maximizes their utility). Two years ago we developed the &lt;a href="http://jmvidal.cse.sc.edu/lib/mendoza07a.html"&gt;PAUSEBID&lt;/a&gt; algorithm which a bidder can use to find the myopically-optimal bid-set: the bid-set that, if the auction were to end at that moment, maximizes the bidders's utility. The problem is that since this is an NP-complete problem PAUSEBID cannot be used in auction with more than about a dozen items. Thus, the next year we developed &lt;a href="http://jmvidal.cse.sc.edu/lib/mendoza08a.html"&gt;approximate bidding algorithms&lt;/a&gt; which have linear running time (way faster). This was good.
&lt;/p&gt;&lt;p&gt;
But, it raised another question: if the other bidders are using PAUSEBID, should I also use PAUSEBID, and spend all time computing, or should I use GREEDYPAUSEBID and save all that computational time at the risk of getting a lower utility? That is, should I think a lot about my next bid or just kinda wing it? The surprising results, which have to yet been published except on &lt;a href="http://www.jose-vidal.com/2009/06/mendoza-phd-in-bidding-algorithms.html"&gt;Benito's thesis&lt;/a&gt;, are that &lt;b&gt;it is better for all bidders to use GREEDYPAUSEBID&lt;/b&gt;. That is, if all the other agents are using PAUSEBID, thus picking their bids optimally, then I can actually expect slightly higher utility by bidding with a simple greedy algorithm (GREEDYPAUSEBID). Also, in the world where all the agents are using GREEDYPAUSEBID the bidders get higher utility than in the world where they are all using PAUSEBID. What happens is that prices drop down a bit and thus all the bidders (buyers) win a bit, of course, the sellers lose.
&lt;/p&gt;&lt;p&gt;
Even more interesting, we also found that in the world where all the other bidders are using GREEDYPAUSEBID, my best strategy is to also use GREEDYPAUSEBID. Again, I would actually lose utility by trying to myopically-optimize my bidding strategy.  Putting all these together we find that the population where all bidders use GREEDYPAUSEBID is stable (is a Nash equilbrium).
&lt;/p&gt;&lt;p&gt;
These results go against our initial intuitions. But, we must remember that an auction with lazy bidders will result in a lower sale price which benefits, on average, all bidders. Also, a myopically-optimal bidder will reveal utility gains to the other lazy bidders which they will then exploit, thus raising the final price.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-6020103877150600846?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/6020103877150600846/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=6020103877150600846" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6020103877150600846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6020103877150600846?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/07/best-way-to-bid-in-distributed.html" title="Best Way to Bid in a Distributed Combinatorial Auction?" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_mMuRlDPULDs/Sk4I97s2GCI/AAAAAAAAB-Y/fAvGS_QaGJw/s72-c/ca.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;AkUARXs_fCp7ImA9WxJVFU4.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-1911489223082175636</id><published>2009-06-16T10:26:00.004-04:00</published><updated>2009-07-02T08:37:24.544-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-02T08:37:24.544-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Mendoza PhD in Bidding Algorithms</title><content type="html">&lt;p&gt;
Last month &lt;a href="http://www.cse.sc.edu/~mendoza2/"&gt;Benito Mendoza&lt;/a&gt; successfully defended his thesis. His research looks at the problems in establishing a distributed combinatorial auction, without the use of a central auctioneer, where the bidders have an incentive to participate and help find the best bidset.
&lt;/p&gt;

&lt;p&gt;I believe this work lays the foundation for future distributed resource allocation protocols. That is, currently companies and consumers engage in rather simple one-to-one sequential negotiations with each other: you negotiate with one car dealer, then another, then make a decision. These lead to sub-optimal allocations (translation: there was another solution where everyone in the world is happier than in the solution we ended up at). Now that all business is done on the Internet we can build sophisticated negotiation agents that will arrive at better global solutions by using the distributed resource allocation protocols that we are working on. But first, we must ensure that these protocols do find better solutions and are incentive-compatible and fair, and people want to use them (people are not always rational).
&lt;/p&gt; 
&lt;p&gt;Read his thesis for more details:&lt;/p&gt; 
&lt;ul&gt;
&lt;li id="mendoza09a"&gt;Benito Mendoza Garcia. &lt;a href="http://jmvidal.cse.sc.edu/lib/mendoza09a.html"&gt;Economic and Computationally Efficient Algorithms for Bidding in a Distributed Combinatorial Auction&lt;/a&gt;.PhD Thesis. University of South Carolina, 2009.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Benito has accepted a position at Exxon doing agent-based modelling.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-1911489223082175636?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/1911489223082175636/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=1911489223082175636" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1911489223082175636?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1911489223082175636?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/06/mendoza-phd-in-bidding-algorithms.html" title="Mendoza PhD in Bidding Algorithms" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEcAQ3oycCp7ImA9WxJVFUk.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-6027607602133964910</id><published>2009-06-09T20:20:00.005-04:00</published><updated>2009-07-02T09:40:42.498-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-02T09:40:42.498-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>How to Email Rows from a Google Spreadsheet</title><content type="html">&lt;p&gt;I have been keeping the grades from the various classes I teach in a &lt;a href="http://spreadsheets.google.com"&gt;google spreadsheet&lt;/a&gt; for almost two years now. It works great because I can share them with the TA or grader (back when we had TAs, before the budget cuts) while google docs maintains all the past revisions so I can always revert back if any one of us makes a mistake (always me, it turns out).&lt;/p&gt;

&lt;p&gt;The only problem arises when I have to give the students their grades. Since the University has banned us from posting the grades outside our door, as my professors used to do, I have to email each row of the spreadsheet individually to each student. Luckily, google provides a &lt;a href="http://code.google.com/apis/spreadsheets/overview.html"&gt;spreadsheet API&lt;/a&gt; so I could write a short script that does just that.&lt;/p&gt;

&lt;p&gt;The script below will email each row to the person whose email appears on the column named 'email', as shown in &lt;a href="http://spreadsheets.google.com/ccc?key=rNGx1RhhRs8Iidr2G0mSGvg"&gt;this sample spreadsheet&lt;/a&gt;. You will need python as well as the &lt;a href="http://code.google.com/p/gdata-python-client/downloads/list"&gt;python gdata libraries&lt;/a&gt; installed for this to work. Installing them is just a matter of downloading and unzipping them in the same directory as the &lt;code&gt;email-rows&lt;/code&gt; program below. Before you use it you will also need to change the &lt;em&gt;sender&lt;/em&gt; and &lt;em&gt;spreadSheetName&lt;/em&gt; to be your gmail username and the name of the spreadsheet you are using, respectively.&lt;/p&gt;

    &lt;pre&gt;
&lt;span class="comment"&gt;#!/usr/bin/python
# email-rows
#by
#jmvidal
#
#Emails every row from a google spreadsheet to the email address in that row.
#The spreadsheet must have a first row with a cell with 'email' in it.
&lt;/span&gt;
&lt;span class="keyword"&gt;import&lt;/span&gt; gdata.spreadsheet.text_db
&lt;span class="keyword"&gt;import&lt;/span&gt; getpass
&lt;span class="keyword"&gt;import&lt;/span&gt; atom
&lt;span class="keyword"&gt;import&lt;/span&gt; smtplib
&lt;span class="keyword"&gt;import&lt;/span&gt; time

&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;smtpLogin&lt;/span&gt;(password):
    """&lt;span class="string"&gt;Login to the SMTP server. I'm assuming the smtp server is gmail&lt;/span&gt;"""
    &lt;span class="keyword"&gt;global&lt;/span&gt; smtpServer
    smtpServer = smtplib.SMTP("&lt;span class="string"&gt;smtp.gmail.com&lt;/span&gt;",587)
    smtpServer.ehlo()
    smtpServer.starttls()
    smtpServer.ehlo()
    smtpServer.login(sender, password)

&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;sendMessage&lt;/span&gt;(to,subject,body):
    headers = "&lt;span class="string"&gt;From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n&lt;/span&gt;" % (sender, to, subject)
    message = headers + body
    &lt;span class="keyword"&gt;print&lt;/span&gt; message + "&lt;span class="string"&gt;\n===================================\n&lt;/span&gt;"
    &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; testing:
        smtpServer.sendmail(sender, to, message)
    time.sleep(1) &lt;span class="comment"&gt;#so gmail won't ban me as a spammer
&lt;/span&gt;
&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="function-name"&gt;emailRows&lt;/span&gt;(spreadSheetName, workSheetName):
    password = getpass.getpass()
    smtpLogin(password)
    client = gdata.spreadsheet.text_db.DatabaseClient(sender,password)
    db = client.GetDatabases(name=spreadSheetName)
    table = db[0].GetTables(name=workSheetName)[0]
    rows = table.GetRecords(1,1000)
    subject = spreadSheetName + '&lt;span class="string"&gt; grades&lt;/span&gt;'
    table.LookupFields() &lt;span class="comment"&gt;#populate table.fields
&lt;/span&gt;
    &lt;span class="keyword"&gt;for&lt;/span&gt; s &lt;span class="keyword"&gt;in&lt;/span&gt; rows:
        &lt;span class="keyword"&gt;if&lt;/span&gt; s.content['&lt;span class="string"&gt;email&lt;/span&gt;']  &lt;span class="keyword"&gt;and&lt;/span&gt; s.content['&lt;span class="string"&gt;email&lt;/span&gt;'] != '':
            body = '&lt;span class="string"&gt;Your grades are:\n\n&lt;/span&gt;'
            &lt;span class="keyword"&gt;for&lt;/span&gt; key &lt;span class="keyword"&gt;in&lt;/span&gt; table.fields:
                &lt;span class="keyword"&gt;if&lt;/span&gt; key == '&lt;span class="string"&gt;email&lt;/span&gt;' &lt;span class="keyword"&gt;or&lt;/span&gt; key == '&lt;span class="string"&gt;name&lt;/span&gt;' &lt;span class="keyword"&gt;or&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; s.content[key]:
                    &lt;span class="keyword"&gt;continue&lt;/span&gt;
                body += key + '&lt;span class="string"&gt;\t&lt;/span&gt;' + s.content[key] + '&lt;span class="string"&gt;\n&lt;/span&gt;' 
            body += '&lt;span class="string"&gt;\nJose\n&lt;/span&gt;'
            sendMessage(s.content['&lt;span class="string"&gt;email&lt;/span&gt;'],subject,body)

testing = &lt;span class="py-pseudo-keyword"&gt;False&lt;/span&gt; &lt;span class="comment"&gt;#if testing is true then we don't send the emails, just print them.
&lt;/span&gt;sender = "&lt;span class="string"&gt;username@gmail.com&lt;/span&gt;" &lt;span class="comment"&gt;#your gmail address
&lt;/span&gt;
emailRows(spreadSheetName='&lt;span class="string"&gt;Gdata 101&lt;/span&gt;', workSheetName='&lt;span class="string"&gt;Sheet1&lt;/span&gt;')
&lt;/pre&gt;

&lt;p&gt;
If you like the idea but don't feel like running your own code then wait around here for a bit. I am working on turning this script into a web application so anyone can run it from the web.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-6027607602133964910?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/6027607602133964910/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=6027607602133964910" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6027607602133964910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6027607602133964910?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/06/how-to-email-rows-from-google.html" title="How to Email Rows from a Google Spreadsheet" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C0MDQXw-eyp7ImA9WxJREU4.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-7457777780399521529</id><published>2009-05-12T08:31:00.000-04:00</published><updated>2009-05-12T08:31:10.253-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-12T08:31:10.253-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Screencasting is Better than Lecturing</title><content type="html">Many years ago when I was an undergraduate, in the late 80's, I watched many of my lectures on the TV in our dorm room. Like many other schools at the time, MIT had its own cable channels that it delivered to the dorms. For several of the large classes there would be the standard lecture one could attend in person, but also a second lecture, by a second professor, that was designed solely for the camera. This TV lecture was filmed by a camera that was fixed to the ceiling pointing down to a pad of paper on which the prof. wrote. All we could see was his hand writing on the piece of paper, with occasional cuts to a head shot of him. The TV lectures then played on a continuous loop, 24/7, on the various cable channels. They were very popular with students. I even vaguely remember some drinking games constructed around them. They were the original version of the &lt;a href="http://ocw.mit.edu/"&gt;MIT Open Courseware&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Flash forward to the present and now we all can afford the technology to do even better. Thus, this last semester I decided to use online screencasts instead of real world lectures in my &lt;a href="http://www.csce242.com"&gt;242&lt;/a&gt; (web applications) class, you can &lt;a href="http://www.csce242.com/search/label/lecture"&gt;see the screencasts here&lt;/a&gt;. I followed a now somewhat established model of having the students see the lectures at home and then class consisted of hands-on exercises. I was then able to provide each student with one-on-one help in doing the exercises (these exercises were not quizes and I provided as much help as needed to get it done). This model works very well. Of course, it probably only works with small classes. I had 9 students in the class.&lt;br /&gt;
&lt;br /&gt;
The feedback I received from the students was positive. Some of the main lessons I learned are&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Students that already know most of the material did not watch the videos, instead they read the slides and other material I provided. These are probably the same students who would show up to class and spend all their time facebooking or somesuch. So, I think I saved them some time.&lt;/li&gt;

&lt;li&gt;The rest of the students do watch the videos and find them useful. Students new to the material will go back and re-watch parts. They all really love the fact that they can watch at any time.&lt;/li&gt;

&lt;li&gt;Having in-class exercises is critical as they tell me exactly how much each student knows and they drive home the message that you cannot learn how to program by watching a lecture: you have to practice. Without these exercises it is likely some students would have waited until the last day before a homework is due to practice, at which point it is impossible to get the homework done so they would have copied it. This would just increase the &lt;a href="http://www.jose-vidal.com/2008/12/simple-programming-questions-reveal-lot.html"&gt;number of students who cannot program&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;On the technical side, I used &lt;a href="http://www.techsmith.com/camtasia.asp"&gt;Camtasia&lt;/a&gt; ($299, free trial) to record the lectures and posted them to &lt;a href="http://www.vimeo.com"&gt;vimeo&lt;/a&gt;. I learned that (a) I have to eliminate the background buzzzz noise one always gets when recording as it gets really annoying (Camtasia lets me do this by pressing a button) (b) programming screencasts have to be in HD (1280x720) as regular resolution makes it really hard to see the text, only vimeo let me host HD videos at a reasonable price ($60/year).&lt;/li&gt;

&lt;li&gt;I also bought the &lt;a href="http://www.amazon.com/gp/product/B000V9T2JA?ie=UTF8&amp;tag=multiagentcom&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B000V9T2JA"&gt;Bamboo Pen Tablet&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=multiagentcom&amp;l=as2&amp;o=1&amp;a=B000V9T2JA" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; so I could freestyle draw on the slides. This worked fairly well, but my handwriting is even worse on the videos than in real life because I have not gotten used to writing on the pad while looking at the screen. Still, I think it helped for explaining some ideas.&lt;/li&gt;

&lt;/ol&gt;&lt;br /&gt;
Screencasting is better than lectures in that it allows students to proceed at their own pace. This is a significant advantage in CSE where we have such a large variance in the skillset of students. Still, it should be paired with even more one-on-one student contact. In effect, the teacher (or TAs, if you have them) becomes a tutor for every student in class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-7457777780399521529?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/7457777780399521529/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=7457777780399521529" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7457777780399521529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7457777780399521529?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/05/screencasting-is-better-than-lecturing.html" title="Screencasting is Better than Lecturing" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkcAQ3Y6fyp7ImA9WxVUE0U.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-3576099705898970533</id><published>2009-03-06T08:44:00.005-05:00</published><updated>2009-03-18T08:40:42.817-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T08:40:42.817-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><title>The Functional Web</title><content type="html">&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 212px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Resttriangle.svg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/8/89/Resttriangle.svg/202px-Resttriangle.svg.png" alt="REST Triangle of nouns, verbs, and content types." style="border: medium none ; display: block;" height="113" width="202"&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt; REST triangle of nouns, verbs, and content types.&lt;/p&gt;
&lt;p&gt;
There is a new short article by Steve Vinosky introducing his new (really, re-named) column: &lt;a href="http://doi.ieeecomputersociety.org/10.1109/MIC.2009.49"&gt;Welcome to the Functional Web&lt;/a&gt;. The new column acknowledges the domination of the new distributed (web) programming paradigms. As as note of background, I have been reading Steve for many years and I can attest that he knows what he is talking about. He is not one the many &lt;a href="http://www.joelonsoftware.com/articles/fog0000000018.html"&gt;architecture astronauts&lt;/a&gt; that so often publish on academic journals. Steve actually builds systems. He knows what the real problems are, and often provides realistic solutions.
&lt;/p&gt;
&lt;p&gt;
In this article he tells how after years of building distributed applications using Java, C++, and middleware technologies (SOAP, WSDL, CORBA, etc.) he has decided that a much better approach is to use functional programming languages (Erlang, Ruby, JavaScript) and &lt;a href="http://en.wikipedia.org/wiki/REST"&gt;REST&lt;/a&gt;ful services:
&lt;/p&gt;&lt;blockquote&gt;
After pondering this problem for years, I finally concluded that our efforts were ultimately most impeded by the programming languages we chose. C++ and Java affected how we thought about problems, as well as the shapes of the solutions we came up with, far more deeply than I believe any of us realized. Add to that the verbosity and ceremony of these languages, and the net result is that we wrote, debugged, maintained, and extended a significant amount of code that wasn’t directly helping us get to our ultimate goal. We were fundamentally blocked by our inability to change our chosen programming languages into vehicles for application distribution &lt;/blockquote&gt; 
&lt;p&gt;
This is a very exciting time for those of us who are interested in multiagent and distributed programming. We are now seeing an explosion of REST services. You can barely browse the web without tripping on yet another REST API. There is a lot of data, there is a lot of functionality, there is a lot of &lt;em&gt;possibility&lt;/em&gt;: how do we discover and create mashups automatically? how do we make it easy for programmers to integrate these various we services? how do we use this distributed data about individuals to create new services? emergent services?
&lt;/p&gt;
&lt;p&gt;
In any case, I look forward to his upcoming columns, and his &lt;a href="http://steve.vinoski.net/blog/"&gt;blog posts&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: Here are his &lt;a href="http://qconlondon.com/london-2009/file?path=/qcon-london-2009/slides/SteveVinoski_RPCAndItsOffspringConvenientYetFundamentallyFlawed.pdf"&gt;presentation slides&lt;/a&gt; from a talk he gave on the history of RPC and why industry has moved on.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-3576099705898970533?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/3576099705898970533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=3576099705898970533" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3576099705898970533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3576099705898970533?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2009/03/functional-web.html" title="The Functional Web" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;A0MFQH8zfyp7ImA9WxRaF0o.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-6959991299506799424</id><published>2008-12-20T08:14:00.003-05:00</published><updated>2008-12-20T08:23:31.187-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-20T08:23:31.187-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Multiagent Security</title><content type="html">&lt;p&gt;I was recently intervied by Mark Ingebretsen from &lt;em&gt;IEEE Intelligent Systems&lt;/em&gt; about multiagent security, on which I did &lt;a href="http://jmvidal.cse.sc.edu/lib/peddireddy03a.html"&gt;some work&lt;/a&gt; a few years ago. I don't know if my questions will appear on a future issue or not so I am posting my answers here.
&lt;/p&gt;
&lt;p&gt;
Before I answer these questions I want to explain what I mean by a
multiagent system and how I envision the future of security using
multiagent systems.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/jmvidal/3121899925/" title="Prototype Architecture by Jose Vidal, on Flickr"&gt;&lt;img style="float:right" src="http://farm4.static.flickr.com/3205/3121899925_e198966fc9_m.jpg" width="240" height="180" alt="Prototype Architecture" /&gt;&lt;/a&gt;
When designing a multiagent system what we actually build is
an interaction &lt;b&gt;protocol&lt;/b&gt; which then dictates the agents'
&lt;b&gt;strategies&lt;/b&gt;. For example, I consider bittorrent to be the most
successful multiagent system currently deployed. Bittorrent consists
of an interaction protocol and a number of clients written anyone who
wants to. Of course, the agents in bittorrent (the clients) are
human/machine hybrids. The users get to make many decisions such as
which files to upload and download, how long to seed a connection, how
to limit bandwidth, etc. In a pure machine-only multiagent system all
those decisions would be made by the software. I don't think we will
want many machine-only multiagent systems, most will be hybrids.

&lt;/p&gt;&lt;p&gt; In the case of a security multiagent system, I envision an
open system where agents act like sensors in a distributed sensor
network and publish or relay important information to each other. That
is the first deployment step will be &lt;b&gt;sensing&lt;/b&gt;. Once we get that
working we can start thinking about having the agents act on that
information: shutting down rogue PCs, dropping packets, filtering
certain protocols, applying patches, etc. That is, the second
deployment step will be &lt;b&gt;acting&lt;/b&gt;. Of course, as we give the
agents more and more capabilities we need to prepare for the
possibility that some agents might start taking actions against the
system.


&lt;/p&gt;&lt;p&gt; &lt;em&gt;Are multi-agent systems best used within a single
organization's computer network or can they function as effectively if
they reside on multiple connected networks? Similarly, should
multi-agent systems be allowed to spread freely throughout the
Internet (e.g. via voluntary downloads) or is it important that their
propagation be strictly controlled?&lt;/em&gt; 

&lt;/p&gt;&lt;p&gt; The best way for multiagent security to be effective is by
having one world-wide multiagent security protocol. Organizations
would be free to choose to participate or not and there would be many
different levels of participation. For example, at its simplest a
company could offer a REST page with data on the security status of
its internal network. The data on this page could be more detailed for
a local connection than for outside connections, in case the owners
are concerned about privacy. The data would be used by agents on each
machine, whether local or remote, to detect and stop security
threats. The same REST interface might then be extended to allow
outside parties to make reports or requests. For example, an outside
agent might ask another one to shut down a particular connection
coming from its domain because it believes it to be a DoS
attack.&lt;/p&gt;&lt;p&gt;

Thus, I don't see agents &amp;ldquo;spreading&amp;rdquo; throughout the
Internet. Instead, the protocol will be freely available and
organizations will decide which parts of it to implement. Each
organization must decide what information to make public, how to use
information from others, and how to handle outside requests. The
growth of the system is dictated by the individual desires of the
participants.
&lt;/p&gt;&lt;p&gt;

&lt;em&gt;Have multi-agent systems evolved to the extent that they can take
collective action to actually halt a network threat? If the answer is
yes, what sort of actions do they take? If no, is this a viable goal
that we can expect to see implemented at some point.&lt;/em&gt;
&lt;/p&gt;&lt;p&gt;

I am unaware of any deployed systems that take autonomous action based
on aggregate data, but there is no technical reason why these cannot
exist. One problem obtaining the system administrators'
trust. However, I do expect that as technology matures and research
prototypes demonstrate their capabilities we will see more autonomous
security systems.&lt;/p&gt;&lt;p&gt;

&lt;em&gt;What are the dangers and possible consequences that might occur if
the agents were to misidentify a legitimate communication as a threat? 
Could the result be a serious slowing of network traffic?&lt;/em&gt;

&lt;/p&gt;&lt;p&gt; That is exactly the type of problem one must keep in mind when
designing an interaction protocol. The simplest way to minimize the
threat of error is to minimize the agents' capabilities: if they can't
do much then they can't do much damage. As we start giving them more
capabilities, such as shutting down computers and networks, the threat
of misuse becomes real. At this point we start looking at human
management of the multiagent system. That is, the agents should
present the system administrator with their case for why they want to
perform a given action but only the administrator's password would
allow the system to take the action. Note that this administrator only
has control over his organization's agents.  &lt;/p&gt;&lt;p&gt;

&lt;em&gt;Are there provisions built in allowing some sort of universal
over-ride of the agents' collective actions? If so, who should have
the authority to halt actions by the agents?&lt;/em&gt;

&lt;/p&gt;&lt;p&gt; A universal override is a bad idea as it becomes a target for
abuse. Notice that there is no universal override for the Internet or
the web. I consider this a feature. In open multiagent systems we
strive to distribute power, that is, to minimize the power of the most
powerful agent in the system. In this way we also minimize the
possibility of a catastrophe, either planned or accidental. A
universal over-ride goes against these design guidelines.

&lt;/p&gt;&lt;p&gt;
&lt;em&gt;Is there any danger that the agents themselves might be co-opted
by a clever hacker and used to undermine a network?&lt;/em&gt;

&lt;/p&gt;&lt;p&gt; Yes, individual agents can always be co-opted, that is the
reality for every engineered product. But, a correctly designed
protocol would have taken into account the possibility of rogue agents
so their impact should be minimal. Also, a good system minimizes the
power of the most powerful agent so a few compromised agents should
not present too much of a problem.

&lt;/p&gt;&lt;p&gt;
&lt;em&gt;Are the agents trained? If so, how? Through simulations of network
activity incorporating known past threats? Or is it better to allow
the agents to monitor actual network activity?&lt;/em&gt;

&lt;/p&gt;&lt;p&gt; There is ongoing work on applying machine learning techniques
to network activity in order to detect what is normal versus what is
abnormal behavior: like an immune system. I believe that work shows a
lot of promise, especially once we let these agents communicate with
each other since they could then share local information in order to
get a global view of an ongoing threat. For example, if an agent
detects an abnormally high set of packets coming from another domain
it could tell an agent on that domain, thereby possibly alerting him
to a security problem within its network.

&lt;/p&gt;&lt;p&gt;
&lt;em&gt;What are some of the new developments in this area that you see as
particularly important?&lt;/em&gt;

&lt;/p&gt;&lt;p&gt;The growth of semantic web technologies&amp;mdash;semantic markup
languages, inference engines, and web services&amp;mdash;will greatly help
speedup the adoption of open multiagent systems, such as the
envisioned world-wide multiagent security protocol.

&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-6959991299506799424?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/6959991299506799424/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=6959991299506799424" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6959991299506799424?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6959991299506799424?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/12/multiagent-security.html" title="Multiagent Security" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;A0cDQH09eyp7ImA9WxRbGEs.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-3697063554461735659</id><published>2008-12-04T15:19:00.009-05:00</published><updated>2008-12-09T19:31:11.363-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-09T19:31:11.363-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Simple Programming Questions Reveal a Lot</title><content type="html">&lt;p&gt;This semester I am again teaching our Software Engineering Lab class. This is a senior-level class where we form groups of 4-5 students and develop a large software project. This semester I asked the students to write short programs on the whiteboard. I added this requirement because, after talking to our recent graduates and scouring the blogs, it is clear that nearly all employers are now using these questions to weed out possible candidates. It is not just Microsoft and Google anymore, it is also the small local insurance processing companies, etc. Everyone is asking programming questions, and I can see why.&lt;/p&gt;
&lt;a href="http://www.flickr.com/photos/jmvidal/3086188965/" title="FizzBuzz by Jose Vidal, on Flickr"&gt;&lt;img style="float:right" src="http://farm4.static.flickr.com/3023/3086188965_ec45eaa07d_m.jpg" width="180" height="240" alt="FizzBuzz" /&gt;&lt;/a&gt;
&lt;p&gt;I wanted to use really simple questions that real employers use, so I went to stackoverflow.com and &lt;a href="http://stackoverflow.com/questions/135868/whiteboard-interview-questions"&gt;asked them to give me some questions&lt;/a&gt;. They pointed out some simple popular questions like, among others, implementing the following:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;int strstr(String a, String b)&lt;/code&gt;: return the first location of string &lt;code&gt;a&lt;/code&gt; within string &lt;code&gt;b&lt;/code&gt;, or -1 if it does not appear.&lt;/li&gt;

&lt;li&gt;&lt;code&gt;String trim(String a)&lt;/code&gt;: return a string that is like &lt;code&gt;a&lt;/code&gt; but eliminates any spaces before and after &lt;code&gt;a&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;&lt;code&gt;String strtok(Stream a)&lt;/code&gt;: each time it is called it returns the next token in &lt;code&gt;a&lt;/code&gt;, where a tokens are separated by spaces.&lt;/li&gt;

&lt;li&gt;&lt;code&gt;boolean isprime(int a)&lt;/code&gt;: return &lt;code&gt;true&lt;/code&gt; if &lt;code&gt;a&lt;/code&gt; is a prime number, false otherwise.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt; I also came across the &lt;a href="http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/"&gt;fizzbuzz&lt;/a&gt; question, &lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;repeatedly&lt;/a&gt;. The question is:
&lt;blockquote&gt;
Write a program that prints the numbers from 1 to 100. But for multiples of three print &amp;ldquo;Fizz&amp;rdquo; instead of the number and for the multiples of five print &amp;ldquo;Buzz&amp;rdquo;. For numbers which are multiples of both three and five print &amp;ldquo;FizzBuzz&amp;rdquo;. 
&lt;/blockquote&gt;
The author claims that more than half of the people he interviews for programming position are unable to write this program, other commenters report seeing similar numbers. I also used this question for some students.
&lt;/p&gt;
&lt;p&gt; Luckily, my students performed better than that. However, not everyone was able to tackle these programs with complete ease, as I would have wanted. I found that surprising, especially since we require large amounts of programming in our undergraduate curriculum. Note that I do not require a perfect bug-free implementation. For these questions a solid answer simply has to implement most of the logic needed to solve the problem, even if the final program breaks for some boundary cases.
&lt;/p&gt;
&lt;p&gt;On the other hand, I also noted that all the students know the basic programming constructs. They know about strings, arrays, for loops, etc. The difficulty was &lt;b&gt;always&lt;/b&gt; in the transformation from the English description to code. That is, the problem lies in algorithm generation.
&lt;/p&gt;
&lt;p&gt;At this point some might look to studies, such as &lt;a href="http://www.cs.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf"&gt;The camel has two humps&lt;/a&gt; and assume that there is some gene that gives some people the ability to program. I don't believe that is correct. Current research in psychology and neuroscience shows that the vast majority of abilities are learned, not inherited (what a surprise!). That is, I believe people who are good at programming become so because &lt;b&gt;they practice&lt;/b&gt;. My hypothesis is that some students manage to take all the classes but end up doing little programming. This is easy to do since most programming experience comes from homework problems which are extremely easy to copy.&lt;/p&gt;
&lt;p&gt;I remember that when I was an undergraduate a study revealed that about 37% of MIT's undergraduate students taking a certain introductory-level programming class had &lt;a href="http://tech.mit.edu/V110/N28/100.28n.html"&gt;copied some of their homework programs&lt;/a&gt;. Copying homework programs, or doing no programming in a group project, is an unfortunately common occurrence even in the best schools.&lt;p&gt;
&lt;/p&gt;Beside being an honor code violation, the problem with copying someone else's program is that it leads to a vicious cycle. A student that copies one program misses out on some practice so the next program is much harder for him to write, so he has even more incentive to copy the next one, and so on. This accumulates not just over one class but over the whole undergraduate experience: programming is a skill that takes years to build. Thus, it is possible that by graduation some students have had 10 times as much programming experience as others, which we know will make them 1000 times faster programmers.
&lt;/p&gt;&lt;p&gt;
To summarize, from this experiment I have derived a couple of conclusions. &lt;b&gt;For students&lt;/b&gt; I recommend to
&lt;ol&gt;
&lt;li&gt;Remember to practice the &lt;b&gt;craft of programming&lt;/b&gt;. It is easy in a CSE degree, with all the high-level talk about hashing functions, AVL trees, NP-Completeness, multiple inheritance, etc., to forget to practice the basics. Every practising programmer will tell you that most of the programming they do is of the simple kind, the kind reflected by the simple questions above. Complex algorithms, theory, and language structures will help you become a &lt;em&gt;great&lt;/em&gt; programmer, but first you have to master the basic craft: writing small programs.&lt;/li&gt;

&lt;li&gt;Don't fall into the trap of believing that because you can read and understand a program that you can write code. That is like me saying that I can write a good novel because I can read and understand novels. Yes, you have to be able to read programs, but you also need to practice writing them: turning an English description of the problem into code. I think some students justify copying someone else's code by thinking that it is enough to read and understand what others wrote. It is not.&lt;/li&gt;
&lt;li&gt;Practice writing small programs on the whiteboard, or on paper, especially if you are going to be looking for a job in the near future. It is a different experience from typing with Intellisense on.&lt;/li&gt;
&lt;li&gt;In an inteview, first make sure you understand the question by repeating it back to the interviewer. Write a few sample input-output pairs on the board. Then implement the simplest solution you can think of. If you are worried that the interviewer might be looking for a better answer simply check with him. Say, &amp;ldquo;Well, a brute-force way of doing that is yada yada yada.&amp;rdquo; He will either ask you implement that or ask you for a faster solution.
&lt;/li&gt;
&lt;li&gt;Don't copy that program. It might take you all night to write it but next time you will be able to do it 10 times faster, and the next time after that you will be another 10 times faster. If at first it seems like it takes you for-fscking-ever to write a simple program it is because it does, and that is normal! Everyone is slow to start. We only get faster with practice. Oh, and that kid in your class that can write code at ninja speed, he started programming in middle school. Don't worry though, one can only get so fast with practice and after a handful of years you will reach that limit.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;&lt;p&gt;I also have a few suggestions &lt;b&gt;for employers&lt;/b&gt;:
&lt;ol&gt;
&lt;li&gt;Students are easily intimidated by the whiteboard because most have never used one. Some will be too nervous to perform. Pencil and paper might be a better way.&lt;/li&gt;
&lt;li&gt;It is important to give feedback and hints during this process. I've found that several students erroneously (probably, my fault) assumed the problem was a different and much harder one than the one I was actually asking them solve. Other students immediately tried to find a, sometimes non-existent, super clever solution instead of starting with a brute-force approach.&lt;/li&gt;
&lt;li&gt;Ask programming questions. It is an amazingly simple and quick way to determine if someone can program. It will save your company a lot of money. But, ask several different questions of each applicant.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;&lt;p&gt;In any case, I will continue to use whiteboard questions as they provide valuable experience for the students. I am also planning on using more of this "face to face" type of quizing in my other classes. It is a good and quick way of getting a lot of information on a person's technical capabilities.
&lt;/p&gt;&lt;p&gt;PS. If you want more programming practice check out my &lt;a href="http://programmingquestions.blogspot.com/"&gt;Programming Questions&lt;/a&gt; blog for some more examples.  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-3697063554461735659?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/3697063554461735659/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=3697063554461735659" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3697063554461735659?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3697063554461735659?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/12/simple-programming-questions-reveal-lot.html" title="Simple Programming Questions Reveal a Lot" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;CkEAQH44fSp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-1756460663287772427</id><published>2008-11-13T14:31:00.003-05:00</published><updated>2008-11-20T06:30:41.035-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:30:41.035-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>CSCE 242 Sign Up Now, Please!</title><content type="html">&lt;p&gt;As of this writing exactly two students have signed up for my &lt;a href="http://jmvidal.cse.sc.edu/csce242/spring09/"&gt;CSCE 242: Client Server Computing&lt;/a&gt; class. With so few students signed up we will have to cancel the class, and I will be bummed.&lt;/p&gt;
&lt;p&gt;I find it strange that there is so little interest when nearly all programming jobs nowadays require at least some web development, whether it is using a REST API, developing a web front-end, a mobile web front-end, or actually building a complete web application. Plus, javascript is a boatload of fun! Where else can you modify the inheritance hierarchy at runtime?
&lt;/p&gt;&lt;p&gt;
Maybe someone can comment and explain this lack of interest to me?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-1756460663287772427?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/1756460663287772427/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=1756460663287772427" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1756460663287772427?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1756460663287772427?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/11/csce-242-sign-up-now-please.html" title="CSCE 242 Sign Up Now, Please!" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">14</thr:total></entry><entry gd:etag="W/&quot;CkEAQH44fSp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5773068448732783143</id><published>2008-11-12T20:01:00.002-05:00</published><updated>2008-11-20T06:30:41.035-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:30:41.035-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Mobile posting</title><content type="html">I am posting this from my iphone using an app that connects to blogger using  their REST API. One service in the cloud, multiple frontends: I think we shall see this a lot more often.

If you want to learn how to build these services , sign up for 242!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-5773068448732783143?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5773068448732783143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5773068448732783143?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/11/mobile-posting.html" title="Mobile posting" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEAQH44fSp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-1827100410618310078</id><published>2008-08-27T15:46:00.002-04:00</published><updated>2008-11-20T06:30:41.035-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:30:41.035-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Master and Undergraduate Projects</title><content type="html">I have posted a list of &lt;a href="http://jmvidal.cse.sc.edu/thesisprojects.html"&gt;MS thesis and undergraduate projects&lt;/a&gt; that I am interested in working on. If you are an undergraduate or graduate student interested in doing some research please check them out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-1827100410618310078?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1827100410618310078?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1827100410618310078?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/08/master-and-undergraduate-projects.html" title="Master and Undergraduate Projects" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEDQXc7eip7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-3576730349222640978</id><published>2008-08-09T00:30:00.001-04:00</published><updated>2008-11-20T06:31:10.902-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:31:10.902-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>NSF Award for Negotiation Networks Research</title><content type="html">I am honored to have just received &lt;a href="http://www.nsf.gov/awardsearch/showAward.do?AwardNumber=0829580"&gt; NSF award 0829580&lt;/a&gt; to continue my research into negotiation networks. The total award is for $234K over the next 3 years. This research is under the Theoretical Foundations program, and the Scientific Foundations of the Internet's Next Generation (SING) sub-topic. &lt;br/&gt;&lt;br/&gt; We hope that our research will lay the scientific foundations for the Internet's next generation of protocols and deployment strategies. The project summary of theproposal explains our goals:&lt;br/&gt;&lt;br/&gt;

&lt;blockquote&gt;
We propose to develop automated negotiation protocols for autonomous agents in negotiation networks, which we define as a type of bargaining problem where every agent must negotiate with a fixed set of other agents in order to arrive at a unique deal. Negotiation networks are, in effect, a natural re-formulation of a winner determination in combinatorial auctions problem as a negotiation problem. They thereby distribute the costly winner determination computation among the agents and avoid the need for unnecessary exchange of currency or trusting of third parties.&lt;br/&gt;&lt;br/&gt;

&lt;b&gt;Intellectual merit:&lt;/b&gt; Since the problem of negotiation networks combines features of characteristic form games and bargaining games from game theory, combinatorial auctions and distributed mechanism design from Economics, network exchange theory from Sociology, and distributed algorithm design from computer science, its solution should be a significant contribution to all these fields. While several parts of the proposed problem have been studied in the various disciplines, we will bring these disparate parts within one framework and provide solutions for this very important problem. Our approach is fresh in that we focus on algorithmic solutions for the dynamic, distributed problem of resource allocation among self-interested parties, in contrast with game theory and Economics' solutions which are typically steady-state axiomatic solutions. Success in this research is potentially transformative as it will provide the foundation for the engineering of protocols and efficient algorithms for distributed resource allocation, which is a pervasive problem in our ever-growing highly-interconnected society.&lt;br/&gt;&lt;br/&gt;

&lt;b&gt;Broader impacts:&lt;/b&gt; The negotiation networks problem is not only significant from a research perspective, it also has some very immediate applications. One such application is the multiagent enactment of workflows for the growing SOAP and REST-based (Web Services) service Internet where complex tasks are dynamically and automatically bid for and allocated among arbitrarily large number of agents. Such systems would revolutionize just-in-time manufacturing and purchasing practices by automating not only the paperwork but also the allocation of resources and contract negotiation. Another near-term application lies in the development of incentive-compatible routing mechanism for the new Internet which would provide the proper incentives for companies to deploy more bandwidth and to make their existing bandwidth available to others without having to worry about freeloaders. Further down the road, negotiation networks could even eliminate the need for predefined workflows and lead to much more efficient and dynamic allocation of resources in our economy.  These adaptive supply chains would be resilient to local failures and attacks as they dynamically re-negotiate deals in response to environmental changes. In fact, with slight modifications these distributed resource allocation algorithms could be used to coordinate first-responders in an emergency situation, to program distributed environmental sensor networks, and to instruct automated robotic swarms.&lt;br/&gt;&lt;br/&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-3576730349222640978?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3576730349222640978?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3576730349222640978?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/08/nsf-award-for-negotiation-networks.html" title="NSF Award for Negotiation Networks Research" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;DEUEQng_eip7ImA9WxVUE04.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-1304398588619586565</id><published>2008-04-30T21:26:00.003-04:00</published><updated>2009-03-17T20:30:03.642-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-17T20:30:03.642-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Marriage Problem</title><content type="html">&lt;p&gt;In the marriage problem we have an equal number of men and women who
we want to pair up (it is presumed they are all heterosexual). Each
one has an ordered list of their prefered mates. The goal is to find
the set of marriages such that no two people would rather get divorced
and marry each other. That is, not two prefer each other over their
assigned mates.&lt;/p&gt;

&lt;p&gt;
This problem can be solved with a simple algorithm where all the men
propose to the women. Then, each woman with more than one proposal
rejects all but her most preferred which she &lt;em&gt;temporarily&lt;/em&gt;
accepts. The bachelors then repeat the process by asking their most
favorite woman who has not rejected them. The process continues until
all women have a partner. I have a NetLogo &lt;a
href="http://jmvidal.cse.sc.edu/netlogomas/marriage-problem.html"&gt;implementation
of the marriage problem&lt;/a&gt; that illustrates this process.&lt;/p&gt;
&lt;p&gt;
It is interesting to notice that while the women are the ones that get to
turn down the men, the men do overwhelmingly better than the women. I
mentioned this to my wife and she said that is why she proposed to
me. Of course, in the end it is always the women who propose to us.&lt;/p&gt;

&lt;p&gt;
I am interested in finding distributed algorithms that arrive at &lt;a href="http://en.wikipedia.org/wiki/Stable_marriage_problem"&gt;stable solutions&lt;/a&gt;, that is, those where no two people would rather be married to each other than to their partner. Here is a link to a &lt;a href="http://www.cs.cmu.edu/~15251/Materials/Lectures/lecture10.pdf"&gt;set of slides that goes into more detail on the marriage problem&lt;/a&gt;, in case you want to learn a bit more.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-1304398588619586565?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1304398588619586565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/1304398588619586565?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/04/marriagen-problem.html" title="Marriage Problem" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEDQXc7eip7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-4188178082212002521</id><published>2008-04-28T12:39:00.000-04:00</published><updated>2008-11-20T06:31:10.902-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:31:10.902-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Trading Houses</title><content type="html">Imagine that all students are assigned dorm rooms in some ad-hoc
way. After each one has a room, two students might find that they both
prefer the room the other one has, thus they could switch rooms and
both be happier. Similarly, three students (A,B, and C) might find
that A prefer's B's room, B prefers C's room, and C prefers A's
room. These three students might also trade rooms in a cycle. This can
go on for even larger cycles. But, how do we find these
cycles?&lt;br/&gt;&lt;br/&gt;

A very simple algorithm, proposed back in the seventies, is to have
each agent point to its most preferred choice. If the resulting graph
has any loops (it will) then all the agents in the loops exchange
rooms and drop out of the game. The remaining agents then point to
their most preferred room and we repeat the process until there are no
more agents left.&lt;br/&gt;&lt;br/&gt;

I have implemented a simple demonstration of this &lt;a
href="http://jmvidal.cse.sc.edu/netlogomas/top-trading-cycle.html"&gt;top
trading cycle algorithm&lt;/a&gt; using a simple distributed cycle detection
protocol. Its fun to watch!&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-4188178082212002521?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4188178082212002521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4188178082212002521?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/04/trading-houses.html" title="Trading Houses" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;Dk4NRngzeCp7ImA9WxRbFUo.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-21818134419871786</id><published>2008-04-24T11:35:00.003-04:00</published><updated>2008-12-06T09:49:57.680-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-06T09:49:57.680-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>My Programming Languages History</title><content type="html">&lt;p&gt;
As faculty members in Computer Science and Engineering we often
discuss the pros and cons of languages and which ones we should
teach. The &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;Tiobe
software index&lt;/a&gt; shows us how the popularity of certain languages
ebbs and flows. I think it is clear that it does not really matter
which specific language you learn first or second, what matters is that
you learn how to think clearly. And that you learn how to learn new
languages.&lt;br/&gt;&lt;br/&gt;

&lt;a href="http://www.tiobe.com/content/paperinfo/tpci/images/tpci_trends.png"&gt;&lt;img style="width:200px;float:right" src="http://www.tiobe.com/content/paperinfo/tpci/images/tpci_trends.png"&gt;&lt;/img&gt;&lt;/a&gt;

As a demonstration, I thought I'd take a trip back memory lane and
list the languages I learned (and forgotten) while still in
school:&lt;ol&gt;

&lt;li&gt;&lt;a
href="http://en.wikipedia.org/wiki/BASIC"&gt;BASIC&lt;/a&gt; -
Freshman year in high school I took a summer class on Basic
programming using the old Tandy PET (I also had the &lt;a
href="http://www.codinghorror.com/blog/archives/001104.html"&gt;Atari
2600 basic programming cartridge&lt;/a&gt;, but it kinda
sucked). Next year, my new Apple IIe had basic built in. I should also
mention that back then it was common for high schools to teach Basic
programming, Power Point and Excel did not yet exist.
&lt;/li&gt;

&lt;li&gt;6052 &lt;a
href="http://en.wikipedia.org/wiki/Assembly_language"&gt;Assembly
language&lt;/a&gt; - Of course, I wanted to write games and the only way to
get any kind of animation in the Apple IIe was to progran in
assembly.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/APL_(programming_language)"&gt;APL&lt;/a&gt; - I only worked with this extremely strange language for two weeks.&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://en.wikipedia.org/wiki/Pascal_(programming_language)"&gt;Pascal&lt;/a&gt;
- Somehow I got a hold of a copy of a Pascal compiler for the Apple
  IIe. I was surprised to learn that you could write programs without
  line numbers and GOTO/jmp statements.&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://en.wikipedia.org/wiki/Scheme_(programming_language)"&gt;Scheme&lt;/a&gt;
- I used it in my freshman year at college. Scheme is the simplest
language I have seen. It is beautiful.&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://en.wikipedia.org/wiki/CLU_programming_language"&gt;CLU&lt;/a&gt; -
In college we had to do our software projects using CLU. It is a pre-cursor to
object-oriented languages.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Emacs_lisp"&gt;Emacs Lisp&lt;/a&gt; -
I learned it for a summer job. This rss feed will be turned into
HTML automatically by an Emacs Lisp function I wrote.&lt;/li&gt;


&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/C"&gt;C&lt;/a&gt; -
Learned it for an OS class in graduate school.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Lisp_(programming_language)"&gt;Lisp&lt;/a&gt; - thesis work.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Tcl/tk"&gt;Tcl/tk&lt;/a&gt; - thesis work.&lt;/li&gt;

&lt;li&gt;C++ - thesis work.&lt;/li&gt;

&lt;li&gt;Java - I wanted to write some applets, for fun.&lt;/li&gt;

&lt;/ol&gt;

Those are just the major programming languages I encountered while
still a student (pre 1998), I also learned bits and pieces of
countless scripting languages (awk, sed, bash) or special purpose
languages (latex, um-prs, sql). The point is, &lt;b&gt;my experience is not
uncommon&lt;/b&gt;. A good computer scientist or software engineer
will learn at least one new language every year or so. After a while,
one notices how they are all not that different but how each one
teaches us something about the way we think, the way we solve
problems. Writing software is about how we think, and how we translate
these thoughts to meet the capabilities of the machine at our
fingertips.&lt;br/&gt;&lt;br/&gt;

Thus, there is no need to get too hung up on which programming
language you should learn first. If you choose software as a career,
you will likely learn over 100 languages over your lifetime. I can
only imagine what we will be using 10 years from today! 
&lt;br/&gt;&lt;br/&gt;

If you also have fun writing programs then maybe you would like to try
to solve some of my &lt;a
href="http://programmingquestions.blogspot.com/"&gt;programming
questions&lt;/a&gt;.&lt;br/&gt;

&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-21818134419871786?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/21818134419871786?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/21818134419871786?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/04/my-programming-languages-history.html" title="My Programming Languages History" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEDQXc7eip7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-308252793805114517</id><published>2008-02-09T23:32:00.000-05:00</published><updated>2008-11-20T06:31:10.902-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:31:10.902-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Fast Bidding in a Distributed Combinatorial Auction</title><content type="html">Walmart needs stuff moved from point A to B, for &lt;b&gt;many&lt;/b&gt; A's
and Bs. Also, these deliveries have other possible requirements: one
might need a refigerated truck, one might be a night drop off, one
might be a rush order, etc. Similarly, trucking companies have complex
requirements about where and when they can deliver. Put these millions
of orders together and you have a complex resource allocation
problem. If you are willing to have everyone send their requirements
to a centralized auctioneer then, maybe, you can solve this
problem.&lt;br/&gt;&lt;br/&gt;

However, what it you don't want to trust, or can't afford to pay a
centralized auctioneer? We are studying automated incentive-compabile
negotiation protocols for distributed resource allocations. I know
this is a mouthfull but all it is saying is that we are developing
algorithms that automated agents can use to negotiate with each other
and solve these type of problems. Think of it as moving all buy/sell
transaction to the web (we are nearly there) and then using software
to decide who to buy what from and at what price. We can show that
this will lead to more efficient solutions, that is, &lt;em&gt;everybody
wins.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;

Anyway, our latest paper detailing our efforts is
&lt;ul&gt;
&lt;li&gt;Benito Mendoza and Jos&amp;eacute; M. Vidal. &lt;a href="http://jmvidal.cse.sc.edu/lib/mendoza08a.html"&gt;Approximate Bidding Algorithms for a Distributed Combinatorial Auction (Short Paper)&lt;/a&gt;. Padgham and Parkes and M&amp;uuml;ller and Parsons ed.In &lt;i&gt;Proceedings of the 7th International Conference on Autonomous Agents and Multiagent Systems,&lt;/i&gt; May; 2008.

&lt;blockquote&gt;
Distributed allocation and multiagent coordination problems can be solved through combinatorial auctions (CAs). However, most of the existing winner determination algorithms (WDAs) for CAs are centralized. The PAUSE auction is one of a few efforts to release the auctioneer from having to do all the work. The pausebid bidding algorithm generates myopically-optimal bids for agents in a PAUSE auction but its running time is exponential on the number of bids. We present new approximate bidding algorithms that not only run in linear time but also increase the utility of the bidders as result of small decrement in revenue.
&lt;/blockquote&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Check it out, approximation mechanism let ut achieve 1000-fold
speedups at only a small cost in utility.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-308252793805114517?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/308252793805114517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/308252793805114517?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/02/fast-bidding-in-distributed.html" title="Fast Bidding in a Distributed Combinatorial Auction" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEDQXc7eyp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-6118501606686370636</id><published>2008-01-08T14:35:00.000-05:00</published><updated>2008-11-20T06:31:10.903-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:31:10.903-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>A NetLogo Introduction</title><content type="html">&lt;p&gt; I will be speaking tomorrow Thursday January 10 6:30pm at
the &lt;a href="http://colalug.org"&gt;Columbia Linux User's
Group&lt;/a&gt; about NetLogo. It will be an informal introduction. I
will try to show why it is a great language for both learning to
program and for building simulations that can be used to engage
students in active learning of other subjects: such as physics,
chemistry, economics, sociology, etc. The meeting is open to all.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-6118501606686370636?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6118501606686370636?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/6118501606686370636?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/01/netlogo-introduction.html" title="A NetLogo Introduction" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEAQH44fSp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5402676783491625004</id><published>2007-11-19T20:56:00.000-05:00</published><updated>2008-11-20T06:30:41.035-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:30:41.035-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>The Internet, Growth, and Students</title><content type="html">&lt;p&gt;
Today I gave a 1-hour talk to our freshmen on the &lt;a
href="http://jmvidal.cse.sc.edu/talks/internetintro-slides.pdf"&gt;history
an future of the Internet&lt;/a&gt;. Obviously an impossible task but I did
my best. I hope I conveyed to them the endless possibiblities that the
Internet has opened up.
&lt;/p&gt;&lt;p&gt;

In preparation for this talk I have been asking our students: how much
do you think the .com bubble affected the growth of the Internet? The
general belief is overwhelmingly clear. Students believe the bubble
had a large impact on the Internet growth. Of course, this is
completely wrong. Check out my chart:
&lt;center&gt;
&lt;/p&gt; 
&lt;a href="http://www.swivel.com/graphs/show/24343013"&gt;&lt;img
alt="Nasdaq vs. Number of Internet Hosts vs. Number of Websites"
src="http://www.swivel.com/graphs/image/24716766" style="border: solid
1px #rgb(0.6,0.6,0.6);" title="Click to play with this data at Swivel"
/&gt;&lt;/a&gt;
&lt;/center&gt;

&lt;p&gt; The &lt;b&gt;bubble had absolutely no impact on the growth of the
Internet&lt;/b&gt; which continues to grow exponentially, doubling every
three years. The number of websites is doubling at least every two
years. The implications of these facts are mindboggling!  But, the
general public, even our students, still seems to feel that software
is done. Oh well, it just means more money for those of us who can
program!  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-5402676783491625004?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5402676783491625004?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5402676783491625004?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2007/11/internet-growth-and-students.html" title="The Internet, Growth, and Students" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEDQXc7eyp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-8682613365792432834</id><published>2007-10-23T20:04:00.000-04:00</published><updated>2008-11-20T06:31:10.903-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:31:10.903-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Combinatorial Auction Model</title><content type="html">One can visualize a combinatorial auction (with OR bids only) as a
graph with two types of nodes: bids and items. Each bid node is
labelled with the price of the bid and connected to all the items it
is over. This is the visualization I have implemented in my &lt;a
href="http://jmvidal.cse.sc.edu/netlogomas/ca.html"&gt;combinatorial
auction&lt;/a&gt; NetLogo model. It implements the branch-and-bounds
algorithm on the branch-on-bids tree as found in my &lt;a
href="http://multiagent.com/2008/10/foundations-of-multiagent-systems.html"&gt;textbook&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-8682613365792432834?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/8682613365792432834?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/8682613365792432834?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/10/combinatorial-auction-model.html" title="Combinatorial Auction Model" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEDQXc7eyp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-7267798465260771982</id><published>2007-10-11T12:49:00.000-04:00</published><updated>2008-11-20T06:31:10.903-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:31:10.903-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Iterated Equiresistance Model</title><content type="html">A couple of years ago I built this simple NetLogo model that
implements the &lt;a
href="http://jmvidal.cse.sc.edu/netlogomas/iequiresistance.html"&gt;iterated
equiresistance algorithm&lt;/a&gt; in randomly generated exchange networks,
as used by network exchange theory in Sociology. It now looks kinda
dated and needs to be cleaned up but I thought I'd post it
nonetheless. I'm using it in class as a demo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-7267798465260771982?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7267798465260771982?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7267798465260771982?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2008/10/iterated-equiresistance-model.html" title="Iterated Equiresistance Model" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry><entry gd:etag="W/&quot;CkEDQXc7eyp7ImA9WxRUEUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-3499173368207445019</id><published>2007-10-10T13:32:00.001-04:00</published><updated>2008-11-20T06:31:10.903-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T06:31:10.903-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Pareto Learning Model</title><content type="html">I have posted a new netlogo model on &lt;a
href="http://jmvidal.cse.sc.edu/netlogomas/paretolearn.html"&gt;pareto
learning&lt;/a&gt; which implements the algorithms from &lt;a
href="http://jmvidal.cse.sc.edu/lib/banerjee07a.html"&gt;this
paper&lt;/a&gt;. This is a quick and dirty implementation for an in class
demo. As nearly always happens when I do these, I found a slight
problem in the paper. They specify two different ways in which the
agents choose an action. Namely, first they say that the agents choose
actions stochastically based on their expected utilities, then they
say that they choose their best action and with probability epsilon
choose a random action. After implementing both strategies it became
clear that the second one is the one they actually used. Clearly, this
was just a problem of the prose being a bit confusing (at least, for
me).&lt;/p&gt;

&lt;p&gt; It is also interesting to note how such a small change in the
action choice method can have such large effects on the system's
behavior. Because of this I have to say that the results from this
model are not &lt;em&gt;stable&lt;/em&gt;, thus they are not of deep significance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28222549190387355-3499173368207445019?l=www.jose-vidal.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3499173368207445019?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3499173368207445019?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2007/10/pareto-learning-model.html" title="Pareto Learning Model" /><author><name>Jose M Vidal</name><uri>http://www.blogger.com/profile/16605820980157120553</uri><email>jmvidal@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="17280427899840422606" /></author></entry></feed>
