<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' 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'><id>tag:blogger.com,1999:blog-6898505354952985680</id><updated>2024-11-01T12:34:12.611+02:00</updated><category term="research"/><category term="china"/><category term="internet"/><category term="open source"/><category term="Nile University"/><category term="DNIS"/><category term="NU"/><category term="Software Freedom Day"/><category term="acm"/><category term="challenges"/><category term="graduation project"/><category term="internet architecture"/><category term="internet routing"/><category term="mobicom"/><category term="mobicom&#39;09"/><category term="mobicom2009"/><category term="nontechnical"/><category term="opensource"/><category term="sfd"/><category term="software-freedom-day"/><category term="technologies"/><category term="wrf basics"/><category term="Out of the Stone Age"/><category term="SRC"/><category term="Student Research Competition"/><category term="Sun"/><category term="advanced research wrf"/><category term="alexandira-university"/><category term="algorithms"/><category term="bgp"/><category term="contribution"/><category term="cpp"/><category term="green"/><category term="make"/><category term="programming"/><category term="semantic-web"/><category term="start-up"/><category term="the future"/><category term="threads"/><category term="weather prediction"/><category term="weather research and forcasting"/><category term="websites"/><category term="wikimania"/><category term="wrf"/><category term="802.11"/><category term="BA"/><category term="BAD09"/><category term="CEO"/><category term="CUDA"/><category term="DARPA"/><category term="DARPA Robotics Challenge"/><category term="DRC"/><category term="J2ME"/><category term="Java"/><category term="MSDN"/><category term="Microsoft"/><category term="MuCSAT"/><category term="Sun-SPOT"/><category term="TV industry"/><category term="Virtual-Labs"/><category term="android"/><category term="ar drone"/><category term="arm"/><category term="audience measurements"/><category term="bibliotheca alexandrina"/><category term="blocking"/><category term="bookmarks"/><category term="change"/><category term="chimp"/><category term="click"/><category term="community"/><category term="companies"/><category term="compilation"/><category term="computer vision"/><category term="concert"/><category term="contributing to open source"/><category term="core-i7"/><category term="data structures"/><category term="driver"/><category term="e-just"/><category term="edge fabric"/><category term="egypt"/><category term="environment"/><category term="espace"/><category term="euler equations"/><category term="event-driven"/><category term="eventmachine"/><category term="events"/><category term="expo"/><category term="facebook"/><category term="favourite"/><category term="feeds"/><category term="github"/><category term="gnuradio"/><category term="google infrastructure"/><category term="greenpeace"/><category term="indexing"/><category term="intel"/><category term="interview"/><category term="kd-tree"/><category term="kd-trees"/><category term="knn"/><category term="life of a phd"/><category term="linux"/><category term="makefile"/><category term="masdar"/><category term="masdar city"/><category term="matlab"/><category term="mental health"/><category term="mobile computing"/><category term="multi-dimensional data"/><category term="multicore"/><category term="nesting"/><category term="netflix open connect"/><category term="netlink"/><category term="network sharing"/><category term="nl80211"/><category term="nytimes"/><category term="open science"/><category term="osum"/><category term="personal"/><category term="phd"/><category term="piano"/><category term="presentation"/><category term="processors"/><category term="proposal"/><category term="python"/><category term="reading"/><category term="rescue"/><category term="research life"/><category term="robots"/><category term="ruby"/><category term="running-man"/><category term="save the children"/><category term="search"/><category term="sfd2009"/><category term="sfd2010"/><category term="sfd2011"/><category term="sourceforge"/><category term="speaking"/><category term="sun-campus-ambassador"/><category term="talks"/><category term="threaded"/><category term="tools"/><category term="value"/><category term="video on demand"/><category term="video streaming"/><category term="wifi"/><category term="wifi dongle"/><category term="wireless research center"/><category term="wpa_supplicant"/><category term="writing"/><title type='text'>Syntax and Semantic</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-5118983268136614116</id><published>2020-10-08T11:55:00.002+02:00</published><updated>2020-10-08T11:55:47.111+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="internet architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="internet routing"/><category scheme="http://www.blogger.com/atom/ns#" term="network sharing"/><title type='text'>Sharing the Network: From Circuit Switching to Packet Switching (The Hitchhiker&#39;s Guide to Computer Networks)</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Prelude ... From Circuit Switching to Packet Switching&lt;/h4&gt;&lt;p&gt;The simplest approach for two people to communicate over long distances is to connect them through a dedicate physical wire. However, how would we scale that model to a million people that individually want to be able to communicate with everyone else? One approach is to extend wires between all pairs of users, requiring hundreds of billions of wires.&amp;nbsp;&lt;/p&gt;

&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;giphy-embed&quot; frameborder=&quot;0&quot; height=&quot;100%&quot; src=&quot;https://giphy.com/embed/3o6ZsVO9VGmJIAxEPe&quot; style=&quot;position: relative;&quot; width=&quot;200%&quot;&gt;&lt;/iframe&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;br /&gt;This is definitely not a good way to design a network. So what&#39;s wrong with that design? First, it is unlikely that every single person in that network will want to talk to everyone else at the same time. This means that we can use fewer wires. Second, not all connections are created equal. Longer wires cost a lot more money than short ones. Our design should have short wires whenever possible. Also it will be nice if the cost of extending long wires is shared between multiple users at the same time.&lt;/p&gt;&lt;p&gt;Let&#39;s revisit our connection strategy. Rather than extending wires between every pair of people, we can take their geographical distance into account. We can connect all users in a single geographical area (say a town or a neighborhood) to a communication &quot;hub&quot; through short wires. The &quot;hub&quot; can connect these users to each other through tiny wires within the hub. The number of tiny wires at the hub can be small and the hub can reconnect its set of tiny wires to connect people that need to communicate at the moment. A pair of users that are connected to the same &quot;hub&quot; can communicate with each other through a dedicated set of wires (their own wires connecting them to the hub and the tiny wire within the hub). This configured connection is called a circuit. The configuration of these circuits change depending on which pair of users want to communicate.&lt;/p&gt;

&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;giphy-embed&quot; frameborder=&quot;0&quot; height=&quot;100%&quot; src=&quot;https://giphy.com/embed/1oEttHTW7Dh6WFabZd&quot; style=&quot;position: relative;&quot; width=&quot;200%&quot;&gt;&lt;/iframe&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;This is what a hub with tiny wires looked like back in the day. operators connect actual wires between the caller and the callee in the circuit board in front of them.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Hubs in a single geographically area (say a metro or a large city) can be connected through a large hub using the same ideas. We can then create huge hubs to connect different cities in the same state or county and mega hubs to connect states or even continents. If we want to make sure that everyone can communicate with everyone over dedicate wires, then the number of &quot;wires&quot; in a link will be equal to the number of users using one end of the hub multiplied by the number of users on the other end. Say if a million people on the east coast want to communicate with a million people on the west coast we will still need a trillion wires. Now we can leverage the fact that not all of users will communicate at the same time. Thus, we can have the number of wires connecting two hubs be equal to the maximum number of a pairs of users that want to communicate at the two ends of a hub.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The upside of circuit switching is that any pair of users get the full bandwidth of the dedicate circuit connecting them. They don&#39;t have to compete for bandwidth with anyone. This dedication of resources simplifies the network technologies significantly. However, there are several drawbacks of circuit switching. First, the cost of having dedicated wires is large, especially for &quot;long wires&quot;. Second, configuring circuits on demand adds significant latency. The GIF above shows how operators used to configure the circuits manually. Even today automated circuit switching still adds significant latency.&lt;/p&gt;&lt;p&gt;Seems like this dedicated wire business is not working ...&amp;nbsp;&lt;/p&gt;&lt;p&gt;What if multiple people can share the same wire? This is where packetization comes in.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Packet switching relies on breaking any data that a user sends into many small packets of data. Each packet specifies its source and destination. The network handles each packet individually, delivering it to its destination. If two users want to use the same wire, they can take turn each sending a single packet at a time. If the available bandwidth can allows the network to send both packets at &quot;the same time&quot;, then the performance perceived by the user will not be different from circuit switching. However, when there is not enough bandwidth for packets from both users to be sent at the same time, then the network will have to hold the packets, put them in a queue, order them based on the importance of their users, and then send time one at a time. If users send much more packets than the network can handle, packets can face very long delays. This leads to one of the biggest challenges that result from resource sharing in computer networks: congestion.&lt;/p&gt;

&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;giphy-embed&quot; frameborder=&quot;0&quot; height=&quot;120%&quot; src=&quot;https://giphy.com/embed/dwLk9Qb116F3y&quot; style=&quot;position: relative;&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In follow up posts, I will present how modern networks deal with packet queues.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/5118983268136614116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2020/10/sharing-network-from-circuit-switching.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/5118983268136614116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/5118983268136614116'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2020/10/sharing-network-from-circuit-switching.html' title='Sharing the Network: From Circuit Switching to Packet Switching (The Hitchhiker&#39;s Guide to Computer Networks)'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-8211200142893240754</id><published>2020-08-03T14:00:00.007+02:00</published><updated>2020-08-07T16:06:04.860+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="video on demand"/><category scheme="http://www.blogger.com/atom/ns#" term="video streaming"/><title type='text'>Video on Demand: Part 1 (The Hitchhiker&#39;s Guide to Computer Networks)</title><content type='html'>&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: right;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://www.ncta.com/sites/default/files/inline-images/250-Global-Application-Category-Traffic-Share.gif&quot; style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;579&quot; data-original-width=&quot;250&quot; height=&quot;370&quot; src=&quot;https://www.ncta.com/sites/default/files/inline-images/250-Global-Application-Category-Traffic-Share.gif&quot; width=&quot;160&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Data from&amp;nbsp;the &lt;a href=&quot;https://www.sandvine.com/global-internet-phenomena-report-2019&quot;&gt;2019 Global &lt;br /&gt;Internet Phenomena Report&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Video is the dominant type of traffic on the Internet. In 2019, video on demand constituted 60% of the total global Internet traffic. The image to the right shows the huge gap between the bandwidth demand of video streaming and the second highest application which is web traffic (think email, blogs, and news). This means that if you are in the computer networks business, you are pretty much in the business of video delivery. So the biggest question here, what is the best way to deliver video?&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &quot;best&quot; in this context can mean a couple of different things. It can mean delivering the best quality video for the user. Video quality does not only refer to whether a video is in HD or UHD but also whether it freezes and hangs or not. The &quot;best&quot; way to deliver video can also mean the most cost efficient way. If we can save 1% of the cost of delivering all videos on the Internet, we can save tens of millions of dollars in network operations costs. This post will explore some of the technologies used to deliver high quality video at low cost.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before we go any further, I recommend that you do the following experiment: start watching any youtube video on your phone, then put your phone in airplane mode after the first 5 seconds of the video. The video will not immediately stop after the phone goes in airplane mode, rather, it will keep on playing for a few more seconds before it stops. The first question, with a somewhat obvious answer, is: Where did the extra few seconds of video come from if the phone was not connected to the Internet? Clearly, they were downloaded before you put your phone in airplane mode. This leads us to the following questions: Why does Youtube (or any other video streaming service for that matter) do this? How much video is downloaded and how is that determined? Have you ever been watching a video that switched between high quality and low quality, what&#39;s up with that?&amp;nbsp;&lt;/div&gt;

&lt;div style=&quot;height: 0px; padding-bottom: 50%; position: relative; width: 100%;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;giphy-embed&quot; frameborder=&quot;0&quot; height=&quot;100%&quot; src=&quot;https://giphy.com/embed/HoM8C39iqS9H2&quot; style=&quot;position: absolute;&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;


&lt;h4 style=&quot;text-align: left;&quot;&gt;Adaptive Bitrate (ABR) Video Streaming Algorithms&lt;/h4&gt;&lt;div&gt;Videos are not stored as one lengthy file. Rather, videos are broken into small chunks that are downloaded in sequence as you watch the video. Each chunk has around &lt;a href=&quot;https://developer.att.com/video-optimizer/docs/best-practices/video-segment-size&quot; target=&quot;_blank&quot;&gt;2-10 seconds&lt;/a&gt; of video. Each chunk is stored in different bitrates. Examples of bitrates include Standard Definition (SD), High Definition (HD), and Ultra High Definition (UHD). Chucks that get downloaded but are not yet watched are stored in a buffer (the gray line ahead of the red line in your Youtube play like the GIF above).&lt;/div&gt;

&lt;div style=&quot;height: 0px; padding-bottom: 25%; position: relative; width: 100%;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;giphy-embed&quot; frameborder=&quot;0&quot; height=&quot;100%&quot; src=&quot;https://giphy.com/embed/l4EoQXbKMlVL60GJO&quot; style=&quot;position: absolute;&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The time to download a chunk should be smaller than the time it takes to watch it. Otherwise, you will watch a chunk, and then wait a little bit until the next is downloaded. This is actually what happens when a video freezes and rebuffers (like the GIF above). Rebuffering literally means downloading a chunk into an empty buffer (refilling the buffer) because you watched all that was downloaded in the buffer. The higher the bitrate (the quality or definition) of a video, the longer it takes to download its chunks. This means that if your Internet speed is low, and you force the play to download high quality chunks, the player will have to do a lot of rebuffering.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ABR algorithms are part of the video player app on your phone or smart TV that decides how many chunks to download and the quality of each chunk. The &quot;Adaptive&quot; in ABR refers to choosing the bitrate of the downloaded chunks based on the Internet speed. If your Internet speed changes, say because someone else is watching another video, the adaptive algorithm reduces the bitrate of the downloaded chunks. It will also increase the bitrate when your Internet speed improves.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Researchers identified &lt;a href=&quot;https://mux.com/blog/the-four-elements-of-video-performance/&quot; target=&quot;_blank&quot;&gt;three video qualities&lt;/a&gt; that almost all modern ABR algorithms try to optimize: 1) The quality of the video (obviously) although if you are watching a video on a small screen you won&#39;t really notice the difference between HD and UHD. In other words, what the ABR algorithm will consider the best quality for a video depends on the size of the screen you are watching that video on. 2) The number of times the video rebuffers while you are watching. ABR algorithms will sacrifice quality to avoid rebuffering. 3) The ABR algorithm should start the video as soon as possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is not trivial to balance all four factors: try to start the video as fast as possible by downloading the lowest bitrate and you risk shifting between bitrates too many times as you try to improve quality. Delay the start just a bit to download the best quality video and you risk it taking too long or the Internet changing midway and then you have to switch. Fill the buffer too much and you consume too much of the user&#39;s data plan, and fill it too little and you risk the video rebuffering. Most modern ABR algorithms find a good balance but there is still room for improvement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The ABR algorithm measures your Internet speed, and based on that decides the highest video quality possible that will still avoid rebuffering. The image below shows that depending on the available bandwidth (Internet speed), the best bitrate changes. The ABR algorithm downloads a number of chunks to keep the video running even if your Internet is temporarily interrupted but not too much that will download parts of the video far ahead that you might not get to it. This is why when you put your phone in airplane mode, the video kept on going for a while.&amp;nbsp;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/9/99/Adaptive_streaming_overview_bit_rates_2011_07_28.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;231&quot; data-original-width=&quot;800&quot; height=&quot;178&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/9/99/Adaptive_streaming_overview_bit_rates_2011_07_28.png&quot; width=&quot;614&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Illustration of the most appropriate bitrate as the available bandwidth changes over time &lt;br /&gt;(&lt;a href=&quot;https://en.wikipedia.org/wiki/Adaptive_bitrate_streaming#/media/File:Adaptive_streaming_overview_bit_rates_2011_07_28.png&quot; target=&quot;_blank&quot;&gt;source of the images&lt;/a&gt;)&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Developing new ABR algorithms remains an active area of research. ABR algorithms rely on knowing your Internet speed now and guessing what it is going to be like in the future (to download the right amount of chunks to avoid interruptions). Guessing what your Internet is going to be like is especially challenging when you are on the move and using your wireless data. There are a lot of factors that affect the Internet speed you get on your phone when you are using your data plan. Different ABR algorithms take different factors into account and adapt to them in different ways.&amp;nbsp; My colleagues at MIT developed a machine learning-based ABR algorithm that uses deep learning to identify the best bitrate given a bunch of factors including the video, screen size, and network conditions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;iframe allow=&quot;autoplay; fullscreen; gyroscope; accelerometer&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;274&quot; src=&quot;https://player.vimeo.com/video/225994618&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another interesting problem in ABR algorithms arises when we deal with 360 videos. Try playing the 360 video above, you can look around by moving your phone or just swiping on the video. When you are completely facing the sand, the video doesn&#39;t display the ocean facing parts. Should the part you are seeing (the sand) be viewed at the same quality as the part you are not seeing (the rest of the ocean)? Note that if you download them both at the same quality, that means you will be downloading a lot of large chunks and that can mean that the overall quality can be low. However, if you decide to download the parts that you are not viewing at a low quality, you can improve the quality of the parts you can actually see. Such decisions can be made based on the interesting part of the video and by modeling and predicting the motion of users through such videos.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this post, I only cover the video streaming algorithm. There are other aspects of video on demand that are of interest from a networks point of view like where to store the videos and how multiple videos share the network. Such problems I will cover in follow up posts.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/8211200142893240754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2020/08/video-on-demand-part-1-hitchhikers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/8211200142893240754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/8211200142893240754'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2020/08/video-on-demand-part-1-hitchhikers.html' title='Video on Demand: Part 1 (The Hitchhiker&#39;s Guide to Computer Networks)'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-3147328359379004181</id><published>2020-07-18T01:15:00.132+02:00</published><updated>2020-07-20T02:07:59.076+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithms"/><category scheme="http://www.blogger.com/atom/ns#" term="bgp"/><category scheme="http://www.blogger.com/atom/ns#" term="challenges"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="internet architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="internet routing"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><title type='text'>The Hitchhiker&#39;s Guide to Computer Networks</title><content type='html'>&lt;div&gt;&lt;h4 style=&quot;text-align: center;&quot;&gt;Introduction&lt;/h4&gt;&lt;/div&gt;One of the few reliable things that didn&#39;t crumble under the pressure of quarantining and working from home is our digital infrastructure. It remains largely unaffected as we conduct most of our business activities online. &lt;i&gt;This is no accident.&lt;/i&gt; It is the result of 40+ years of continuous research to make that infrastructure faster, cheaper, and more reliable. My goal writing this series is to shed some light on the different hidden aspects of our digital infrastructure. In doing so, I hope that I will help the reader get a behind the scene&#39;s view of what we take for granted when we are watching HD videos, buying our groceries online, and chatting online with people on the other side of the planet.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A typical Internet user pays for their Internet and online services (Netflix, Amazon Prime, Spotify, iCloud) with some expectations of the quality of experience they will receive. Users also expect that the way they interact with the digital world will keep improving. That&#39;s partly why they upgrade their phones, tablets, and laptops and buy new devices like smart assistants. In this series, I will discuss how different parts of the infrastructure work and how that affects such users. Specifically, I will be viewing the different challenges in making the Internet tick as one of three aspects of our everyday interaction with the digital world:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Quality of Experience:&lt;/b&gt; When we do anything online, we expect it to work right every time. This expectation of good quality of experience comes from the reliability and promise the infrastructure has consistently shown. But have you ever watched a video that keeps switching between standard definition to high definition only to end up freezing? Of course you have and that&#39;s what I refer to here as bad quality of experience. There are a lot of moving parts from your home network, to your Internet service provider, to your video service provider that have to work well together and separately to ensure that you have a good quality of experience online.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Flow of money:&lt;/b&gt; The network of connected people and corporations that form the Internet does not only capture the flow of information between them, it also captures the flow of money. You pay your Internet service providers, video service provider, music service, etc. Those service providers in turn pay other parts of the infrastructure like Internet Transit Providers (Internet service providers for the Internet service providers) and cloud services providers (the place where all your videos, pictures, music, and emails are stored and processed). This flow of money is at the center of a lot of how the infrastructure evolves, which can actually end up impacting your monthly Internet bill.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Gateways to the digital world:&lt;/b&gt; At the turn of the century, we interacted with the Internet primarily through text-based content viewed on big screens. Twenty years later, we are primarily interacting with it through video on small screens. This required an evolution in personal devices as well as the digital infrastructure (moving from carrying text to carrying 4K HD videos requires a 10,000 folds increase in capacity). The future promises even more developments where our interaction with the digital world is more seamless (think augmented reality and virtual reality with devices less bulky and awkward than the Oculus and Google glasses). Between us and that future there are some challenges that we need to overcome to make the devices more natural and infrastructure even faster.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In every post in this series, I answer three questions regarding each aspect of the infrastructure: What is it? Why should I care? And why haven&#39;t we solved all of its problems already? Hopefully, the answer to the first two questions will get the reader to ask the third question. In my answers to the third question, I will attempt to highlight some of the challenges we face with improving and understanding the infrastructure we have built.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Target audience:&lt;/b&gt; This series is developed specifically for non-technical people. It is not meant to provide a deep technical description of any particular area. I will avoid most technical terms and the alphabet soup that I think acts as a barrier to understanding the exciting hidden parts of our digital infrastructure.&lt;/div&gt;&lt;div&gt;&lt;h4 style=&quot;text-align: center;&quot;&gt;Overview of our Digital Infrastructure&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;Before I start explaining different aspects of the foundation of our modern online lives, I will give a very brief and intentionally cartoonic view of the Internet today.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjptLH7011eAxHRDrjXxZ0Mfp-jTWAHgFfvZRaI5H0G060eOHsk4Mi_kj2FPQ7VC-tlaTQSxpDTdEx-nXZ24tHLNAtCk2r-yKITZDUd6tdwn8DY-Yd-cFNfmbttM26DHh40Uv0GisTqD1Su/s1601/World_map_of_submarine_cables.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1025&quot; data-original-width=&quot;1601&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjptLH7011eAxHRDrjXxZ0Mfp-jTWAHgFfvZRaI5H0G060eOHsk4Mi_kj2FPQ7VC-tlaTQSxpDTdEx-nXZ24tHLNAtCk2r-yKITZDUd6tdwn8DY-Yd-cFNfmbttM26DHh40Uv0GisTqD1Su/w500-h320/World_map_of_submarine_cables.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Map of Internet marine cables&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I refer to a network from now on, I refer to a set of connected devices that can communicate within a single infrastructure that is owned and operated by a single entity. For example, within your home network your phone, laptop, smart TV, digital assistant, and smart lights can all communicate through your home wireless router and they are all owned by you. Even when not connected to the Internet, this network can provide some useful functions carrying your data between devices. My wife and I exchange pictures that each of us took of our toddler every night. This exchange happens within our home network. Networks can be very large, spanning whole countries or even multiple continents. For instance, Google&#39;s private network carries data between four continents.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Internet is a network of networks. This means that by definition the Internet is not owned or operated by any single entity. However, the definition also has a very important implication: all the networks that form the Internet have to agree on some set of primitives that allow them to interact without a glitch. This set of primitives has to be very small (so as to avoid imposing any strict limitations on the operator of any single network) but it also has to be expressive enough so that it can handle the diversity of the networks and their operators. This is no trivial matter. All companies in all countries that want to be part of the Internet have to agree on this (think the US, Russia, and China agreeing on and using the same &quot;language&quot;). This means that this &quot;language&quot; has to be expressive enough to allow all networks to interact but limited enough so that each company and country can still enact its own policies within its own network. The main primitive of the Internet, that everyone has to agree on, is that when a network is given a piece of data with a destination address,&amp;nbsp;the network will &lt;i style=&quot;text-decoration-line: underline;&quot;&gt;&quot;attempt&quot;&lt;/i&gt;&amp;nbsp;to deliver the data to its destination or forward it to another network that knows how to deliver it. In fact, network operators can choose to prioritize the delivery of data based on the source, destination, or nature of that data, dropping low priority data.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not all networks are created equal. In fact, networks are typically created to serve a specific purpose (from the hardware they use to the language that hardware speaks). Your home router creates your home network. Your Internet Service Provider has a different set of devices forming its network. The purpose of the network of an Internet Service Provider is to connect residential and small business networks to the rest of the Internet. Transit providers are large networks that connect other big networks to each other. For instance, it can be that a Transit provider is what connects your Internet Service Provider (and consequently your home network) to Facebook&#39;s network. Modern online services (including Facebook) typically reside in datacenters. Datacenter networks carry data within a datacenter for processing (like facebook finding your face in a picture).&amp;nbsp; The figure below shows how your home network is connected to the rest of the world through different types of networks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.google.com/drawings/d/e/2PACX-1vQISiUFKGAnx98jfajb0i4qe_JJh4O8tSA4OdjyhbL6Qio_diIBCbvJ9lEgg9CwsUee2Xov0LgnWAaB/pub?w=1327&amp;amp;h=630&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;629&quot; data-original-width=&quot;1327&quot; height=&quot;258&quot; src=&quot;https://docs.google.com/drawings/d/e/2PACX-1vQISiUFKGAnx98jfajb0i4qe_JJh4O8tSA4OdjyhbL6Qio_diIBCbvJ9lEgg9CwsUee2Xov0LgnWAaB/pub?w=1327&amp;amp;h=630&quot; width=&quot;544&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A simple view of the modern digital infrastructure&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Given this picture, think about the quality of experience you are having when watching a video. Specifically, if you are watching a Netflix video and it starts to freeze or switch between standard definition and high definition, whom should you blame? You should probably be able to tell now that the answer to this question is not so simple. It can be that your roommate is watching another video and that&#39;s causing glitches in your home network. It can also be that your Internet service provider is overloaded by customers and their network is glitching. The problem can also be in the Transit service provider connecting the datacenter that has your video and your Internet service provider. It can also be a problem with Amazon&#39;s datacenter network where most Netflix data is stored. Although in the specific case of Video, some of these scenarios are much more likely than others, depending on the online service you are using and the conditions of each of the networks, the likelihood of who&#39;s to blame changes. Also this should provide a clear reasoning for why each of these service providers would deploy their own optimizations in order to avoid any glitches with your video (each optimization is typically a different research question).&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you examine the picture above carefully, you will see that a single company can play multiple roles. This significantly affects the flow of money. For instance, Google can be your Internet provider through Google Fiber or Google Fi. It can also be your video and music provider through Youtube and Youtube Music. This means that a single company can be in control of &lt;u style=&quot;font-style: italic;&quot;&gt;your&lt;/u&gt;&amp;nbsp;view of the Internet and the main beneficiary of your online activity. This evolution in roles happens at a fast pace and at various scales, leading to a very peculiar property for a completely artificial system: The Internet is so big and evolves so quickly that we don&#39;t fully understand some aspects of its behavior and how it impacts our own behavior as its users. There is a whole research area that tries to measure and understand the evolution and properties of the modern Internet.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;h4 style=&quot;text-align: center;&quot;&gt;About the Rest of the Series&amp;nbsp;&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;In follow up (hopefully weekly and more realistically biweekly) posts, I will focus on a specific type of network or problems that is still facing the builders of our digital infrastructure. I will try to alternate between topics based on what aspect of our lives it touches (quality of experience, money, or gadgets). I hope that I will be able to cover the following list of topics:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Video: &lt;/b&gt;Being the dominant type of traffic on the Internet and the center of our lives in the quarantine, it seems like a good place to start. I will answer questions like: why does the quality of video change when the connection is not good? to why do live videos glitch more than recorded ones? I will also explore some of the frontiers in video streaming including streaming 360 HD videos and augmented reality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Internet Architecture:&lt;/b&gt;&amp;nbsp;This topic is concerned with defining the primitives that all networks that form the Internet have to agree on and how money flows (who pays whom). I will answer questions like: why is the Internet resilient and not easy to control? and how can freedom of speech be compromised on the Internet (despite its resilience and inherent support of freedom of speech)? I will also discuss some of the exciting recent attempts to make the evolution of the Internet easier without compromising its resilience and security.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Internet of Things: &lt;/b&gt;As processors become cheaper and smaller, we are able to stick them on any device and call it a smart device (smart light bulbs, smart microwaves, smart scales etc). The typical implication of such &quot;smartness&quot; is that it can be controlled from your phone from anywhere. This means that infrastructure has to support billions of connected devices. In covering this (maybe recurring) topic I will answer questions like: what are some of the new applications of the Internet of Things? why can&#39;t we just plug in all the new devices and make them work like my phone?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Congestion Control: &lt;/b&gt;I will tell you the story of the protocol that &quot;saved the Internet&quot; and how the Internet is &quot;not quite saved&quot; till this day.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Stay tuned for more posts and more topics to be covered in this series.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/3147328359379004181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2020/07/the-hitchhikers-guide-to-computer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3147328359379004181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3147328359379004181'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2020/07/the-hitchhikers-guide-to-computer.html' title='The Hitchhiker&#39;s Guide to Computer Networks'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjptLH7011eAxHRDrjXxZ0Mfp-jTWAHgFfvZRaI5H0G060eOHsk4Mi_kj2FPQ7VC-tlaTQSxpDTdEx-nXZ24tHLNAtCk2r-yKITZDUd6tdwn8DY-Yd-cFNfmbttM26DHh40Uv0GisTqD1Su/s72-w500-h320-c/World_map_of_submarine_cables.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-3783913564223867753</id><published>2018-05-01T21:47:00.000+02:00</published><updated>2018-05-02T13:59:34.245+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="life of a phd"/><category scheme="http://www.blogger.com/atom/ns#" term="mental health"/><category scheme="http://www.blogger.com/atom/ns#" term="phd"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><category scheme="http://www.blogger.com/atom/ns#" term="research life"/><category scheme="http://www.blogger.com/atom/ns#" term="speaking"/><title type='text'>My PhD coping mechanism (or how speaking my mind out loud helps me maintain my sanity)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipEGW7T55jqSz5B1xwhwsjX1BGts35Q9elpSze-YWPgF2xBFcEuFhBD-oBNX1XISSmv1QPJ0PhA2kvb4hbvFdKBbHbz-5eh1qYisELD4XFjH0RPhRAy7Ywdl8rIGY4A4pIur1p_9ctZQdF/s1600/communicatie.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;254&quot; data-original-width=&quot;480&quot; height=&quot;169&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipEGW7T55jqSz5B1xwhwsjX1BGts35Q9elpSze-YWPgF2xBFcEuFhBD-oBNX1XISSmv1QPJ0PhA2kvb4hbvFdKBbHbz-5eh1qYisELD4XFjH0RPhRAy7Ywdl8rIGY4A4pIur1p_9ctZQdF/s320/communicatie.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Getting a PhD can easily become a lonely where students get depressed, feel out of place, thrown away alone with a mild to a sever sense of the imposter syndrome. There is no wonder that &lt;a href=&quot;https://www.nature.com/articles/nbt.4089&quot;&gt;&quot;graduate students are more than six times as likely to experience depression and anxiety as compared to the general population&quot;&lt;/a&gt;. Almost all my friends in graduate school face some sort of mental health struggle. This prompted me to write a post on my personal approach to dealing with my own issues and they all have to do with talking. Personally, I find it very hard to talk to strangers, so I focus all my talking to people I know. I talk to different people because defeating imposter syndrome, self doubt, angry thoughts, and most importantly the depression spiral requires multiple perspectives, especially with the highly logical PhD student.&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Talking with advisors&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
One of the challenges of being a graduate student is feeling at loss when it comes to assessing my own progress, strengths, and weaknesses. I find myself feeling somewhat bothersome by asking too much from my advisors but I find that having different types of meetings to be very helpful:&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
&lt;i&gt;Weekly progress meeting&amp;nbsp;&lt;/i&gt;Those are backbone of the progress of a junior graduate student. In those meetings you brainstorm, get feedback on ideas, and present new results and approaches. Those are very useful and not having such regular meetings is a source of distress to many graduate students.&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
&lt;i&gt;Periodic feedback meetings&lt;/i&gt;&amp;nbsp;Personally, I like to get periodic feedback on my progress and methodology. This is not a common practice because some either prefer to get that from peers, or they are just not interested to hear someone saying what essentially is &quot;you suck!&quot;. The way I see it is that I am always in need for improvement. I schedule a meeting per semester, usually towards the end of the semester, where I sit with my advisors and discuss what I did right and what I did wrong. These meetings have been very helpful in a period where all my papers were getting rejected but my advisors told me that this was just a part of the process and I needed to push through it.&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
&lt;i&gt;Personal guidance meetings&lt;/i&gt;&amp;nbsp;Many professors, at least at Georgia Tech, have an open door to all students. I use that a lot whenever I am stuck either personally and professionally. Rather than stumbling around trying to dig myself out of hole, I walk in and ask for help. This has been very helpful in identifying problems and solutions to many situations ranging from course choices, teaching style, advising junior students, and many more.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;
I have worked with multiple advisors and I know that in a lot of cases where it is not easy or even feasible to have all these types of meetings with the main advisor. Hence, finding other professors in the department that are willing to have such conversations is extremely important. Diversifying sources of input is important for personal growth as it provides multiple perspectives which helps a student to have a more complete picture. It also helps smooth harsh criticism and pinpoint sources of problems. This is an important approach to avoid falling into the spiral of depression caused by a single source of negative criticism, which also makes it hard to accept solutions provided by the same critic.&lt;/div&gt;
&lt;/h3&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Talking with peers&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
I believe this to be one of the most helpful coping mechanism I have. My peers, specifically my lab mates and close friends, generously allow me to argue, brainstorm, and discuss my plans and vent about life and work. Having such open discussions in a lab stems from a non-competitive environment that our advisors create. These conversations also help maintain it that way.&lt;br /&gt;
&lt;br /&gt;




In most cases, your peers are going through exactly what you are going through. You don&#39;t have to explain much and it is hard to be misunderstood, all without condescension. Views from my peers helped keep me out of some troublesome choices and allowed me to put bad events in perspective, like a bad review or a bad interview, and keep my self-confidence alive, even if barely.&lt;br /&gt;
&lt;br /&gt;
Peers are different from advisors or mentors in one important aspect. Advisors and mentors tend to assume specific background, like events you have been through, topics you have read on, or people you must have met or read. This creates pressure in a conversation that was meant primarily for pressure relief. Peers, on the other hand, are going through what you are going through, more or less. They are also typically at a similar stage in life. This makes conversations easier and to the point.&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Talking to myself&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
One of the most dangerous&amp;nbsp;pitfalls of a graduate student&#39;s life is the tendency and the need to work solo for long periods of time, spending weeks at a time without speaking to anyone. These lonely periods, combined with any hints of depression, self doubt, and planning for the worst case, can lead to self-reinforced feeling that one is doomed. I find that talking to myself, sometimes even out loud, to be a very helpful way to counter this problem. These, typically one-sided, conversations help me keep my eyes on the ball during those long stretches of solitude.&lt;br /&gt;
&lt;br /&gt;
There are two things that I find I need remind myself of: 1) things can work out and the average case is actually likely to happen, and 2) what I need to do to finish that stretch. This has worked many times to keep me focused and in kinda good mood about the potential average case. It also keeps ideas and problems that comes with thinking about the worst case in check.&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Talking with my partner&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
If you are working over 12 hours a day with weekends counted as optional, this can put stress on any relationship outside the lab. I am married and one way my marriage helps me do better at work is that talking with my wife helps defuse me. Whether it is about work, our friends, house chores, or that restaurant that we *have to* try, setting aside my technical thoughts helps me shake the notion that work is all that there is to life. Remembering my &quot;humanity&quot; and sharing those experiences is an integral part of my day to day life and is a very important tool to keep me sane through a somewhat insane life style.&lt;br /&gt;
&lt;br /&gt;
Keeping a relationship going under high work pressure is a topic for another post.&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Talking with my parents&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
One of the harshest parts of being an international student is being away from one&#39;s family, especially if you are coming from a country where all families tend to live in the same city and see each other on weekly, if not daily, basis. Over the years I developed a routine of speaking on the phone with my parents on semi-daily basis to give myself a strong sense of connection to home for around 5 minutes a day. These brief conversations are a very important part of keeping any sense of home sickness at bay.&lt;br /&gt;
&lt;br /&gt;
There are several other coping mechanisms including TV, video games, reading, socializing, and occasional running or playing squash.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/3783913564223867753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2018/05/my-phd-coping-mechanism-or-how-speaking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3783913564223867753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3783913564223867753'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2018/05/my-phd-coping-mechanism-or-how-speaking.html' title='My PhD coping mechanism (or how speaking my mind out loud helps me maintain my sanity)'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipEGW7T55jqSz5B1xwhwsjX1BGts35Q9elpSze-YWPgF2xBFcEuFhBD-oBNX1XISSmv1QPJ0PhA2kvb4hbvFdKBbHbz-5eh1qYisELD4XFjH0RPhRAy7Ywdl8rIGY4A4pIur1p_9ctZQdF/s72-c/communicatie.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-1172377006730629069</id><published>2018-04-03T22:48:00.000+02:00</published><updated>2018-04-06T00:38:41.334+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bgp"/><category scheme="http://www.blogger.com/atom/ns#" term="edge fabric"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="google infrastructure"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="internet architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="internet routing"/><category scheme="http://www.blogger.com/atom/ns#" term="netflix open connect"/><title type='text'>The evolution of Internet routing</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
If you ask &quot;how do I get a video from Netflix to my TV screen?&quot; you will probably get a variety of answers depending on whom you ask. Here are a TL;DR of the answers you are most likely to get:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;the home setting answer &quot;your access point gets the video from the Netflix over the Internet and sends it over wifi to your TV&quot;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;the smart apps and video encoding answer &quot;the Netflix app creates an HTTP request specifying your account and some chunks of the video you are about to watch and the Netflix server replies with HTTP responses that contain the chunks&quot;&lt;/li&gt;
&lt;li&gt;the Internet Protocol (IP) answer &quot;your smart TV creates packets addressed to the Netflix server by its IP address. Based on the IP address, the packets are first sent to the access point which sends it over fiber or telephone landlines to the Internet Service Provider (ISP), like AT&amp;amp;T, the ISP then sends it to other networks which eventually deliver it to Netflix (the ISP can also directly deliver it to Netflix). All this journey is guided by the IP address in the packets created by your TV&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
In this blog post, I will focus on the third journey which is so revolutionary that it earned its creator (Vint Cerf) a Turing Award (Nobel Prize of computing). It is also so important to the core operation of the Internet that it is one of the very few things that survived from the inception of the Internet till now. It is also the only &quot;agreement&quot; all participating networks in the Internet &lt;a href=&quot;https://dl.acm.org/citation.cfm?id=2043164.2018460&quot;&gt;has to agree on&lt;/a&gt;. The&amp;nbsp;Border Gateway Protocol (BGP) has been at the heart of this consensus for almost 30 years. Like almost any other field, things that require consensus will stifle innovation.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;i&gt;BGP Basics&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
The Internet, as broadly known, is a network of networks. Each of those networks is called an Autonomous System (AS). All autonomous systems have to be registered (pretty much like all domain names have to be registered) and they have to speak to each other in BGP. In short, BGP is the main language of the Internet. With the rise of the web as the killer app of the Internet and the need for monetization of the networks, BGP became a language that expresses not only how data should flow over the Internet, but who has to pay whom to deliver it. At the time of the development of BGP, the Internet was pretty hierarchical as shown below&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Internet_Connectivity_Distribution_%26_Core.svg/1280px-Internet_Connectivity_Distribution_%26_Core.svg.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;467&quot; data-original-width=&quot;800&quot; height=&quot;186&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Internet_Connectivity_Distribution_%26_Core.svg/1280px-Internet_Connectivity_Distribution_%26_Core.svg.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;from &lt;a href=&quot;https://en.wikipedia.org/wiki/Tier_1_network&quot;&gt;wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
Consumers, which can be home subscribers or web-based services, pay Tier 3 networks (ISPs) which pay Tier 2 and Tier 1 networks (ISPs of ISPs or transit networks) to move data for them. This hierarchy started to create a problem when latency became a main concern for web consumers over the past 15 years or so. Basically, your Netflix video has to travel through the Tier 3 connected to Netflix then up to a Tier 2 and then even to a Tier 1 before going down again to your Tier 3 and then to you.&lt;br /&gt;
&lt;br /&gt;
This increased latency motivated content providers (e.g., Netflix) to create direct links with all Tier 3 networks who are willing to participate creating what is called &quot;peering links&quot; as shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb9-IiN0Mbv5G7GIBDNqTc7kqT0gcl0cUOk2GzZah1yo-9RdfjH5TCrKFLYnd0t6ZRe0UCkbwCWwW3seKspYD2nJ1zcgQDDUmJ34y9FVdk4hW2ICEZG3o7o1KdhsK3jq1IYTpzLcM_FJDQ/s1600/PeeringAsLocalOptimization.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;436&quot; data-original-width=&quot;574&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb9-IiN0Mbv5G7GIBDNqTc7kqT0gcl0cUOk2GzZah1yo-9RdfjH5TCrKFLYnd0t6ZRe0UCkbwCWwW3seKspYD2nJ1zcgQDDUmJ34y9FVdk4hW2ICEZG3o7o1KdhsK3jq1IYTpzLcM_FJDQ/s320/PeeringAsLocalOptimization.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;from&amp;nbsp;&lt;a href=&quot;http://drpeering.net/white-papers/Peering-Motivations-to-Peer.html&quot;&gt;drpeering&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
The current state of the Internet has Content Providers connected directly to ISPs through multiple connection points. BGP allows each party to specify their preference of which link to be used for every group of addresses through various ways which are configured in each router. This changed the Internet from a multi-hop network (in terms of Autonomous systems) into a single hop network [&lt;a href=&quot;https://trac.ietf.org/trac/irtf/export/248/www/content/raim-2015-papers/irtf_raim-paper20.pdf&quot;&gt;1&lt;/a&gt;][&lt;a href=&quot;https://www.caida.org/publications/papers/2017/challenges_inferring_internet_congestion/challenges_inferring_internet_congestion.pdf&quot;&gt;2&lt;/a&gt;]. This &quot;single hop&quot; architecture is much better in terms of latency from the perspective of consumer and in terms of cost from the perspective of content providers and ISPs.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;i&gt;The Problems with BGP&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
It is clear that BGP has taken us very far with simple language that everyone can agree on. However, BGP has problems that, due to its age, are very well documented and very well known. I will discuss some of the most prominent ones that motivate a need for the evolution.&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;BGP was developed for a relatively small Internet where routers can be configured by people with relative ease. The Internet has evolved and increased in scale orders of magnitude over compared to its younger self. This increase in scale makes the basic task of configuring BGP routers a problematic task that can cause &lt;a href=&quot;https://conferences.sigcomm.org/sigcomm/2002/papers/bgpmisconfig.pdf&quot;&gt;misconfigurations and outages&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;BGP failures can be expensive which requires robust hardware. Moreover, BGP routers require the moving of terabytes of data per second. These requirements translate into extremely high cost of routers that are relatively rigid and are not flexible enough to support the rapid change in requirements.&lt;/li&gt;
&lt;li&gt;BGP is not very dynamic as it was developed primarily to connect autonomous system with little to no representation of dynamic load and preferences. However, current networks, where autonomous systems are connected to each other through multiple peer links, have dynamic requirements and require complex operations (e.g., load balancing).&lt;/li&gt;
&lt;li&gt;Other notable problems include lack of control over end-to-end behavior, routing data based only on destination address without consideration of the source, and indirect expression of policies. For interested readers, check one of the following papers [&lt;a href=&quot;http://gtnoise.net/papers/2014/gupta-sigcomm2014.pdf&quot;&gt;3&lt;/a&gt;][&lt;a href=&quot;https://research.fb.com/wp-content/uploads/2017/08/sigcomm17-final177-2billion.pdf&quot;&gt;4&lt;/a&gt;][&lt;a href=&quot;https://www.cs.princeton.edu/courses/archive/fall17/cos561/papers/espresso17.pdf&quot;&gt;5&lt;/a&gt;].&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Because of these problems, BGP research has been long, innovative, but highly unsuccessful. One main source of the failure is the need for consensus requires that &lt;i&gt;EVERY&lt;/i&gt; stakeholder to agree on the change which is highly problematic for many reasons including political and monetary reasons. However, there are some recent approaches that bypass the hurdles against BGP.&lt;/div&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;Innovations &quot;beyond/around&quot; BGP&lt;/i&gt;&lt;/h3&gt;
To avoid the need for consensus content providers have been attempting to create solutions that allow for avoiding BGP problems while avoiding the need for consensus. The following are the most prominent approaches:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Creating a more compact Internet topology: &lt;/b&gt;This approach presents the simplest solution: To simplify the hierarchical tier-based topology of the Internet, lets move the content servers (e.g., Netflix servers) to the ISP. This solution requires coordination between ISPs and content providers, where content providers provide ISPs with hardware that they can place inside their networks. This approach bypasses BGP completely by having content move from content providers to consumers without leaving a single autonomous system. One of the prominent examples of such cooperation between ISPs and content providers is used by Netflix.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMX8AuzVAIGEB-sQsiQV9qNASo8_MXaHs-lswy_WS4dCWAY5uExkUJz4boYuTVWMOlF1hw-X9euMcxrHcJSoxZ9l2drw5GEYP4cEXwPiRRdKlTQL6FNBr6SjayJMmjK5C3DtrZV4x1Kngi/s1600/img7.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;354&quot; data-original-width=&quot;524&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMX8AuzVAIGEB-sQsiQV9qNASo8_MXaHs-lswy_WS4dCWAY5uExkUJz4boYuTVWMOlF1hw-X9euMcxrHcJSoxZ9l2drw5GEYP4cEXwPiRRdKlTQL6FNBr6SjayJMmjK5C3DtrZV4x1Kngi/s320/img7.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;from &lt;a href=&quot;http://slideplayer.com.br/slide/5256589/&quot;&gt;presentation by&amp;nbsp;flavio amaral from Netlfix&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
As shown in the picture above, the ISP includes the Netflix appliance in their network to serve data directly to users. The appliance periodically collects data from Netflix servers in the cloud and caches it locally. This solution is adopted by a wide variety of content providers (a very nice illustration of their infrastructure is provided by Google &lt;a href=&quot;https://peering.google.com/#/infrastructure&quot;&gt;here&lt;/a&gt;). This approach is convenient despite having scalability problems. The main scalability problem is manifested by the impossibility of providing enough appliances to match the actual infrastructure of Netflix at every ISP. However, this solution was shown to provide good enough improvements in performance compared to traditional approaches.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Leveraging Software Defined Networks (SDNs):&lt;/b&gt; SDNs have allowed for rapid evolution of networks by moving the implementation of network rules from individual routers which work in a distributed way, to a central controller that configures all routers which in the case of SDN are simpler than the ordinary ones. This allows for easier configuration of networks and reduction of network cost. It also allows for better network telemetry and expression of policy which can be easily translated into network routing rules. This approach has been mapped to be used to control BGP routers by translating complex policies into BGP rules. Such approach has been used by &lt;a href=&quot;https://www.blog.google/topics/google-cloud/making-google-cloud-faster-more-available-and-cost-effective-extending-sdn-public-internet-espresso/&quot;&gt;Google&lt;/a&gt; and &lt;a href=&quot;https://code.facebook.com/posts/565767133547005/steering-oceans-of-content-to-the-world/&quot;&gt;Facebook&lt;/a&gt; to control their peering links. A picture from Facebook&#39;s approach is below&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD2nGN8h9Ub-PYm2pE1Ri-PyVI-HLfaLOMy2yj9LUr14-HmM8wYvYsNHnAQEFKZTLCqa2E83dDZIGVckooWS3XyDrzlVoBvoMl1z_s5J2tDJr-heFFKcE3PPK5DPWkytbYdxhaW8QmcLM0/s1600/20685200_122179585096601_142691410712199168_n.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;338&quot; data-original-width=&quot;736&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD2nGN8h9Ub-PYm2pE1Ri-PyVI-HLfaLOMy2yj9LUr14-HmM8wYvYsNHnAQEFKZTLCqa2E83dDZIGVckooWS3XyDrzlVoBvoMl1z_s5J2tDJr-heFFKcE3PPK5DPWkytbYdxhaW8QmcLM0/s400/20685200_122179585096601_142691410712199168_n.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;from &lt;a href=&quot;https://code.facebook.com/posts/565767133547005/steering-oceans-of-content-to-the-world/&quot;&gt;Facebook&#39;s engineering blog&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
As the picture shows, the network collects information about traffic load and possible routes to the same address. Then, based on that data, the controller creates route overrides which are then injected in the BGP peering router to modify BGP behavior. This allows the content providers to choose peering links based on their requirements overcoming some of the problems of the drawbacks of relying solely on BGP.&amp;nbsp; However, several problems remain unsolved as the rest of the ASes still rely on BGP. Furthermore, solutions presented so far rely on the knowledge afforded by content providers only.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;Conclusion&lt;/i&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
Internet is one the main drivers of innovation in this age, despite lack of innovation in the Internet&#39;s infrastructure. Some aspects of this infrastructure has seen some improvements in the past few yeats, but I believe that we are still a long way from an infrastructure that can support dynamic loads and policies that we currently need and will need more to drive more innovation.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/1172377006730629069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2018/04/the-evolution-of-internet-routing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1172377006730629069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1172377006730629069'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2018/04/the-evolution-of-internet-routing.html' title='The evolution of Internet routing'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb9-IiN0Mbv5G7GIBDNqTc7kqT0gcl0cUOk2GzZah1yo-9RdfjH5TCrKFLYnd0t6ZRe0UCkbwCWwW3seKspYD2nJ1zcgQDDUmJ34y9FVdk4hW2ICEZG3o7o1KdhsK3jq1IYTpzLcM_FJDQ/s72-c/PeeringAsLocalOptimization.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-8535727360752179932</id><published>2018-04-03T00:44:00.000+02:00</published><updated>2018-04-03T00:44:10.381+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="802.11"/><category scheme="http://www.blogger.com/atom/ns#" term="netlink"/><category scheme="http://www.blogger.com/atom/ns#" term="nl80211"/><category scheme="http://www.blogger.com/atom/ns#" term="wifi"/><category scheme="http://www.blogger.com/atom/ns#" term="wpa_supplicant"/><title type='text'>Extending wpa_supplicant for kernel mac80211 control</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://w1.fi/wpa_supplicant/&quot;&gt;wpa_supplicant&lt;/a&gt; is a popular cross platform tool for wifi network configuration. On linux kernel, wpa_supplicant can use NetLink (&lt;a href=&quot;http://linuxwireless.org/en/developers/Documentation/nl80211/&quot;&gt;nl80211&lt;/a&gt;)&amp;nbsp;to pass commands and arguments to the configuration API of IEEE 802.11 (cfg80211). In this post, I will go through the different edits needed to pass arguments from userspace to mac80211 through wpa_supplicant. I will use my work on WiFi augmentation which allows wpa_supplicant to configure mac80211 to control its medium access control behavior.&lt;br /&gt;
&lt;br /&gt;
wpa_supplicant has two main components: wpa_supplicant daemon and the wpa_cli client program. The edits I will present will be in both the daemon and the client. My edits assumes the existence of some functions in kernel that the user of wpa_supplicant is attempting to invoke.&lt;br /&gt;
&lt;br /&gt;
The edit starts with the wpa_cli (client) code. The wpa_cli code maintains an array of all commands it can process mapped to callback functions that should be executed on the invocation of that command. The array can be found at wpa_supplicant/wpa_cli.c&amp;nbsp;&lt;span style=&quot;background-color: #f1f8ff; color: #000050; font-size: 12px; white-space: pre-wrap;&quot;&gt;&quot;const struct wpa_cli_cmd wpa_cli_commands&quot;&lt;/span&gt;:&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/saeed/662acd001f4ea92631adc6af6ec5927a.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;
The array element specifies the function to call which requires adding the function as specified below which is added to the same file:&lt;script src=&quot;https://gist.github.com/saeed/e1b7bb7e4f2decbb5e5ee7ef93087e38.js&quot;&gt;&lt;/script&gt; 
&lt;br /&gt;
The above function gets the parameters passed through the client and calls the &lt;span style=&quot;background-color: white; color: #005cc5; font-family: , &amp;quot;consolas&amp;quot; , &amp;quot;liberation mono&amp;quot; , &amp;quot;menlo&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 12px;&quot;&gt;wpa_cli_cmd&lt;/span&gt; or&amp;nbsp;&lt;span style=&quot;background-color: white; color: #005cc5; font-size: 12px;&quot;&gt;wpa_cli_commad&amp;nbsp;&lt;/span&gt;functions (note that&amp;nbsp;&lt;span style=&quot;background-color: white; color: #005cc5; font-size: 12px;&quot;&gt;wpa_cli_cmd&amp;nbsp;&lt;/span&gt;calls&amp;nbsp;&lt;span style=&quot;background-color: white; color: #005cc5; font-size: 12px;&quot;&gt;wpa_cli_commad&lt;/span&gt;) which are implemented to pass the arguments eventually to the&amp;nbsp;&lt;span style=&quot;color: #005cc5;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;wpa_supplicant_ctrl_iface_process&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #005cc5; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/span&gt;function in wpa_supplicant/ctrl_iface.c file. The function is basically a bug switch statement that invoke different functions based on the command string passed through&amp;nbsp;&lt;span style=&quot;background-color: white; color: #005cc5; font-size: 12px;&quot;&gt;wpa_cli_cmd&amp;nbsp;&lt;/span&gt;:&lt;script src=&quot;https://gist.github.com/saeed/06391efa4983bc97a082369fca30e73e.js&quot;&gt;&lt;/script&gt;
&lt;br /&gt;
The handler function should be implemented in wpa_supplicant/wpa_supplicant.c and should look something like as follows that first obtains network information to select the network to control in kernel and calls the Station Management Entity (sme) function:
&lt;script src=&quot;https://gist.github.com/saeed/679b83d109d42c083eb5d2a429fa79b9.js&quot;&gt;&lt;/script&gt;
&lt;br /&gt;
The sme function calls the driver function. The driver interface is implemented in wpa_supplicant/driver_i.h which requires extending the&amp;nbsp;&lt;span style=&quot;color: #005cc5;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;struct wpa_driver_ops&lt;/span&gt;&lt;/span&gt; structure to include the function corresponding to sample_change. The driver function creates an nl80211 message. I will cover the edits to the nl80211 driver and the nl80211 implementation in kernel in a following post.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/8535727360752179932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2018/04/extending-wpasupplicant-for-kernel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/8535727360752179932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/8535727360752179932'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2018/04/extending-wpasupplicant-for-kernel.html' title='Extending wpa_supplicant for kernel mac80211 control'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-4286175865379424105</id><published>2015-11-18T00:59:00.000+02:00</published><updated>2015-11-18T00:59:04.747+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="challenges"/><category scheme="http://www.blogger.com/atom/ns#" term="proposal"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><category scheme="http://www.blogger.com/atom/ns#" term="the future"/><category scheme="http://www.blogger.com/atom/ns#" term="writing"/><title type='text'>On Proposing Research Ideas</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I spent the last month assisting my advisors on writing an NSF research proposal. It was one of my most exhausting and educational experiences ever.&lt;br /&gt;
&lt;br /&gt;
It all happened slowly through some random tasks I got assigned. Some tasks seemed trivial and even useless at the time, but it all made sense when we worked on the complete proposal draft.&amp;nbsp;&amp;nbsp;It started with writing a &quot;brain dump&quot; of all ideas we have been iterating over the past 4-6 months. Then, it got interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Interesting Platform (Motivation, use cases, existing problems)&lt;/b&gt;&lt;br /&gt;
The brain dumb is often too technical as I spent time going through related work and defining interesting problems, what people are working on, and where I stand in all of that. This all does not cut it unless there is a clear use case. A scenario where all proposed research ideas are employed to make something &quot;cool&quot; happen.&lt;br /&gt;
&lt;br /&gt;
The idea of how such use cases look like went through several phases:&lt;br /&gt;
1) When I started working on the project and I had a cool idea that I wanted to realize.&lt;br /&gt;
2) When I started digging deep into that cool idea to define how it is currently built.&lt;br /&gt;
3) When I surfaced back from the details to scratch parts of the use case already addressed by related work, ideas that are just way too complex, and ideas that are not really interesting. Then, I realized that the use case I had was no longer appealing&lt;br /&gt;
4) Finally, I was able to articulate a use case where novel research is required and where that research is applied to make cool things happen&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;One mistake I made was to think that by having that use case I had an interesting problem ...&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;The Challenge (why not &quot;just&quot; build it)&lt;/b&gt;&lt;br /&gt;
A very naive question when you present a use case is &quot;why can&#39;t I just hire a bunch of engineers to develop this?&quot;. The answer to that question is basically what makes the use case an introduction to a good research statement. In this phase, I had to define what are the &quot;clear&quot; challenges in building a system that helps with the proposed use case.&lt;br /&gt;
&lt;br /&gt;
In this phase, my advisors asked me to identify key points that I believe helped A LOT make the problem and why it is challenging much clearer in my head. These points included: identifying tradeoffs, identifying a baseline (some approach that is clear, easy, and works poorly), and metrics of success. Going through the exercise of coming up with these points helped me form a holistic set of challenges that need addressing for the use case to work.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;So far, no specific research problems have been identified in the proposal ...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Devil is in the Detail&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
A proposal should have clear tasks that, when executed, can make the presented use case a reality.&lt;br /&gt;
&lt;br /&gt;
The identified challenges are appealing to motivate research in the direction of realizing the presented use case and the different applications that such use cases imply. However, challenges are not clear nor thorough enough to motivate an agency to fund a proposal. Moreover, the proposal has work that will typically take multiple years to realize. Hence, the exercise for this phase was to break down the identified challenges into different research problems.&lt;br /&gt;
&lt;br /&gt;
I tried to break down a solution for the use case into layers and components. For each layer and component, I identified sub-components and challenges to be addressed to make each component and layer work. I also tried to make the different problems as generic as possible to avoid having dependencies between the appeal of the different problems.&lt;br /&gt;
&lt;br /&gt;
I decided to go with the layered architecture as it better suited my problem. Within each layer I identified a set of challenges and possible approaches to solve it. From that point, more focus was dedicated to the related work of the individual problems and how we can solve them.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;But this is just the proposal ...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;No Devil will pay you for useless specifics&lt;/b&gt;&lt;br /&gt;
A lesson learned during the different phases of writing the proposal is that: a proposal should have enough details to show that the problem is interesting, we know what we are talking about, and that we have ideas to how to solve it. Yet, a proposal should avoid going into too much detail that the problem appear solved or that it&#39;s just wasting precious space in the proposal. There is also a fine line between being clear about what the problems of interest are and making them seem obvious and easy to solve.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;But what will you do if you got the money tomorrow ...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Start Already!&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
This part is particularly tricky. In the proposal, there should be enough details to motivate every research problem without going too deep into mere conjectures. Yet, there should be a clear to do list for one or too tasks where it should be clear in the text that we are aware of how we are proceeding with them.&lt;br /&gt;
&lt;br /&gt;
To that end, my advisors asked me to identify a set of tasks that I would work on if the fund was granted now. Having that in mind, writing about the tasks, the baselines, and the possible direction much more concrete than just suggestions and ideas.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;But most of it are in reality just ideas ...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Papers v.s. Proposals&lt;/b&gt;&lt;br /&gt;
This is were the difference between writing a paper and writing a proposal is most clear. In a paper, you write to make what you did most clear and try to match your writing to your implementation and approach. In a proposal, the emphasis is more on clarity of the approach. In other words, the writing of the proposed approach can be simplified and tweaked to make it simpler.&lt;br /&gt;
&lt;br /&gt;
Another distinction is that the idea of a paper can be very specific, guided based on related work, and &quot;standalone&quot;. A proposal is a story with several interesting, and potentially standalone, problems that needs addressing to make that story a reality. Hence, you can think easily of an idea for a paper based on thorough knowledge of related work and the state-of-the-art, yet, a proposal requires more crafting, deeper understanding, and much grander story.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Final remarks:&lt;/b&gt;&lt;br /&gt;
In a typical proposal, you want to motivate the funding agency to give you, and you specifically, that money to solve that problem. This can, and should, be highlighted in many ways including:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Previous achievements and experience with related problems including publications and summary of findings.&lt;/li&gt;
&lt;li&gt;Preliminary results pertaining to the proposed problem and initial findings on solving one of its subtasks.&lt;/li&gt;
&lt;li&gt;Facilities available in your institution and any other enabling factors that make you standout.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/4286175865379424105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2015/11/on-proposing-research-ideas.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/4286175865379424105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/4286175865379424105'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2015/11/on-proposing-research-ideas.html' title='On Proposing Research Ideas'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-8702438013229978828</id><published>2015-06-08T02:33:00.000+02:00</published><updated>2015-06-08T02:43:39.815+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="challenges"/><category scheme="http://www.blogger.com/atom/ns#" term="chimp"/><category scheme="http://www.blogger.com/atom/ns#" term="DARPA"/><category scheme="http://www.blogger.com/atom/ns#" term="DARPA Robotics Challenge"/><category scheme="http://www.blogger.com/atom/ns#" term="DRC"/><category scheme="http://www.blogger.com/atom/ns#" term="expo"/><category scheme="http://www.blogger.com/atom/ns#" term="rescue"/><category scheme="http://www.blogger.com/atom/ns#" term="robots"/><category scheme="http://www.blogger.com/atom/ns#" term="running-man"/><category scheme="http://www.blogger.com/atom/ns#" term="the future"/><title type='text'>DARPA Robotics Challenge</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
DARPA Robotics Challenge Finals 2015 took place at&amp;nbsp;Fairplex (Pomona, California). The event included an expo with tons of robotics shows and even some booths where you can play around with the robots. The competition took place on 4 tracks each with a replica of the challenge stage.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;The tracks:&lt;/b&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj60hoYJGH_D8tZB6OHO9q1kHPqp7Ox9HMHPjFneGrBuaLj3YVvwSMWCZo1VKap6v2lUne9XPqj4JIj5pS7K3pA9dTh9CTt2HOZB-3qq3ohPf0ctWG6pk_1BTcOAE7FrCknxDu8f_jD31OZ/s1600/DSC_0490-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj60hoYJGH_D8tZB6OHO9q1kHPqp7Ox9HMHPjFneGrBuaLj3YVvwSMWCZo1VKap6v2lUne9XPqj4JIj5pS7K3pA9dTh9CTt2HOZB-3qq3ohPf0ctWG6pk_1BTcOAE7FrCknxDu8f_jD31OZ/s320/DSC_0490-ANIMATION.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;The winners:&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;Team KIAST making it look way too easy with Hubo&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm0sRNftKEP1yMHDt9HtsN8gd7ZpgDLYgsduH19w-ezkx8A0yWpxbcg5mfm6g4661LhJN_h2THqqOHxuf5VT0HGff8TrMXZuuSM6INsknO40uLyObkOVu49GSqQKy_FkC4BJkOeOwh3TJX/s1600/DSC_0196-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;133&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm0sRNftKEP1yMHDt9HtsN8gd7ZpgDLYgsduH19w-ezkx8A0yWpxbcg5mfm6g4661LhJN_h2THqqOHxuf5VT0HGff8TrMXZuuSM6INsknO40uLyObkOVu49GSqQKy_FkC4BJkOeOwh3TJX/s200/DSC_0196-ANIMATION.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4DeA01Os-WjtDmEwVmKZT5zKEbvWVrSc95D_RMN9Ox8D-I-KVUp8KqR4B_CqFmempmrvRnxr5m_JGLBBTN_AV-3FZc7KC0lp2qzfGWJq89HvAghCwD_klmoKCpllcI22tgfi6Z_j-xgc5/s1600/DSC_0160-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4DeA01Os-WjtDmEwVmKZT5zKEbvWVrSc95D_RMN9Ox8D-I-KVUp8KqR4B_CqFmempmrvRnxr5m_JGLBBTN_AV-3FZc7KC0lp2qzfGWJq89HvAghCwD_klmoKCpllcI22tgfi6Z_j-xgc5/s320/DSC_0160-ANIMATION.gif&quot; width=&quot;212&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPEgnm8QZRsL0m2Yfc9rV3wOVIVl1DzeV7plK8xzB9ip0QIHkYrbrLL4WvHXIYThW9Xq1_ghVkhU26yBPO16bve9GcAjaEvEwJP4Nzr7GK7DJzwdEjYOA8ff7bNLEVVfjrXrCpjLgctY9W/s1600/DSC_0125-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPEgnm8QZRsL0m2Yfc9rV3wOVIVl1DzeV7plK8xzB9ip0QIHkYrbrLL4WvHXIYThW9Xq1_ghVkhU26yBPO16bve9GcAjaEvEwJP4Nzr7GK7DJzwdEjYOA8ff7bNLEVVfjrXrCpjLgctY9W/s400/DSC_0125-ANIMATION.gif&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;Running man, a robot with an attitude and a large cheering squad, walking on rubble for the win.&lt;/i&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilMRJbGBR0WxSQi1RYqIaM5ax69MG2QfWF0ZU5ceUQsEH4GrRg2nHNxCibYpacGfuQ3JD7lH7g0d59W8wwHk531kJ1Tyo8qVYr9jxIxfY__oSwItO3vaCqjHmTEvV3tyF0j924JcPqXWGp/s1600/DSC_0361-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilMRJbGBR0WxSQi1RYqIaM5ax69MG2QfWF0ZU5ceUQsEH4GrRg2nHNxCibYpacGfuQ3JD7lH7g0d59W8wwHk531kJ1Tyo8qVYr9jxIxfY__oSwItO3vaCqjHmTEvV3tyF0j924JcPqXWGp/s320/DSC_0361-ANIMATION.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha8FiMnfvIIM3J0vFBlF9UyjAccMd7JQrHo__dcDGB9FJTGKyUlY8PYU1eYr2dZA0HNvkkSXBMfypCxmKi4uehHCUxXbLtVp_R1DzffooVeDZ4cnsHarCRNKAbdZAUAoZx6oALjhf0p0Rm/s1600/DSC_0327-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;133&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha8FiMnfvIIM3J0vFBlF9UyjAccMd7JQrHo__dcDGB9FJTGKyUlY8PYU1eYr2dZA0HNvkkSXBMfypCxmKi4uehHCUxXbLtVp_R1DzffooVeDZ4cnsHarCRNKAbdZAUAoZx6oALjhf0p0Rm/s200/DSC_0327-ANIMATION.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;Chimp leaving at its own terms .. like a true champion.&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6qDnm8mSSqdIiMsuqP6eP02_DjbP7tA3edVgLgbENbp-lYrc3yVHQR2KbLpSD54-5RLkNSKOyUcyXRtWQfirZXL97gNK6uHwERu8iXPui9pY-mpaCgptIO3xiuoCXsScPpF8LVd7MXCrd/s1600/DSC_0695.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6qDnm8mSSqdIiMsuqP6eP02_DjbP7tA3edVgLgbENbp-lYrc3yVHQR2KbLpSD54-5RLkNSKOyUcyXRtWQfirZXL97gNK6uHwERu8iXPui9pY-mpaCgptIO3xiuoCXsScPpF8LVd7MXCrd/s320/DSC_0695.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Random moments:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz6gcmrdpqIIOqBWh7hOOzx5xoDgI5iYisEdu5t1Qa3uNLBNhLvP57-3IAKKhN6896JQeOv5wsXxy3LJudyriZL50j6bzAlb7zRE7V3Bxv3aNVQdpGTySLrmRFMq80bVCPEkyTEJYojPXE/s1600/DSC_0702-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: justify;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz6gcmrdpqIIOqBWh7hOOzx5xoDgI5iYisEdu5t1Qa3uNLBNhLvP57-3IAKKhN6896JQeOv5wsXxy3LJudyriZL50j6bzAlb7zRE7V3Bxv3aNVQdpGTySLrmRFMq80bVCPEkyTEJYojPXE/s320/DSC_0702-ANIMATION.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipfhY2JbRY9yQXoid5Vu2immuucr5agjwfpvnZCXDOuZ9AEJWRi2MOtm8NYRt_B3WKsgayWB_lp8BSLLWbF8GgBJwdhd8VF064qFnqkrabP9rXbsMjLOFRW8ga1dypjJ8gZf3ASSIkWGMA/s1600/DSC_0035-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipfhY2JbRY9yQXoid5Vu2immuucr5agjwfpvnZCXDOuZ9AEJWRi2MOtm8NYRt_B3WKsgayWB_lp8BSLLWbF8GgBJwdhd8VF064qFnqkrabP9rXbsMjLOFRW8ga1dypjJ8gZf3ASSIkWGMA/s320/DSC_0035-ANIMATION.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVafRssAT2r6b2JJvmJisBLBMsoXNpfjDa18vT3ElgeQc6kWzhCd9XvdX1pSt7phHvg8AgnMNdmBy2oMeCuO9aAuaJmicbEdlbZFn05K1Ie0QGZ_XcaAFVN4a4os9ByUsZfkdB4HC8fe0q/s1600/DSC_0932-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVafRssAT2r6b2JJvmJisBLBMsoXNpfjDa18vT3ElgeQc6kWzhCd9XvdX1pSt7phHvg8AgnMNdmBy2oMeCuO9aAuaJmicbEdlbZFn05K1Ie0QGZ_XcaAFVN4a4os9ByUsZfkdB4HC8fe0q/s320/DSC_0932-ANIMATION.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYZa0lqpyR9qmcCK6tez9f-UqBQhKHtvq5eYFhFGyxLaFTqbzQwIVr9cNPollO9eHuBfArBLsBF6maKJuSqwJRP6k6Jxa7-ToPyTYLI5iugnwccd4XDvzNWmK0rowi-PmL10nFzYKOv9Hd/s1600/DSC_0906-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYZa0lqpyR9qmcCK6tez9f-UqBQhKHtvq5eYFhFGyxLaFTqbzQwIVr9cNPollO9eHuBfArBLsBF6maKJuSqwJRP6k6Jxa7-ToPyTYLI5iugnwccd4XDvzNWmK0rowi-PmL10nFzYKOv9Hd/s320/DSC_0906-ANIMATION.gif&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih3VMDMvcoFo9eKF83rrhJk6qCnq-QJ1rkmw5GrEesOZxKXU_PNBFfHrA5xSuAAASl3E2AWrzHADTqf-L4c82RTpGQQgEFAi48GoaFiqzDPcoosnbpfs0lbZ-C28kS2LsPrmo4BBWJEFH2/s1600/DSC_0738-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih3VMDMvcoFo9eKF83rrhJk6qCnq-QJ1rkmw5GrEesOZxKXU_PNBFfHrA5xSuAAASl3E2AWrzHADTqf-L4c82RTpGQQgEFAi48GoaFiqzDPcoosnbpfs0lbZ-C28kS2LsPrmo4BBWJEFH2/s320/DSC_0738-ANIMATION.gif&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;The expo and the demos:&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJNEYUc4-meHSGLzeQe-oa52G0cUJv-7YUyImmCSBY0NvLYCVrAlKzxf6rne7cVskpWW53LuiaHBl-76uJP5JG_0hMWYRrCANSq9GGDk1rYHqq662soQUSrD39II4n-tVwsYSDeCn1Ju18/s1600/DSC_0846-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;133&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJNEYUc4-meHSGLzeQe-oa52G0cUJv-7YUyImmCSBY0NvLYCVrAlKzxf6rne7cVskpWW53LuiaHBl-76uJP5JG_0hMWYRrCANSq9GGDk1rYHqq662soQUSrD39II4n-tVwsYSDeCn1Ju18/s200/DSC_0846-ANIMATION.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMA8Ga5RFjvDKelroWUw6tj-z5bXboiMAcISGNo5dyyTC1-t6R4_hltsGkgux4_iAqFRBIGFBICagkDu6yxSeIY5sMemqURjE62j64yvVQHkUPKDqloRbl5rbX5fvinGueIfioMjF-KP3v/s1600/DSC_0665-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;133&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMA8Ga5RFjvDKelroWUw6tj-z5bXboiMAcISGNo5dyyTC1-t6R4_hltsGkgux4_iAqFRBIGFBICagkDu6yxSeIY5sMemqURjE62j64yvVQHkUPKDqloRbl5rbX5fvinGueIfioMjF-KP3v/s200/DSC_0665-ANIMATION.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2vuOmqO_kT7LWO4XqtjG-vJnSRX2DiKXTaHWAIkQl7HUom7moZDym2dTOUPYBNYsKsblPK12OAJbAvJ-DN7z-u76lr5ta0llWF7uO0Js0RX0GoXSUGo6G_FqnGdaEEyCeV3BmhibBeZlJ/s1600/DSC_0448.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2vuOmqO_kT7LWO4XqtjG-vJnSRX2DiKXTaHWAIkQl7HUom7moZDym2dTOUPYBNYsKsblPK12OAJbAvJ-DN7z-u76lr5ta0llWF7uO0Js0RX0GoXSUGo6G_FqnGdaEEyCeV3BmhibBeZlJ/s320/DSC_0448.JPG&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikoGnzYDYtUu86K5UeWj7UurAgPp586FTm5x9wQxZ2MwaRznOe0kKyLhgDFzDsg2A-iVgzk0WVQsx53zNOMcHMD65g1jDSTvA6WfzKPP8t2fG2xasyT6MFRqVI3rU-dX4B9EG0yXmVIfJO/s1600/DSC_0883-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;133&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikoGnzYDYtUu86K5UeWj7UurAgPp586FTm5x9wQxZ2MwaRznOe0kKyLhgDFzDsg2A-iVgzk0WVQsx53zNOMcHMD65g1jDSTvA6WfzKPP8t2fG2xasyT6MFRqVI3rU-dX4B9EG0yXmVIfJO/s200/DSC_0883-ANIMATION.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgopRv14ov6umIkO_nyfBCEbT9Fl3lEBOs9DuFwJim4UptFxmp6Pfiid0hZbDimOFttx9gDd9llLTNo8K2pB-hmWV2Pq6w2hwVomiyyXls0uOfbSGl0fpqmAZyhFC8MjCiHQOY23KxQ5KIy/s1600/DSC_0635-ANIMATION.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;133&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgopRv14ov6umIkO_nyfBCEbT9Fl3lEBOs9DuFwJim4UptFxmp6Pfiid0hZbDimOFttx9gDd9llLTNo8K2pB-hmWV2Pq6w2hwVomiyyXls0uOfbSGl0fpqmAZyhFC8MjCiHQOY23KxQ5KIy/s200/DSC_0635-ANIMATION.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/8702438013229978828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2015/06/darpa-robotics-challenge.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/8702438013229978828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/8702438013229978828'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2015/06/darpa-robotics-challenge.html' title='DARPA Robotics Challenge'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj60hoYJGH_D8tZB6OHO9q1kHPqp7Ox9HMHPjFneGrBuaLj3YVvwSMWCZo1VKap6v2lUne9XPqj4JIj5pS7K3pA9dTh9CTt2HOZB-3qq3ohPf0ctWG6pk_1BTcOAE7FrCknxDu8f_jD31OZ/s72-c/DSC_0490-ANIMATION.gif" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-4139694533196642242</id><published>2013-12-04T16:17:00.001+02:00</published><updated>2014-04-24T11:01:32.912+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ar drone"/><category scheme="http://www.blogger.com/atom/ns#" term="arm"/><category scheme="http://www.blogger.com/atom/ns#" term="cpp"/><category scheme="http://www.blogger.com/atom/ns#" term="driver"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="make"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="wifi dongle"/><title type='text'>Attaching a WiFi Dongle to an AR Drone 2.0 (a.k.a. Compiling Drivers for ARM Based Devices)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;i&gt;Correction (4/24/2014): for your driver to work the AR Drone 2.0 you have to compile the kernel version provided by Parrot which can be found here&amp;nbsp;https://devzone.parrot.com/projects/show/oss-ardrone2&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
One of the down sides of &quot;out of the box&quot; AR Drone 2.0 is that you can&#39;t control multiple drones from the same machine. Another down side is that you can&#39;t attach USB devices except flash memories and some other predefined devices due to the limited nature of the busybox deployed on the drone. To over come the first down side without manipulating the WiFi configurations of the built-in WiFi card (i.e. you don&#39;t want to mess up your new drone), you will need to overcome the second problem (i.e. install a WiFi dongle and its driver manually). In this tutorial, I try to walk you through the steps to do just that.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;I assume that you are working a Linux machine (seriously we are not going to compile drivers on Windows). Ubuntu is&amp;nbsp;preferable&amp;nbsp;!&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
Because the Drone has an ARM processor, we will need to compile the driver using an ARM compiler against a Linux kernel compiled for ARM. The first step would be to Install arm compiler&lt;br /&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;:~$ sudo apt-get install &amp;nbsp;gcc-arm-linux-gnueabi&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Then you will need to get and compile a linux kernel with the same version as the one on the ARM machine. &amp;nbsp;You can know that information using the &lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;uname&lt;/span&gt; command (in the case of AR Drone 2.0 that&#39;s 2.6.32).&lt;/div&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;:# uname -a&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;Linux uclibc 2.6.32.9-g4190abb #1 PREEMPT Fri Jul 20 14:10:11 CEST 2012 armv7l GNU/Linux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
Notice the extraversion .9-g4190abb, we will need to edit the makefile of the kernel to match the extraversion. To actually get the kernel source code:&lt;br /&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small; line-height: normal; white-space: normal;&quot;&gt;:~$ wget https://www.kernel.org/pub/linux/kernel/v2.5/linux-2.6.32.9.tar.bz2&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: Consolas, Liberation Mono, Courier, monospace; font-size: 12px;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small; line-height: normal; white-space: normal;&quot;&gt;:~$&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small; line-height: normal; white-space: normal;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;tar xjvf linux-2.6.32.9.tar.bz2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
Open the makefile and edit the &quot;EXTRAVERSION&quot; to whatever extraversion your ARM machine has. The next step will be to configure the kernel:&lt;br /&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small; line-height: normal; white-space: normal;&quot;&gt;:~$&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;export ARCH=arm
&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small; line-height: normal; white-space: normal;&quot;&gt;:~$&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;export CROSS_COMPILE=arm-linux-gnueabi-&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
Then, for AR Drone 2.0, get the kernel.config file from &lt;a href=&quot;https://projects.ardrone.org/attachments/185/ARDrone_Version_20100809_1_2-kernel.config&quot;&gt;here&lt;/a&gt;. Open the arch/asm/configs directory in the kernel and put the configuration file there and rename it to &quot;ardroine_defconfig&quot; and compile the kernel:&lt;br /&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;:~$ make ardrone_defconfig&lt;/span&gt;&lt;span style=&quot;line-height: 19px;&quot;&gt;:~$ make&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
Now it&#39;s time to compile the driver. First, you will need to know which driver to get for the specific WiFi dongle you are using. To do that, connect the WiFi dongle to the AR Drone and telnet the drone:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:~$ telnet 192.168.1.1&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:# lsusb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;Bus 001 Device 002: ID 050d:1102 Belkin Components&amp;nbsp;
&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;Bus 001 Device 001: ID 1d6b:0002&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
Search online for a driver that matches the vendor:id pair (050d:1102 in my case) which requires the RTL8188USC driver. After you download the driver&#39;s source code, edit its makefile to use&lt;br /&gt;
&lt;br /&gt;
CROSS_COMPILE := arm-linux-gnueabi-&lt;br /&gt;
LINUX_SRC = location of kernel&lt;br /&gt;
LINUX_SRC_MODULE = (location of kernel)/drivers/net/wireless/&lt;br /&gt;
&lt;br /&gt;
Then compile the driver which will produce a .ko file (e.g. 8192cu.ko). Copy that file to the ARM machine (in the Drone&#39;s case use FTP to copy the file to the drone) then navigate through the terminal to the file&#39;s location:&lt;br /&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background-color: transparent; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; margin: 0px; padding: 0px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;:~$ telnet 192.168.1.1
:~$ cd /data/video
:~$ insmod&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;background-color: transparent; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;8192cu.ko&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
If the dongle is plugged, unplug it then replug it and test whether it&#39;s working or not:&lt;br /&gt;
&lt;pre style=&quot;background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; word-wrap: normal;&quot;&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;:~$ ifconfig -a&lt;/span&gt;&lt;/pre&gt;
if a new interface is there, then congrats !!&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/4139694533196642242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2013/12/attaching-wifi-dongle-to-ar-drone-20.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/4139694533196642242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/4139694533196642242'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2013/12/attaching-wifi-dongle-to-ar-drone-20.html' title='Attaching a WiFi Dongle to an AR Drone 2.0 (a.k.a. Compiling Drivers for ARM Based Devices)'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-1712859296121495722</id><published>2013-07-15T03:06:00.000+02:00</published><updated>2013-07-15T03:43:25.176+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="audience measurements"/><category scheme="http://www.blogger.com/atom/ns#" term="computer vision"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile computing"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><category scheme="http://www.blogger.com/atom/ns#" term="TV industry"/><category scheme="http://www.blogger.com/atom/ns#" term="wireless research center"/><title type='text'>Next Generation TV Ratings Systems</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRy5QxZaHEPNG-jWagNmNDJKZ4agZFOb_NmjPzEaLmShnqTyxJLgbfVotNI4f2vsUKmCCX5rqYxdMQ8nA5p5XL-3rYjGKMc6LJ3hL-Nf1Jd-_rNqpIrWFYFYjLD5cd5NlTlZS5EYwJFhea/s1600/watching-tv.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRy5QxZaHEPNG-jWagNmNDJKZ4agZFOb_NmjPzEaLmShnqTyxJLgbfVotNI4f2vsUKmCCX5rqYxdMQ8nA5p5XL-3rYjGKMc6LJ3hL-Nf1Jd-_rNqpIrWFYFYjLD5cd5NlTlZS5EYwJFhea/s320/watching-tv.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
TV ratings conventionally depend on focus groups and/or set top devices that keep track of the channels and shows viewed. This approach has been the main source of information for rating TV shows, sports, news, etc and it has been an integral part of the &lt;a href=&quot;http://www.economist.com/news/business/21571471-measuring-tv-audiences-keeps-getting-harder-counting-couch-potatoes&quot;&gt;economics of the TV industry&lt;/a&gt;. But with the growing sources of viewing TV programmes either live (using TV sets or online streaming) or later (using video on demand either through set top devices or online portals) and with the growing number of TV viewers posting their opinions about what they are viewing, TV programmes rating is become a more challenging task that requires innovative solutions.&lt;br /&gt;
&lt;br /&gt;
On the other hand, recently booming terms like &quot;Connected Viewers&quot; and &quot;Two Screen Viewing&quot; describe TV viewers that use their smart phones or tablets while watching TV. These smart devices forms a rich source of information on the TV viewing habits of the device&#39;s owners. This information can help both the TV industry and the TV viewers. On one side, the TV industry can definitely use information regarding the TV viewing habits streaming in live from millions of mobile devices. In addition to normal ratings information, this new source of information comes with detailed preferences list and characterization of each programme viewer. This new information can help make better ads and make more informed airtime assignments. Moreover, web-based and mobile based advertisers (e.g. Google) can have more information about the mobile device&#39;s owner which means more information for their ads engines. On the other hand, the mobile devices&#39; owners can make use of social applications and recommendations that are based on their TV viewing habits.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;direction: ltr;&quot;&gt;
At the &lt;a href=&quot;http://wrc-ejust.org/&quot;&gt;Wireless Research Center @ E-JUST&lt;/a&gt;&amp;nbsp;we realized the potential of building such an application. The application enables tracking a mobile device&#39;s owner TV habits need to work passively collecting information about each programme and any online activity made while watching that&amp;nbsp;programme (similar to tracking web-browsing history). While the detection of the programme playing on a TV is a well addressed problem and available for free by applications like &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.intonow&amp;amp;hl=en&quot;&gt;IntoNow&lt;/a&gt;. The problem at hand here is more complex as we cannot assume that the user will activate the application each time he/she is watching a TV.&lt;/div&gt;
&lt;div style=&quot;direction: ltr;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;direction: ltr;&quot;&gt;
In our work (accepted at Ubicomm&#39;13) we aim at analyzing the acoustic fingerprint and visual fingerprints of a TV set in order to determine whether a device&#39;s owner is viewing a TV or not. Our preliminary results showed a huge potential in using these two sensors (i.e. microphone and camera) to perform the passive detection functionality, allowing applications like IntoNow to identify the programme playing afterwards.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;direction: ltr;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;direction: ltr;&quot;&gt;
Our novel stack of applications presents a new generation of audience measurement systems that can provide larger sets of more accurate and higher dimensional data about TV viewing. Also linking the TV viewing habits of a user to her viewing habits of online portals like youtube will give a clearer image of the popularity of TV programmes.&lt;br /&gt;
&lt;br /&gt;
For more details check our technical report on arXiv:&amp;nbsp;&lt;a href=&quot;http://arxiv.org/pdf/1306.0478.pdf&quot;&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;&quot;&gt;Mohamed Ibrahim,&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;background-color: white; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;&quot;&gt;Ahmed Saeed&lt;/b&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;&quot;&gt;, Moustafa Youssef, and Khaled A. Harras,&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;i style=&quot;background-color: white; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;&quot;&gt;&quot;Unconventional TV Detection using Mobile Devices&quot;&lt;/i&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;&quot;&gt;, arXiv:1306.0478.&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/1712859296121495722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2013/07/next-generation-tv-ratings-systems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1712859296121495722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1712859296121495722'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2013/07/next-generation-tv-ratings-systems.html' title='Next Generation TV Ratings Systems'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRy5QxZaHEPNG-jWagNmNDJKZ4agZFOb_NmjPzEaLmShnqTyxJLgbfVotNI4f2vsUKmCCX5rqYxdMQ8nA5p5XL-3rYjGKMc6LJ3hL-Nf1Jd-_rNqpIrWFYFYjLD5cd5NlTlZS5EYwJFhea/s72-c/watching-tv.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-5034610949004013836</id><published>2013-03-26T11:45:00.000+02:00</published><updated>2013-03-26T11:45:19.949+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="click"/><category scheme="http://www.blogger.com/atom/ns#" term="cpp"/><category scheme="http://www.blogger.com/atom/ns#" term="gnuradio"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><category scheme="http://www.blogger.com/atom/ns#" term="threads"/><title type='text'>Integrating Click Router and GNURadio</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;direction: ltr;&quot;&gt;
Recently, I have been working on integrating &lt;a href=&quot;http://www.read.cs.ucla.edu/click/&quot;&gt;Click Modular Router &lt;/a&gt;to work with both WiFi cards and USRPs to facilitate the development of cognitive radio testbeds. I am using &lt;a href=&quot;http://gnuradio.org/redmine/projects/gnuradio/wiki&quot;&gt;GNURadio&lt;/a&gt; to control &lt;a href=&quot;https://www.ettus.com/product/details/UN210-KIT&quot;&gt;N210 USRPs&lt;/a&gt;. I found that developing routing hops to be interesting and worth sharing as it requires the USRP to&amp;nbsp;simultaneously&amp;nbsp;send and receive. This&amp;nbsp;requires&amp;nbsp;the transmission and reception to be on separated frequencies.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
For transmission, first a client socket must be created in the click configuration code.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;Socket(TCP, localhost, 4002, Client true)
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style=&quot;direction: ltr;&quot;&gt;
Then, I used a thread to constantly listens on that socket and transmits the data once a new packet is received. This allows for the separation of tasks and good visibility of the transmission code. I noticed that there is a trend to include the transmission code within the main function which degrades the code readability. The thread takes as a parameter the top_block describing the data path on the USRP.&lt;/div&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;class tx_th (threading.Thread):
    def __init__(self,tb):
        threading.Thread.__init__(self)
        self.tb = tb
        self.tx_soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.tx_soc.bind((&#39;&#39;,4002))
        self.tx_soc.listen(1)
        self.tx_soc_client,addrr = self.tx_soc.accept()
        self.pktno = 0
        self.pkt_size = 1500

    def run(self):
        print &quot;Thread Started ...&quot;
    
        while True:
            try:
                data = self.tx_soc_client.recv(1024)
                if data:
                    control_flag = struct.unpack(&#39;i&#39;, data[0:4])
                    if control_flag == 0:
                        target_tx_freq = struct.unpack(&#39;i&#39;, data[4:8])
                        self.tb.source.u.set_center_freq(target_tx_freq, 0)
                    else:
                        data_to_be_sent = data[1:]
                        payload = struct.pack(&#39;!H&#39;, self.pktno &amp;amp; 0xffff) + data_to_be_sent
                        self.tb.txpath.send_pkt(payload, False)
                        self.pktno += 1
                        sys.stderr.write(&#39;.&#39;)
            except:
                print traceback.format_exc()
                t= 1
&lt;/pre&gt;
As for the reception, a server socket is created in the Click configuration file.

&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;Socket(TCP, localhost, 4001, Client false)
&lt;/pre&gt;
And in the USRP control code, the rx_callback method is modified to be:
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;    def rx_callback(ok, payload):
        global n_rcvd, n_right, s

        (pktno,) = struct.unpack(&#39;!H&#39;, payload[0:2])    
        data_recv = payload[2:]

        if s is None:
   print &quot;Data Socket Recv None&quot;
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   s.connect((&quot;127.0.0.1&quot;,4001))
   s.send(data_recv)
        else:
   s.send(data_recv)
&lt;/pre&gt;
The assumption here is that each packet is annotated with its packet number (for debugging purposes).

&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/5034610949004013836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2013/03/integrating-click-router-and-gnuradio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/5034610949004013836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/5034610949004013836'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2013/03/integrating-click-router-and-gnuradio.html' title='Integrating Click Router and GNURadio'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-2536465266279365601</id><published>2011-08-28T13:56:00.000+02:00</published><updated>2011-08-28T13:56:11.325+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="open science"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><category scheme="http://www.blogger.com/atom/ns#" term="sfd"/><category scheme="http://www.blogger.com/atom/ns#" term="sfd2011"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Freedom Day"/><category scheme="http://www.blogger.com/atom/ns#" term="software-freedom-day"/><title type='text'>Open Science - SFD 2011</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
For the third year I was invited to give a talk at Software Freedom Day @ Alexandria University 2011 and I wanted to talk about something that links what I am doing now (I am a research assistant at E-JUST) and open source so I started researching Open Source Science.&lt;br /&gt;
&lt;br /&gt;
Starting from the fact that I use a lot of open source modules and packages in my work developed by others and put on the internet for everyone to use. I began to understand the wider concept of open science which aims at enabling everyone who is willing&amp;nbsp;to&amp;nbsp;participate&amp;nbsp;in any scientific&amp;nbsp;endeavor&amp;nbsp;to have a part in it.&lt;br /&gt;
&lt;br /&gt;
Facilitated&amp;nbsp;by the internet, ideas, tasks, documents, code, scientific data and even videos of experiments are shared by the project&#39;s coordinator for anyone to participate in anyway and every way possible. And the results are amazing !!&lt;br /&gt;
&lt;br /&gt;
My main goal from the presentation and this post is to show how openness can boost research either by using the collective&amp;nbsp;intelligence&amp;nbsp;of all participants (as in &lt;a href=&quot;http://polymathprojects.org/&quot;&gt;the PolyMath project&lt;/a&gt; or &lt;a href=&quot;http://www.innocentive.com/&quot;&gt;InnoCentive&lt;/a&gt;)&amp;nbsp;or reducing the time or the resources need as in &lt;a href=&quot;http://scienceforcitizens.net/&quot;&gt;science for citizens&lt;/a&gt; organization.&lt;br /&gt;
&lt;br /&gt;
Other aspects of open science include making all the products of scientific projects available to the public for everyone to learn from and build on, saving money and time for other projects.&lt;br /&gt;
&lt;br /&gt;
One of the best introduction you can have to open science is the &lt;a href=&quot;http://www.youtube.com/watch?v=DnWocYKqvhw&quot;&gt;presentation&lt;/a&gt; made by &lt;a href=&quot;http://michaelnielsen.org/&quot;&gt;Michael Nielsen&lt;/a&gt; at TEDxWaterloo.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;345&quot; src=&quot;http://www.youtube.com/embed/DnWocYKqvhw&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;br /&gt;
Also below is the presentation I gave at Software Freedom Day @ Alexandria University 2011.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;355&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/9032137&quot; width=&quot;425&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;div id=&quot;__ss_9032137&quot; style=&quot;width: 425px;&quot;&gt;
&lt;div style=&quot;padding: 5px 0 12px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/2536465266279365601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2011/08/open-science-sfd-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/2536465266279365601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/2536465266279365601'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2011/08/open-science-sfd-2011.html' title='Open Science - SFD 2011'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/DnWocYKqvhw/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-3864455906652067088</id><published>2010-08-25T16:55:00.000+02:00</published><updated>2010-08-25T16:55:10.967+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bibliotheca alexandrina"/><category scheme="http://www.blogger.com/atom/ns#" term="contributing to open source"/><category scheme="http://www.blogger.com/atom/ns#" term="contribution"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="sfd"/><category scheme="http://www.blogger.com/atom/ns#" term="sfd2010"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Freedom Day"/><category scheme="http://www.blogger.com/atom/ns#" term="software-freedom-day"/><title type='text'>Contributing to Open Source - SFD 2010</title><content type='html'>Today I presented &quot;Contributing to Open Source&quot; as a part of Software Freedom Day @ Alexandria University 2010 held at Bibliotheca Alexandrina. The audience was great and helped in making the presentation better than I&amp;nbsp;anticipated.&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;This is the presentation I hope it would be useful to those that missed the event.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;width:425px&quot; id=&quot;__ss_5053445&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/eternal.saeed/contributing-to-open-source&quot; title=&quot;Contributing to Open Source&quot;&gt;Contributing to Open Source&lt;/a&gt;&lt;/strong&gt;&lt;object id=&quot;__sse5053445&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sfd-100825091710-phpapp01&amp;stripped_title=contributing-to-open-source&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed name=&quot;__sse5053445&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sfd-100825091710-phpapp01&amp;stripped_title=contributing-to-open-source&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;padding:5px 0 12px&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/eternal.saeed&quot;&gt;Ahmed Saeed&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;It was cool to be presenting at the BA for the first time.&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/3864455906652067088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/08/contributing-to-open-source-sfd-2010.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3864455906652067088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3864455906652067088'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/08/contributing-to-open-source-sfd-2010.html' title='Contributing to Open Source - SFD 2010'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-6170189185064225237</id><published>2010-08-02T13:32:00.000+03:00</published><updated>2010-08-02T13:32:56.199+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BA"/><category scheme="http://www.blogger.com/atom/ns#" term="e-just"/><category scheme="http://www.blogger.com/atom/ns#" term="egypt"/><category scheme="http://www.blogger.com/atom/ns#" term="MuCSAT"/><category scheme="http://www.blogger.com/atom/ns#" term="Nile University"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><title type='text'>Research Opportunities in Egypt</title><content type='html'>Lately I have been exploring the research communities and&amp;nbsp;opportunities&amp;nbsp;in Egypt, specially Computer Science&amp;nbsp;oriented&amp;nbsp;research groups. I was amazed by the number of&amp;nbsp;opportunities&amp;nbsp;that are available now specially for a fresh graduate like myself.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll try to list some of the opportunities I have came across and that I consider tempting.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Cairo Microsoft Innovation Center (CMIC) :&lt;/b&gt;&lt;br /&gt;
One of the best research centers and it collaborates with a lot of the institutions that follows. There you&#39;ll get the chance to work with cutting edge technologies developing projects that will directly help the Arabic community.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Government Funded Research Projects:&lt;/b&gt;&lt;br /&gt;
Development funds like ITIDA, NTRA and STDF are providing support for research projects and IT projects on all level. It&#39;s quite interesting to be working on an independent research project that totally matches your interests with&amp;nbsp;absolutely&amp;nbsp;no restrictions and get payed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. E-JUST &amp;amp;&amp;nbsp;&lt;/b&gt;&lt;b&gt;Nile University&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;br /&gt;
Working on a research project at either of these universities will offer you the chance of working in an environment like no other. It tries to match the graduate studies&amp;nbsp;experience in the US. Although there are some restrictions that you don&#39;t find in independent research project, you get to finish your master&#39;s degree at one of these institutions and get payed a better salary.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. R&amp;amp;D Startups:&lt;/b&gt;&lt;br /&gt;
Recently R&amp;amp;D startups started to appear in Egypt. They offer a pretty&amp;nbsp;intense experience offering the challenges and&amp;nbsp;excitement&amp;nbsp;&amp;nbsp;that you&#39;ll find at any research project while focusing on specific targets, deadlines and specifications. Of course the salary is better than universities and&amp;nbsp;independent&amp;nbsp;research projects, but publications are not&amp;nbsp;guaranteed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. Mubarak City for Science and Technology:&lt;/b&gt;&lt;br /&gt;
This one is pretty new to me. I have just learned about the options there. Some of them seems promising but the&amp;nbsp;environment&amp;nbsp;is awfully similar to those of public universities. Although the salary is a little bit higher than a typical Teaching&amp;nbsp;Assistant position at any public university you&#39;ll end up getting you master&#39;s degree from a public university. There are&amp;nbsp;specific&amp;nbsp;tracks which doesn&#39;t provide a lot of&amp;nbsp;flexibility&amp;nbsp;but some of them are quite interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6. Bibliotheca Alexandrina:&lt;/b&gt;&lt;br /&gt;
The BA has A LOT going on with different teams working on many interesting projects. They have a super computer (the only I know of in Egypt). Also their books digitization system is recognized as one of the best systems in the world. The salary is quite good but it&#39;s not easy either to get in or get out.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7. Masters Degree in Public Universities:&lt;/b&gt;&lt;br /&gt;
This is the last&amp;nbsp;sanctuary to fresh graduates seeking research&amp;nbsp;opportunities. The problem with this option is that any work requires commitment and this track doesn&#39;t include a&amp;nbsp;payroll&amp;nbsp;so you end up working at software house either part or full time. This degrades your&amp;nbsp;efficiency&amp;nbsp;greatly regarding time available to do the needed work or even studying the master&#39;s courses.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;All the above statements are totally subjective and based on my own opinion and the opinions of anonymous people that had experience at each of those institutions.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/6170189185064225237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/08/research-opportunities-in-egypt.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/6170189185064225237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/6170189185064225237'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/08/research-opportunities-in-egypt.html' title='Research Opportunities in Egypt'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-3736862134573200858</id><published>2010-07-22T13:10:00.001+03:00</published><updated>2010-07-22T16:22:20.924+03:00</updated><title type='text'>A Research Graduation Project Accepted in PACT 2010</title><content type='html'>I have been working throughout the past year on my graduation project. The main target of the project was accelerating a Numerical Weather Prediction model (the Weather Research and Forecasting model) using GPUs. We implemented the latest version of one of the modules and our implementation was &lt;a href=&quot;http://www.mmm.ucar.edu/wrf/WG2/GPU/WSM5.htm&quot;&gt;published&lt;/a&gt; as part of the latest release of a system supported by the United States Air Force and the National Oceanic and Atmospheric Agency (NOAA).&lt;br /&gt;
After our thesis defense we decided to go on with this work and submit it as a research poster to a high ranking conference and we chose PACT. International Conference on Parallel Architectures and Compilation Techniques (PACT) is a top tier, rank 1 conference. We submitted our work as a research poster for the ACM Student Research Competition in the &lt;b&gt;Undergraduate Category &lt;/b&gt;(&lt;a href=&quot;http://syntaxandsemantic.blogspot.com/2009/08/dniss-acceptance-in-mobicom-research.html&quot;&gt;I have already particpated at an ACM SRC at MobiCom&#39;09 last summer&lt;/a&gt;).&lt;br /&gt;
I was informed on 22nd of July 2010 that our work &lt;i&gt;&quot;Quantifying the Impact of GPU Specific Optimizations: An Experimental Study&amp;nbsp;on a Weather Forecasting Application&quot;&lt;/i&gt;&amp;nbsp;was accepted and the judges&#39; comments were great. This is yet another proof that Egyptian Public Universities, with no fund whatsoever, can produce high quality research on the undergraduate level.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Waiting for your comments :).&lt;/span&gt;&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/3736862134573200858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/07/research-graduation-project-accepted-in.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3736862134573200858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/3736862134573200858'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/07/research-graduation-project-accepted-in.html' title='A Research Graduation Project Accepted in PACT 2010'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-7807117049333919825</id><published>2010-05-09T15:04:00.002+03:00</published><updated>2010-05-09T15:05:45.651+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="compilation"/><category scheme="http://www.blogger.com/atom/ns#" term="CUDA"/><category scheme="http://www.blogger.com/atom/ns#" term="make"/><category scheme="http://www.blogger.com/atom/ns#" term="makefile"/><title type='text'>CUDA compilation on Linux (Makefiles)</title><content type='html'>I have been struggling with compiling complex CUDA code, with complex I mean a lot of .cu .F .cpp and .c files. I have created a makefile that can help you compile that kind of code. I&#39;ll try to give a quick view of it here explaining some parts:&lt;br /&gt;&lt;br /&gt;First you&#39;ll need to specify the CUDA path and the compilers and linkers. Here I am using gcc and g++ for .c and .cpp files and nvcc for .cu files:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CUDA_INSTALL_PATH ?= /usr/local/cuda&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;CXX        := g++&lt;br /&gt;CC         := gcc&lt;br /&gt;LINK       := g++ -fPIC&lt;br /&gt;NVCC&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;:= nvcc -ccbin /usr/bin&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then you need to specify where to locate the CUDA header files :&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# Includes&lt;br /&gt;INCLUDES  = -I. -I$(CUDA_INSTALL_PATH)/include&lt;br /&gt;&lt;br /&gt;# Common flags&lt;br /&gt;COMMONFLAGS += $(INCLUDES)&lt;br /&gt;NVCCFLAGS += $(COMMONFLAGS)&lt;br /&gt;CXXFLAGS  += $(COMMONFLAGS)&lt;br /&gt;CFLAGS    += $(COMMONFLAGS)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then you specify where to locate the CUDA binaries for linking :&lt;br /&gt;&lt;code&gt;&lt;br /&gt;LIB_CUDA       := -L$(CUDA_INSTALL_PATH)/lib -lcudart&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then you specify the object files that the executable depends on and the name of the executable flle:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;OBJS =  sample_cuda_objectfile.cu.o sample_cpp_objectfile.cpp.o&lt;br /&gt;TARGET = exec&lt;br /&gt;LINKLINE  = $(LINK) -o $(TARGET) $(OBJS) $(LIB_CUDA)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Finally you specify the compilation rules. The following are generic rules so all you need to do is change the OBJS and TARGET variables for compilation:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;.SUFFIXES: .c .cpp .cu .o&lt;/code&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:monospace;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:monospace;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:monospace;&quot;&gt;&lt;div  style=&quot; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;font-family:&#39;Times New Roman&#39;;&quot;&gt;&lt;code&gt;%.c.o: %.c&lt;br /&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;$(CC) $(CFLAGS) -c $&amp;lt;  -o $@&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt; %.cu.o: %.cu&lt;br /&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;$(NVCC) $(NVCCFLAGS) -c $&amp;lt;  -o $@&lt;br /&gt;&lt;br /&gt;%.cpp.o: %.cpp&lt;br /&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;$(CXX) $(CXXFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;$(TARGET): $(OBJS) Makefile&lt;br /&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;$(LINKLINE)&lt;/code&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/7807117049333919825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/05/cuda-compilation-on-linux-makefiles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/7807117049333919825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/7807117049333919825'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/05/cuda-compilation-on-linux-makefiles.html' title='CUDA compilation on Linux (Makefiles)'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-918602119184977474</id><published>2010-05-04T12:52:00.000+03:00</published><updated>2013-03-26T10:47:45.740+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="community"/><category scheme="http://www.blogger.com/atom/ns#" term="contribution"/><category scheme="http://www.blogger.com/atom/ns#" term="github"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="sourceforge"/><category scheme="http://www.blogger.com/atom/ns#" term="value"/><title type='text'>Contributing to Open Source (Why? and How?)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Open Source products are everywhere now, probably now you&#39;re using some of them. And I am sure that a lot of people are appreciating the role of open source. This post is about giving back to the community, helping others and moving forward one of the applications/tools you&#39;re using as a part of your everyday life.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why Contribute to Open Source??&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Sun Microsystems had a slogan &quot;Change (Y)our world&quot;. And that summarizes what contributing to open source is all about. It&#39;s about making You better and making The World better. Let&#39;s make it clearer.&lt;br /&gt;
&lt;br /&gt;
When you contribute to open source it helps you in some many ways, it gets you to code and practice and enhance your programming skills. Then gets your code reviewed, reviewed and then reviewed once more before it becomes a part of an official release. And finally it gets you to document your code.&lt;br /&gt;
Of course how much a project adds to your skills depends on the scale of the project and the importance of the feature you&#39;re implementing.&lt;br /&gt;
&lt;br /&gt;
On the other hand, when you contribute to open source you&#39;re giving back to the community, helping improve the project you&#39;re contributing to and hence making someone&#39;s life easier by introducing a feature or fixing a bug and your code is out there for people to learn for it.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://durhamnc.gov/ich/op/prd/PublishingImages/Unity%20in%20the%20Community%20Logo2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;157&quot; src=&quot;http://durhamnc.gov/ich/op/prd/PublishingImages/Unity%20in%20the%20Community%20Logo2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How to Contribute to Open Source??&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
First, you&#39;ll have to choose a project.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Start small, choose small project with a small code base that you can get familiar with easily and you can get the people who wrote the code easily too.&lt;/li&gt;
&lt;li&gt;Choose a project you use, so you can be able to know what it needs and have clear vision of what&#39;s used for, what type of users you&#39;re targeting and what&#39;s missing that you once needed.&lt;/li&gt;
&lt;li&gt;Choose a project you like, and that way you&#39;ll be able to give it the time and get to have a reason to commit some time for developing, testing and documenting.&lt;/li&gt;
&lt;/ul&gt;
You can start by scanning active projects on &lt;a href=&quot;http://sourceforge.net/&quot;&gt;sourceforge&lt;/a&gt; or &lt;a href=&quot;https://github.com/&quot;&gt;github&lt;/a&gt; where you can find active small scale projects.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://deedseeds.com/images/318_Start_Small.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://deedseeds.com/images/318_Start_Small.jpg&quot; width=&quot;236&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Second, start communicating with the development community.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Join the project&#39;s development mailing lists and start scanning the e-mails to sense the trends and topics of interest to the community currently.&lt;/li&gt;
&lt;li&gt;Join the project&#39;s IRC channel and start asking the questions you have (search for answers on the mailing lists, wiki and blog posts before going to IRC so you get an answer).&lt;/li&gt;
&lt;li&gt;Chekout the code and compile it.&lt;/li&gt;
&lt;li&gt;Check the project&#39;s bug tracker and try fixing a bug or two before working on a feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.cals.ncsu.edu/course/ent425/tutorial/Communication/communicate.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;175&quot; src=&quot;http://www.cals.ncsu.edu/course/ent425/tutorial/Communication/communicate.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Finally if you find that you can work on the project &lt;b&gt;CHECK FEATURES LIST START CODING.&lt;/b&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/918602119184977474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/05/contributing-to-open-source-why-and-how.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/918602119184977474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/918602119184977474'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/05/contributing-to-open-source-why-and-how.html' title='Contributing to Open Source (Why? and How?)'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-2576722246484245612</id><published>2010-03-31T00:19:00.001+02:00</published><updated>2010-03-31T08:21:18.830+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithms"/><category scheme="http://www.blogger.com/atom/ns#" term="data structures"/><category scheme="http://www.blogger.com/atom/ns#" term="indexing"/><category scheme="http://www.blogger.com/atom/ns#" term="kd-tree"/><category scheme="http://www.blogger.com/atom/ns#" term="kd-trees"/><category scheme="http://www.blogger.com/atom/ns#" term="knn"/><category scheme="http://www.blogger.com/atom/ns#" term="matlab"/><category scheme="http://www.blogger.com/atom/ns#" term="multi-dimensional data"/><title type='text'>KNN Algorithm and KD-Trees</title><content type='html'>I am taking a Pattern Recognition course this semester, it&#39;s not really one of my favourite topics but I am doing OK. We had an assignment last week to test and compare different classification algorithms. One of the algorithms we were asked to implement was &lt;a href=&quot;http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm&quot;&gt;KNN (K Nearest Neighbours)&lt;/a&gt;. We were asked to find a way that makes searching for the K Nearest Neighbours faster; that&#39;s what this post about.&lt;br /&gt;
&lt;br /&gt;
The problem briefly is that: Given two sets of K dimensional points find the N nearest points (using Euclidean distance or any other measurement) to a K dimensional point X.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Naive Solution:&lt;/b&gt;&lt;br /&gt;
Go through the list, find the distance between X and all the points in the two sets, get the smallest N elements in the distances list... Simple enough.&lt;br /&gt;
As part of our assignment we were given a dataset of 100,000 points which proved this algorithm to be very slow.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;My Naive WRONG Solution:&lt;/b&gt;&lt;br /&gt;
I thought that it was easy to index the points in a way that makes it efficient to find the nearest points to a given point. Multiple Dimensional Sorting... It was totally wrong because two points might have the same values of m dimensions but the values of the other (K-m) dimensions put them far away from each other.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Possible Indexing Solutions:&lt;/b&gt;&lt;br /&gt;
There are &lt;a href=&quot;http://en.wikipedia.org/wiki/Nearest_neighbor_search#Methods&quot;&gt;different ways to index K Dimensional Points&lt;/a&gt; based on how near they are to each other. I will mention here KD-Trees.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;KD-Trees:&lt;/b&gt;&lt;br /&gt;
K dimensional trees is a binary tree that is based on space partitioning. It&#39;s used to index multi-dimensional data.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiui08wBYGXsxJxdZkDZEsHfPfB2xUrhnJg_sjorSPOGB_orbAZBSG6MNGdrGZNyR58cnMxCRwV0o523D0UY_yXfBFFl0tyazGOEPBkHQqu28xrPWh8oqBq8FBMRi5HiPMEXH0tGJlSkZiN/s1600-h/kdtree.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiui08wBYGXsxJxdZkDZEsHfPfB2xUrhnJg_sjorSPOGB_orbAZBSG6MNGdrGZNyR58cnMxCRwV0o523D0UY_yXfBFFl0tyazGOEPBkHQqu28xrPWh8oqBq8FBMRi5HiPMEXH0tGJlSkZiN/s320/kdtree.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The idea behind it is using the tree to navigate through space partitions while decreasing the size of each partition as you go through the tree.&lt;br /&gt;
The figure represents a simple 3d-tree. The dimensions are X,Y and Z. Constructing such a tree is much similar to a conventional binary search tree but differs in only that splitting mechanism uses a different dimension at each level and keeps iterating on them in the same order.&lt;br /&gt;
The root point in the figure splits the space into two partitions X&amp;gt;5&amp;nbsp; and X&amp;lt;5. On the second level of the tree the X&amp;gt;5 partition is split into two partitions Y&amp;gt;3 and Y&amp;lt;3 and so on.&lt;br /&gt;
&lt;br /&gt;
So as you can see by navigating through the tree you get a good approximation of the nearest points to the point you&#39;re searching for. But because the point you&#39;re searching for might be on the edge of one of the partitions a normal binary search will not always yield the correct the real nearest neighbour so re-checking is needed.&lt;br /&gt;
&lt;br /&gt;
To do that re-checking the algorithm saves the point obtained by a normal binary search as the current best. Then it iterates on the nodes already visisted in the tree to check for two things:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;If any of those nodes&#39; distance is smaller than the current best.&lt;/li&gt;
&lt;li&gt;If there exists a partition (branch) that might contain points with smaller distances. That&#39;s done by comparing the distance between the point we&#39;re searching for and the splitting point on the adjacent partition (the sibling of the node currently being examined) and the current best distance.&lt;/li&gt;
&lt;/ol&gt;I have made a simple implementation of KD-Trees and a nearest neighbour search algorithm in matlab. You can find it &lt;a href=&quot;http://code.google.com/p/kdtree-in-matlab/source/browse/trunk/KDTree.m&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/2576722246484245612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/03/knn-algorithm-and-kd-trees.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/2576722246484245612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/2576722246484245612'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/03/knn-algorithm-and-kd-trees.html' title='KNN Algorithm and KD-Trees'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiui08wBYGXsxJxdZkDZEsHfPfB2xUrhnJg_sjorSPOGB_orbAZBSG6MNGdrGZNyR58cnMxCRwV0o523D0UY_yXfBFFl0tyazGOEPBkHQqu28xrPWh8oqBq8FBMRi5HiPMEXH0tGJlSkZiN/s72-c/kdtree.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-1632176634233309579</id><published>2010-02-17T13:34:00.001+02:00</published><updated>2010-02-20T15:38:10.567+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="graduation project"/><category scheme="http://www.blogger.com/atom/ns#" term="weather prediction"/><category scheme="http://www.blogger.com/atom/ns#" term="wrf"/><category scheme="http://www.blogger.com/atom/ns#" term="wrf basics"/><title type='text'>Weather Research and Forecasting Model Explained (Part 3) - System Architecture and Parallelism</title><content type='html'>WRF ,as mentioned in &lt;a href=&quot;http://syntaxandsemantic.blogspot.com/2010/02/weather-forecast-and-prediction-model.html&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;http://syntaxandsemantic.blogspot.com/2010/02/weather-forecasting-and-research-model.html&quot;&gt;part2&lt;/a&gt;, is a system designed for both operational and research purposes, and to run on systems from conventional laptops to super computers. The design of such a versatile system is a real challenge.&lt;br /&gt;
In this post we will explore some of the WRF&#39;s Software Framework design and explain the functionality of the different layers of the system. Also we&#39;ll discuss how the system handles parallelism in different hardware environments.&lt;br /&gt;
&lt;b&gt;Software Framework Architecture&lt;/b&gt;&lt;b&gt;[1][2]&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;(The following functionalities doesn&#39;t include parallelism handling) &lt;/span&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIu8xuvOSwkSH6Un43XkuwwaHZBtJDGSyeLuJ466lZkSh2DpoYFxbWnC_sLeSgHmHtBfsmb7mBZpKLbaCzuvEIUSp7cMhNNZtvRinQtOLFmCG9PcGagXNsM4NvAjRe8W7Xt2G4fq0QxHWC/s1600-h/wrf_arch&#39;.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIu8xuvOSwkSH6Un43XkuwwaHZBtJDGSyeLuJ466lZkSh2DpoYFxbWnC_sLeSgHmHtBfsmb7mBZpKLbaCzuvEIUSp7cMhNNZtvRinQtOLFmCG9PcGagXNsM4NvAjRe8W7Xt2G4fq0QxHWC/s400/wrf_arch&#39;.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;Figure1: Hierarchical WRF Software Design&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;As it appears in Figure 1, the system design has 3 layers:&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;i&gt;The Driver Layer:     &lt;/i&gt;&lt;br /&gt;
It defines and allocates domains and associates them in a nest hierarchy. It also manages the flow of a system run as it&#39;s responsible for stepping the time for the loop mentioned in part1. And it&#39;s responsible for I/O operations.&amp;nbsp; &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;i&gt;The Mediation Layer:&lt;/i&gt;&lt;br /&gt;
It interfaces between the two other layers. For example the driver layer uses Fortran 90&#39;s derived data-types while the model layer deals with scalar arrays only. The mediation layer is responsible for dereferencing the scalar arrays from the derived data types.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;i&gt;The Model Layer:&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;It performs the actual weather prediction computations like physics calculations and time integration.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Parallelism (&lt;/b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;Two Level decomposition&lt;/b&gt;&lt;/span&gt;&lt;b&gt;):&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
Due to the versatileness of the system mentioned before, parallel systems including shared memory and distributed memory architectures. Two level decomposition addresses that problem by decomposing domains in patches and decomposing patches into tiles. With patches being &quot;a section of a model domain allocated to a single memory address space&quot; and tiles being &quot;the amount of a patch that is allocated to a one thread of execution and every cell of a patch that requires computation must fall into some tile&quot;[2].&lt;br /&gt;
The driver layer is responsible for distributed and shared memory allocation. Also it handles the decomposition of domains into patches and patches into tiles. While the model layer handles only tiles. This part reflects one of the best design features of the WRF Software Framework; Model layer is meant to be programmed by meteorological scientists not computer scientists, so handling parallelism issues (i.e. synchronization, memory allocation, communication, etc) was made part of the driver layer leaving the model layer to have only &quot;meteorological calculators&quot;-tiles callable subroutines.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;[1] John G. Michalakes, Michael McAtee and Jerry Wegiel, &lt;i&gt;SOFTWARE INFRASTRUCTURE FOR THE WEATHER RESEARCH AND FORECAST MODEL&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;[2] Weather Research and Forecast Model 1.2: Software Design and Implementation&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/1632176634233309579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/02/weather-research-and-forecasting-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1632176634233309579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1632176634233309579'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/02/weather-research-and-forecasting-model.html' title='Weather Research and Forecasting Model Explained (Part 3) - System Architecture and Parallelism'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIu8xuvOSwkSH6Un43XkuwwaHZBtJDGSyeLuJ466lZkSh2DpoYFxbWnC_sLeSgHmHtBfsmb7mBZpKLbaCzuvEIUSp7cMhNNZtvRinQtOLFmCG9PcGagXNsM4NvAjRe8W7Xt2G4fq0QxHWC/s72-c/wrf_arch&#39;.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-1614969402884369810</id><published>2010-02-12T20:37:00.007+02:00</published><updated>2010-02-20T15:38:35.058+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="advanced research wrf"/><category scheme="http://www.blogger.com/atom/ns#" term="graduation project"/><category scheme="http://www.blogger.com/atom/ns#" term="nesting"/><category scheme="http://www.blogger.com/atom/ns#" term="weather research and forcasting"/><category scheme="http://www.blogger.com/atom/ns#" term="wrf"/><category scheme="http://www.blogger.com/atom/ns#" term="wrf basics"/><title type='text'>Weather Research and Forecasting Model Explained (Part 2) - Nesting and System Components</title><content type='html'>In the &lt;a href=&quot;http://syntaxandsemantic.blogspot.com/2010/02/weather-forecast-and-prediction-model.html&quot;&gt;part 1&lt;/a&gt; we introduced WRF and discussed the meteorological basics of Advanced Research WRF. In this part we discuss the concept of nesting and explain different system parts of WRF. But first we&#39;ll define two basic terms.&lt;br /&gt;
Grid: Raw atmospheric data layed out as a discrete grid for an area of the map.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_tQUuEMC6Ncbv596sIz2BwikWB92u7wpJK9W9exTMGnwldUDd5vWxALmluhEm0rDLQhbK86eP70b5RoNEy1rV7qmGbn65-ybWL4pF2DbFjvKSzvx1XNrGOzYYV0hI20a5HpBoeghlg3R/s400/wrf_grid.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;162&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_tQUuEMC6Ncbv596sIz2BwikWB92u7wpJK9W9exTMGnwldUDd5vWxALmluhEm0rDLQhbK86eP70b5RoNEy1rV7qmGbn65-ybWL4pF2DbFjvKSzvx1XNrGOzYYV0hI20a5HpBoeghlg3R/s320/wrf_grid.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; Figure 1 [1] Grid examples&lt;/span&gt;&lt;/div&gt;Domian: A model created by processing grid information and making it ready for processing by WRF Model.&lt;br /&gt;
&lt;b&gt;Nesting:&lt;/b&gt;&lt;br /&gt;
Nesting is a way of getting high resolution data from low resolution data.That&#39;s achieved by introducing more grid or grids to the initial state. Those finer grain grids force the need for more high resolution data. That data is obtained by interpolating data from coarse grain grids or could be user input.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT2AJZvu_ZrUjFyG6rNZb7pqSxG7su4yGvgSQB2ScSkTx3IYWcMBTIzxo2HjU1zpN6v1udo4ekfWFvinZeWuO5DbjT6x1mz-4xYoFxJebtW2SRWoSVpCKlfjZLRxJ_FYYmYideZpFl8vel/s1600-h/wrf_grid_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT2AJZvu_ZrUjFyG6rNZb7pqSxG7su4yGvgSQB2ScSkTx3IYWcMBTIzxo2HjU1zpN6v1udo4ekfWFvinZeWuO5DbjT6x1mz-4xYoFxJebtW2SRWoSVpCKlfjZLRxJ_FYYmYideZpFl8vel/s320/wrf_grid_2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Figure 2 [1] Nested grid &lt;/span&gt;&lt;/div&gt;&lt;b&gt;WRF System Components:&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-P4ZNCrtJAIJsZ-A4jHyOtejv_VehwZNdJygZvLVN3G5HswugilurtHx7U-andOoTH6cHbYOyRG8WNFdD5vyesr0XwkPNqQz1JgU4oQMUhltXJvjWflj5e6IcDIr6BzWfjWUft9LnK7Lz/s1600-h/wrf_components.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;207&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-P4ZNCrtJAIJsZ-A4jHyOtejv_VehwZNdJygZvLVN3G5HswugilurtHx7U-andOoTH6cHbYOyRG8WNFdD5vyesr0XwkPNqQz1JgU4oQMUhltXJvjWflj5e6IcDIr6BzWfjWUft9LnK7Lz/s400/wrf_components.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Figure3 [1] WRF system components&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;As it appears in figure 1, the system has 3 main components: Preprocessor (WPS), the WRF Model and Post Processor.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The WPS is responsible for preparing the input (initial conditions and lateral boundary conditions) to ARW for real-data simulations by [2]&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Defining simulation domain and nested domains.&lt;/li&gt;
&lt;li&gt;Computing latitude, longitude, map scale factors for every grid point&lt;/li&gt;
&lt;li&gt;Interpolates time-invariant terrestrial data to simulation grids (e.g., terrain height and soil type)&lt;/li&gt;
&lt;li&gt;Interpolates meteorological fields from another model onto simulation domains&lt;/li&gt;
&lt;/ol&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The WRF Software Framework is the core engine of the system, it has the Dynamics solver,  physics package and WRF-Chem and the interfacing between them. That core has all the equations mentioned in &lt;a href=&quot;http://syntaxandsemantic.blogspot.com/2010/02/weather-forecast-and-prediction-model.html&quot;&gt;part 1&lt;/a&gt;. &lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The Post Processor, it processes the output of the WRF WRF Software Framework and converts it to &lt;a href=&quot;http://en.wikipedia.org/wiki/GRIB&quot;&gt;GRIB&lt;/a&gt; format. For more information check [3] and [4]. &lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;[1] A Description of the Advanced Research WRF Version 3, http://www.mmm.ucar.edu/wrf/users/docs/arw_v3.pdf&lt;br /&gt;
[2] WPS Basics, http://www.mmm.ucar.edu/people/duda/files/wps_files/WPS-basics.pdf&lt;br /&gt;
[3] NCEP WRF Post Processor User Guide, http://www.emc.ncep.noaa.gov/mmb/papers/chuang/2/wrfpost.txt&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;[4] User&#39;s Guide for the NMM Core of the Weather Research and Forecast (WRF) Modeling System Version 3, Chapter 7: Post Processing Utilities.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt; &lt;/span&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/1614969402884369810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/02/weather-forecasting-and-research-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1614969402884369810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1614969402884369810'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/02/weather-forecasting-and-research-model.html' title='Weather Research and Forecasting Model Explained (Part 2) - Nesting and System Components'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_tQUuEMC6Ncbv596sIz2BwikWB92u7wpJK9W9exTMGnwldUDd5vWxALmluhEm0rDLQhbK86eP70b5RoNEy1rV7qmGbn65-ybWL4pF2DbFjvKSzvx1XNrGOzYYV0hI20a5HpBoeghlg3R/s72-c/wrf_grid.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-7624124287895785119</id><published>2010-02-04T14:05:00.004+02:00</published><updated>2010-02-20T15:38:52.056+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="advanced research wrf"/><category scheme="http://www.blogger.com/atom/ns#" term="euler equations"/><category scheme="http://www.blogger.com/atom/ns#" term="graduation project"/><category scheme="http://www.blogger.com/atom/ns#" term="weather prediction"/><category scheme="http://www.blogger.com/atom/ns#" term="weather research and forcasting"/><category scheme="http://www.blogger.com/atom/ns#" term="wrf basics"/><title type='text'>Weather Research and Forecasting Model Explained (Part 1) - Weather Prediction Basics</title><content type='html'>&lt;i&gt;My goal here is to give a simple overview of the WRF for computer science students.&lt;/i&gt;&lt;br /&gt;
The &lt;a href=&quot;http://www.wrf-model.org/&quot;&gt;Weather Resarch and Forecasting&lt;/a&gt; (WRF, pronounced &quot;worf&quot;) model is an open-source numerical weather prediction (NWP) and atmospheric simulation system designed for both research and operational applications [1]. This system was developed as joint effort between National Center of Atmospheric Research, National Oceanic and Atmospheric Administration (NOAA), Air Force Weather Agency and others. In this post ,and the posts to follow, I&#39;ll try to explain the WRF from two different perspectives, the first being &lt;a href=&quot;http://en.wikipedia.org/wiki/Meteorology&quot;&gt;Meteorology&lt;/a&gt; and the second being Computer Science.&lt;br /&gt;
I am here concerned with the Advanced Research WRF (ARW) subset of WRF.&lt;br /&gt;
&lt;b&gt;Weather Prediction Basics:&lt;/b&gt;&lt;br /&gt;
Weather Prediction means to predict the state of the atmosphere in terms of (pressure, temperature, speed of wind, etc). Our atmosphere is controlled by flow and the conditions of the air across the planet and by predicting that flow we can predict the weather conditions in the area of interest. The prediction is done by providing a system with information about the current state of the area of interest. Then the system uses that information as the parameters for its equations (usually difference equations) to produce future conditions for that area.&lt;br /&gt;
&lt;b&gt;Euler&#39;s Equations:&lt;/b&gt;&lt;br /&gt;
Advanced Research WRF&#39;s dynamics engine integrates &lt;a href=&quot;http://en.wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29&quot;&gt;Euler&#39;s Equations&lt;/a&gt; to predict air flow.&lt;br /&gt;
&lt;blockquote&gt;Euler&#39;s equations are defined as a set of differential equations used in fluid dynamics to govern invscid flow (Wikipedia).&lt;/blockquote&gt;Being continuous equations, Euler&#39;s equations are discretized. Both temporal and spacial discretization are needed. So the surface of the earth is mapped as a grid ,based on the projection method used to project the spheric shape of earth, where all variable are defined on that grid.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_tQUuEMC6Ncbv596sIz2BwikWB92u7wpJK9W9exTMGnwldUDd5vWxALmluhEm0rDLQhbK86eP70b5RoNEy1rV7qmGbn65-ybWL4pF2DbFjvKSzvx1XNrGOzYYV0hI20a5HpBoeghlg3R/s1600-h/wrf_grid.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_tQUuEMC6Ncbv596sIz2BwikWB92u7wpJK9W9exTMGnwldUDd5vWxALmluhEm0rDLQhbK86eP70b5RoNEy1rV7qmGbn65-ybWL4pF2DbFjvKSzvx1XNrGOzYYV0hI20a5HpBoeghlg3R/s400/wrf_grid.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Figure 1 Spacial discretization &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;(V,U,W are wind velocities, &lt;/span&gt;&lt;span dir=&quot;ltr&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;θ is the potential temperature) &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;For temporal discretization, the Euler&#39;s equations are integrated using a time-split integration scheme called Runge-Kutta method.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;The following loop is used to integrate the equations and this loop is the main loop in the system (i.e. all other components are used to provide this loop with the information needed to compute the current time step)&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;&quot;&gt;Begin Time Step&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;&quot;&gt;Begin RK3 Loop: &lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;&quot;&gt;Solve the equations&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;&quot;&gt;End RK3 Loop&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;&quot;&gt;Compute non-RK3 physics &lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;&quot;&gt;End Time Step&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;i&gt;Note: This is a very simple version of the loop for the complete version reference &lt;/i&gt;[1]&lt;i&gt;.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;Initial and lateral boundary conditions:&lt;/b&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
For the system to be able to predict the weather for a certain area it doesn&#39;t only need its initial conditions but it also needs a way to know its boundary conditions as of course adjacent areas affect the area of interest. To solve this problem, several methods of generating lateral boundary data are used including periodic generating in which the lateral boundary conditions are repeated along the x-axis or y-axis or both.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 85%;&quot;&gt;[1] &lt;a href=&quot;http://www.mmm.ucar.edu/wrf/users/docs/arw_v3.pdf&quot;&gt;A Description of the Advanced Research WRF Version 3&lt;/a&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/7624124287895785119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/02/weather-forecast-and-prediction-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/7624124287895785119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/7624124287895785119'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2010/02/weather-forecast-and-prediction-model.html' title='Weather Research and Forecasting Model Explained (Part 1) - Weather Prediction Basics'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_tQUuEMC6Ncbv596sIz2BwikWB92u7wpJK9W9exTMGnwldUDd5vWxALmluhEm0rDLQhbK86eP70b5RoNEy1rV7qmGbn65-ybWL4pF2DbFjvKSzvx1XNrGOzYYV0hI20a5HpBoeghlg3R/s72-c/wrf_grid.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-6876680066799632085</id><published>2009-11-05T18:46:00.000+02:00</published><updated>2009-11-05T18:46:18.540+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Out of the Stone Age"/><title type='text'>Internet 4.0: Out of the Stone Age (Second Draft)</title><content type='html'>(This is an enhanced version of the my earlier post with the results of your comments and my discussions with friends).&lt;br /&gt;
With the relatively rise of online social networks and it&#39;s uncontrolable availability to vulnerable users (children, teenager and even people with low or no technical background) exposed a huge privacy concerns for everyone. Your data that your putting on the internet are available one way or another to almost everyone. Along with web giants such as Google and Facebook keeping track of every click you make for either targeted services or anonymized purposes. And that made me ask one basic question:&lt;br /&gt;
Do they have the right to know all my internet behaviour ?&lt;br /&gt;
Lets first state some important definitions that we&#39;ll need.&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;My behaviour&lt;/b&gt; is what I the links I click on the internet to browse the web to check, read and edit free online content.&lt;br /&gt;
&lt;b&gt;My service request&lt;/b&gt; is the link I click to ask some service provider to make something for me.&lt;br /&gt;
&lt;/blockquote&gt;My main goal is to make my behaviour totally private (owned by me) and my services request authenticatable and both &quot;anonyimizably&quot; trackable (we don&#39;t won&#39;t google search to fail). So lets see how this can happen.&lt;br /&gt;
What I am proposing is an ID that&#39;s connected to the internet 24/7 where ever it is. This ID acts as a single point of access to your whole online life from your name, date of birth and picture to your browsing habits and computer and TV preferences to social security number and credit card number.&lt;br /&gt;
I guess such a device can have a lot of criticism so let&#39;s answer the ones I got so far one by one,&lt;br /&gt;
&lt;b&gt;Browsing the Internet:&lt;/b&gt;&lt;br /&gt;
The major two issues that are of concern here are Behavioural data and Web Pages Personalization that is based on tracking such behavioural data. What&#39;s happening now that data about what EXACTLY I am doing on the internet is tracked one way or another by some service and if someone can put all this data together can know exactly my behaviour and use that data the way he wants or event sell it.&lt;br /&gt;
This data belongs to me so what I am suggesting here is that each individual behaviour data is processed online and the extracted information should be saved into his ID. That way as an internet baby with no data about you (no character built yet) your ID will start gaining some character using the data that&#39;s processed while you are surfing the internet.&lt;br /&gt;
As for personalization, a web advantage that we can&#39;t afford to lose, web sites can query you ID for the characteristics it&#39;s looking for. Standardizing those characteristics should help the spreading of those IDs and make using them easier.&amp;nbsp; &lt;br /&gt;
&lt;b&gt;Shopping Online:&lt;/b&gt;&lt;br /&gt;
This activity is one basic example of a service request. Those services will need some kind of authentication so that we won&#39;t have fake IDs and impersonations with identity theft issues. Other services that will need authentication are location and country based services.&lt;br /&gt;
Facilitating such service will make online identity theft a more difficult job for hackers as it for thieves that that are trying to break into a secured house without the proper keys.&lt;br /&gt;
&lt;b&gt;The need for a centralized state:&lt;/b&gt;&lt;br /&gt;
The previous point exposed a very essential issue that such a system will need to gain the trust of the users and the services providers. Having a centralized trusted centre for issuing and maintaining those IDs linking them to their true owners where you can renew and update you basic information. Also where you can track people with criminal records, bank records and other official and important records. That way service providers will be able to trust ID owners if they checked with clean records from that central point.&lt;br /&gt;
There are two rules that such a central point should follow, the first is having only the data needed to authenticate incoming IDs, it shouldn&#39;t contain data about their behaviour or services request. Think about it in the way the government keep track of social security numbers and driving licenses.&lt;br /&gt;
The second rule is having really secured links between that central point and service providers. Strict laws should be made for the violation of the terms of use of such links.&lt;br /&gt;
&lt;b&gt;Using Multiple Devices (Extending the idea, a little):&lt;/b&gt;&lt;br /&gt;
I can imagine such a person carring such an ID and setting in front of his TV and immediately loads his TiVo programs without a click on the remote. Then, he moves toward his computer and it welcomes him while opening his front page. Then while surfing all the websites pops data and advertisement that are meant only for that person. Other websites that he never visited before use the character he already created to help him have a more personalized experience, helping him save time and money by poping only stuff that it knows he&#39;ll need.&lt;br /&gt;
Also that ID can start processing the data it has to extract information that a single behaviour monitor wouldn&#39;t have figured out. &lt;br /&gt;
&lt;b&gt;Implementation: &lt;/b&gt;&lt;br /&gt;
Implementations suggested in &quot;Privacy, Cost, and Availability Tradeoffs in Decentralized OSNs&quot; such as having machines on the clouds or personal computers should work fine. But what I can imagine is a device as small as a flash drive that is connected to the internet through WiMax coverage and with all you data on it. That device have WiFi and Bluetooth cards to help it connect with different devices and a small processor to interact with all that environment around it.&lt;br /&gt;
&lt;b&gt;Conclusion:&lt;/b&gt;&lt;br /&gt;
This system tries to map the world we already live in to the online world. We managed to have a very private real world and with the help of new technologies we&#39;re making it more secured and more private and yet leaving our online identities totally exposed. This system will need a lot of work to even come near being a reality but the technology needed is already here, all we need is to realize the value of our privacy and being identified as a single person online.</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/6876680066799632085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/11/internet-40-out-of-stone-age-second.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/6876680066799632085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/6876680066799632085'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/11/internet-40-out-of-stone-age-second.html' title='Internet 4.0: Out of the Stone Age (Second Draft)'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-1760019028876376219</id><published>2009-11-01T23:41:00.001+02:00</published><updated>2009-11-05T19:38:42.071+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Out of the Stone Age"/><title type='text'>Getting over stone age of the internet: discovering agriculture and building homes</title><content type='html'>If you look at the current internet, giving its age and the type of problems it&#39;s facing, you can see clearly that we&#39;re still in the middle of, what I&#39;d like to call it, the stone age of the internet.&lt;br /&gt;
We&#39;re talking about a technology that&#39;s only 30 years old, it has yet a lot of potentials to be discovered and drawbacks and problems to be solved. The problem I want to expose here is privacy. I&#39;d like to compare the real stone age (5000 years B.C.) to the internet stone age (1985 to 2009).&lt;br /&gt;
&lt;b&gt;The stone age: &lt;/b&gt;&lt;br /&gt;
During the stone age humans lived in the forests and took cover in caves from the rain, they lived in tribes that shared the same interest and cared for each other&#39;s interests. Communication between those tribes was almost impossible and they probably fought over everything (territory, food, women, etc). They slept right there in the open thinking that they are well protected that way. Invented some traps and protection systems to protect them and maybe considered those who got eaten by predators just flows in the protection system they had and they probably had their engineers work on that flow. By the end of the stone age humans made some of the most important discoveries in the history and those were agricultural and building homes. Sick of being exposed to all what nature had hidden for them, they built homes to protect themselves from the predators that intentionally meant to hurt them and other occasional incidents such as rain. Building homes close together they formed cities with a great building in the middle of the city forming the city hall. That city hall is were messengers from other cities went to communicate with that city. &lt;br /&gt;
&lt;b&gt;The internet stone age:&lt;/b&gt;&lt;br /&gt;
I think by now the analogy should be a little bit clear. We&#39;re now creating profiles leaving them exposed one some public servers with some security and privacy measures that are broken and patched all the time. Leaving the data of our teenagers exposed to all kind of e-predators and think by having that easily breakable privacy measures we&#39;re doing our best. Also we&#39;re scattering our information amongst different social networks and services that can&#39;t really agree on a way to communicate and that most of the time are fighting over the money coming from the ads business.&lt;br /&gt;
We&#39;re basically making one &quot;Ahmed Saeed&quot; appear to be 5 different persons because he has 5 accounts on different social networks and services. And by that we&#39;re wasting the precious data that can be inferred by knowing that those 5 men are basically the same (Google is working on that but it&#39;s just another patch). On the other hand, this &quot;Ahmed Saeed&quot; is leaving his data out there for people he don&#39;t know to use in all sorts of ways.&lt;br /&gt;
&lt;br /&gt;
I guess we&#39;re close to getting out of the internet stone age as the work suggested in &quot;Privacy, Cost, and Availability Tradeoffs in Decentralized OSNs&quot; published in Sigcomm&#39;s WOSN 2009 suggests what&#39;s near to discovering homes in the stone age. Probably over time we&#39;ll start building homes that are sustainable and reliable to provide us with the online cities we all dream of.</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/1760019028876376219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/11/getting-over-stone-age-of-internet.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1760019028876376219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/1760019028876376219'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/11/getting-over-stone-age-of-internet.html' title='Getting over stone age of the internet: discovering agriculture and building homes'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-5303353963770274468</id><published>2009-11-01T00:47:00.000+02:00</published><updated>2009-11-01T00:47:28.247+02:00</updated><title type='text'>Trying to order the new Ubuntu CD and that&#39;s what I get</title><content type='html'>&lt;blockquote&gt;Demand for Ubuntu CDs is very high, and we&#39;re trying to ensure that we have enough CDs for those who really need one. We&#39;ve noticed that you&#39;ve already received CDs of several previous Ubuntu releases. You can help us ensure the continued availability of Ubuntu CDs by&lt;br /&gt;
&lt;br /&gt;
* upgrading to the new release without a CD&lt;br /&gt;
* downloading your own CD for free&lt;br /&gt;
* becoming an Ubuntu member by contributing to Ubuntu, and thereby becoming eligible for more CDs&lt;br /&gt;
&lt;br /&gt;
Thanks for your support of Ubuntu!&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://shipit.ubuntu.com/+icing-ubuntu/rev8539/logo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://shipit.ubuntu.com/+icing-ubuntu/rev8539/logo.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;I am sure they are trying to do there best but my point of view that people with longest history with Ubuntu are the best candidates to share the CDs with others. Maybe I am wrong but I just want a CD :(</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/5303353963770274468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/11/trying-to-order-new-ubuntu-cd-and-thats.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/5303353963770274468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/5303353963770274468'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/11/trying-to-order-new-ubuntu-cd-and-thats.html' title='Trying to order the new Ubuntu CD and that&#39;s what I get'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6898505354952985680.post-7170620488591955770</id><published>2009-10-25T21:16:00.001+02:00</published><updated>2009-10-25T21:19:56.369+02:00</updated><title type='text'>Video Segmentation: Science fiction coming true</title><content type='html'>&lt;a href=&quot;http://www.merl.com/template/image.php?src=projects/images/video-segmentation.gif&amp;amp;width=250&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.merl.com/template/image.php?src=projects/images/video-segmentation.gif&amp;amp;width=250&quot; /&gt;&lt;/a&gt;First I&#39;d like to define roughly what video segmentation is then talk about it in more technical details.&lt;br /&gt;
The term video segmentation is used with two applications in mind, the first making a long video short by extracting the key shots and images and puting them in a sequence summarizing the long video. So you can think of it as making movies trailers automatically.&lt;br /&gt;
The other is extracting the objects that were shot in a video and tracking them through a series of shots; in short making videos of the objects in one big video. So you can think of it as Arnold Schwarzenegger moving as the terminator identifying objects with his &quot;eyes&quot; and getting data about objects he&#39;s seeing.&lt;br /&gt;
Both problems are challenging and interesting but I&#39;ll focus more on the challenges faced when developing algorithms for the second definition.&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
If you used Photoshop ever then you must have done some image segmentation before. If you still don&#39;t know what I am talking about, remember the magic tool. Using that tool you can select objects in a certain image almost automatically. A lot of technquies have been developed for that problem and they are quite useful now. But lets think how complicated it can get with it turns into a moving objects.&lt;br /&gt;
A simple answer to the problem would be, video is just a series of images so we can just keep selecting the object in all of those frames.&lt;br /&gt;
Simply doing that will raise a question, how can you know that the object you&#39;re selecting now is the same object you selected in the previous frame?&lt;br /&gt;
Objects tend to move, backgrounds do the same thing and both tend to have at some points parts that make them look as if they were the same objects.&lt;br /&gt;
Also objects tend to intersect and hide behind one another making it look as if objects are disappearing.&lt;br /&gt;
Another important behaviour is that most objects change the way they look (think of a rubber ball).&lt;br /&gt;
With all of those consideration in mind, developing an algorithm that does object identification, object tracking and event detection becomes a very interesting and difficult task.&lt;br /&gt;
To wrap it up, I&#39;ll give a simple example which I guess must be using video or at least image segmentation. Digital Cameras, cool new digital cameras can detect faces and track them while them camera is moving. Just add some face recognition system and you got yourself a first component of terminator&#39;s system :D</content><link rel='replies' type='application/atom+xml' href='http://syntaxandsemantic.blogspot.com/feeds/7170620488591955770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/10/video-semengatation-science-fiction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/7170620488591955770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6898505354952985680/posts/default/7170620488591955770'/><link rel='alternate' type='text/html' href='http://syntaxandsemantic.blogspot.com/2009/10/video-semengatation-science-fiction.html' title='Video Segmentation: Science fiction coming true'/><author><name>Ahmed Saeed</name><uri>http://www.blogger.com/profile/07981949935927210836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='28' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV70ESvVqlykBZu-7ICjbvDdhg1crU2v5qr2j_BRHFJdNL-wqDvY_KpVw3E-0qUP1RmDnuXzbRdRiujFrguxlY-tfcB39qVdlQXt3k-6m0bsL2QP4DAo2-caLWJ7-xbfw/s127/citations%3Fview_op%3Dview_photo%26user%3DnuiUbpsAAAAJ%26citpid%3D8'/></author><thr:total>0</thr:total></entry></feed>