<?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:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;C0UNQXk9cSp7ImA9WhBQFU4.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355</id><updated>2013-03-17T10:41:30.769-04:00</updated><category term="research" /><category term="opinion" /><category term="teaching" /><category term="programming" /><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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>53</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;C0MHR3o4fip7ImA9WhJVEUs.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-7007406574132162671</id><published>2012-08-28T09:08:00.001-04:00</published><updated>2012-08-28T09:43:56.436-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-28T09:43:56.436-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Teaching Web Applications: github and youtube</title><content type="html">I am having my &lt;a href="http://www.csce242.com/2012/08/git-and-github-for-homeworks.html"&gt;students use git and github&lt;/a&gt; for turning in their weekly project homeworks in my &lt;a href="http://www.csce242.com/"&gt;Web applications&lt;/a&gt; class this semester. The folks at github gave me 20 free private repos in our &lt;a href="https://github.com/CSCE242"&gt;CSCE242 group&lt;/a&gt; which I am giving to the students, one each, so they can push their code without being able to see other students' code. The main goal is to get them familiarized, and maybe enthused, with git. A secondary goal is to make my grading easier. I hope to use github's commit commenting facilities to comment on specific lines of code in their code. Also, I'm setting up a cron job to &lt;code&gt;git pull&lt;/code&gt; all the project locally right after the deadline, so then I can just open them up and run them, then maybe make some minor changes and push them upstream for the students to use.&lt;br /&gt;
&lt;br /&gt;
I am also &lt;a href="http://www.csce242.com/2012/08/class-philosophy.html"&gt;trying to flip the class&lt;/a&gt;, as I did in &lt;a href="http://www.csce145.com/"&gt;145&lt;/a&gt;, by making youtube screencasts and assigning readings and then dedicating class time to one-on-one help with their ongoing project.&lt;br /&gt;
&lt;br /&gt;
One interesting note is that the number of views on &lt;a href="http://www.youtube.com/playlist?list=PLF03C6B2C0B292A1E"&gt;my Java tutorial videos&lt;/a&gt; did not go down after the semester was over but instead has stayed roughly the same over the Summer, as shown below. Perhaps this is a reflection of the current larger trend of &lt;a href="http://www.codinghorror.com/blog/2012/05/please-dont-learn-to-code.html"&gt;'everyone should learn to code'&lt;/a&gt;.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-y5f6XdPp1hc/UDzBHNOZ1DI/AAAAAAABiiQ/7Ql5-jnPJeU/s1600/Screen%2BShot%2B2012-08-28%2Bat%2B8.59.54%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="184" src="http://4.bp.blogspot.com/-y5f6XdPp1hc/UDzBHNOZ1DI/AAAAAAABiiQ/7Ql5-jnPJeU/s640/Screen%2BShot%2B2012-08-28%2Bat%2B8.59.54%2BAM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/7007406574132162671/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=7007406574132162671" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7007406574132162671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7007406574132162671?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2012/08/teaching-web-applications-github-and.html" title="Teaching Web Applications: github and youtube" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-y5f6XdPp1hc/UDzBHNOZ1DI/AAAAAAABiiQ/7Ql5-jnPJeU/s72-c/Screen%2BShot%2B2012-08-28%2Bat%2B8.59.54%2BAM.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUMNSHc8fip7ImA9WhVaFkU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-7341331667746505998</id><published>2012-06-14T11:24:00.003-04:00</published><updated>2012-06-14T11:24:59.976-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-14T11:24:59.976-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Constructive Network Formation Models</title><content type="html">&lt;a href="http://3.bp.blogspot.com/-Fcr0rQXrCiU/T9oALfEBQCI/AAAAAAABfOg/7sewdqUnrYg/s1600/Screen%2BShot%2B2012-06-14%2Bat%2B11.11.44%2BAM.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="289" src="http://3.bp.blogspot.com/-Fcr0rQXrCiU/T9oALfEBQCI/AAAAAAABfOg/7sewdqUnrYg/s320/Screen%2BShot%2B2012-06-14%2Bat%2B11.11.44%2BAM.png" /&gt;&lt;/a&gt;&lt;a href="http://www.gfredericks.com/"&gt;Gary Fredericks&lt;/a&gt; recently presented a poster at AAMAS on our recent work on &lt;a href="http://jmvidal.cse.sc.edu/papers/fredericks12a.pdf"&gt;An Analysis of Constructive Network Formation Models&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This is really interesting theoretical work where we are looking at the possible topologies that can emerge given initial payment rules. For example, given a bunch of disconnected nodes (think ISPs before buying access to any other ISP, or businesses before establishing relationships with any other, etc.) and a rule that says that any link between two nodes has a fixed cost which must be paid by the two nodes in questions, but where everyone benefits from being closer (fewer edges between them) to everyone else, what kind of topologies will we expect to emerge if we let all agents build edges as they see fit? &lt;br /&gt;
&lt;br /&gt;
We examine this problem in part by building graphs of graphs. That is, we built directed graphs, such as the one you see here, that show the possible evolution of these networks over time. From these we can then determine which topologies, or which features (small-world, small-diameter, etc.) are more likely given different initial rules of the game (equal payment for edge, one must pay, auctions, etc.)</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/7341331667746505998/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=7341331667746505998" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7341331667746505998?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7341331667746505998?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2012/06/constructive-network-formation-models.html" title="Constructive Network Formation Models" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Fcr0rQXrCiU/T9oALfEBQCI/AAAAAAABfOg/7sewdqUnrYg/s72-c/Screen%2BShot%2B2012-06-14%2Bat%2B11.11.44%2BAM.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Dk8MRHg4eSp7ImA9WhJQEkw.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-4134687703373378878</id><published>2012-05-03T16:05:00.000-04:00</published><updated>2012-07-25T07:14:45.631-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-25T07:14:45.631-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Online Classes are Just the New Textbook</title><content type="html">About 4 years ago I started making videos for my students in &lt;a href="http://www.csce145.com"&gt;145: Intro to Programming&lt;/a&gt; class to watch. This semester I made  &lt;a href="http://www.youtube.com/playlist?list=PLF03C6B2C0B292A1E"&gt;62 Java tutorial videos&lt;/a&gt; for them to watch. Their response has always been mostly positive: about half like them, the rest don't care, and the view logs show they are being watched, a lot.&lt;br /&gt;
&lt;br /&gt;
This semester was the one where &lt;a href="http://www.csce145.com/2012/01/online-resources-for-learning.html"&gt;online programming classes&lt;/a&gt; really &lt;a href="http://www.csce145.com/2012/01/udacity-yet-another-place-to-learn.html"&gt;took off&lt;/a&gt;, with new startups like Audacity, Coursera, and CodeAcademy, all of them inspired by the now 11-year old &lt;a href="http://ocw.mit.edu/about/next-decade/"&gt;MIT Open Courseware&lt;/a&gt;. These online courses are getting a lot of press because of reported hundred of thousands of students signing up. I &lt;a href="http://www.csce145.com/2012/01/online-resources-for-learning.html"&gt;told&lt;/a&gt; all my 145 students about these resources at the beginning of the semester, along with my own videos.&lt;br /&gt;
&lt;br /&gt;
So, did the students learn more this semester than in past semesters? No. As evidenced by the in-class final, their proficiency at the end of class remains the same (I first taught this class in &lt;a href="http://jmvidal.cse.sc.edu/"&gt;2006&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
I think videos are a great alternative way to present information, and the more different ways we can present the same idea to students the more likely we are to reach them. I will continue to use all these online resources in my own classes and continue to make my own videos, and I hope the videos get even better. But the fact remains that &lt;b&gt;there is no teaching, there is only learning&lt;/b&gt;. That is, if one wants to learn how to code there is simply no alternative but to sit down and spend hours upon hours practicing (replace 'code' with 'play the guitar', 'do calculus', 'write well', 'play golf', etc). A teacher/book/onlinecourse cannot do the learning for you. The learning is all up to you.&lt;br /&gt;
&lt;br /&gt;
Online classes like those from udemy and coursera attract those who are not in school (and, mostly outside the US) who have a deep desire to learn a specific topic (like, programming, to get a job). These people would have learned the subject by reading a book and practicing (just like I learned programming in high-school by reading a book and practicing with my Apple IIe). The online class just makes it a bit more pleasant, for some, and most importantly it is free. A textbook can easily cost you $100.&lt;br /&gt;
&lt;br /&gt;
The ongoing challenge is not putting more courses online. That will happen, of course. All information is, or will soon be free. The challenge, and the job of Universities, is in &lt;b&gt;guidance&lt;/b&gt; and &lt;b&gt;certification&lt;/b&gt;. There is no way one person can learn everything so, what should he learn? Is it at the right level for the students in class? Most (all?) MIT and Stanford CS freshmen already know how to program, so their 101 class should be much different from ours. Then, can we certify that the student has indeed learned what he claims and not just &lt;a href="http://www.csce145.com/2010/09/outsourcing-of-your-education.html"&gt;outsourced his homework&lt;/a&gt;? It is trivial to cheat in an online class.&lt;br /&gt;
&lt;br /&gt;
My 10-year old son is learning about percentages. I wish I could put him in front of some &lt;a href="http://www.khanacademy.org/"&gt;Khan Academy&lt;/a&gt; videos and have him do their practice exercises and, boom, he would be able to tell me if 10% off a $18 purchase is a better deal than 2 for the price of 1 at $15. I tried it. It didn't work. I still love the Khan Academy and we use it a lot, but it does not replace practice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/4134687703373378878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=4134687703373378878" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4134687703373378878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4134687703373378878?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2012/05/online-classes-are-just-new-textbook.html" title="Online Classes are Just the New Textbook" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEACRHk4eCp7ImA9WhVSGUQ.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-2675308970579486699</id><published>2012-03-17T09:58:00.000-04:00</published><updated>2012-03-17T09:59:25.730-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-17T09:59:25.730-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Web Applications Class, for Graduate Students</title><content type="html">I will be teaching &lt;a href="http://www.csce242.com"&gt;CSCE 242: Web Applications&lt;/a&gt; again in the Fall. Go sign up, please!&lt;br /&gt;
&lt;br /&gt;
Also, if you are a graduate student and want to take it come talk to me, we can probably work out that you can get CSCE 798 (directed study) for it. And, if you are a PhD student interested in doing a thesis related to web applications, online communities, or agent-based simulations (even better, all of these together!) come talk to me!</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/2675308970579486699/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=2675308970579486699" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2675308970579486699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2675308970579486699?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2012/03/web-applications-class-for-graduate.html" title="Web Applications Class, for Graduate Students" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ak4DSXw7eyp7ImA9WhVREkU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-396397821595760896</id><published>2012-02-10T11:28:00.001-05:00</published><updated>2012-03-20T20:16:18.203-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-20T20:16:18.203-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Interactive Quiz Web Application</title><content type="html">The video below is a short demo of a little webapp I developed for Julia Englund, Psychology Department, for giving interactive tests to (young) kids. The kids go to the website, take the tests, and their results are automatically sent back to the server. Julia designed the tests, I merely implemented the program. The app uses jQuery and the soundmanager.js library for handling sounds. It is an example of how one can build desktop-like interactive applications using javascript.&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;iframe width="853" height="480" src="http://www.youtube.com/embed/WpvjO4Y9te8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/center&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/396397821595760896/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=396397821595760896" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/396397821595760896?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/396397821595760896?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2012/02/interactive-quiz-web-application.html" title="Interactive Quiz Web Application" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/WpvjO4Y9te8/default.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D04NRXs8fCp7ImA9WhRUEEs.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-4173525822545074051</id><published>2012-01-20T08:24:00.000-05:00</published><updated>2012-01-20T08:26:34.574-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T08:26:34.574-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Java Tutorial Screencasts</title><content type="html">Back in 2009 I did a bunch of &lt;a href="http://vimeo.com/channels/csce145"&gt;long screecasts&lt;/a&gt; to help my students in &lt;a href="http://wwww.csce145.com"&gt;CSCE 145&lt;/a&gt; learn to program in Java. They were well received but one complaint was that they were too long. This was also reflected in the logs as the number of views for the first video (first one in the semester) was very high but then decreased with each subsequent video. &lt;br /&gt;
&lt;br /&gt;
In the mean time, the Kahn Academy has taught us that 10 minutes seems to be the magic number for online tutoring videos, after that people find it too unwieldily. Thus, I re-did all the videos for this semester. Now I have about 60 &lt;a href="http://www.youtube.com/playlist?list=PLF03C6B2C0B292A1E"&gt;Java (and eclipse) tutorial videos&lt;/a&gt;. Youtube is gathering data on views. Let's see what happens.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;iframe width="853" height="480" src="http://www.youtube.com/embed/videoseries?list=PLF03C6B2C0B292A1E&amp;amp;hl=en_US" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/center&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/4173525822545074051/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=4173525822545074051" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4173525822545074051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/4173525822545074051?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2012/01/java-tutorial-screencasts.html" title="Java Tutorial Screencasts" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/videoseries/default.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUUFR307fip7ImA9WhZUGEU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5552152323024538517</id><published>2011-06-12T08:52:00.001-04:00</published><updated>2011-06-12T08:53:36.306-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-12T08:53:36.306-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>iPad App for Taking Surveys</title><content type="html">&lt;p&gt;I've been playing around with mobile &lt;a href="http://www.csce242.com"&gt;webapps&lt;/a&gt; and JavaScript toolkits like &lt;a href="http://www.sencha.com/products/touch/"&gt;Sencha touch&lt;/a&gt; and &lt;a href="http://jquerymobile.com/"&gt;jQuery mobile&lt;/a&gt;. With all the news about native iphone apps, a lot of people forget that one can easily build iphone/ipad webapps that &lt;b&gt;work offline&lt;/b&gt; and let you bypass the Apple store (so, no waiting weeks for approval, just upload it to your own website).&lt;/p&gt;

&lt;p&gt;Dr. &lt;a href="http://www.sph.sc.edu/facultystaffpages/profile.asp?id=529"&gt;Jim Thrasher&lt;/a&gt;, from the Arnold School of Public Health, asked me to build an iPad app for his survey-administrators to use in administering surveys. The iPad is used to randomize questions and store all the survey answers, which are later uploaded to the server, when an Internet connection is available. The server is a google appengine web app.&lt;/p&gt;

&lt;p&gt;Lessons learned:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Offline webapps are possible (almost too easy) on the iPad/iPhone. But, I had to train the users on how to clear the Safari cache whenever I put out a non backwards-compatible version.&lt;/li&gt;

&lt;li&gt;A JavaScript toolkit like jQuery mobile or Sencha touch is needed for all its widgets. We need more widgets: this is probably the biggest current limitation.&lt;/li&gt;

&lt;li&gt;My app auto-downloads and installs the latest version the moment it is run, kinda like Chrome, thus enabling a fast development cycle.
&lt;/li&gt;

&lt;/ol&gt;

&lt;iframe width="425" height="349" src="http://www.youtube.com/embed/JVDD7R8Gg1A" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/5552152323024538517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=5552152323024538517" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5552152323024538517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5552152323024538517?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2011/06/ipad-app-for-taking-surveys.html" title="iPad App for Taking Surveys" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/JVDD7R8Gg1A/default.jpg" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;A08NRHk9eSp7ImA9WhZXF00.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-7471990642824463768</id><published>2011-05-06T15:24:00.000-04:00</published><updated>2011-05-06T15:24:55.761-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-06T15:24:55.761-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>A Webapp for Turning in Programming Homeworks</title><content type="html">&lt;p&gt;Since I had to  &lt;a href="http://www.jose-vidal.com/2011/05/web-applications-undergraduate-class.html"&gt;grade about 20 programs every week&lt;/a&gt; and since these howeworks were webapps themselves that would be posted on some website that I could test, I figured that best way would be to have a pastebin-like app that allowed me to view all submitted homeworks. No such thing existed so I built one and called it &lt;a href="http://i-am-done.appspot.com"&gt;i-am-done&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I used it last semester and it works very well. I allows one to:&lt;ol&gt;
&lt;li&gt;create a class, and homeworks for it, giving each one a due date,&lt;/li&gt;
&lt;li&gt;get a simple URL to give students for turning in programs for that homework,&lt;/li&gt;
&lt;li&gt;view all the submitted howeworks for each student, in nicely colorized code thanks to &lt;a href="http://code.google.com/p/google-code-prettify/"&gt;prettify&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;students can upload and delete any number of files associated with a particular homework but, of course, they can't see anyone else's homeworks.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;It is like a paste-bin where only the person that created the class can see the code pasted under that class. I have placed the &lt;a href="https://github.com/josemvidal/242Wish"&gt;code here&lt;/a&gt; in case someone wants to make a fully featured system out of it. I would loooove to see that.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/7471990642824463768/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=7471990642824463768" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7471990642824463768?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/7471990642824463768?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2011/05/webapp-for-turning-in-programming.html" title="A Webapp for Turning in Programming Homeworks" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DkUEQHc7fSp7ImA9WhZXFko.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5936407085796305080</id><published>2011-05-06T05:30:00.003-04:00</published><updated>2011-05-06T05:30:01.905-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-06T05:30:01.905-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Web Applications: An Undergraduate Class</title><content type="html">&lt;p&gt;Yet nother semester of &lt;a href="http://www.csce242.com"&gt;teaching web application development&lt;/a&gt; 
has passed. This time, finally, I had a significant number of students (30) signing up although, after it became clear this was a &lt;em&gt;programming&lt;/em&gt; class, fewer (17) remained. This is to be expected as programming takes time and not everyone has the means.&lt;/p&gt;

&lt;p&gt;A few interesting tidbits I found.&lt;p&gt;

&lt;ol&gt;

&lt;li&gt;Most &lt;b&gt;undergraduates know little about web technologies&lt;/b&gt;. I kinda assumed that because they grew up with the web that they would know the difference between a GET and a POST, but no. There is a large knowledge gap to be filled in. Luckily, these are easy things for them to learn.&lt;/li&gt;

&lt;li&gt;There is a &lt;b&gt;steep learning curve&lt;/b&gt; to developing modern web applications, and it keeps getting steeper every year. A lot of complex technologies that must be mastered: HTTP, HMTL, CSS, JavaScript, Databases, Ajax, jQuery, JSON, Cookies, Firebug, functional programming, REST, event handling, asynchronous lambda functions, the browser's loading orders, etc. (oh, and Python) One semester is only enough time to introduce a student to most of these, but not all, and mastery will require more time spent programming than is afforded. Still, a lot can be learned in one semester.&lt;/li&gt;

&lt;li&gt;I am sure some hated that we had &lt;b&gt;13 weekly &lt;a href="http://www.csce242.com/search/label/homework"&gt;homeworks&lt;/a&gt;&lt;/b&gt;, each one a significant programming project, but there really is no other way to learn all this stuff. It is one thing to read about Ajax, actually implementing a webapp that does it is a completely different matter.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Its all about the JavaScript&lt;/b&gt;: Facebook moved to a JavaScript SDK in their platform, Google is using JavaScript as glue to for their 'apps enterprise', and node.js has gotten really popular. With jquery and firebug (or chrome developer tools), JavaScript is a lot of fun to learn and debug. However, its tricky to figure out the timing on how various parts of a page are loaded by the browser and, even harder, how to decide what code goes in the server or the browser, not to mention JavaScript's many many quirks.&lt;/li&gt;

&lt;li&gt;The &lt;b&gt;google app engine works&lt;/b&gt; as a learning platform. It is minimal, reliable, and on the web (not on the student's laptop) so we all can see what we all have done.&lt;/li&gt;

&lt;/ol&gt;


&lt;p&gt;Onward.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/5936407085796305080/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=5936407085796305080" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5936407085796305080?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5936407085796305080?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2011/05/web-applications-undergraduate-class.html" title="Web Applications: An Undergraduate Class" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CEUMRnc_fyp7ImA9Wx9aGEk.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-2287282355717260622</id><published>2011-03-10T11:08:00.001-05:00</published><updated>2011-03-11T06:18:07.947-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-11T06:18:07.947-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>On Teaching Programming in the Age of the Web</title><content type="html">&lt;p&gt;
In the last few years a lot of people have been pushing the idea of 'flipping' the classroom experience: have the students view online videos as the homework then use class time for one-on-one help, see, for example, Kahn's video below. I agree it's a great idea, and there is data to support it, but can we do that when teaching programming to University students?
&lt;/p&gt;

&lt;p&gt;In the last couple of years I have tried to do this for two of my classes. My &lt;a href="http://www.csce145.com"&gt;CSCE 145&lt;/a&gt; is our introduction to programming class. It is taken by both computer majors and non-majors, about 50% for each group. My section alone had about 60 students. I created some &lt;a href="http://vimeo.com/channels/csce145"&gt;Java programming videos&lt;/a&gt; which the students could watch at their leisure. With about 60 students, personalized in-class help was not possible, also because the classroom had no computers and the vast majority of students do not lug around a laptop all day with them. So, instead I decided to make the lectures more of an interactive demonstration: I would solve some programming problems in front of them and stop often ask them "how do you solve this?". The class also had a couple of weekly labs where the 60 students were broken up into more manageable groups and the TA's gave them individual help on the programming problems. I learned a couple of things.&lt;/p&gt;
&lt;ol&gt;

&lt;li&gt;The videos were watched by about 2/3 of the class. From the surveys I gather that the students that did not watch them where those who already had programming experience; they didn't need them. Thus, the videos were a success, mostly. Looking at the logs I see that the first video was watched the most, then the second one, and so on. So, some students stopped watching. I think I made the mistake of making them about 40mins long each (I wanted to cover 1 chapter in each video). Next time, I will follow Kahn's lead and keep them under 10 minutes and limit each one to more specific topics.&lt;/li&gt;


&lt;li&gt;The lectures, in which I do a sample programming problem, seemed to be well received, but attendance was still just around 50% (students did not get penalized for not attending lecture). I think it would be more effective to get rid of lectures completely and have more labs, but this would mean I would have to spend 24 hours/week just in lab (12 hours/group with 2 groups of 30 students), so it becomes a significant time commitment. Add to that the time I spend making videos, tests, and homeworks and it quickly becomes 40 hours/week for just that one class. I think a more realistic solution is to pay some of our A-level Seniors to do some of that coaching, but we don't appear to have that kind of money right now.&lt;/li&gt;

&lt;li&gt;IM works really well. If you to &lt;a href="http://www.csce145.com/"&gt;the class blog&lt;/a&gt; you will see the "Chat with Jose M Vidal" button. This, along with a &lt;a href="http://www.ideone.com"&gt;pastebin&lt;/a&gt; were very useful. For whatever reason, students will not email me their questions, but they will hit me up on the IM. This was a great way to offer when-needed help. At this level students often get stuck with a simple problem, like a missing semicolon or a variable defined in the wrong scope. A student could spend hours trying to figure this out while I can just look at it and in two seconds solve this tiny bug so they can move on rather than giving up out of frustation, which is what many times happens (and then they drop out). With IM they could just send me their pastebin link and I could solve their problem, any time during the day. The only problem was that our schedules are rather off-sync: I sleep from 10-6am while they appear to sleep from 2--10am. Luckily, my TA was able to pick up the night shift.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;In my &lt;a href="http://www.csce242.com"&gt;CSCE 242&lt;/a&gt; class I am teaching web applications which is a topic for which there are a lot of online instructional videos. The problem there is choosing which of these videos are good, and deciding on which ones to show at which time. Since this is a software development class, I structured as very heavy on the programming. The class consists of about 13 programming homeworks that, more or less, have the student build a modern complex web application. The class is not yet over, but already I see that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;IM has been even more useful in this class. I get at least a couple of question every day.&lt;/li&gt;

&lt;li&gt;The best help is context-sensitive. Complex programming ideas are easier learned in context. When I grade one of the homeworks and I tell the student "I see how you did this, and it works fine, but look at this other way of doing it. Isn't it soo much simpler?" the lesson is readily learned. At least, that's how it seems to me. I wish I could get some data on this.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Going forward I hope more people like Kahn step up and produce more of these videos. In fact, I want to see better videos with animations, professional voice-overs, professional writers, etc. These videos will be our new Public Library. They will allow me to focus on proving the context-sensitive help that students need. I also see that teaching will continue to move away from 9-5 and become more of a 24/7 on-call type of job. Hopefully, we will have shifts!&lt;/p&gt;

&lt;center&gt;
&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/dynamic/SalmanKhan_2011-medium.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/TedTalks-1609.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=1090&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=salman_khan_let_s_use_video_to_reinvent_education;year=2011;theme=new_on_ted_com;theme=a_taste_of_ted2011;event=TED2011;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talks/dynamic/SalmanKhan_2011-medium.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/TedTalks-1609.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=1090&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=salman_khan_let_s_use_video_to_reinvent_education;year=2011;theme=new_on_ted_com;theme=a_taste_of_ted2011;event=TED2011;"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/center&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/2287282355717260622/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=2287282355717260622" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2287282355717260622?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/2287282355717260622?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2011/03/on-teaching-programming-in-age-of-web.html" title="On Teaching Programming in the Age of the Web" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkMHQng8cSp7ImA9Wx9QFUg.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5130145417648415534</id><published>2010-12-28T09:53:00.011-05:00</published><updated>2010-12-28T12:47:13.679-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-28T12:47:13.679-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Sending Emails from a Google Spreadsheet</title><content type="html">&lt;p&gt;I have been using Google Spreadsheet to keep my class grades for a couple of years. It has several advantages over the PC version:
&lt;ol&gt;
&lt;li&gt;I can share the spreadsheet with my TAs so they can enter grades for their labs. We are all always on the same page.&lt;/li&gt;

&lt;li&gt;Google spreadsheet keeps track of all old revisions, so if any one of us makes a mistake we can always go back to see what the original grade was.&lt;/li&gt;

&lt;li&gt;It is trivially easy to create a graph of the grades and post a link to it on the &lt;a href="http://www.csce145.com"&gt;class blog&lt;/a&gt;. The graph gets updated automatically as the grades change.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;

&lt;p&gt;However, one remaining problem was &lt;b&gt;how to give each student his grades&lt;/b&gt; without revealing all the grades, which our university frowns upon, even if the names are not posted. The clear answer is to email each student his own grade.&lt;/p&gt;

&lt;p&gt;Luckily, Google has a cool feature called &lt;a href="http://code.google.com/googleapps/appsscript/"&gt;Google Apps Script&lt;/a&gt; which lets one write JavaScript programs that can access the data on a Google doc and do things like send emails. So, I wrote a short program to automatically send each student his grades.&lt;p&gt;

&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;To use it you must first set up your grades spreadsheet to look &lt;a href="https://spreadsheets.google.com/ccc?key=0Ao2vkgerarbjdFNJYzdNOEwtQzVWbmxucko0YzdyMVE&amp;hl=en&amp;authkey=CMTk38AP"&gt;like this one&lt;/a&gt;. Note that
&lt;ol&gt;
&lt;li&gt;the first row has a 'name', 'email' and other columns for each item,&lt;/li&gt;
&lt;li&gt;some columns have the same name as other columns, but with ' Comment' appended, for example: 'Test 1' and 'Test 1 Comment', the comment columns contain any comments you want to give the student&lt;/li&gt;
&lt;li&gt;the sheets are named 'grades' and 'template'&lt;/li&gt;
&lt;li&gt;the 'template' sheet contains the template information for building the emails (your message).
&lt;/ol&gt;
&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_mMuRlDPULDs/TRn0m2bRcoI/AAAAAAAAzb8/Uvsd87DWExQ/s1600/Screen%2Bshot%2B2010-12-28%2Bat%2B9.30.01%2BAM.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="139" width="320" src="http://4.bp.blogspot.com/_mMuRlDPULDs/TRn0m2bRcoI/AAAAAAAAzb8/Uvsd87DWExQ/s320/Screen%2Bshot%2B2010-12-28%2Bat%2B9.30.01%2BAM.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Once you have the spreadsheet built, go to 'Tools -&amp;gt; Scripts -&amp;gt; Scripts Editor and cut-and-paste the &lt;a href="http://jmvidal.cse.sc.edu/emailgrades/emailgrades.js"&gt;emailgrades.js&lt;/a&gt; script in there. Save it, then close and re-open the spreadsheet (or, run the &lt;code&gt;onOpen&lt;/code&gt; method if you know how to do that). You should now see a new menu item on you spreadsheet called 'Class', as shown in the screenshot.&lt;/p&gt;



&lt;div class="separator" style="text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_mMuRlDPULDs/TRn8AHQ2lZI/AAAAAAAAzcE/rhmBnoT0o1Q/s1600/Screen%2Bshot%2B2010-12-28%2Bat%2B10.01.34%2BAM.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="236" width="320" src="http://2.bp.blogspot.com/_mMuRlDPULDs/TRn8AHQ2lZI/AAAAAAAAzcE/rhmBnoT0o1Q/s320/Screen%2Bshot%2B2010-12-28%2Bat%2B10.01.34%2BAM.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;h3&gt;Usage&lt;/h3&gt;

&lt;p&gt;The &lt;b&gt;'Send Emails'&lt;/b&gt; item will send each student (row) his grades if you choose it when you have no cells selected. If you first select (light blue background box) some cells in the spreadsheet then it will only email the students in the selected rows. You can verify that the emails have been sent by going into your gmail account and checking the 'Sent Mail' folder. It can take several minutes for the emails to start appearing so be patient.&lt;/p&gt;

&lt;p&gt;
 The &lt;b&gt;'Preview Emails'&lt;/b&gt; item is mostly for debugging. It will show you a preview of two of the emails that send emails would send. The &lt;b&gt;'Show Email Quota'&lt;/b&gt; item tells you how many more emails you can send today. Google limits scripts to 500 emails per day to keep spammers from abusing the system. Since my classes have at most 60 students this has not been a problem for me.&lt;/p&gt;




&lt;p&gt;If you have any comments, bug reports, or feature requests please post them below.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/5130145417648415534/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=5130145417648415534" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5130145417648415534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5130145417648415534?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/12/sending-emails-from-google-spreadsheet.html" title="Sending Emails from a Google Spreadsheet" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_mMuRlDPULDs/TRn0m2bRcoI/AAAAAAAAzb8/Uvsd87DWExQ/s72-c/Screen%2Bshot%2B2010-12-28%2Bat%2B9.30.01%2BAM.png" height="72" width="72" /><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;DkMDQHo9fCp7ImA9WxFVGEs.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5668327384306287171</id><published>2010-06-18T08:34:00.000-04:00</published><updated>2010-06-18T08:34:31.464-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-18T08:34:31.464-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Resiliency in Supply Chain Networks</title><content type="html">Andrew Smith and I have been looking at the problem of resiliency in supply chain networks. That is, given the fact that supply chains are formed by selfish agents who create links with others based on their own local interests, we cannot expect the resulting network to always have the optimal resiliency characteristics. It is quite possible that because everyone is acting myopically&amp;mdash;agents care only about their immediate neighbors&amp;mdash;that the resulting network will have some bad global properties. The global property Andrew studies first is &lt;b&gt;resiliency&lt;/b&gt;, which we define as the ability of the network to withstand the loss of one node.
&lt;p&gt;
Andrew presented his paper titled &lt;a href="http://jmvidal.cse.sc.edu/lib/smith10a.html"&gt;A Practical Multiagent Model for Resilience in Commercial Supply Networks&lt;/a&gt; at the latest &lt;a href="http://users.ecs.soton.ac.uk/ss2/amec2010/"&gt;Agent-Mediated Electronic Conference&lt;/a&gt;. He implements a model which generates supply chain networks based on a well-known model from management theory, so the networks' topology should match real world networks, and then examines the resiliency of the resulting networks. The results are not surprising in the general sense (more connections mean more resiliency) but they do give us a quantitative measure of network resiliency.
&lt;p&gt;
Below are the slides from his presentation:
&lt;center&gt;
&lt;iframe src="http://docs.google.com/viewer?url=https%3A%2F%2Fdocs.google.com%2Fuc%3Fexport%3Ddownload%26id%3D0B42vkgerarbjNGE2Zjc5NmEtZDg5ZS00MmNiLWIwNzUtYWJkZjY3MmMzNjI4&amp;embedded=true" width="600" height="480" style="border: none;"&gt;&lt;/iframe&gt;
&lt;/center&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/5668327384306287171/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=5668327384306287171" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5668327384306287171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5668327384306287171?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/06/resiliency-in-supply-chain-networks.html" title="Resiliency in Supply Chain Networks" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUNRX0-cSp7ImA9WxFQGEQ.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5997168942168525164</id><published>2010-05-14T22:24:00.000-04:00</published><updated>2010-05-14T22:24:54.359-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-14T22:24:54.359-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>Software Engineering Projects</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_mMuRlDPULDs/S-4BphC1ZlI/AAAAAAAAssc/Z8CTtgrlHM8/s1600/100_0167.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_mMuRlDPULDs/S-4BphC1ZlI/AAAAAAAAssc/Z8CTtgrlHM8/s320/100_0167.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
I am often surprised at what a small group of our Senior Computer majors can accomplish in one semester, while taking four other classes, looking for a full time job and, in many cases, also working a part time job. But, they do some pretty amazing things in my CSCE 492 class.
&lt;/p&gt;
&lt;a href="http://code.google.com/p/csce492spring2010/"&gt;The first group&lt;/a&gt; this semester decided to build an iphone app. None of them had any experience with the Mac, or objective-C, or the xcode IDE, nor did any one of them even own a Mac! Still, none of this matters much. They quickly came up to speed on objective-C (which has similarities to many of the languages they learned in other classes) and managed to build a game that is better than many of the games in the app store. I expect their skills will be much in demand. In fact, I know they are.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://code.google.com/p/csce492group2/"&gt;second group&lt;/a&gt; built a Ruby on Rails applications that interfaced with the Amazon and the Facebook API's and used mysql, jQuery and had other javascript niceties. Only one of the students had experience with Ruby on Rails, and none had used web APIs before. It was another large learning and doing experience.&lt;/p&gt;

&lt;p&gt;Still, aside from the technical knowledge they acquired, what they always tell me they learned most is how to work in a team and coordinate their time so as to get large projects like these done. That is not something that can be learned in a lecture.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/5997168942168525164/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=5997168942168525164" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5997168942168525164?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5997168942168525164?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/05/software-engineering-projects.html" title="Software Engineering Projects" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_mMuRlDPULDs/S-4BphC1ZlI/AAAAAAAAssc/Z8CTtgrlHM8/s72-c/100_0167.JPG" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkEBRXszeyp7ImA9WxFQEks.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-5270095020300290929</id><published>2010-05-07T15:20:00.005-04:00</published><updated>2010-05-07T15:30:54.583-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-07T15:30:54.583-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>SeaPort Container Terminal Simulation</title><content type="html">&lt;a href="http://www.flickr.com/photos/msun523/3457213936/" title="Port of Long Beach by msun523, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3567/3457213936_fe0cc62d0d.jpg" width="500" height="333" style="float:right" alt="Port of Long Beach" /&gt;&lt;/a&gt;

&lt;p&gt;Next week I will be presenting our (with Nathan Huynh) &lt;a href="http://jmvidal.cse.sc.edu/papers/vidal10a.pdf"&gt;paper on agent-based seaport container terminal simulation&lt;/a&gt; at the workshop on &lt;a href="http://www.ia.urjc.es/att2010/"&gt;agents in traffic and transportation&lt;/a&gt;. 

&lt;p&gt;Basically, we used netlogo to build a simulation of a container seaport terminal, like the one you see on the photo. We focused only on the decision-making process of the cranes. Those large cranes you see have to pick up the containers and place them on the trucks as they arrive. Since the cranes are slow and there are many trucks the crane operators have to trade-off several competing interests when making their decision: trucks want to get out of there as quickly as possible, it takes the crane a long time to travel the length of the seaport, the port manager wants to maximize the number of trucks served but without making any one truck wait too long. 

&lt;p&gt;In this paper we tried the more obvious utility functions to see how they performed in a seaport with 2 or 3 cranes. The utility functions used are:
&lt;ol&gt;
&lt;li&gt;distance-based: roughly, go to the nearest truck, but avoid getting on the way of the other cranes,&lt;/li&gt;
&lt;li&gt;time-based: roughly, serve the trucks on a first-come first-serve based, while trying to stay out of the way of other cranes, &lt;/li&gt;
&lt;li&gt;a mixture of the above two.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Test results showed that the distance-based won, by a lot. It won not only on the throughput, as it obviously would, but also on the fairness measures, which is not so obvious.

&lt;p&gt;I'll be putting up the netlogo model on my &lt;a href="http://jmvidal.cse.sc.edu/netlogomas/"&gt;MAS Netlogo models page&lt;/a&gt; soon. The slides from the talk I'll deliver on Tuesday are below:

&lt;iframe src="http://docs.google.com/viewer?url=http%3A%2F%2Fjmvidal.cse.sc.edu%2Ftalks%2Fport-slides.pdf&amp;embedded=true" width="600" height="480" style="border: none;"&gt;&lt;/iframe&gt;

&lt;p&gt;We are currently working on expanding this model, both from a programming, simulate more parts of the supply chain, and the analysis side, put some bounds on the solution quality that can be achieved assuming local control and local information.</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/5270095020300290929/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=5270095020300290929" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5270095020300290929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/5270095020300290929?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/05/port-terminal-simulation.html" title="SeaPort Container Terminal Simulation" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm4.static.flickr.com/3567/3457213936_fe0cc62d0d_t.jpg" height="72" width="72" /><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;AkMGSH8-fCp7ImA9WxFSFUU.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-8207847206263657056</id><published>2010-04-17T13:45:00.001-04:00</published><updated>2010-04-18T07:00:29.154-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-18T07:00:29.154-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="teaching" /><title>What We Should Teach IT Students</title><content type="html">Yesterday I attended &lt;a href="http://www.posscon.org"&gt;POSSCON&lt;/a&gt; where I saw a talk by &lt;a href="http://theworkinggeek.com"&gt;Andy Lester&lt;/a&gt; on &lt;em&gt;"What We Should Teach IT Students"&lt;/em&gt;. As the use of the word IT in the title reveals, the target audience for the talk was enterprise developers. 
&lt;p&gt;
For readers new to the field, enterprise developer is just a type of job. The easiest way to define the term is by pointing out that Blue Cross Blue Shield and Bank of America hire "enterprise developers" while Google, Microsoft, and Valve hire "software engineers". That is, enterprise developers write the software that makes the business run smoothly&amp;mdash;process insurance claims&amp;mdash;while developers write the software that IS the business&amp;mdash;the new version of Windows. From an accounting point of view, enterprise developers are often a cost center for the company while developers are a profit center.
&lt;p&gt;
Still, the recommendations are largely applicable to all. He recommends students learn:
&lt;ol&gt;
&lt;li&gt;Source control
&lt;li&gt;Bug tracking
&lt;li&gt;Compiler (paying attention to the error messages)
&lt;li&gt;Make and the philosophy of repeatability
&lt;li&gt;Lint / splint or similar static code analyzers
&lt;li&gt;Serious editing
&lt;li&gt;DRY: Don't Repeat Yourself
&lt;li&gt;Defensive programming
&lt;li&gt;Maintenance: working on other people's code
&lt;li&gt;Manual testing
&lt;li&gt;Automated testing
&lt;li&gt;Efficiency and why it does not matter
&lt;li&gt;Thinking about the: business, project, release, deadline (getting the bigger picture)
&lt;li&gt;Teamwork: work well with others
&lt;/ol&gt;

Our curriculum covers all of these, some more than others, and I am in full agreement with all of them.
&lt;p&gt;
Some of these, however, I think must be left mostly to the student. I know that learning to use the editor is super important, but I don't think we need an actual class to teach editing! I really can't see myself standing in front of our students for a whole semester telling them "To compile your code, press F8; to indent your code press Ctrl-A then Crtl-I". They know they can just get the &lt;a href="http://eclipse-tools.sourceforge.net/shortcuts.html"&gt;list of shortcuts&lt;/a&gt; and memorize the ones they need. Still, I do make a point in my classes to stop and explain how I got &lt;code&gt;System.out.println&lt;/code&gt; to appear after just typing &lt;code&gt;sysout&lt;/code&gt;. Similarly, learning to use a source control or bug tracking system is just not that hard (compared with, say, implementing a compiler). Overall, the students who have not learned to use their editor, or understand compiler errors, or DRY, are generally the few who really don't care about programming, and their grades show it.
&lt;p&gt;
Still, I agree that these are all important skills to have.
&lt;p&gt;
Andy also said all students should have read &lt;a href="http://www.amazon.com/dp/0735619670?tag=multiagentcom"&gt;Code Complete&lt;/a&gt;, which is the required textbook for my &lt;a href="http://jmvidal.cse.sc.edu/csce492/spring10/index.html"&gt;492&lt;/a&gt; class. He also mentioned &lt;em&gt;The Pragmatic Programmer&lt;/em&gt; which is also a personal favorite of mine and on my &lt;a href="http://www.librarything.com/catalog/jmvidal&amp;tag=492"&gt;list of recommended books for 492&lt;/a&gt;. Of course, we all know they are good because &lt;a href="http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read"&gt;stackoverflow says they are&lt;/a&gt;.</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/8207847206263657056/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=8207847206263657056" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/8207847206263657056?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/8207847206263657056?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/04/what-we-should-teach-it-students.html" title="What We Should Teach IT Students" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>8</thr:total></entry><entry gd:etag="W/&quot;CkUCRHc8fCp7ImA9WxFQEks.&quot;"><id>tag:blogger.com,1999:blog-28222549190387355.post-3677861233853497754</id><published>2010-04-05T17:50:00.002-04:00</published><updated>2010-05-07T15:24:25.974-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-07T15:24:25.974-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="research" /><title>Multiagent Systems Introduction</title><content type="html">Last week it was my pleasure to give an invited talk at Temple University, part of their &lt;a href="http://www.temple.edu/engineering/announcements/Haythornthwaite.htm"&gt;Robert M. and Mary Haythornthwaite Foundation Distinguished Lecture Series&lt;/a&gt;. I tried to provide a high-level overview of multiagent systems is all about, which is always a huge challenge as the field covers a lot of disparate areas. After some thought, I decided to pick three applications and &lt;ol&gt;
&lt;li&gt;describe all the issues relevant to the problem,&lt;/li&gt;
&lt;li&gt;show how we use theory (either algorithms, game theory, or Economics) to get a better understanding of the underlying issues,&lt;/li&gt;
&lt;li&gt;explain how there is still much engineering that needs to be done because even the best theory or algorithm still millions of details, and software is just a collection of details.&lt;/li&gt;
&lt;/ol&gt;

For posterity sake, below are the slides I used. The slides contain as little text as possible, which I think generally makes for a better talk.
&lt;iframe src="http://docs.google.com/viewer?url=http%3A%2F%2Fjmvidal.cse.sc.edu%2Ftalks%2Fmasintro-slides.pdf&amp;embedded=true" width="600" height="480" style="border: none;"&gt;&lt;/iframe&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jose-vidal.com/feeds/3677861233853497754/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=28222549190387355&amp;postID=3677861233853497754" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3677861233853497754?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/28222549190387355/posts/default/3677861233853497754?v=2" /><link rel="alternate" type="text/html" href="http://www.jose-vidal.com/2010/04/multiagent-systems-introduction.html" title="Multiagent Systems Introduction" /><author><name>Jose Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><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;</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>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;.</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>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;</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>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.</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>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;</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></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>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;</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></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>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;</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>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;</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>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.</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="http://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 Vidal</name><uri>https://plus.google.com/106856055579609524105</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh3.googleusercontent.com/-Ef0uvu-yHCE/AAAAAAAAAAI/AAAAAAABmA4/TaN4n4UO9PI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry></feed>
