<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/api.php?action=feedcontributions&amp;user=Ypolius&amp;feedformat=atom</id>
		<title>eLinux.org - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/api.php?action=feedcontributions&amp;user=Ypolius&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Ypolius"/>
		<updated>2013-05-19T05:29:18Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.21alpha</generator>

	<entry>
		<id>http://elinux.org/User:Ypolius</id>
		<title>User:Ypolius</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Ypolius"/>
				<updated>2010-05-19T22:29:08Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: Replaced content with 'Category:ECE597
I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comforta…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux environment and would love to learn how it works. Currently I am working on the pyWikiReader project.&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Ideas</id>
		<title>ECE497 Project Ideas</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Ideas"/>
				<updated>2010-05-19T22:10:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
== Sources for Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Here are some links where you'll find ideas for your project.&lt;br /&gt;
* [http://wiki.omap.com/index.php/ETechDays_Community_Lightning_Talks ETechDays Community Lightning Talks], this is a one-day web-based conference where many project ideas are presented.  One of our 2009-2010 senior design projects was found here.&lt;br /&gt;
* [http://beagleboard.org/project Official list of Beagle Projects], there are many Beagle specific projects listed here.  Many are inactive.  ''List your project here once it running.''&lt;br /&gt;
* [http://www.youtube.com/watch?v=Mk1xjbA-ISE Augmented Reality Project], here's an idea that I think we can do on the Beagle.  Rather than using augmented reality glasses, I'd suggest we use a [http://focus.ti.com/dlpdmd/docs/dlpdiscovery.tsp?sectionId=60&amp;amp;tabId=2235 TI DLP pico projector]. [http://www.hitlabnz.org/wiki/EmbeddedAR Here's] AR running on the Beagle. &lt;br /&gt;
* [http://code.google.com/p/0xdroid/ Android], this is one of a couple of efforts to port [http://source.android.com/ Google's Android OS] to the Beagle.&lt;br /&gt;
* [[BeagleBoard/Ideas-2009]] Google summer code ideas 2009.&lt;br /&gt;
&lt;br /&gt;
== Projects you would like to do ==&lt;br /&gt;
Edit this page to add projects you would like to do.  If you aren't in the class, add ideas you would like to see done by class members.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Team&amp;amp;nbsp;Members&lt;br /&gt;
! Project Title&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| [[ECE597 Google PowerMeter]]&lt;br /&gt;
| Google has a [http://www.google.com/powermeter project] to view and manage home electricity usage. This project would involve designing the hardware to measure the power usage and the Beagle software in interface with it.  The Beagle would talk to the local home network via a wireless link and the home owner would configure the Beagle via a web page served on the Beagle.&lt;br /&gt;
|-&lt;br /&gt;
| Yannick Polius&lt;br /&gt;
| [[ECE597 Project pyWikiReader | pyWikiReader]]&lt;br /&gt;
| This project is mostly software, with the hardware element being the use of the dsp. The idea is to tie together three technologies: speech recognition, speech synthesis, and internet access in order to create an interface capable of orating information to the user based on a vocal command. The implementation I have in mind is to use the Pocket Sphinx speech recognition engine to first understand what the user wants through speech, such as &amp;quot;Rose-Hulman&amp;quot;. Once the speech is translated, the software can execute a Wikipedia search to pull said item's page. Most of the important info is contained within the introductory paragraph, so the software will take only that chunk and feed it into the Flite speech synthesis engine. The end result is a simple machine with &amp;quot;mother box&amp;quot; like usability, that is, no interaction besides what is natural to the user (speaking) should be necessary to retrieve the information.&lt;br /&gt;
|-&lt;br /&gt;
| Paul Morrison &amp;lt;br&amp;gt; Steven Stark&lt;br /&gt;
| [[ECE597 3D Chess | 3D Chess with Networking]]&lt;br /&gt;
| This project would simulate a hand-held chess game, and the game would allow two player games using two beagleboards over a network connection.  The graphics would use the beagle's PowerVR SGX for hardware accelerated graphics by using OpenGL.  In addition to 3D graphics and networking, a third portion of the project would be to optimize the boot time because a chess computer should start up quickly.&lt;br /&gt;
|-&lt;br /&gt;
| Tom Most &amp;lt;br&amp;gt; David Baty &amp;lt;br&amp;gt; Mark Jacobson&lt;br /&gt;
| [[ECE597: Sumo Robot|Sumo Robot]]&lt;br /&gt;
| The goal of this project is to create a robot capable of competing in the 3.0 kg weight class of a sumo competition ([http://www.youtube.com/watch?v=V3OR_sHrOJM an example]).  This would have minor hardware and electronics elements, but would focus on communication with sensors using the BeagleBoard and the Linux kernel.  At minimum, this involves sensors to detect the edge of the ring and the opposing robot.  This would likely be implemented using Sharp IR rangefinders, a ultrasonic rangefinders, and ideally a camera.  [http://circ.mtco.com/competitions/2010/rules/sumo Sumo rules].&lt;br /&gt;
|-&lt;br /&gt;
|Brian Embry &amp;lt;br&amp;gt; Jessica Lipscomb &amp;lt;br&amp;gt; Paul Banister&lt;br /&gt;
| [[ECE597 Network based MP3 player]]&lt;br /&gt;
| Network based mp3 player.  The Beagle will be programmed using a custom, protocol for transferring files from a network based server (x86 pc) to a Beagle.  Speakers will be attached to the Beagle, where the file will be played back.  Possible extensions are a LCD for displaying id3 tag information, and buttons for user interaction (next track, previous track, etc.) on the GPIO interface.&lt;br /&gt;
|-&lt;br /&gt;
|[[user:routhcr | Chris Routh]] &amp;lt;br&amp;gt; [[user:collinjc | J. Cody Collins]] &amp;lt;br&amp;gt; Greg Jackson &amp;lt;br&amp;gt; Keqiong Xin&lt;br /&gt;
| [[ECE597: Auto HUD]]&lt;br /&gt;
| Use the beagle board to run image recognition on a camera feed located inside a car, and then signaling to the driver via a pico projector various objects of interest.&lt;br /&gt;
|-&lt;br /&gt;
| Adam Jesionowski&amp;lt;br&amp;gt;Qiang Jiang&lt;br /&gt;
| [[ECE597_Adding_Sense_to_Beagle|Adding Sense to Beagle]] (See [[BeagleBoard/GSoC/Ideas]])&lt;br /&gt;
| Sensory aware applications are becoming more mainstream with the release of the Apple iPhone. This project would combine both HW and SW to add sensory awareness to beagle. First, additional modules such as GPS, 3-axis accelerometers, Gyroscopes, Temperature Sensors, Humidity Sensors, Pressure Sensors, etc, would be added to beagle to compliment the microphone input in order to allow sensing of the real world environment. Then SW APIs would need to be layered on top to allow easy access to the sensory data for use by applications. &lt;br /&gt;
|-&lt;br /&gt;
| Mitch Garvin &amp;lt;br&amp;gt; Matt Luke &amp;lt;br&amp;gt; Elliot Simon &amp;lt;br&amp;gt; Jian Li&lt;br /&gt;
| [[ECE597 Interactive Pong|Interactive Pong]]&lt;br /&gt;
| Run classic pong, projecting the screen and using a camera to track user's hands for input.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_pyWikiReader</id>
		<title>ECE597 Project pyWikiReader</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_pyWikiReader"/>
				<updated>2010-05-19T22:01:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:ECE597]]&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to get a program capable of using user voice recognition in order to identify sections of a Wikipedia page to read to the user. It is designed for an embedded system, but can be ported to a desktop environment with ease.&lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
[[user:ypolius | Yannick Polius]]&lt;br /&gt;
&lt;br /&gt;
==Guide to Project Setup==&lt;br /&gt;
This is a quick guide to setting up the software to be able to compile the project for both x86 and ARM Linux.&lt;br /&gt;
===Programming Environment Configuration===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
Download Netbeans&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enable C/C++ plugin &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Download G++ Lite ARM Toolchain http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Download the TIESR project source code:&lt;br /&gt;
&amp;lt;pre&amp;gt; svn checkout --username developername https://gforge.ti.com/svn/tiesr &amp;lt;/pre&amp;gt;&lt;br /&gt;
For the beagleboard a few extra steps need to be taken:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Extract the toolchain to the Tools/ARM directory in the TIESR root directory (trunk) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; The documentation says to create an include and lib link inside of Tools/ARM, but this causes problems if you link to the x86 include files. To work around this, I copied the ALSA headers from my /usr/include directory and moved it into an include folder I created inside of the ARM directory. For the lib directory, you need to put into the lib folder the ALSA library. Some problems were had using the ALSA library that came with x86 Ubuntu, so I had to resort to grabbing the library from the beagleboard itself and putting it there. Also, if there are complaints about not finding the library, remove the .2 at the end to rename it to libasound.so &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; The last major task of setup is to create a new set of build tools in Netbeans. To do this go to Tools -&amp;gt; Options and the C/C++ tab. Add a new build tools, and change the C, C++, and Assembler directories to the ARM/bin directory. &amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Now that the toolchain is setup, you can open the projects in  Netbeans. The project folders must be imported manually. Once all the projects are imported, the build order for the program goes TIESRFlex --&amp;gt; TestTIESRFlex, TIESRSI --&amp;gt; TestTIESRSI. The two test programs are dependent on the libraries built by the previous program. To make sure their libraries are included right click on the project name and go to properties to make sure the libraries are being called in the linker. Once this setup is done, to switch between x86 and ARM configurations just right click the project name and set the configuration.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Python Scripting===&lt;br /&gt;
After the projects have been built, it is time to integrate the speech recognition with the python script. Due to licensing restrictions, the script has the speech recognition and grammar building redacted, but the functionality is there and can be substituted for.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Copyright © 2005 Free Software Foundation, Inc.     &lt;br /&gt;
Copying and distribution of this file, with or without modification,&lt;br /&gt;
are permitted in any medium without royalty provided the copyright&lt;br /&gt;
notice and this notice are preserved.&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import commands&lt;br /&gt;
import HTMLParser&lt;br /&gt;
import re&lt;br /&gt;
import sys&lt;br /&gt;
#this is the parser for the wikireader, designed to store parse the wiki page&lt;br /&gt;
#into a dictoinary and clean up the files&lt;br /&gt;
class CustomParser(HTMLParser.HTMLParser):&lt;br /&gt;
    section = 'intro'&lt;br /&gt;
    reading = &amp;quot;&amp;quot;&lt;br /&gt;
    dictionary = {}&lt;br /&gt;
    def __init__(self, *args, **kwargs):&lt;br /&gt;
        HTMLParser.HTMLParser.__init__(self)&lt;br /&gt;
        self.stack = []&lt;br /&gt;
    #gets called when the parser encounters the start of an html tag, eg &amp;lt;p&amp;gt;&lt;br /&gt;
    def handle_starttag(self,  tag,  attrs):&lt;br /&gt;
        if tag.lower() == 'p':&lt;br /&gt;
            self.reading = 'text'&lt;br /&gt;
        if tag.lower() == 'h2':&lt;br /&gt;
            if(self.section == 'intro'):&lt;br /&gt;
                self.dictionary[self.section]=&amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                self.stack = []&lt;br /&gt;
            if(self.section != 'Contents' and self.section != 'intro'):&lt;br /&gt;
                clean_title = re.sub('\[[a-zA-Z0-9]\]','', self.section)&lt;br /&gt;
                clean_title = re.sub('\[edit\]','', clean_title)&lt;br /&gt;
                clean_title = re.sub('\.','', clean_title)&lt;br /&gt;
                self.dictionary[clean_title.strip()]= &amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                self.stack = []&lt;br /&gt;
            self.reading = 'title'&lt;br /&gt;
            self.section = &amp;quot;&amp;quot;&lt;br /&gt;
        if(self.section == 'Contents'):&lt;br /&gt;
            if(tag.lower() == 'span'):&lt;br /&gt;
                self.reading = 'text'&lt;br /&gt;
    #gets called when the parser encounters the end of an html tag, eg &amp;lt;/p&amp;gt;&lt;br /&gt;
    def handle_endtag(self,  tag):&lt;br /&gt;
        if tag.lower() == 'p':&lt;br /&gt;
            self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
        if tag.lower() == 'h2':&lt;br /&gt;
            self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
            if(self.section == 'Contents'):&lt;br /&gt;
                self.dictionary['Contents'] = []&lt;br /&gt;
        if tag.lower() == 'table':  &lt;br /&gt;
            if self.section == 'Contents':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
    #        if self.section == 'intro':                &lt;br /&gt;
       #         self.reading = 'text'&lt;br /&gt;
        if tag.lower() == 'span':            &lt;br /&gt;
            if self.section == 'Contents':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
                self.dictionary[self.section].append(&amp;quot;&amp;quot;.join(self.stack))&lt;br /&gt;
                self.stack = []&lt;br /&gt;
    #called when the parser encounters data between a tag, eg &amp;lt;p&amp;gt; DATA &amp;lt;/p&amp;gt;&lt;br /&gt;
    def handle_data(self,  data):&lt;br /&gt;
        if self.reading == 'text':&lt;br /&gt;
            self.stack.append(data)&lt;br /&gt;
        if self.reading == 'title':&lt;br /&gt;
            self.section += data&lt;br /&gt;
#called to activate the speech recognizer&lt;br /&gt;
def Listen():&lt;br /&gt;
    command  =  [REDACTED]&lt;br /&gt;
    output = commands.getoutput(command)&lt;br /&gt;
    print output&lt;br /&gt;
    index = output.find('Recognized:')&lt;br /&gt;
    index_end = index + 1&lt;br /&gt;
    found = ''&lt;br /&gt;
    while output[index_end] != '\n':&lt;br /&gt;
        found += output[index_end]&lt;br /&gt;
        index_end +=1&lt;br /&gt;
    return output[index+12:index_end].strip()&lt;br /&gt;
def BuildGrammar(grammar):    &lt;br /&gt;
    #build grammar using speech recognition API&lt;br /&gt;
    command =  [REDACTED]&lt;br /&gt;
    print commands.getoutput(command)&lt;br /&gt;
#converts the corresponding sectoin text to a wav file and plays it&lt;br /&gt;
def PlaySection(section):    &lt;br /&gt;
    command = 'flite ' + 'output/' + section + '.txt ' +  'output/' + section + '.wav'&lt;br /&gt;
    commands.getoutput(command)&lt;br /&gt;
    commands.getoutput('aplay ' +  ' output/' + section + '.wav')&lt;br /&gt;
#PROGRAM START&lt;br /&gt;
#get user input&lt;br /&gt;
topic = raw_input('Enter a wikipedia topic you would like to hear about\n').replace(' ',  '+')&lt;br /&gt;
#search Wikipedia&lt;br /&gt;
commands.getstatusoutput('wget --output-document=result.html http://en.wikipedia.org/wiki/Special:Search?search=' + topic +'&amp;amp;go=Go')&lt;br /&gt;
#parse the html document&lt;br /&gt;
parser = CustomParser()&lt;br /&gt;
html = open('result.html',  'r')&lt;br /&gt;
parser.feed(html.read())&lt;br /&gt;
html.close()&lt;br /&gt;
parser.close()&lt;br /&gt;
#cleanup files to remove citations&lt;br /&gt;
for k, v in parser.dictionary.iteritems():&lt;br /&gt;
    if k != 'Contents':&lt;br /&gt;
        parser.dictionary[k] = re.sub('\[[0-9]*\]', '',  v)&lt;br /&gt;
#create the grammar by building on all the found sectoins&lt;br /&gt;
grammar = &amp;quot;start(_S). _S ---&amp;gt; &amp;quot;&lt;br /&gt;
for k, v, in parser.dictionary.iteritems():&lt;br /&gt;
    grammar = grammar + k + ' | '&lt;br /&gt;
grammar += &amp;quot;stop | &amp;quot;&lt;br /&gt;
grammar += &amp;quot;continue | &amp;quot;&lt;br /&gt;
grammar += &amp;quot;skip | &amp;quot;&lt;br /&gt;
grammar += &amp;quot;_SIL.&amp;quot;&lt;br /&gt;
grammar = '\&amp;quot;' + grammar + '\&amp;quot;'&lt;br /&gt;
print grammar&lt;br /&gt;
BuildGrammar(grammar)&lt;br /&gt;
commands.getstatusoutput('mkdir output')&lt;br /&gt;
#begin to output the text files that are available, starting with the intro&lt;br /&gt;
output = open('output/intro.txt',  'w')&lt;br /&gt;
output.write('intro\n')&lt;br /&gt;
output.write(parser.dictionary['intro'])&lt;br /&gt;
output.close()&lt;br /&gt;
navigable = []&lt;br /&gt;
for k in range(len(parser.dictionary['Contents'])):&lt;br /&gt;
    if k % 2 != 0:&lt;br /&gt;
        try:    &lt;br /&gt;
            section = parser.dictionary['Contents'][k]&lt;br /&gt;
            clean_title = re.sub('\[[a-zA-Z0-9]\]','', section)&lt;br /&gt;
            clean_title = re.sub('\[edit\]','', clean_title)&lt;br /&gt;
            clean_title = re.sub('\.','', clean_title)&lt;br /&gt;
            parser.dictionary[clean_title]    &lt;br /&gt;
            output = open('output/' + clean_title + '.txt', 'w')&lt;br /&gt;
            output.write(clean_title + '\n')&lt;br /&gt;
            output.write(parser.dictionary[clean_title])&lt;br /&gt;
            navigable.append(clean_title)&lt;br /&gt;
        except KeyError:&lt;br /&gt;
            print 'no section: ' + section&lt;br /&gt;
        output.close()&lt;br /&gt;
#show all the available choices for speech recognition&lt;br /&gt;
print 'Navigation Options:'&lt;br /&gt;
for places in navigable:&lt;br /&gt;
    print places  + ' ',  &lt;br /&gt;
print '\n'&lt;br /&gt;
#enter loop, waiting to receive a stop command to exit&lt;br /&gt;
word = Listen()&lt;br /&gt;
while(word != 'stop'):&lt;br /&gt;
    print 'found: ' + word&lt;br /&gt;
    PlaySection(word)&lt;br /&gt;
    print 'speak now'&lt;br /&gt;
    word = Listen()&lt;br /&gt;
commands.getoutput('rm output/*')&lt;br /&gt;
sys.exit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the python script is integrated with a speech recognition system, you will be able to run the pyWikiReader and have it read out the available sections of wiki content.&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_pyWikiReader</id>
		<title>ECE597 Project pyWikiReader</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_pyWikiReader"/>
				<updated>2010-05-19T21:57:39Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: Created page with 'category:ECE597  ==Project Overview== The goal of this project is to get a program capable of using user voice recognition in order to identify sections of a Wikipedia page t…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:ECE597]]&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to get a program capable of using user voice recognition in order to identify sections of a Wikipedia page to read to the user. It is designed for an embedded system, but can be ported to a desktop environment with ease.&lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
[[user:ypolius | Yannick Polius]]&lt;br /&gt;
&lt;br /&gt;
==Guide to Project Setup==&lt;br /&gt;
This is a quick guide to setting up the software to be able to compile the project for both x86 and ARM Linux.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
Download Netbeans&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enable C/C++ plugin &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Download G++ Lite ARM Toolchain http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Download the TIESR project source code:&lt;br /&gt;
&amp;lt;pre&amp;gt; svn checkout --username developername https://gforge.ti.com/svn/tiesr &amp;lt;/pre&amp;gt;&lt;br /&gt;
For the beagleboard a few extra steps need to be taken:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Extract the toolchain to the Tools/ARM directory in the TIESR root directory (trunk) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; The documentation says to create an include and lib link inside of Tools/ARM, but this causes problems if you link to the x86 include files. To work around this, I copied the ALSA headers from my /usr/include directory and moved it into an include folder I created inside of the ARM directory. For the lib directory, you need to put into the lib folder the ALSA library. Some problems were had using the ALSA library that came with x86 Ubuntu, so I had to resort to grabbing the library from the beagleboard itself and putting it there. Also, if there are complaints about not finding the library, remove the .2 at the end to rename it to libasound.so &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; The last major task of setup is to create a new set of build tools in Netbeans. To do this go to Tools -&amp;gt; Options and the C/C++ tab. Add a new build tools, and change the C, C++, and Assembler directories to the ARM/bin directory. &amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
Now that the toolchain is setup, you can open the projects in  Netbeans. The project folders must be imported manually. Once all the projects are imported, the build order for the program goes TIESRFlex --&amp;gt; TestTIESRFlex, TIESRSI --&amp;gt; TestTIESRSI. The two test programs are dependent on the libraries built by the previous program. To make sure their libraries are included right click on the project name and go to properties to make sure the libraries are being called in the linker. Once this setup is done, to switch between x86 and ARM configurations just right click the project name and set the configuration.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
After the projects have been built, it is time to integrate the speech recognition with the python script. Due to licensing restrictions, the script has the speech recognition and grammar building redacted, but the functionality is there and can be substituted for.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Copyright © 2005 Free Software Foundation, Inc.     &lt;br /&gt;
Copying and distribution of this file, with or without modification,&lt;br /&gt;
are permitted in any medium without royalty provided the copyright&lt;br /&gt;
notice and this notice are preserved.&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import commands&lt;br /&gt;
import HTMLParser&lt;br /&gt;
import re&lt;br /&gt;
import sys&lt;br /&gt;
#this is the parser for the wikireader, designed to store parse the wiki page&lt;br /&gt;
#into a dictoinary and clean up the files&lt;br /&gt;
class CustomParser(HTMLParser.HTMLParser):&lt;br /&gt;
    section = 'intro'&lt;br /&gt;
    reading = &amp;quot;&amp;quot;&lt;br /&gt;
    dictionary = {}&lt;br /&gt;
    def __init__(self, *args, **kwargs):&lt;br /&gt;
        HTMLParser.HTMLParser.__init__(self)&lt;br /&gt;
        self.stack = []&lt;br /&gt;
    #gets called when the parser encounters the start of an html tag, eg &amp;lt;p&amp;gt;&lt;br /&gt;
    def handle_starttag(self,  tag,  attrs):&lt;br /&gt;
        if tag.lower() == 'p':&lt;br /&gt;
            self.reading = 'text'&lt;br /&gt;
        if tag.lower() == 'h2':&lt;br /&gt;
            if(self.section == 'intro'):&lt;br /&gt;
                self.dictionary[self.section]=&amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                self.stack = []&lt;br /&gt;
            if(self.section != 'Contents' and self.section != 'intro'):&lt;br /&gt;
                clean_title = re.sub('\[[a-zA-Z0-9]\]','', self.section)&lt;br /&gt;
                clean_title = re.sub('\[edit\]','', clean_title)&lt;br /&gt;
                clean_title = re.sub('\.','', clean_title)&lt;br /&gt;
                self.dictionary[clean_title.strip()]= &amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                self.stack = []&lt;br /&gt;
            self.reading = 'title'&lt;br /&gt;
            self.section = &amp;quot;&amp;quot;&lt;br /&gt;
        if(self.section == 'Contents'):&lt;br /&gt;
            if(tag.lower() == 'span'):&lt;br /&gt;
                self.reading = 'text'&lt;br /&gt;
    #gets called when the parser encounters the end of an html tag, eg &amp;lt;/p&amp;gt;&lt;br /&gt;
    def handle_endtag(self,  tag):&lt;br /&gt;
        if tag.lower() == 'p':&lt;br /&gt;
            self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
        if tag.lower() == 'h2':&lt;br /&gt;
            self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
            if(self.section == 'Contents'):&lt;br /&gt;
                self.dictionary['Contents'] = []&lt;br /&gt;
        if tag.lower() == 'table':  &lt;br /&gt;
            if self.section == 'Contents':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
    #        if self.section == 'intro':                &lt;br /&gt;
       #         self.reading = 'text'&lt;br /&gt;
        if tag.lower() == 'span':            &lt;br /&gt;
            if self.section == 'Contents':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
                self.dictionary[self.section].append(&amp;quot;&amp;quot;.join(self.stack))&lt;br /&gt;
                self.stack = []&lt;br /&gt;
    #called when the parser encounters data between a tag, eg &amp;lt;p&amp;gt; DATA &amp;lt;/p&amp;gt;&lt;br /&gt;
    def handle_data(self,  data):&lt;br /&gt;
        if self.reading == 'text':&lt;br /&gt;
            self.stack.append(data)&lt;br /&gt;
        if self.reading == 'title':&lt;br /&gt;
            self.section += data&lt;br /&gt;
#called to activate the speech recognizer&lt;br /&gt;
def Listen():&lt;br /&gt;
    command  =  [REDACTED]&lt;br /&gt;
    output = commands.getoutput(command)&lt;br /&gt;
    print output&lt;br /&gt;
    index = output.find('Recognized:')&lt;br /&gt;
    index_end = index + 1&lt;br /&gt;
    found = ''&lt;br /&gt;
    while output[index_end] != '\n':&lt;br /&gt;
        found += output[index_end]&lt;br /&gt;
        index_end +=1&lt;br /&gt;
    return output[index+12:index_end].strip()&lt;br /&gt;
def BuildGrammar(grammar):    &lt;br /&gt;
    #build grammar using speech recognition API&lt;br /&gt;
    command =  [REDACTED]&lt;br /&gt;
    print commands.getoutput(command)&lt;br /&gt;
#converts the corresponding sectoin text to a wav file and plays it&lt;br /&gt;
def PlaySection(section):    &lt;br /&gt;
    command = 'flite ' + 'output/' + section + '.txt ' +  'output/' + section + '.wav'&lt;br /&gt;
    commands.getoutput(command)&lt;br /&gt;
    commands.getoutput('aplay ' +  ' output/' + section + '.wav')&lt;br /&gt;
#PROGRAM START&lt;br /&gt;
#get user input&lt;br /&gt;
topic = raw_input('Enter a wikipedia topic you would like to hear about\n').replace(' ',  '+')&lt;br /&gt;
#search Wikipedia&lt;br /&gt;
commands.getstatusoutput('wget --output-document=result.html http://en.wikipedia.org/wiki/Special:Search?search=' + topic +'&amp;amp;go=Go')&lt;br /&gt;
#parse the html document&lt;br /&gt;
parser = CustomParser()&lt;br /&gt;
html = open('result.html',  'r')&lt;br /&gt;
parser.feed(html.read())&lt;br /&gt;
html.close()&lt;br /&gt;
parser.close()&lt;br /&gt;
#cleanup files to remove citations&lt;br /&gt;
for k, v in parser.dictionary.iteritems():&lt;br /&gt;
    if k != 'Contents':&lt;br /&gt;
        parser.dictionary[k] = re.sub('\[[0-9]*\]', '',  v)&lt;br /&gt;
#create the grammar by building on all the found sectoins&lt;br /&gt;
grammar = &amp;quot;start(_S). _S ---&amp;gt; &amp;quot;&lt;br /&gt;
for k, v, in parser.dictionary.iteritems():&lt;br /&gt;
    grammar = grammar + k + ' | '&lt;br /&gt;
grammar += &amp;quot;stop | &amp;quot;&lt;br /&gt;
grammar += &amp;quot;continue | &amp;quot;&lt;br /&gt;
grammar += &amp;quot;skip | &amp;quot;&lt;br /&gt;
grammar += &amp;quot;_SIL.&amp;quot;&lt;br /&gt;
grammar = '\&amp;quot;' + grammar + '\&amp;quot;'&lt;br /&gt;
print grammar&lt;br /&gt;
BuildGrammar(grammar)&lt;br /&gt;
commands.getstatusoutput('mkdir output')&lt;br /&gt;
#begin to output the text files that are available, starting with the intro&lt;br /&gt;
output = open('output/intro.txt',  'w')&lt;br /&gt;
output.write('intro\n')&lt;br /&gt;
output.write(parser.dictionary['intro'])&lt;br /&gt;
output.close()&lt;br /&gt;
navigable = []&lt;br /&gt;
for k in range(len(parser.dictionary['Contents'])):&lt;br /&gt;
    if k % 2 != 0:&lt;br /&gt;
        try:    &lt;br /&gt;
            section = parser.dictionary['Contents'][k]&lt;br /&gt;
            clean_title = re.sub('\[[a-zA-Z0-9]\]','', section)&lt;br /&gt;
            clean_title = re.sub('\[edit\]','', clean_title)&lt;br /&gt;
            clean_title = re.sub('\.','', clean_title)&lt;br /&gt;
            parser.dictionary[clean_title]    &lt;br /&gt;
            output = open('output/' + clean_title + '.txt', 'w')&lt;br /&gt;
            output.write(clean_title + '\n')&lt;br /&gt;
            output.write(parser.dictionary[clean_title])&lt;br /&gt;
            navigable.append(clean_title)&lt;br /&gt;
        except KeyError:&lt;br /&gt;
            print 'no section: ' + section&lt;br /&gt;
        output.close()&lt;br /&gt;
#show all the available choices for speech recognition&lt;br /&gt;
print 'Navigation Options:'&lt;br /&gt;
for places in navigable:&lt;br /&gt;
    print places  + ' ',  &lt;br /&gt;
print '\n'&lt;br /&gt;
#enter loop, waiting to receive a stop command to exit&lt;br /&gt;
word = Listen()&lt;br /&gt;
while(word != 'stop'):&lt;br /&gt;
    print 'found: ' + word&lt;br /&gt;
    PlaySection(word)&lt;br /&gt;
    print 'speak now'&lt;br /&gt;
    word = Listen()&lt;br /&gt;
commands.getoutput('rm output/*')&lt;br /&gt;
sys.exit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the python script is integrated with a speech recognition system, you will be able to run the pyWikiReader and have it read out the available sections of wiki content.&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Ypolius</id>
		<title>User:Ypolius</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Ypolius"/>
				<updated>2010-04-26T19:24:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux environment and would love to learn how it works. Currently I am working on the audio mbox project.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Project Work'''&lt;br /&gt;
3/30/2010&lt;br /&gt;
So far I have gotten a python script that runs on the beagleboard. This script takes in a textual topic and speaks the intro of the topic's wiki page using flite. The script is:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
    # -*- coding: utf-8 -*-&lt;br /&gt;
    import commands&lt;br /&gt;
    import HTMLParser&lt;br /&gt;
    import re&lt;br /&gt;
    class CustomParser(HTMLParser.HTMLParser):&lt;br /&gt;
        section = 'intro'&lt;br /&gt;
        reading = &amp;quot;&amp;quot;&lt;br /&gt;
        dictionary = {}&lt;br /&gt;
        def __init__(self, *args, **kwargs):&lt;br /&gt;
            HTMLParser.HTMLParser.__init__(self)&lt;br /&gt;
            self.stack = []&lt;br /&gt;
        def handle_starttag(self,  tag,  attrs):&lt;br /&gt;
            if tag.lower() == 'p':&lt;br /&gt;
                self.reading = 'text'&lt;br /&gt;
            if tag.lower() == 'h2':&lt;br /&gt;
                if(self.section == 'intro'):&lt;br /&gt;
                    self.dictionary[self.section]=&amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                    self.stack = []&lt;br /&gt;
                if(self.section != 'Contents' and self.section != 'intro'):&lt;br /&gt;
                    self.dictionary[self.section]= &amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                    self.stack = []&lt;br /&gt;
                self.reading = 'title'&lt;br /&gt;
                self.section = &amp;quot;&amp;quot;&lt;br /&gt;
            if(self.section == 'Contents'):&lt;br /&gt;
                if(tag.lower() == 'span'):&lt;br /&gt;
                    self.reading = 'text'&lt;br /&gt;
        def handle_endtag(self,  tag):&lt;br /&gt;
            if tag.lower() == 'p':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
            if tag.lower() == 'h2':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
                if(self.section == 'Contents'):&lt;br /&gt;
                    self.dictionary['Contents'] = []&lt;br /&gt;
            if tag.lower() == 'table':  &lt;br /&gt;
                if self.section == 'Contents':&lt;br /&gt;
                    self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
                if self.section == 'intro':                &lt;br /&gt;
                    self.reading = 'text'&lt;br /&gt;
            if tag.lower() == 'span':            &lt;br /&gt;
                if self.section == 'Contents':&lt;br /&gt;
                    self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
                    self.dictionary[self.section].append(&amp;quot;&amp;quot;.join(self.stack))&lt;br /&gt;
                    self.stack = []&lt;br /&gt;
        def handle_data(self,  data):&lt;br /&gt;
            if self.reading == 'text':&lt;br /&gt;
                self.stack.append(data)&lt;br /&gt;
            if self.reading == 'title':&lt;br /&gt;
                self.section += data&lt;br /&gt;
    topic = raw_input('Enter a wikipedia topic you would like to hear about\n').replace(' ',  '+')&lt;br /&gt;
    commands.getstatusoutput('wget --output-document=result.html http://en.wikipedia.org    /wiki/Special:Search?search=' + topic +'&amp;amp;go=Go')&lt;br /&gt;
    parser = CustomParser()&lt;br /&gt;
    html = open('result.html',  'r')&lt;br /&gt;
    parser.feed(html.read())&lt;br /&gt;
    html.close()&lt;br /&gt;
    parser.close()&lt;br /&gt;
    #cleanup files&lt;br /&gt;
    for k, v in parser.dictionary.iteritems():&lt;br /&gt;
        if k != 'Contents':&lt;br /&gt;
            parser.dictionary[k] = re.sub('\[[0-9]\]', '',  v)&lt;br /&gt;
    commands.getstatusoutput('mkdir output')&lt;br /&gt;
    output = open('output/intro.txt',  'w')&lt;br /&gt;
    #start with intro&lt;br /&gt;
    output.write('intro\n')&lt;br /&gt;
    output.write(parser.dictionary['intro'])&lt;br /&gt;
    output.close()&lt;br /&gt;
    for k in range(len(parser.dictionary['Contents'])):&lt;br /&gt;
        if k % 2 != 0:&lt;br /&gt;
            try:    &lt;br /&gt;
                section = parser.dictionary['Contents'][k]&lt;br /&gt;
                parser.dictionary[section]    &lt;br /&gt;
                output = open('output/' + section + '.txt', 'w')&lt;br /&gt;
                output.write(section + '\n')&lt;br /&gt;
                output.write(parser.dictionary[section])&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                print 'no section: ' + section&lt;br /&gt;
            output.close()&lt;br /&gt;
    #commands.getstatusoutput('flite output.txt speech.wav')&lt;br /&gt;
    #commands.getstatusoutput('aplay speech.wav')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
The python package can be installed with the 'opkg install python' command. Since this script depends on HTMLParser and the python installation is minimal, you need to get some dependencies. They are HTMLParser.py, markupbase.py, and htmlenvprefs.py (unsure of name, something similar) and can be obtained from a more fleshed out install. I copied my files over using scp from an Arch Linux python installation and it worked fine.&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Ypolius</id>
		<title>User:Ypolius</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Ypolius"/>
				<updated>2010-04-26T19:21:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux environment and would love to learn how it works. Currently I am working on the audio mbox project.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Project Work'''&lt;br /&gt;
3/30/2010&lt;br /&gt;
So far I have gotten a python script that runs on the beagleboard. This script takes in a textual topic and speaks the intro of the topic's wiki page using flite. The script is:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
    # -*- coding: utf-8 -*-&lt;br /&gt;
import commands&lt;br /&gt;
import HTMLParser&lt;br /&gt;
import re&lt;br /&gt;
class CustomParser(HTMLParser.HTMLParser):&lt;br /&gt;
    section = 'intro'&lt;br /&gt;
    reading = &amp;quot;&amp;quot;&lt;br /&gt;
    dictionary = {}&lt;br /&gt;
    def __init__(self, *args, **kwargs):&lt;br /&gt;
        HTMLParser.HTMLParser.__init__(self)&lt;br /&gt;
        self.stack = []&lt;br /&gt;
    def handle_starttag(self,  tag,  attrs):&lt;br /&gt;
        if tag.lower() == 'p':&lt;br /&gt;
            self.reading = 'text'&lt;br /&gt;
        if tag.lower() == 'h2':&lt;br /&gt;
            if(self.section == 'intro'):&lt;br /&gt;
                self.dictionary[self.section]=&amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                self.stack = []&lt;br /&gt;
            if(self.section != 'Contents' and self.section != 'intro'):&lt;br /&gt;
                self.dictionary[self.section]= &amp;quot;&amp;quot;.join(self.stack)&lt;br /&gt;
                self.stack = []&lt;br /&gt;
            self.reading = 'title'&lt;br /&gt;
            self.section = &amp;quot;&amp;quot;&lt;br /&gt;
        if(self.section == 'Contents'):&lt;br /&gt;
            if(tag.lower() == 'span'):&lt;br /&gt;
                self.reading = 'text'&lt;br /&gt;
    def handle_endtag(self,  tag):&lt;br /&gt;
        if tag.lower() == 'p':&lt;br /&gt;
            self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
        if tag.lower() == 'h2':&lt;br /&gt;
            self.reading = &amp;quot;&amp;quot;&lt;br /&gt;
            if(self.section == 'Contents'):&lt;br /&gt;
                self.dictionary['Contents'] = []&lt;br /&gt;
        if tag.lower() == 'table':  &lt;br /&gt;
            if self.section == 'Contents':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
            if self.section == 'intro':                &lt;br /&gt;
                self.reading = 'text'&lt;br /&gt;
        if tag.lower() == 'span':            &lt;br /&gt;
            if self.section == 'Contents':&lt;br /&gt;
                self.reading = &amp;quot;&amp;quot;  &lt;br /&gt;
                self.dictionary[self.section].append(&amp;quot;&amp;quot;.join(self.stack))&lt;br /&gt;
                self.stack = []&lt;br /&gt;
    def handle_data(self,  data):&lt;br /&gt;
        if self.reading == 'text':&lt;br /&gt;
            self.stack.append(data)&lt;br /&gt;
        if self.reading == 'title':&lt;br /&gt;
            self.section += data&lt;br /&gt;
topic = raw_input('Enter a wikipedia topic you would like to hear about\n').replace(' ',  '+')&lt;br /&gt;
commands.getstatusoutput('wget --output-document=result.html http://en.wikipedia.org/wiki/Special:Search?search=' + topic +'&amp;amp;go=Go')&lt;br /&gt;
parser = CustomParser()&lt;br /&gt;
html = open('result.html',  'r')&lt;br /&gt;
parser.feed(html.read())&lt;br /&gt;
html.close()&lt;br /&gt;
parser.close()&lt;br /&gt;
#cleanup files&lt;br /&gt;
for k, v in parser.dictionary.iteritems():&lt;br /&gt;
    if k != 'Contents':&lt;br /&gt;
        parser.dictionary[k] = re.sub('\[[0-9]\]', '',  v)&lt;br /&gt;
commands.getstatusoutput('mkdir output')&lt;br /&gt;
output = open('output/intro.txt',  'w')&lt;br /&gt;
#start with intro&lt;br /&gt;
output.write('intro\n')&lt;br /&gt;
output.write(parser.dictionary['intro'])&lt;br /&gt;
output.close()&lt;br /&gt;
for k in range(len(parser.dictionary['Contents'])):&lt;br /&gt;
    if k % 2 != 0:&lt;br /&gt;
        try:    &lt;br /&gt;
            section = parser.dictionary['Contents'][k]&lt;br /&gt;
            parser.dictionary[section]    &lt;br /&gt;
            output = open('output/' + section + '.txt', 'w')&lt;br /&gt;
            output.write(section + '\n')&lt;br /&gt;
            output.write(parser.dictionary[section])&lt;br /&gt;
        except KeyError:&lt;br /&gt;
            print 'no section: ' + section&lt;br /&gt;
        output.close()&lt;br /&gt;
#commands.getstatusoutput('flite output.txt speech.wav')&lt;br /&gt;
#commands.getstatusoutput('aplay speech.wav')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
The python package can be installed with the 'opkg install python' command. Since this script depends on HTMLParser and the python installation is minimal, you need to get some dependencies. They are HTMLParser.py, markupbase.py, and htmlenvprefs.py (unsure of name, something similar) and can be obtained from a more fleshed out install. I copied my files over using scp from an Arch Linux python installation and it worked fine.&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Ypolius</id>
		<title>User:Ypolius</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Ypolius"/>
				<updated>2010-03-31T02:04:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux environment and would love to learn how it works. Currently I am working on the audio mbox project.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Project Work'''&lt;br /&gt;
3/30/2010&lt;br /&gt;
So far I have gotten a python script that runs on the beagleboard. This script takes in a textual topic and speaks the intro of the topic's wiki page using flite. The script is:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
    # -*- coding: utf-8 -*-&lt;br /&gt;
    import commands&lt;br /&gt;
    import HTMLParser&lt;br /&gt;
    import re&lt;br /&gt;
    class CustomParser(HTMLParser.HTMLParser):&lt;br /&gt;
        def __init__(self, *args, **kwargs):&lt;br /&gt;
            HTMLParser.HTMLParser.__init__(self)&lt;br /&gt;
            self.stack = []&lt;br /&gt;
        def handle_starttag(self,  tag,  attrs):&lt;br /&gt;
            if tag.lower() == 'p':&lt;br /&gt;
                self.stack.append(tag)&lt;br /&gt;
        def handle_endtag(self,  tag):&lt;br /&gt;
            if tag.lower() == 'p':&lt;br /&gt;
                self.stack.append(tag)  &lt;br /&gt;
        def handle_data(self,  data):&lt;br /&gt;
            if len(self.stack) &amp;gt; 0:&lt;br /&gt;
                self.stack.append(data)&lt;br /&gt;
    topic = raw_input('Enter a wikipedia topic you would like to hear about\n').replace(' ',  '+')&lt;br /&gt;
    commands.getstatusoutput('wget --output-document=result.html http://en.wikipedia.org/wiki/Special:Search?search=' + topic +'&amp;amp;go=Go')&lt;br /&gt;
    parser = CustomParser()&lt;br /&gt;
    html = open('result.html',  'r')&lt;br /&gt;
    parser.feed(html.read())&lt;br /&gt;
    html.close()&lt;br /&gt;
    parser.close()&lt;br /&gt;
    info_string =&amp;quot;&amp;quot;&lt;br /&gt;
    for string in parser.stack:&lt;br /&gt;
        if string == 'p':&lt;br /&gt;
            pass&lt;br /&gt;
        else:&lt;br /&gt;
            info_string += string&lt;br /&gt;
    info_string = info_string.split('\n')&lt;br /&gt;
    paragraphs = filter(lambda x: len(x) &amp;gt; 150,   info_string)&lt;br /&gt;
    intro =  paragraphs[0]&lt;br /&gt;
    citation_free= re.sub('\[[0-9]\]', '',  intro)&lt;br /&gt;
    output = open('output.txt',  'w')&lt;br /&gt;
    output.write(citation_free)&lt;br /&gt;
    output.close()&lt;br /&gt;
    commands.getstatusoutput('flite output.txt speech.wav')&lt;br /&gt;
    commands.getstatusoutput('mplayer speech.wav')&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
The python package can be installed with the 'opkg install python' command. Since this script depends on HTMLParser and the python installation is minimal, you need to get some dependencies. They are HTMLParser.py, markupbase.py, and htmlenvprefs.py (unsure of name, something similar) and can be obtained from a more fleshed out install. I copied my files over using scp from an Arch Linux python installation and it worked fine.&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Ypolius</id>
		<title>User:Ypolius</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Ypolius"/>
				<updated>2010-03-31T02:03:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux environment and would love to learn how it works. Currently I am working on the audio mbox project.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Project Work'''&lt;br /&gt;
3/30/2010&lt;br /&gt;
So far I have gotten a python script that runs on the beagleboard. This script takes in a textual topic and speaks the intro of the topic's wiki page using flite. The script is:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
    # -*- coding: utf-8 -*-&lt;br /&gt;
    import commands&lt;br /&gt;
    import HTMLParser&lt;br /&gt;
    import re&lt;br /&gt;
    class CustomParser(HTMLParser.HTMLParser):&lt;br /&gt;
        def __init__(self, *args, **kwargs):&lt;br /&gt;
            HTMLParser.HTMLParser.__init__(self)&lt;br /&gt;
            self.stack = []&lt;br /&gt;
        def handle_starttag(self,  tag,  attrs):&lt;br /&gt;
            if tag.lower() == 'p':&lt;br /&gt;
                self.stack.append(tag)&lt;br /&gt;
        def handle_endtag(self,  tag):&lt;br /&gt;
            if tag.lower() == 'p':&lt;br /&gt;
                self.stack.append(tag)  &lt;br /&gt;
        def handle_data(self,  data):&lt;br /&gt;
            if len(self.stack) &amp;gt; 0:&lt;br /&gt;
                self.stack.append(data)&lt;br /&gt;
    topic = raw_input('Enter a wikipedia topic you would like to hear about\n').replace(' ',  '+')&lt;br /&gt;
    commands.getstatusoutput('wget --output-document=result.html http://en.wikipedia.org/wiki/Special:Search?search=' + topic +'&amp;amp;go=Go')&lt;br /&gt;
    parser = CustomParser()&lt;br /&gt;
    html = open('result.html',  'r')&lt;br /&gt;
    parser.feed(html.read())&lt;br /&gt;
    html.close()&lt;br /&gt;
    parser.close()&lt;br /&gt;
    info_string =&amp;quot;&amp;quot;&lt;br /&gt;
    for string in parser.stack:&lt;br /&gt;
        if string == 'p':&lt;br /&gt;
            pass&lt;br /&gt;
        else:&lt;br /&gt;
            info_string += string&lt;br /&gt;
    info_string = info_string.split('\n')&lt;br /&gt;
    paragraphs = filter(lambda x: len(x) &amp;gt; 150,   info_string)&lt;br /&gt;
    intro =  paragraphs[0]&lt;br /&gt;
    citation_free= re.sub('\[[0-9]\]', '',  intro)&lt;br /&gt;
    output = open('output.txt',  'w')&lt;br /&gt;
    output.write(citation_free)&lt;br /&gt;
    output.close()&lt;br /&gt;
    commands.getstatusoutput('flite output.txt speech.wav')&lt;br /&gt;
    commands.getstatusoutput('mplayer speech.wav')&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
The python package can be installed with the 'opkg install python' command. Since this script depends on HTMLParser and the python installation is minimal, you need to get some dependencies. They are HTMLParser.py, markupbase.py, and htmlenvprefs.py (unsure of name, something similar) and can be obtained from a more fleshed out install. I copied my files over using scp from an Arch Linux python installation and it worked fine.&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Insert non-formatted text here&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Ypolius</id>
		<title>User:Ypolius</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Ypolius"/>
				<updated>2010-03-25T05:30:42Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux environment and would love to learn how it works. Currently I am working on the audio mbox project.&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Ypolius</id>
		<title>User:Ypolius</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Ypolius"/>
				<updated>2010-03-25T05:28:44Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: Created page with 'I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux envir…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a senior Computer Science student who has elected to take this course in order to get more familiar with linux on the kernel side. I am very comfortable with the linux environment and would love to learn how it works. Currently I am working on the audio mbox project.&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/EBC_Exercise_22_Cross-Compiling</id>
		<title>EBC Exercise 22 Cross-Compiling</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/EBC_Exercise_22_Cross-Compiling"/>
				<updated>2010-03-22T23:25:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
This class is about developing software for embedded Linux.  The [http://elinux.org/Main_Page eLinux site] is a good source for embedded Linux in general.  There are many ongoing embedded efforts going on many platforms.  Poke around the site a while to get a feel for what's happening.&lt;br /&gt;
&lt;br /&gt;
We are going to use the [http://www.angstrom-distribution.org Ångström Distribution].  It's available many platforms.  Look around the site, you may recognize some of them.&lt;br /&gt;
&lt;br /&gt;
Instructions for building Ångström are given [http://www.angstrom-distribution.org/building-angstrom here]; however I'm going to present a Beagle-tuned version of those instructions on this page.&lt;br /&gt;
&lt;br /&gt;
== Step 1 - get Open Embedded metadata ==&lt;br /&gt;
&lt;br /&gt;
First install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; by running the following on your host computer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install git-core&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the following to load the meta data.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OETREE=&amp;quot;${HOME}/oe&amp;quot;&lt;br /&gt;
mkdir -p ${OETREE} &amp;amp;&amp;amp; cd ${OETREE}&lt;br /&gt;
git clone git://git.openembedded.org/openembedded.git openembedded&lt;br /&gt;
cd openembedded&lt;br /&gt;
git checkout origin/stable/2009 -b stable/2009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;git://git.openembedded.org/openembedded.git&amp;lt;/code&amp;gt; does not work, you can also try &amp;lt;code&amp;gt;http://repo.or.cz/r/openembedded.git&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
The first git transfers some 336,000 object and takes about 18 minutes with the network running at 600 some KiB/s.  Keep an eye on it, mine stopped about 23% in and I had to restart it.  The second git takes almost no time.&lt;br /&gt;
&lt;br /&gt;
Now run the following to update the metadata:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ${OETREE}/openembedded &lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You've created a directory called &amp;lt;code&amp;gt;oe&amp;lt;/code&amp;gt;.  Go explore around it to see what is there.  Be sure to look in &amp;lt;code&amp;gt;oe/openembedded/recipes&amp;lt;/code&amp;gt;.  These folders contain instructions on where to get and how to build various things.  Look in &amp;lt;code&amp;gt;recipes/linux&amp;lt;/code&amp;gt;.  Here are instructions for building various Linux kernels.  We'll be using &amp;lt;code&amp;gt;linux-omap-2.6.*&amp;lt;/code&amp;gt;.  What's the highest version you can find?&lt;br /&gt;
&lt;br /&gt;
== Step 2 - Installing bitbake and friends ==&lt;br /&gt;
&lt;br /&gt;
bitbake is the workhorse that knows where to get everything and how to compile it.  The following will install bitbake and additional programs that bitbake needs.  This may take 5 minutes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install bitbake&lt;br /&gt;
sudo apt-get install g++&lt;br /&gt;
sudo apt-get install help2man diffstat texi2html cvs texinfo subversion gawk&lt;br /&gt;
sudo apt-get autoremove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are running Ubuntu you will have to also do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /bin&lt;br /&gt;
sudo mv sh sh.old&lt;br /&gt;
sudo ln -s bash sh&lt;br /&gt;
sudo sh -c &amp;quot;echo 0 &amp;gt; /proc/sys/vm/mmap_min_addr&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally edit the file &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; using:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gedit /etc/sysctl.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the following at the end and save.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This is for bitbake&lt;br /&gt;
vm.mmap_min_addr = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you should be ready to run bitbake.&lt;br /&gt;
&lt;br /&gt;
{{Give&lt;br /&gt;
|title=Psyco JIT compiler&lt;br /&gt;
|tip=bitbake suggest loading a compiler.  Load and test the compiler.  If it's worth using, write instructions.&lt;br /&gt;
}}&lt;br /&gt;
The Psyco Python JIT compiler should help speed up compilation times at the expense of memory use .  It only works on 32-bit systems. To install, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install python-psyco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 3 - Setting up for the BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Now let's setup &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; for our needs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ${OETREE}/build/conf&lt;br /&gt;
cp ${OETREE}/openembedded/contrib/angstrom/local.conf ${OETREE}/build/conf/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Open &amp;lt;code&amp;gt;${OETREE}/build/conf/local.conf&amp;lt;/code&amp;gt; in your favourite editor and add the following to the end of the file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE ?= &amp;quot;beagleboard&amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also, look at this block of lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Make use of SMP and fast disks&lt;br /&gt;
PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&lt;br /&gt;
BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here you can tell it how many parallel threads to run.  If you have several cores on your machine, make this number big.  If you have only one core, you might be better performance setting it to 1.  More details are [http://wiki.openembedded.org/index.php/Advanced_configuration here].&lt;br /&gt;
* PARALLEL_MAKE sets the number &amp;quot;gcc&amp;quot; threads (same as make -j4 at compile time&lt;br /&gt;
* BB_NUMBER_THREADS sets the number of bitbake threads, (one thread can be downloading, while another compiles)&lt;br /&gt;
&lt;br /&gt;
To save you a lot of time, it is useful to disable locale generation for all but the one you need.  Add this to local.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GLIBC_GENERATE_LOCALES = &amp;quot;en_US.UTF-8 en_GB.UTF-8 de_DE.UTF-8 fr_FR.UTF-8 pt_BR.UTF-8 es_ES.UTF-8 kn_IN.UTF-8 ml_IN.UTF-8 ta_IN.UTF-8&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 4 - Start building ==&lt;br /&gt;
&lt;br /&gt;
We need to create a small script to setup the environment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ${OETREE}&lt;br /&gt;
wget -c http://www.angstrom-distribution.org/files/source-me.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Take a second to read the script, and notice that it configures a download directory, a build directory, and a staging directory.  Can you explain why ${PATH} is modified in this script?&lt;br /&gt;
&lt;br /&gt;
Now we are almost ready for compiling&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Go to the OpenEmbedded folder&lt;br /&gt;
cd ${OETREE}/openembedded &lt;br /&gt;
&lt;br /&gt;
#Make sure it's up to date&lt;br /&gt;
git pull --rebase&lt;br /&gt;
&lt;br /&gt;
#Set environment variables&lt;br /&gt;
cd ${OETREE}&lt;br /&gt;
source source-me.txt &lt;br /&gt;
&lt;br /&gt;
#Start building&lt;br /&gt;
bitbake nano&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will take a while.  bitbake is installing everything that is needed to compile the system.  This includes cross compilers, assemblers, source, everything.  I started at 10am and ended around 5:30pm.  It was running on just one of the two cores on my laptop.  How long did it take on your machine?  I notice that an additional 600M of disk space is being used.&lt;br /&gt;
&lt;br /&gt;
{{Give&lt;br /&gt;
|title=Keep track of you running times and configurations.&lt;br /&gt;
|tip=We'll use this data to see what the best settings are.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ Initial &amp;lt;tt&amp;gt;bitbake nano&amp;lt;/tt&amp;gt; runtime&lt;br /&gt;
! Processor&lt;br /&gt;
! Settings&lt;br /&gt;
! Run Time&lt;br /&gt;
|-&lt;br /&gt;
| Intel Pentium-M@2.0Ghz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j1&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;1&amp;quot;&amp;lt;br&amp;gt;Psyco? Yes.&lt;br /&gt;
| 4.9 hours&lt;br /&gt;
|-&lt;br /&gt;
| Intel Atom N330@1.6Ghz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 3.15 hours&lt;br /&gt;
|-&lt;br /&gt;
| Intel Core2Quad Q9300@2.5Ghz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j5&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 44 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Intel Core2Quad Q9300@2.5Ghz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j8&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;8&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 17 minutes&lt;br /&gt;
|-&lt;br /&gt;
| T2600@2.16 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;2&amp;quot;&amp;lt;br&amp;gt;Psyco? Yes.&amp;lt;br&amp;gt;All Locals&lt;br /&gt;
| 2.5 hours&lt;br /&gt;
|-&lt;br /&gt;
| T2600@2.16 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? Yes.&amp;lt;br&amp;gt;US Only&lt;br /&gt;
| 73 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E8400@3.00 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| All Locals 1.4 hours &amp;lt;br&amp;gt; US only 43 Minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 56.08 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j8&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;8&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 57.83 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;8&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 53.86 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j7&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;7&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 61.75 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Core 2 Duo&amp;lt;br&amp;gt;T7600@2.33GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j1&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;1&amp;quot;&amp;lt;br&amp;gt;Psyco? No (64-bit).&lt;br /&gt;
| 2:10:04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Step 5 - Building a complete image ==&lt;br /&gt;
&lt;br /&gt;
Up to this point all we have done is load all the infrastructure needed and compiled the simple '''nano''' text editor.  We don't even have the kernel yet. Do the following to build a basic console image.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bitbake console-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''This bitbake took 7 hours and 15 minutes.'''  There are now some 7,700 directories with 67,000 files in the &amp;lt;code&amp;gt;oe&amp;lt;/code&amp;gt; directory.  An additional 1.5G of disk space is in use.&lt;br /&gt;
&lt;br /&gt;
How did I know to use '''console-image'''?  I ran the following to find what images were out there:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
locate image | grep /oe/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This found every file with '''image''' in the name it that also had '''/oe/''' in the path.  From this I see that '''oe/openembedded/recipes/images''' has a bunch of files ending in '''-image'''.  Take a look at '''console-image.bb''' and see what you can figure out.&lt;br /&gt;
&lt;br /&gt;
== Step 6 - Loading your SD card ==&lt;br /&gt;
&lt;br /&gt;
The output of the bitbake command will ultimately be found under the &amp;lt;code&amp;gt;$OE_HOME/angstrom-dev/deploy/glibc/images/beagleboard&amp;lt;/code&amp;gt;. In there you can find at least two interesting files:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
console-image-beagleboard.tar.bz2&lt;br /&gt;
uImage-beagleboard.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The console image represents a full and self-contained file system, *including* a kernel. The uImage-beagleboard.bin is a Linux kernel image suitable for loading by the U-boot bootloader.&lt;br /&gt;
&lt;br /&gt;
* Rename '''uImage-beagleboard.bin''' as '''uImage''' and load on your SD as before ([[ECE597 Getting your Beagle running (precompiled)]]).  &lt;br /&gt;
* Also load '''console-image-beagleboard.tar.bz2''' on the 2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; partition like you did before.  Did you notice it untar's very quickly?  Why?&lt;br /&gt;
* Boot and explore.  What's there?  What's missing?&lt;br /&gt;
&lt;br /&gt;
Congratulations you've just build Linux from source.  Try this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
beagleboard login: root&lt;br /&gt;
root@beagleboard:~# cd /sys/class&lt;br /&gt;
root@beagleboard:/sys/class# ls -F&lt;br /&gt;
bdi/          hwmon/        misc/         scsi_generic/ usb_device/&lt;br /&gt;
block/        i2c-adapter/  mmc_host/     scsi_host/    usb_endpoint/&lt;br /&gt;
bluetooth/    i2c-dev/      mtd/          sound/        usb_host/&lt;br /&gt;
bmi/          ieee80211/    net/          spi_master/   usbmon/&lt;br /&gt;
display/      input/        regulator/    spidev/       vc/&lt;br /&gt;
firmware/     leds/         rtc/          thermal/      vtconsole/&lt;br /&gt;
gpio/         mdio_bus/     scsi_device/  tty/&lt;br /&gt;
graphics/     mem/          scsi_disk/    ubi/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a list of low-level devices on the Beagle that you can access as files.  Try:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:/sys/class# cd leds/&lt;br /&gt;
root@beagleboard:/sys/class/leds# ls -F&lt;br /&gt;
beagleboard::usr0@ beagleboard::usr1@&lt;br /&gt;
root@beagleboard:/sys/class/leds# cd beagleboard\:\:usr0&lt;br /&gt;
root@beagleboard:/sys/devices/platform/leds-gpio/leds/beagleboard::usr0# cat trigger&lt;br /&gt;
none nand-disk mmc0 mmc1 [heartbeat]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a list of values you can assign to trigger.  Notice LED0 is blinking on and off right now. Try:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:/sys/devices/platform/leds-gpio/leds/beagleboard::usr0# echo none &amp;gt; trigger&lt;br /&gt;
root@beagleboard:/sys/devices/platform/leds-gpio/leds/beagleboard::usr0# echo 1 &amp;gt; brightness&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What happens?  Play around.  [http://groups.google.com/group/beagleboard/msg/c623a16637625685?hl=en Here] are instructions on reading the '''USER''' switch.  Try it.  Can you make the LEDs blink in response to the button being pressed?&lt;br /&gt;
&lt;br /&gt;
== Step 7 - Building a complete Beagle demo image ==&lt;br /&gt;
&lt;br /&gt;
Now let's build the how demo we were running before.  We'll do this via bitbake, but argument do we give it?  Try looking in &amp;lt;code&amp;gt;oe/openembedded/recipes/images&amp;lt;/code&amp;gt;, do you see a recipe that might work?  Hint:  It has beagle in the name.  Here's what I tried.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
time bitbake beagle????-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace ???? with the recipe name you found.  I added the '''time''' command so I could see how long it takes to run.  My run took some 7.5 hours.&lt;br /&gt;
&lt;br /&gt;
If you're having trouble with Gimp and/or gnumeric, consult [[ECE597 OpenEmbedded Issues and Problem_Solving]].&lt;br /&gt;
&lt;br /&gt;
== Step 7.5 Building a complete unstable Beagle demo image ==&lt;br /&gt;
I did not have as much luck getting Ångström working in the stable OE branch, but I was able to make dev work.  You should see that there are two branches available to to choose from.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git branch&lt;br /&gt;
  org.openembedded.dev&lt;br /&gt;
* stable/2009&lt;br /&gt;
$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So switch to the .dev branch by saying&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git checkout org.openembedded.dev&lt;br /&gt;
$ git pull # may not be needed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OE dev branch '''does not''' ship with its own version of bitbake, so you will need to obtain bitbake from another source. Compiling from the OE dev branch seems to require an up-to-date version of bitbake. Install this by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ${OETREE}&lt;br /&gt;
$ wget http://download.berlios.de/bitbake/bitbake-1.8.18.tar.gz&lt;br /&gt;
$ tar -xvf bitbake-1.8.18.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will download and unpack version 1.8.18 of bitbake. Currently, this version seems to work well with the OE dev branch. You must now edit the path that points to bitbake in the source-me.txt file so that it will point to the directory containing this version of bitbake. You should change the line containing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PATH=${OETREE}/openembedded/bitbake/bin:${ORG_PATH}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PATH=${OETREE}/bitbake-1.8.18/bin:${ORG_PATH}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''''NOTE''''': If you have modified the &amp;lt;code&amp;gt;GLIBC_GENERATE_LOCALES&amp;lt;/code&amp;gt; setting in &amp;lt;code&amp;gt;${OETREE}/build/conf/local.conf&amp;lt;/code&amp;gt; to contain only &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt;, your build may fail due to missing required locales. You should have this set to &amp;lt;code&amp;gt;GLIBC_GENERATE_LOCALES = &amp;quot;en_US.UTF-8 en_GB.UTF-8 de_DE.UTF-8 fr_FR.UTF-8 pt_BR.UTF-8 es_ES.UTF-8 kn_IN.UTF-8 ml_IN.UTF-8 ta_IN.UTF-8&amp;quot;&amp;lt;/code&amp;gt; for the build to be successful. If you local.conf file does not have a line containing &amp;lt;code&amp;gt;GLIBC_GENERATE_LOCALES&amp;lt;/code&amp;gt;, your build still should be successful as it will, by default, include all available locales, including those mentioned above.  Can you figure out where this list of locals came from?&lt;br /&gt;
&lt;br /&gt;
We must now wipe out our stable build directory, as the two branches are not compatible.  (Feel free to make a backup if you feel inclined).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ rm -rf ${OETREE}/angstrom-dev/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you may follow the directions above by running&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ time bitbake beagle????-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will take a VERY long time, as it must recompile everything that was done previously.  On my E8400 it took 10.4 hours to run with all locales, and 9.3 hours with only the ones I needed.  It also used 17gb of space.&lt;br /&gt;
&lt;br /&gt;
Once it has finished take a look in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ls ${OETREE}/angstrom-dev/deploy/glibc/images/beagleboard&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should recognize the files from when you previously installed Angstrom, if not re-read [[ECE597_Getting_your_Beagle_running_(precompiled)]]&lt;br /&gt;
&lt;br /&gt;
The first boot of my beagle took a very long time...a few minutes (subsequent boots are faster), the beagle will hang on the below screen for a while, just let it go and it will continue.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INIT: version 2.86 booting&lt;br /&gt;
Error. Cannot create canvas. Abort.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also saw a lot of these errors, again you can probably ignore them. (if you can figure out how to fix, post fix here)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cannot find fifo at /mnt/.splash/exquisite.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Ideas</id>
		<title>ECE497 Project Ideas</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Ideas"/>
				<updated>2010-03-10T18:46:59Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
== Sources for Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Here are some links where you'll find ideas for your project.&lt;br /&gt;
* [http://wiki.omap.com/index.php/ETechDays_Community_Lightning_Talks ETechDays Community Lightning Talks], this is a one-day web-based conference where many project ideas are presented.  One of our 2009-2010 senior design projects was found here.&lt;br /&gt;
* [http://beagleboard.org/project Official list of Beagle Projects], there are many Beagle specific projects listed here.  Many are inactive.  ''List your project here once it running.''&lt;br /&gt;
* [http://www.youtube.com/watch?v=Mk1xjbA-ISE Augmented Reality Project], here's an idea that I think we can do on the Beagle.  Rather than using augmented reality glasses, I'd suggest we use a [http://focus.ti.com/dlpdmd/docs/dlpdiscovery.tsp?sectionId=60&amp;amp;tabId=2235 TI DLP pico projector]. [http://www.hitlabnz.org/wiki/EmbeddedAR Here's] AR running on the Beagle. &lt;br /&gt;
* [http://code.google.com/p/0xdroid/ Android], this is one of a couple of efforts to port [http://source.android.com/ Google's Android OS] to the Beagle.&lt;br /&gt;
* [[BeagleBoard/Ideas-2009]] Google summer code ideas 2009.&lt;br /&gt;
&lt;br /&gt;
== Projects you would like to do ==&lt;br /&gt;
Edit this page to add projects you would like to do.  If you aren't in the class, add ideas you would like to see done by class members.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Proposers Name&lt;br /&gt;
!Project Title&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| Sample Project&lt;br /&gt;
| Describe what your project idea is.  What software does it build on (if any).  Is there hardware design involved.  What software background is needed.  &lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| Google PowerMeter&lt;br /&gt;
| Google has a [http://www.google.com/powermeter project] to view and manage home electricty usage. This project would involve designing the hardware to measure the power usage and the Beagle software in interface with it.  The Beagle would talk to the local home network via a wireless link and the home owner would configure the Beagle via a web page served on the Beagle.&lt;br /&gt;
|-&lt;br /&gt;
| Yannick Polius&lt;br /&gt;
| Audio MBox&lt;br /&gt;
| This project is mostly software, with the hardware element being the use of the dsp. The idea is to tie together three technologies: speech recognition, speech synthesis, and internet access in order to create an interface capable of orating information to the user based on a vocal command. The implementation I have in mind is to use the Pocket Sphinx speech recognition engine to first understand what the user wants through speech, such as &amp;quot;Rose-Hulman&amp;quot;. Once the speech is translated, the software can execute a Wikipedia search to pull said item's page. Most of the important info is contained within the introductory paragraph, so the software will take only that chunk and feed it into the Flite speech synthesis engine. The end result is a simple machine with &amp;quot;mother box&amp;quot; like usability, that is, no interaction besides what is natural to the user (speaking) should be necessary to retrieve the information.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Editing_a_Wiki</id>
		<title>ECE497 Editing a Wiki</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Editing_a_Wiki"/>
				<updated>2010-03-10T18:32:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ypolius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a wiki you can practice editing.  Before you can edit it you will have to create an login.  Pick something that will make it easy for me to identify you as part of my class.  Then just add your name and date on the end of the table.&lt;br /&gt;
&lt;br /&gt;
You can get help here: [[Help:Contents]].&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| 2-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Elliot Simon&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Mitch Garvin&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| J. Cody Collins&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Steven Stark&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Brian Embry&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Qiang Jiang&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Jessica Lipscomb&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Chris Routh&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Paul Morrison&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| David Baty&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Adam Jesionowski&lt;br /&gt;
| 9-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Greg Jackson&lt;br /&gt;
| 9-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Mark Jacobson&lt;br /&gt;
| 9-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Tom Most&lt;br /&gt;
| 10-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Yannick Polius&lt;br /&gt;
| 10-Mar-2010&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Ypolius</name></author>	</entry>

	</feed>