<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Peter Ex Texia</title><link>https://peterextexia.com/</link><description>Recent content on Peter Ex Texia</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 26 Dec 2022 09:21:44 -0600</lastBuildDate><atom:link href="https://peterextexia.com/index.xml" rel="self" type="application/rss+xml"/><item><title>I Broke My Rosary Streak</title><link>https://peterextexia.com/blog/i-broke-my-rosary-streak/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/i-broke-my-rosary-streak/</guid><description>&lt;p>It&amp;rsquo;s 12:05am and I&amp;rsquo;m lying in bed, nearly asleep. It’s been a good day — my first weekend at home in a month. I got some things done around the house and spent time hanging out with my wife.&lt;/p>
&lt;p>Then it hit me: I forgot to pray the rosary today. I had a 61-day streak going, and now it&amp;rsquo;s broken. Crap.&lt;/p>
&lt;h3 id="if-duolingo-can-keep-me-conjugating-verbs-why-cant-an-app-keep-me-praying">If Duolingo can keep me conjugating verbs, why can’t an app keep me praying?&lt;/h3>
&lt;p>I’ve been on-again, off-again with the rosary for years. I know it’s good for me, spiritually and mentally. But consistency? That’s the real struggle. It’s just like learning a language or training jiu jitsu: you have to keep at it regularly to see the benefits. I&amp;rsquo;ve experienced the difference when I pray daily versus when I skip days, just like I feel the difference when I train jiu jitsu or study Spanish three or four days a week versus once a week. Even with the feeling of accomplishment that comes with consistency, some days it&amp;rsquo;s just hard to get started.&lt;/p>
&lt;h3 id="building-the-tools-for-consistency">Building the Tools for Consistency&lt;/h3>
&lt;p>So I did the thing that software developers do: I built a tool to help me stay consistent. I needed some accountability, and I&amp;rsquo;ve seen in the past how powerful tracking can be for building habits. I think anyone who has tried to keep their streaks going on Duolingo knows what I mean.&lt;/p>
&lt;p>The result is &lt;a href="https://rosarystreak.com/?utm_source=peterextexia.com&amp;amp;utm_medium=blog&amp;amp;utm_campaign=i-broke-my-rosary-streak" target="_blank">RosaryStreak.com&lt;/a>, a simple web app that tracks your rosary streaks, and even works offline as a Progressive Web App (PWA). It’s like Duolingo for the rosary, but with a lot less owl pressure.&lt;/p>
&lt;figure >&lt;img src="https://peterextexia.com/img/rosarystreak-history.jpg" title="You can see where I broke my streak on Saturday." alt="Screenshot of the RosaryStreak.com app showing a calendar view with most days highlighted, but notably Saturday the 26th is not."loading="lazy"
>&lt;/figure>
&lt;p>At the moment, it&amp;rsquo;s just a simple app that tracks your streaks, but I have plans to add more features like reminders, prayer guides, and maybe even some gamification elements.&lt;/p>
&lt;h3 id="the-61-day-high">The 61-Day High&lt;/h3>
&lt;p>I was on a roll. 61 days of praying the rosary every day. I prayed on airplanes, while driving to work, and in the deserts of Namibia with no cell service or internet. I did not want to break my streak. Every day when I could click that &amp;ldquo;I prayed the rosary today&amp;rdquo; button, I felt a little rush of accomplishment. I was building a habit, and it felt good. Some days were easier than others. I prayed in Latin, English, and Spanish. On days when it was difficult to start, I prayed along with the Hallow app. The longer I kept the streak going, the more I wanted to keep it alive, and the easier it became to pray the rosary every day.&lt;/p>
&lt;h3 id="the-saturday-slip">The Saturday Slip&lt;/h3>
&lt;p>But then I just forgot. I did think about praying the rosary that morning. I was motivated to clean up around the house and figured I’d pray later. And for some reason, I just never got around to it. It really just slipped my mind.&lt;/p>
&lt;p>I felt so disappointed in myself. I wanted to be able to share this app with others, and show them how it helped me build a habit, with a ridiculously long streak of praying the rosary every day. I failed to live up to my own expectations and felt in some way that I failed God.&lt;/p>
&lt;h3 id="lessons-learned-and-resetting">Lessons Learned and Resetting&lt;/h3>
&lt;p>Of course, these feelings were irrational. I know that streaks are not the point of prayer, and that God loves me even if I forgot to pray. But it still stung.&lt;/p>
&lt;p>I fell asleep with the realization that beating myself up over this is not helpful. Tomorrow is a new day, and I can start fresh. I can restart my streak, hopeful to build a longer one this time. And if I miss a day again, I can start over again. It&amp;rsquo;s not about the streak, it&amp;rsquo;s about the habit of prayer.&lt;/p>
&lt;h3 id="the-bigger-vision">The Bigger Vision&lt;/h3>
&lt;p>So it turns out an app can help you to pray more consistently, but it’s not about the app itself. It’s about the habit you build around it. I want to help others build that habit, too.&lt;/p>
&lt;p>If even one person finds it helpful, then the effort is worth it. Maybe that person is you.&lt;/p>
&lt;p>I invite you to join me on this journey. Let’s see how long we can go — together. Check out &lt;a href="https://rosarystreak.com/?utm_source=peterextexia.com&amp;amp;utm_medium=blog&amp;amp;utm_campaign=i-broke-my-rosary-streak" target="_blank">RosaryStreak.com&lt;/a> and start your own streak today. And if you have any feedback or ideas for features, I’d love to hear them.&lt;/p></description></item><item><title>I'm busy, let the robot help!</title><link>https://peterextexia.com/blog/im-busy-let-the-robot-help/</link><pubDate>Mon, 19 Aug 2024 09:15:00 -0500</pubDate><guid>https://peterextexia.com/blog/im-busy-let-the-robot-help/</guid><description>&lt;p>Recently, I started on working on making &lt;a href="https://peterextexia.com/projects/rhinospike/">RhinoSpike&lt;/a> a mobile-friendly website. More than half of the visitors to RhinoSpike are using a mobile device, and it&amp;rsquo;s not a great experience. This screenshot shows how bad it is:&lt;/p>
&lt;figure >&lt;img src="https://peterextexia.com/img/rhinospike-on-mobile-20240513.png" title="It&amp;#39;s like a 30,000 foot view of the site!" alt="Screenshot of RhinoSpike as it appears in a mobile browser, with a lot of tiny, unreadable text."loading="lazy"
>&lt;/figure>
&lt;p>I don&amp;rsquo;t have much time each week to work on this project. I have a full time job and other obligations, which don&amp;rsquo;t allow me much more than a few hours a week to spend on RhinoSpike, so I need to make the best use of my time possible.&lt;/p>
&lt;p>Sometimes things come up and I don&amp;rsquo;t have any time at all for this project, even though I really want to work on it. Things like doctor appointments, where I spend a lot of time sitting and waiting, trying not to be distracted by whatever is on HGTV in the waiting room. Is there some law that says HGTV must be playing on a TV at every doctor and dentist office? It sure feels like it.&lt;/p>
&lt;p>That day I had been working on creating a navigation bar at the bottom of the page, like you would see in a lot of mobile apps. I had already tried it on my own but couldn&amp;rsquo;t get it to look the way I wanted. So while sitting in the doctor&amp;rsquo;s office, waiting, I remembered reading &lt;a href="https://simonwillison.net/2023/Sep/29/llms-podcast/#code-interpreter-as-a-weird-kind-of-intern" target="_blank">Simon Willison&amp;rsquo;s blog where he talked about using ChatGPT on his phone to get coding work done while on the go&lt;/a>. So I gave it a shot. Here&amp;rsquo;s what I told the robot (One my co-workers refers to ChatGPT as &amp;ldquo;the robot&amp;rdquo; and now I catch myself saying it too):&lt;/p>
&lt;blockquote>
&lt;p>I&amp;rsquo;m working on a mobile website using Bulma CSS and ionic icons. I want to make a bar on the bottom of the screen with icons over text to navigate the major parts of the site. This is the same kind of design that many mobile apps use. Can you generate an example of this?&lt;/p>&lt;/blockquote>
&lt;p>The robot did as I asked, dutifully creating HTML and CSS as requested. Since I was on my phone, I couldn&amp;rsquo;t do much with this. I didn&amp;rsquo;t have a code editor to copy it to a file so I could see what it generated. So I asked the robot to save it all to an HTML file that I could download, and it did that, giving me a download link.&lt;/p>
&lt;p>I downloaded the file and opened it in my browser. And, to my delight, it was exactly what I asked for.&lt;/p>
&lt;figure >&lt;img src="https://peterextexia.com/img/chatgpt-made-this.png" title="I think I&amp;#39;ll keep this robot intern around for a while." alt="Screenshot of the html page generated by ChatGPT. At the bottom of the screen, there are three icons for &amp;#39;Home,&amp;#39; &amp;#39;Profile,&amp;#39; and &amp;#39;Settings&amp;#39; within a navigation bar. "loading="lazy"
>&lt;/figure>
&lt;p>I wasn&amp;rsquo;t able to get back to working on RhinoSpike for several days, but once I did, I was very quickly able to incorporate the example ChatGPT created for me.&lt;/p>
&lt;figure >&lt;img src="https://peterextexia.com/img/rhinospike-new-mobile-navbar.png" title="Coming soon to a mobile browser near you..." alt="Screenshot of RhinoSpike in a mobile browser with the new navigation bar at the bottom."loading="lazy"
>&lt;/figure>
&lt;p>Obviously there is still a lot of work to be done, but I love how that bottom navigation bar turned out.&lt;/p>
&lt;p>Check out the &lt;a href="https://chat.openai.com/share/71ecddcf-951e-4138-b493-4adbfb3cb2c8" target="_blank">transcript of my conversation with the robot&lt;/a> and the &lt;a href="https://peterextexia.com/Mobile_Bottom_Navigation.html">HTML it generated&lt;/a>. Give this technique a shot next time you are sitting in a doctor&amp;rsquo;s office instead of numbing your mind with yet another house-flipping program.&lt;/p></description></item><item><title>How Chrome Crushed My Dreams of Multilingual Word Game Dominance</title><link>https://peterextexia.com/blog/how-chrome-crushed-my-dreams-of-multilingual-word-game-dominance/</link><pubDate>Thu, 05 Oct 2023 06:36:24 -0500</pubDate><guid>https://peterextexia.com/blog/how-chrome-crushed-my-dreams-of-multilingual-word-game-dominance/</guid><description>&lt;h2 id="aw-snap">Aw, Snap!&lt;/h2>
&lt;p>I was feeling great. I had just announced my bilingual word game, &lt;a href="https://bilingdle.com" target="_blank">Bilingdle&lt;/a>, on social media, and the immediate response was overwhelmingly positive, especially among my friends and family on Facebook. Several months of work in my free time were being validated by this pleasant reception. But then someone mentioned the game had crashed on their phone. Another person said the same and sent me a screenshot.&lt;/p>
&lt;figure >&lt;img src="https://peterextexia.com/img/aw-snap.png" title="The true face of Google Chrome as it crushes my dreams" alt="Screenshot of Google Chrome on Android: Aw, Snap! Something went wrong while displaying this webpage."loading="lazy"
>&lt;/figure>
&lt;p>My friend told me they were using Chrome on a Samsung phone. I opened the game in Chrome on my own non-Samsung Android phone and was horrified by the same awful screen. My primary browser on my phone is Brave, and it worked fine. I could swear I had opened the game in Chrome just a few days ago, and it was fine. What was going on?&lt;/p>
&lt;p>I quickly came across &lt;a href="https://github.com/godotengine/godot/issues/82015" target="_blank">this bug report&lt;/a> filed on the GitHub page for &lt;a href="https://godotengine.org/" target="_blank">Godot&lt;/a>, the game engine I used to create my game. It had been filed just two days earlier, confirming that something had recently changed in Chrome and was affecting others as well. This was not good news. The default browser on the most common phone OS was crashing on my game that I had just shared with everyone I know. Not sure what I could do about this, I told my friend I would look into it.&lt;/p>
&lt;h2 id="youre-using-chrome-even-when-youre-not-using-chrome">You&amp;rsquo;re using Chrome, even when you&amp;rsquo;re not using Chrome&lt;/h2>
&lt;p>I wished the easy answer was to tell people to stop using Chrome. To suggest using Brave, Opera, Edge, or Firefox. However, besides the fact that no one would switch browsers just to play my little word game, all of those browsers, except one, had a fatal flaw. They were all just Chrome in different clothes. The crashing problem was inevitably going to affect all of those other browsers (except Firefox, God bless it) in a matter of days.&lt;/p>
&lt;p>And so began the questions of self-doubt:&lt;/p>
&lt;p>&lt;em>How do I fix this problem when it&amp;rsquo;s not even my code that&amp;rsquo;s causing it?&lt;/em>&lt;/p>
&lt;p>&lt;em>Can I even figure out how to debug this? And if I can, would I be able to fix it?&lt;/em>&lt;/p>
&lt;p>&lt;em>Was it a mistake to write a game meant for the web in Godot?&lt;/em>&lt;/p>
&lt;h2 id="the-pit-of-despair">The Pit of Despair&lt;/h2>
&lt;p>A couple of people commented on the Godot bug report, stating that they downgraded from Godot 3.5 to 3.3, and that solved the issue for their games. I tried it, but my game had weird display issues when using 3.3 that made it unusable. Somewhere, I got the idea to attempt to recompile Godot with several of its built-in modules disabled, thinking it might be possible that some feature of Godot that I don&amp;rsquo;t even use in my game might be causing the crash. A nice side-effect of this would have been a smaller WebAssembly file and faster load times for my game if this worked. My initial attempt did not succeed; my game wouldn&amp;rsquo;t load. It was likely I disabled something I shouldn&amp;rsquo;t have. It was going to be a lot of work to figure out what needed to be enabled and what could be disabled, but I wasn&amp;rsquo;t sure I had any choice, short of a rewrite in some other language or just giving up completely.&lt;/p>
&lt;p>I was completely discouraged. I took a break from working on the game. The Godot bug report was a week old, and while people were talking about it, no one seemed to be doing anything to fix the issue.&lt;/p>
&lt;p>As expected, Brave was updated on my phone, and now I had to be the one to switch browsers just to play my game on my phone.&lt;/p>
&lt;p>It felt like this was going to be a problem for months, and I would completely lose all motivation and excitement for this project.&lt;/p>
&lt;h2 id="reassembling-the-infinity-gauntlet">Reassembling the Infinity Gauntlet&lt;/h2>
&lt;p>I received a notification about a new comment on the bug report that said that rebuilding the game with the Mono version of Godot works. At first, that didn&amp;rsquo;t mean much to me. I wasn&amp;rsquo;t using C# for this game; it was written entirely in GDScript. But others started to confirm that this fixed their issue too.&lt;/p>
&lt;p>So I tried it, which thankfully meant I only needed to change a line or two in my CI/CD workflow. Lo and behold, the game was working again. Working in Chrome. Working in Brave. I got my friends to check it out on their phones, and it worked for them too!&lt;/p>
&lt;p>&lt;em>What a relief!&lt;/em> Maybe I don&amp;rsquo;t need to give up on this project. It was supposed to be a fun project after all.&lt;/p>
&lt;h2 id="the-post-credits-scene">The Post-Credits Scene&lt;/h2>
&lt;p>Although the issue hasn&amp;rsquo;t been addressed in Godot yet, &lt;a href="https://github.com/godotengine/godot/issues/82015#issuecomment-1742072601" target="_blank">someone who works on Chrome took notice of the issue&lt;/a> and pretty rapidly started working on getting the crash addressed in the browser itself! My respect for the Chrome team went up seeing how quickly they started addressing the situation once they were aware of it.&lt;/p></description></item><item><title>Bilingdle</title><link>https://peterextexia.com/projects/bilingdle/</link><pubDate>Tue, 19 Sep 2023 07:10:42 -0500</pubDate><guid>https://peterextexia.com/projects/bilingdle/</guid><description>&lt;p>I first learned about &lt;a href="https://en.wikipedia.org/wiki/Wordle" target="_blank">Wordle&lt;/a> in early 2022, and like so many others, I started to play daily. Eventually I discovered &lt;a href="https://www.merriam-webster.com/games/quordle/" target="_blank">Quordle&lt;/a>, which is like Wordle but with 4 words at the same time, and that became my daily game. It also has a practice mode which lets you play as many times a day as you like. I thought it would be great to play a daily game like this to help me keep up with my &lt;a href="https://peterextexia.com/tags/spanish">Spanish&lt;/a>. I found a version of Wordle in Spanish, and even tried Quordle&amp;rsquo;s Spanish version, but I found these difficult to stick with. I felt like some of the words that were being selected as the answers were often obscure.&lt;/p>
&lt;p>In December 2022, I had the idea to make my own Wordle-style game that would be a bilingual version where you try to guess an English word and a Spanish word at the same time. That game is called &lt;a href="https://bilingdle.com" target="_blank">Bilingdle&lt;/a>.&lt;/p>
&lt;p>I am writing it using the &lt;a href="https://godotengine.org/" target="_blank">Godot game engine&lt;/a>, which is likely overkill for this project, but I wanted to learn it for use in future &lt;a href="https://peterextexia.com/tags/game-jam">game jams&lt;/a>.&lt;/p>
&lt;p>Bilingdle is free to play online at &lt;a href="https://bilingdle.com" target="_blank">https://bilingdle.com&lt;/a>&lt;/p></description></item><item><title>ClozeMaker</title><link>https://peterextexia.com/projects/clozemaker/</link><pubDate>Fri, 30 Jun 2023 08:29:59 -0500</pubDate><guid>https://peterextexia.com/projects/clozemaker/</guid><description>&lt;p>ClozeMaker is a small Windows application I threw together in 2017 to make the process of making &lt;a href="https://en.wikipedia.org/wiki/Cloze_test" target="_blank">cloze-deletion&lt;/a> flashcards in &lt;a href="https://peterextexia.com/anki">Anki&lt;/a> easier. I demonstrated how I make these flashcards in a &lt;a href="https://www.youtube.com/watch?v=nPEyDNwgDyc" target="_blank">stream on YouTube&lt;/a>:&lt;/p>
&lt;div class="videoWrapper">
&lt;iframe src="https://www.youtube.com/embed/nPEyDNwgDyc?"
frameborder="0"
allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>I had not intended originally to make this program available publicly, it was just a quick and dirty tool I threw together quickly. After using it in the stream above, several people asked if they could get a copy as well. So I put the source code on &lt;a href="https://github.com/peterjcarroll/ClozeMaker" target="_blank">GitHub&lt;/a> and made the program available for download.&lt;/p>
&lt;p>ClozeMaker can be downloaded here: &lt;a href="https://github.com/peterjcarroll/ClozeMaker/releases" target="_blank">https://github.com/peterjcarroll/ClozeMaker/releases&lt;/a>&lt;/p></description></item><item><title>Word Multi Search</title><link>https://peterextexia.com/projects/word-multi-search/</link><pubDate>Mon, 26 Jun 2023 06:40:52 -0500</pubDate><guid>https://peterextexia.com/projects/word-multi-search/</guid><description>&lt;p>In 2014, I wrote a quick static site to help speed up the process of making flashcards in the way suggested by &lt;a href="https://www.ted.com/talks/gabriel_wyner_why_we_struggle_learning_languages" target="_blank">Gabriel Wyner&lt;/a> in his book &lt;a href="https://amzn.to/3bHPcmi" target="_blank">Fluent Forever&lt;/a>. Gabriel wrote a blog post on &lt;a href="https://blog.fluent-forever.com/automate-your-searches/" target="_blank">automating your searches&lt;/a>, but his method required some software that I did not or could not use, for some reason I&amp;rsquo;ve since forgotten.&lt;/p>
&lt;p>Word Multi Search is located at &lt;a href="https://wms.peterextexia.com" target="_blank">https://wms.peterextexia.com&lt;/a> and it allows you to search for a word in a foreign language, and depending on the language, it will give you a result on several sites at once:&lt;/p>
&lt;ul>
&lt;li>A monolingual dictionary (one that native speakers of the language would use)&lt;/li>
&lt;li>A translation dictionary&lt;/li>
&lt;li>Google Images (using the localized version for that language)&lt;/li>
&lt;li>Google Translate&lt;/li>
&lt;li>&lt;a href="https://tatoeba.org" target="_blank">Tatoeba&lt;/a> (a site with example sentences containing the word)&lt;/li>
&lt;li>&lt;a href="https://www.linguee.com/" target="_blank">Linguee&lt;/a> (another example sentence site)&lt;/li>
&lt;li>&lt;a href="https://peterextexia.com/projects/rhinospike">RhinoSpike&lt;/a> (audio recorded by natives using the word)&lt;/li>
&lt;li>&lt;a href="https://forvo.com" target="_blank">Forvo&lt;/a> (another audio site, but just individual words instead of longer text)&lt;/li>
&lt;/ul>
&lt;p>Word Multi Search is open source and can be found on &lt;a href="https://github.com/peterjcarroll/wordmultisearch" target="_blank">GitHub&lt;/a>.&lt;/p></description></item><item><title>Grobble the Caveman</title><link>https://peterextexia.com/projects/grobble-the-caveman/</link><pubDate>Fri, 02 Jun 2023 00:00:00 +0000</pubDate><guid>https://peterextexia.com/projects/grobble-the-caveman/</guid><description>&lt;p>The &lt;a href="https://itch.io/jam/gmtk-jam-2022" target="_blank">GMTK Game Jam&lt;/a> happened once again in July 2022, and &lt;a href="https://peterextexia.com/projects/malfunction">like the previous year&lt;/a>, &lt;a href="https://twitter.com/tummai" target="_blank">Thomas&lt;/a> and I decided to participate. The jam started on a Friday, and we were able to begin right away. Thomas took a half day off of work, and I wasn&amp;rsquo;t busy at work that day, so I just kept an eye out in case I was needed at work while the jam started.&lt;/p>
&lt;p>The night before the jam, I reviewed the code we had written last year for &lt;a href="https://peterextexia.com/projects/malfunction">Malfunction&lt;/a>, and naturally, I didn&amp;rsquo;t remember much about Unity, the game framework we used. Despite that, we used Unity this time around since we had more experience with it than any other framework.&lt;/p>
&lt;p>The theme for the jam this year was &amp;ldquo;Roll of the Dice.&amp;rdquo; Our game idea ended up being a somewhat &lt;a href="https://en.wikipedia.org/wiki/Sokoban" target="_blank">Sokoban&lt;/a>-style puzzle game, but instead of pushing boxes around, the player pushes a 10-sided die around the screen. Each time it&amp;rsquo;s pushed, the die rolls a number. Some obstacles required rolling certain numbers, and there are other objects that need to be pushed around, set on switches, etc. We planned to implement enemies that you needed to fight as well, but we ran out of time.&lt;/p>
&lt;p>I don&amp;rsquo;t remember why we went with &amp;ldquo;Grobble the Caveman&amp;rdquo; for our title and main character. Probably because it was absurd. This is the backstory behind the game:&lt;/p>
&lt;blockquote class="box">&lt;p>Grobble the caveman was flying his airplane over the ocean. Suddenly he hits turbulence and the engines cut out. He crash lands on a remote island. Armed with only his wit and his lucky 10-sided rock, Grobble must brave the dangers of the island and find his way home.&lt;/p>&lt;/blockquote>
&lt;div class="columns">
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/grobble.png" target="_blank">
&lt;img src="https://peterextexia.com/img/grobble.png" alt="Title Screen" class="image" />
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/grobble1.png" target="_blank">
&lt;img src="https://peterextexia.com/img/grobble1.png" alt="Game screenshot 1" class="image" />
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/grobble2.png" target="_blank">
&lt;img src="https://peterextexia.com/img/grobble2.png" alt="Game screenshot 2
" class="image" />
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;/div>
&lt;p>For this jam, we made the game playable in a web browser, in addition to being available for download on the major desktop platforms. I hoped that more people would play it than played our game last year, since no download was required.&lt;/p>
&lt;p>You can play the game at &lt;a href="https://kedge8bc.itch.io/grobble-the-caveman" target="_blank">https://kedge8bc.itch.io/grobble-the-caveman&lt;/a>.&lt;/p></description></item><item><title>Malfunction</title><link>https://peterextexia.com/projects/malfunction/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><guid>https://peterextexia.com/projects/malfunction/</guid><description>&lt;p>In June 2021, my frequent co-conspirator &lt;a href="https://twitter.com/tummai" target="_blank">Thomas&lt;/a> sent me a message asking I wanted to participate in a game jam that weekend. I had never done a game jam before, but it was something I had been meaning to try for a while, so of course I agreed. And then he told me the game jam had already started, so we had less than the allotted 48 hours to make a complete game! The game jam was the &lt;a href="https://itch.io/jam/gmtk-2021" target="_blank">GMTK Game Jam 2021&lt;/a> and the theme for the jam was &amp;ldquo;Joined Together.&amp;rdquo;&lt;/p>
&lt;p>We brainstormed for a bit and Thomas came up with the idea that we are the pilot of a spaceship in a &lt;a href="https://en.wikipedia.org/wiki/Shoot_%27em_up" target="_blank">shoot &amp;rsquo;em up game&lt;/a> (which I learned that weekend are also called shmups) but the controls are malfunctioning because some of the controls get joined together. This could mean that the forward button and the left button are joined together, so when you try to go forward, your ship will also go left, and vice-versa. Or possibly the fire button is joined with the right button, so every time you fire, you ship also goes left, and every time you move left, your ship also fires the weapon.&lt;/p>
&lt;p>We wrote the game in C# using Unity. I had no experience with Unity prior to this game jam. Thomas had a little more experience with it than I did, but not a ton, and he had very little experience with C#. It was sure to be a learning experience for both of us, and it was.&lt;/p>
&lt;div class="columns">
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/malfunction-title.png" target="_blank">
&lt;img src="https://peterextexia.com/img/malfunction-title.png" alt="Title Screen" class="image" />
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/malfunction1.png" target="_blank">
&lt;img src="https://peterextexia.com/img/malfunction1.png" alt="Game screenshot 1" class="image" />
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/malfunction2.png" target="_blank">
&lt;img src="https://peterextexia.com/img/malfunction2.png" alt="Game screenshot 2" class="image" />
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/malfunction3.png" target="_blank">
&lt;img src="https://peterextexia.com/img/malfunction3.png" alt="Game screenshot 3
" class="image" />
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;/div>
&lt;p>&lt;a href="https://itch.io/jam/gmtk-2021/rate/1083950" target="_blank">Our game submission&lt;/a> didn&amp;rsquo;t place highly in the overall rankings, but that wasn&amp;rsquo;t really our goal. We just wanted to build a game quickly, and we managed that. I even think the game is fun to play.&lt;/p>
&lt;p>We greatly enjoyed this game jam, and in 2022 when the same jam ran again, &lt;a href="https://peterextexia.com/projects/grobble-the-caveman/">we eagarly participated again&lt;/a>.&lt;/p>
&lt;p>The game is available for free for Windows, Mac, and Linux at &lt;a href="https://kedge8bc.itch.io/malfunction" target="_blank">https://kedge8bc.itch.io/malfunction&lt;/a>.&lt;/p></description></item><item><title>RhinoSpike</title><link>https://peterextexia.com/projects/rhinospike/</link><pubDate>Thu, 18 May 2023 00:00:00 +0000</pubDate><guid>https://peterextexia.com/projects/rhinospike/</guid><description>&lt;p>&lt;a href="https://rhinospike.com" target="_blank">RhinoSpike&lt;/a> is a site that allows language learners to get recorded audio in their target language. The audio is submitted by other users of the site who are native speakers of that language, and usually are also learning another language and seeking recording audio in their target language. RhinoSpike has been actively online since March 2010, and, as of May 2023, &lt;a href="https://rhinospike.com/language/" target="_blank">nearly 80,000 audio recordings in 90 languages&lt;/a> have been uploaded to the site.&lt;/p>
&lt;h2 id="the-origin-of-rhinospike">The Origin of RhinoSpike&lt;/h2>
&lt;p>Do you remember &lt;a href="https://en.wikipedia.org/wiki/Google_Wave" target="_blank">Google Wave&lt;/a>?&lt;/p>
&lt;p>Today, most people think of it as yet another in &lt;a href="https://killedbygoogle.com/" target="_blank">a long line of cancelled Google products&lt;/a>. For me, I remember it fondly as the origin of &lt;a href="https://rhinospike.com" target="_blank">RhinoSpike&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://twitter.com/tummai" target="_blank">Thomas&lt;/a> and I had been blogging about our language learning journeys on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a> at the time, and we had made several online friends in the language learning &lt;a href="https://en.wikipedia.org/wiki/Blogosphere" target="_blank">blogosphere&lt;/a> (a term that was en vogue in those days).&lt;/p>
&lt;p>One of those friends was &lt;a href="https://ramses.blog/" target="_blank">Ramses&lt;/a>, who at the time had a blog called &lt;a href="https://web.archive.org/web/20160305061920/http://www.spanish-only.com/" target="_blank">Spanish Only&lt;/a>. When Google Wave was announced, the three of us were excited to try it out. Primarily we used it as a chat platform, but one day Thomas had a brilliant idea: let&amp;rsquo;s learn Spanish collaboratively on Google Wave.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/img/wave-spanish-idea.png" alt="">&lt;/p>
&lt;p>We gathered together a few others to learn Spanish with us on Google Wave. We made a lot of posts that embedded video from various web sites that were in Spanish and talked about them, often trying to figure out the accents of the speakers or discussing words that we didn&amp;rsquo;t understand.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/img/wave-spanish-thread.png" alt="">&lt;/p>
&lt;p>One of the threads that was posted was about craters on the planet Mercury. In that thread, Thomas wished for a recording of the text so he could hear what it actually sound like when spoken. A while later, Ramses uploaded a couple of audio recordings of himself reading the text. This thread sparked the idea of RhinoSpike, a site where people can record themselves reading text for others who are learning their language.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/img/wave-mercury.png" alt="">&lt;/p>
&lt;p>Thomas and I got started right away building the site. We built it using &lt;a href="https://www.djangoproject.com/" target="_blank">Django&lt;/a> and in March 2010, we had something to we felt was good enough to &lt;a href="https://twitter.com/tummai/status/11018117398" target="_blank">announce to the public on Twitter&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://twitter.com/tummai/status/11018117398" target="_blank">&lt;img src="https://peterextexia.com/img/rhinospike-debut-tweets.png" alt="">&lt;/a>&lt;/p>
&lt;p>We sent emails to all of the language bloggers that we knew at the time, and many of them started sharing RhinoSpike with their followers.&lt;/p>
&lt;p>&lt;a href="https://twitter.com/irishpolyglot/status/11360540830" target="_blank">&lt;img src="https://peterextexia.com/img/rhinospike-benny-tweet.png" alt="">&lt;/a>
&lt;a href="https://twitter.com/ajatt/status/11496660272" target="_blank">&lt;img src="https://peterextexia.com/img/rhinospike-ajatt-tweet.png" alt="">&lt;/a>&lt;/p>
&lt;p>Since then, we have made many updates and improvements to the site, and the user base has grown primarily by word of mouth.&lt;/p>
&lt;h2 id="rhinospike-in-the-media">RhinoSpike in the Media&lt;/h2>
&lt;p>RhinoSpike has also grown thanks to mentions in the media and popular websites:&lt;/p>
&lt;ul>
&lt;li>Lifehacker: &lt;a href="https://lifehacker.com/rhinospike-teaches-you-foreign-languages-by-hearing-nat-5564931" target="_blank">RhinoSpike Teaches You Foreign Languages by Hearing Native Speakers&lt;/a> - &lt;em>Whitson Gordon, June 16, 2010&lt;/em>&lt;/li>
&lt;li>The New York Times: &lt;a href="https://www.nytimes.com/2010/07/29/technology/personaltech/29basics.html" target="_blank">Learning a Language From an Expert, on the Web&lt;/a> - &lt;em>Peter Wayner, July 28, 2010&lt;/em>&lt;/li>
&lt;li>Fluent in 3 Months: &lt;a href="https://www.fluentin3months.com/language-video/" target="_blank">How to prepare, record &amp;amp; upload a video entirely in a foreign language just after starting to learn it&lt;/a> - &lt;em>Benny Lewis, July 1, 2011&lt;/em>&lt;/li>
&lt;li>Fox Business: &lt;a href="https://web.archive.org/web/20120710123038/https://www.foxbusiness.com/travel/2012/06/28/six-foolproof-tricks-for-not-embarrassing-yourself-in-foreign-language/" target="_blank">Six Foolproof Tricks for NOT Embarrassing Yourself in a Foreign Language&lt;/a> - &lt;em>Melody Warnick, June 28, 2012&lt;/em>&lt;/li>
&lt;li>Tim Ferriss: &lt;a href="https://tim.blog/2014/03/21/how-to-learn-a-foreign-language-2/" target="_blank">12 Rules for Learning Foreign Languages in Record Time — The Only Post You&amp;rsquo;ll Ever Need&lt;/a> - &lt;em>Benny Lewis, March 21, 2014&lt;/em>&lt;/li>
&lt;li>Scientific American Mind: &lt;a href="https://www.scientificamerican.com/article/how-to-teach-old-ears-new-tricks/" target="_blank">How to Teach Old Ears New Tricks&lt;/a> - &lt;em>Gabriel Wyner, July 1, 2014&lt;/em>&lt;/li>
&lt;li>Actual Fluency: &lt;a href="https://actualfluency.com/rhinospike-review/" target="_blank">RhinoSpike Review: Excellent for improving listening skills&lt;/a> - &lt;em>Kris Broholm, May 25, 2021&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="fluent-forever">Fluent Forever&lt;/h3>
&lt;p>My favorite place that RhinoSpike has been mentioned is in a fantastic book by Gabriel Wyner called &lt;a href="https://amzn.to/3bHPcmi" target="_blank">Fluent Forever&lt;/a>. RhinoSpike is not just mentioned in passing, it&amp;rsquo;s listed as a serious resource to help you learn a language! Gabriel was kind enough to send me a signed copy of his book.
&lt;div class="columns">
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/fluentforever-cover.jpg" target="_blank">
&lt;img src="https://peterextexia.com/img/fluentforever-cover.jpg" alt="Fluent Forever Front Cover" class="image" />
&lt;figcaption>Front Cover&lt;/figcaption>
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/fluentforever-1.jpg" target="_blank">
&lt;img src="https://peterextexia.com/img/fluentforever-1.jpg" alt="Signed inside front cover" class="image" />
&lt;figcaption>Signed inside front cover&lt;/figcaption>
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/fluentforever-2.jpg" target="_blank">
&lt;img src="https://peterextexia.com/img/fluentforever-2.jpg" alt="Page 79" class="image" />
&lt;figcaption>Page 79&lt;/figcaption>
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;div class="column">
&lt;figure>
&lt;a href="https://peterextexia.com/img/fluentforever-3.jpg" target="_blank">
&lt;img src="https://peterextexia.com/img/fluentforever-3.jpg" alt="Page 254" class="image" />
&lt;figcaption>Page 254
&lt;/figcaption>
&lt;/a>
&lt;/figure>
&lt;/div>
&lt;/div>&lt;/p>
&lt;p>Gabriel has since created a company and an app based on the concepts in his book, which also go by the name &lt;a href="https://fluent-forever.com" target="_blank">Fluent Forever&lt;/a>. If you&amp;rsquo;re learning one of the languages supported by the app, I recommend &lt;a href="https://fluent-forever.com" target="_blank">checking it out&lt;/a>.&lt;/p>
&lt;h2 id="interviews-with-me-about-rhinospike">Interviews with me about RhinoSpike&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://youtu.be/CGZdfTNq920" target="_blank">Interview with Peter Carroll, founder of the audio language learning platform Rhinospike&lt;/a> - &lt;em>Gabriel Gelman | Sprachheld, May 5, 2017&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://leo-listening.com/peter-rhinospike/" target="_blank">How &amp;amp; Why To Create Personalised Listening Resources&lt;/a> (&lt;a href="https://youtu.be/yXmiAwEB-3Q" target="_blank">YouTube link&lt;/a>) - &lt;em>Leo Listening, September 5, 2019&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="blog-posts-about-rhinospike">Blog posts about RhinoSpike&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://peterextexia.com/blog/im-busy-let-the-robot-help/">I&amp;#39;m busy, let the robot help!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/foreign-language-audio-on-demand-at-rhinospikecom/">Foreign Language Audio on Demand at RhinoSpike.com&lt;/a>
&lt;/li>
&lt;/ul></description></item><item><title>Babelhut</title><link>https://peterextexia.com/projects/babelhut/</link><pubDate>Tue, 27 Dec 2022 08:57:27 -0600</pubDate><guid>https://peterextexia.com/projects/babelhut/</guid><description>&lt;p>&lt;a href="https://web.archive.org/web/20160802081613/http://babelhut.com/" target="_blank">Babelhut&lt;/a> was a blog created by my friend &lt;a href="https://twitter.com/tummai/" target="_blank">Thomas&lt;/a> and myself to document our language learning journey online. Our &lt;a href="https://web.archive.org/web/20160802221625/http://babelhut.com/about/" target="_blank">about page&lt;/a> from the site said this:&lt;/p>
&lt;blockquote class="box">&lt;p>Babelhut.com is a small space devoted to language and language learning. We, the authors, write about our experiences on the path to fluency in our target languages and about other language-related topics that interest us.&lt;/p>&lt;/blockquote>
&lt;p>Posting on Babelhut helped to keep us motivated with our language learning as we were sharing our progress with each other and with the world. We quickly began to make friends with other language learning bloggers.&lt;/p>
&lt;p>Our work on Babelhut led to the creation of &lt;a href="https://peterextexia.com/projects/rhinospike">RhinoSpike&lt;/a>.&lt;/p>
&lt;p>Over time, we focused our attention on RhinoSpike and we stopped writing posts on Babelhut. At some point, the domain name didn&amp;rsquo;t get renewed and Babelhut disappeared into the ether.&lt;/p>
&lt;p>I&amp;rsquo;m not sure when, but at some point someone else registered the domain babelhut.com and has put up their own language learning blog. I don&amp;rsquo;t know this person, or if he is aware of the previous incarnation of babelhut.com. I wish him well on his language learning journey.&lt;/p>
&lt;p>Below is a list of my posts which were originally written on Babelhut.com:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://peterextexia.com/blog/reading-with-interlinear-books/">Reading with Interlinear Books&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/exporting-terms-to-anki-from-learning-with-texts/">Exporting Terms to Anki from Learning With Texts&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/the-wonder-of-critical-frequency/">The Wonder of Critical Frequency&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/jes-mi-lernas-esperanton-yes-im-learning-esperanto/">Jes, Mi Lernas Esperanton - Yes, I&amp;#39;m Learning Esperanto&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/use-tatoebaorg-for-mining-sentences/">Use tatoeba.org for mining sentences&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/i-am-starting-to-learn-japanese-not-for-fluency-but-for-travel/">I am starting to learn Japanese, not for fluency, but for travel.&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/spanish-verb-highlight-o%C3%ADr/">Spanish Verb Highlight: Oír&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/muchas-gracias-time-warner-cable-how-did-you-know-i-am-studying-spanish/">¡Muchas gracias, Time Warner Cable! How did you know I am studying Spanish?&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espa%C3%B1ol-12-is-now-available/">Barra de Español 1.2 is now available!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espa%C3%B1ol-is-now-in-the-public-list-on-addonsmozillaorg/">Barra de Español is now in the Public list on addons.mozilla.org&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/ramses-launches-the-spanish-english-sentence-database/">Ramses launches the Spanish-English Sentence Database&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/why-you-should-be-using-the-us-international-keyboard-layout/">Why You Should Be Using the US International Keyboard Layout&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/whats-on-your-playlist/">What&amp;#39;s on your playlist?&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/the-winner-of-a-free-copy-of-601-spanish-verbs/">The Winner of a Free Copy of &amp;#39;601 Spanish Verbs&amp;#39;&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/review-of-601-spanish-verbs--a-giveaway/">Review of 601 Spanish Verbs &amp;#43; a Giveaway&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/update-barra-de-espa%C3%B1ol-version-11-has-been-released/">Update: Barra de Español version 1.1 has been released&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/false-friends-decepcionar/">False friends: decepcionar&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espa%C3%B1ol-a-new-firefox-toolbar-for-spanish-students/">Barra de Español: A new Firefox toolbar for Spanish students&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/we-have-hopped-onto-the-twitter-bandwagon/">We have hopped onto the Twitter bandwagon&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/lojban/">Lojban&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/dreaming-in-another-language/">Dreaming in another language&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/huevos-verdes-con-jam%C3%B3n/">Huevos verdes con jamón&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/listening-to-compressed-words-in-spanish/">Listening to compressed words in Spanish&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/find-music-you-actually-like-in-the-language-you-are-learning/">Find music you actually like in the language you are learning&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/learn-spanish-vocabulary-in-the-shower/">Learn Spanish Vocabulary in the Shower&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/frases-en-espa%C3%B1ol-n%C3%A9ctar-de-guayaba-de-concentrado/">Frases en Español: Néctar de Guayaba de concentrado&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/frases-en-espa%C3%B1ol-mobile-phone/">Frases en Español: Mobile Phone&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/recovering-from-a-period-of-demotivation/">Recovering from a period of demotivation&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/i-switched-my-kde-desktop-to-spanish/">I switched my KDE desktop to Spanish&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/10-free-1-hour-tutoring-sessions-on-edufire/">10 free 1 hour tutoring sessions on eduFire&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/setting-up-a-spanish-keyboard-in-windows-vista/">Setting up a Spanish keyboard in Windows Vista&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/patricks-spanish-study-methods/">Patrick&amp;#39;s Spanish Study Methods&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/los-verbos-y-la-gram%C3%A1tica/">Los Verbos y La Gramática&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/childrens-books-in-spanish/">Children&amp;#39;s Books in Spanish&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/mnemosyne-al-rescate/">¡Mnemosyne Al Rescate!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/spanish-update-shorter-study-time/">Spanish Update: Shorter study time&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/step-2-survive-the-flood/">Step 2: Survive the flood&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/the-greek-alphabet-song/">The Greek Alphabet Song&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/remember-the-alamo/">Remember the Alamo!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/%CE%B5%CE%BD-%CE%B1%CF%81%CF%87%CE%B7-starting-with-new-testament-greek-again/">Εν αρχη: Starting with New Testament Greek (again)&lt;/a>
&lt;/li>
&lt;/ul></description></item><item><title>Getting the Most Out of Anki</title><link>https://peterextexia.com/anki/</link><pubDate>Fri, 29 Apr 2016 01:00:00 -0500</pubDate><guid>https://peterextexia.com/anki/</guid><description>&lt;p>This page contains files and links referred to in my Polyglot Gathering 2016 presentation.&lt;/p>
&lt;h2 id="video-of-the-presentation">Video of the presentation&lt;/h2>
&lt;div class="videoWrapper">
&lt;iframe src="https://www.youtube.com/embed/jKeI2Uoi1CU?"
frameborder="0"
allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;h2 id="slides">Slides&lt;/h2>
&lt;div class="videoWrapper">
&lt;iframe
src="https://docs.google.com/presentation/d/12VXaIhRLLxgt7KiSZtTFGE4pOPs1A5jfAH5f2NT0XgU/embed?start=false&amp;amp;amp;loop=false&amp;amp;amp;delayms=5000"
allowfullscreen="true"
mozallowfullscreen="true"
webkitallowfullscreen="true"
width="560"
height="355"
frameborder="0">&lt;/iframe>
&lt;/div>
&lt;p>&lt;a href="https://docs.google.com/presentation/d/12VXaIhRLLxgt7KiSZtTFGE4pOPs1A5jfAH5f2NT0XgU/pub?start=false&amp;amp;amp;loop=false&amp;amp;amp;delayms=5000" target="_blank">View my slides on Google Docs&lt;/a>&lt;/p>
&lt;h2 id="resources">Resources&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://apps.ankiweb.net/" target="_blank">Anki&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://amzn.to/3bHPcmi" target="_blank">Fluent Forever&lt;/a> by Gabriel Wyner&lt;/li>
&lt;li>&lt;a href="https://www.supermemo.com/en/blog/twenty-rules-of-formulating-knowledge" target="_blank">Twenty rules of formulating knowledge&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://artofmemory.com/wiki/Main_Page/" target="_blank">Art of Memory&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="blog-posts-related-to-anki">Blog posts related to Anki&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://peterextexia.com/blog/anki-20-esperanto-and-github/">Anki 2.0, Esperanto, and GitHub&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/exporting-terms-to-anki-from-learning-with-texts/">Exporting Terms to Anki from Learning With Texts&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/the-wonder-of-critical-frequency/">The Wonder of Critical Frequency&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/esperanto-support-plugin-for-anki/">Esperanto Support Plugin for Anki&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/recovering-from-a-period-of-demotivation/">Recovering from a period of demotivation&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h2 id="blog-posts-about-spaced-repetition-systems-srs">Blog posts about Spaced Repetition Systems (SRS)&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://peterextexia.com/blog/the-wonder-of-critical-frequency/">The Wonder of Critical Frequency&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/use-tatoebaorg-for-mining-sentences/">Use tatoeba.org for mining sentences&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/recovering-from-a-period-of-demotivation/">Recovering from a period of demotivation&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/mnemosyne-al-rescate/">¡Mnemosyne Al Rescate!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/%CE%B5%CE%BD-%CE%B1%CF%81%CF%87%CE%B7-starting-with-new-testament-greek-again/">Εν αρχη: Starting with New Testament Greek (again)&lt;/a>
&lt;/li>
&lt;/ul></description></item><item><title>What to do when Chrome mysteriously crashes the X.org server</title><link>https://peterextexia.com/blog/what-to-do-when-chrome-mysteriously-crashes-the-xorg-server/</link><pubDate>Thu, 13 Mar 2014 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/what-to-do-when-chrome-mysteriously-crashes-the-xorg-server/</guid><description>&lt;p>This is largely a note to myself, to find later. This has already happened to me several times and I forget how to resolve this every time. The problem is that after some type of system update of one kind or another, Chrome will start causing the X.org server to crash. This sometimes happens immediately on login and sometimes there is a delay before the crash.&lt;/p>
&lt;p>The solution? &lt;strong>Reinstall the NVIDIA video driver.&lt;/strong>&lt;/p>
&lt;p>This has been my experience with Slackware, I don&amp;rsquo;t know if other distros run into the same problem.&lt;/p></description></item><item><title>Reading with Interlinear Books</title><link>https://peterextexia.com/blog/reading-with-interlinear-books/</link><pubDate>Tue, 11 Mar 2014 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/reading-with-interlinear-books/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;em>Linas Vaštakas is an avid language learning enthusiast, and he currently runs a project
&lt;a href="http://interlinearbooks.com/" title="Interlinear Books" target="_blank">InterlinearBooks.com&lt;/a>
which aims to make literature more accessible to language learners. He wrote this guest post about learning languages with Interlinear texts.&lt;/em>&lt;/p>
&lt;p>If you have been reading some of the posts about language learning in this blog, you probably know that
&lt;a href="https://web.archive.org/web/20161016000658/http://babelhut.com/motivation/learning-a-language-is-like-having-a-pet/" target="_blank">learning a language requires constant practice&lt;/a>
. While reading books could be a good source for such practice, doing this is often difficult because the process of
&lt;a href="https://peterextexia.com/blog/use-tatoebaorg-for-mining-sentences">translating unknown words is bothersome and often unsuccessful&lt;/a>
. Today, I would like to talk about my project, which attempts to change this with
&lt;a href="http://interlinearbooks.com/" title="Interlinear translations from InterlinearBooks.com" target="_blank">Interlinear translations&lt;/a>
. First, however, let me tell you about Interlinear translations.&lt;/p>
&lt;p>&lt;a href="http://interlinearbooks.com/" target="_blank">&lt;img src="http://interlinearbooks.com/img/image432552.png" alt="Example of an Interlinear book from InterlinearBooks.com">&lt;/a>&lt;/p>
&lt;p>Example of an Interlinear text from InterlinearBooks.com&lt;/p>
&lt;h2 id="what-are-interlinear-translations">What are Interlinear translations?&lt;/h2>
&lt;p>Interlinear translations are translations of the kind, where the translation is provided below each concrete word and phrase. So, for example, you would have a Swedish translation like this:&lt;/p>
&lt;p>&lt;img src="http://interlinearbooks.com/img/textsample.png" alt="Example of Interlinear translation from Swedish">&lt;/p>
&lt;p>Example of Interlinear translation from Swedish&lt;/p>
&lt;p>In the Swedish example, you can see how perfectly everything translates. Now, does everything always translate so perfectly in all texts and all languages? Not entirely. But Interlinear translations still aim to preserve the original syntax as long as understanding is possible. If understanding is not possible anymore, a little bit more figurative translation can be used. See this example:&lt;/p>
&lt;p>&lt;img src="http://interlinearbooks.com/img/textsample2.png" alt="Interlinear Russian text sample">&lt;/p>
&lt;p>Example of Interlinear translation from Russian&lt;/p>
&lt;p>In this example, you can notice that not everything is translatable as directly. Translating that Russian sentence literally, you would get something similar to “To Peter Ivanovich was not destiny to play bridge today evening.” Such translation, although probably still understandable, would quickly become clumsy. So, an Interlinear translation would connect some words to be translated together. It would do so for dogmatic expressions, too. Yet, even in languages like Russian, a lot can be translated literally.&lt;/p>
&lt;h2 id="how-can-interlinear-translations-help-you">How can Interlinear translations help you?&lt;/h2>
&lt;p>Interlinear translations can help you learn languages by reading books in your target language without the need of dictionaries, software or teachers. Ever wanted to learn Russian? Why not read some Tolstoy to do that? How about some Selma Lagerlöf, the legendary Nobel prize-winning Swedish writer, for Swedish? Interlinear translations can allow you to read such authors without a dictionary (and we all know how annoying constantly looking up a dictionary can be).&lt;/p>
&lt;p>Reading Interlinear books offers a couple of advantages:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>fast reading:&lt;/strong>
Interlinear lets you read fast: you save time by not needing to look up the dictionary, you don’t need to analyze the same sentence in two languages (like you usually need to when reading ordinary bilingual books) and you don’t have explanations inside the text, which would distract you from the original;&lt;/li>
&lt;li>&lt;strong>accurate translation:&lt;/strong>
Interlinear translates words precisely and in their context. If you have ever tried using some automatic translation services to help your reading, you must have noticed how, while many translations work alright, some are a little bit off, and it  quickly gets annoying. Interlinear translation avoids this problem, because each word is carefully chosen by a human being to have the most accurate meaning for its context;&lt;/li>
&lt;li>&lt;strong>selectivity in learning:&lt;/strong>
by being highly literal and corresponding to each word and expression, Interlinear allows  you to focus your attention on the important phrases and words you need to learn when reading. Don’t feel like learning terms for nobility in XIXth century Russia? Skip them and just quickly look at the translation! Find that you still can’t remember the word for “create” in Russian? Well, pay more attention – or
&lt;a href="https://web.archive.org/web/20161009220203/http://babelhut.com/study-methods/srs/finally-caught-up-on-anki/" target="_blank">add it to Anki&lt;/a>
if you prefer.&lt;/li>
&lt;/ul>
&lt;h2 id="where-can-you-get-interlinear-translations">Where can you get Interlinear translations?&lt;/h2>
&lt;p>&lt;a href="http://interlinearbooks.com/" title="Interlinear Books" target="_blank">InterlinearBooks.com&lt;/a>
has been focusing on translating fascinating books in various languages in the Interlinear format and selling them. We have currently released the following e-book translations:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://interlinearbooks.com/german/" title="German bilingual Interlinear translation" target="_blank">German Interlinear translation&lt;/a>
— bilingual Interlinear translation of a story by Franz Kafka, one of the most well-known German-speaking writers of the XXth century;&lt;/li>
&lt;li>&lt;a href="http://interlinearbooks.com/lithuanian/" title="Russian Interlinear Translation" target="_blank">Lithuanian Interlinear book&lt;/a>
— bilingual translation of certain short stories by Jonas Biliunas, a famous Lithuanian writer of the early XXth century;&lt;/li>
&lt;li>&lt;a href="http://interlinearbooks.com/russian/" title="Russian Interlinear Translation" target="_blank">Russian Interlinear book&lt;/a>
— an Interlinear translation of “The Death of Ivan Ilyich” by Leo Tolstoy, the big classic of Russian literature;&lt;/li>
&lt;li>&lt;a href="http://interlinearbooks.com/swedish/" title="Swedish Interlinear translation" target="_blank">Swedish Interlinear book&lt;/a>
—an Interlinear translation of the novel “The Treasure: Sir Arne’s Money” by the Swedish writer Selma Lagerlöf;&lt;/li>
&lt;li>more to come soon… (
&lt;a href="http://interlinearbooks.com/subscribe.html" title="Subscribe to the Interlinear Books mailing list" target="_blank">subscribe to the InterlinearBooks mailing list&lt;/a>
to find out what stories we will be translating)&lt;/li>
&lt;/ul>
&lt;p>InterlinearBooks is still in the beginning phase of the project and its mission is to bring literature closer to language learners. What translations we make and how we make them can still be largely influenced by our readers, and we are more than willing to hear feedback from you.&lt;/p>
&lt;p>Even if not with Interlinear translations, have you ever successfully used reading for language learning? We’d love to hear your story!&lt;/p></description></item><item><title>Anki 2.0, Esperanto, and GitHub</title><link>https://peterextexia.com/blog/anki-20-esperanto-and-github/</link><pubDate>Tue, 24 Apr 2012 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/anki-20-esperanto-and-github/</guid><description>&lt;p>Recently, I had become aware that &lt;a href="http://ankisrs.net/" target="_blank">Anki&lt;/a> 2.0 was in beta through my friend &lt;a href="http://twitter.com/tummai" target="_blank">Tom&lt;/a>, who is working on making some changes to the &lt;a href="https://github.com/thjelm/mcdsupport" target="_blank">MCD Support plugin&lt;/a> so that it supports languages like Spanish as well as it does Japanese. Despite this awareness, it never crossed my mind that I might need to update the &lt;a href="https://peterextexia.com/blog/esperanto-support-plugin-for-anki/">Esperanto Support addon&lt;/a> that I wrote a couple years ago until I received an email from &lt;a href="http://twitter.com/ankisrs" target="_blank">Damien Elmes&lt;/a>, the author of Anki, that it was time to look at doing so.&lt;/p>
&lt;p>I decided that this was the perfect opportunity to finally get on GitHub, since this project is very small and would not require a lot of work to move it to its new home. The process of getting setup on GitHub was pretty easy thanks to their excellent documentation.&lt;/p>
&lt;p>Also easy was upgrading my code to work with Anki 2.0. Although the code needed significant changes, the &lt;a href="https://addon-docs.ankiweb.net/" target="_blank">excellent documentation for writing addons for Anki 2.0&lt;/a> had everything I needed to know. If this documentation existed for the older version of Anki, I never saw it, so I&amp;rsquo;m glad that an obvious effort was put into creating it.&lt;/p>
&lt;p>The Esperanto Support addon for Anki 2.0 is available for download from &lt;a href="https://web.archive.org/web/20120829233038/http://beta.ankiweb.net/shared/info/2096916868" target="_blank">https://web.archive.org/web/20120829233038/http://beta.ankiweb.net/shared/info/2096916868&lt;/a>, or just browse the add-on list within Anki and you will find it. If you want to see the source, it now lives at &lt;a href="https://github.com/peterjcarroll/Esperanto-Anki-Plugin" target="_blank">https://github.com/peterjcarroll/Esperanto-Anki-Plugin&lt;/a>.&lt;/p></description></item><item><title>Exporting Terms to Anki from Learning With Texts</title><link>https://peterextexia.com/blog/exporting-terms-to-anki-from-learning-with-texts/</link><pubDate>Fri, 27 Jan 2012 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/exporting-terms-to-anki-from-learning-with-texts/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>If you’ve been keeping up with the language learning scene online, you have probably heard of
&lt;a href="http://lwt.sf.net" target="_blank">Learning With Texts&lt;/a>
(LWT), which is software to assist you in studying foreign language text. If this is the first you’ve heard of it, then I recommend checking out
&lt;a href="http://www.fluentin3months.com/learning-with-texts/" target="_blank">Benny’s excellent introduction to Learning With Texts&lt;/a>
, because the rest of this post won’t mean much to you if you are unfamiliar with it.  This article also assumes you are aware of
&lt;a href="http://ankisrs.net/" target="_blank">Anki&lt;/a>
, so if you’re not then you should read
&lt;a href="http://www.fluentin3months.com/spaced-repetition/" target="_blank">this introduction to Anki and Spaced Repetition&lt;/a>
and forget about forgetting ever again.&lt;/p>
&lt;p>So, you’ve been using LWT, and it’s great, but you want an easy way to take the brand new words you are learning in LWT and put them into Anki so you can retain them, right? I have made a video that shows you exactly how to do that!&lt;/p>
&lt;div class="videoWrapper">
&lt;iframe src="https://www.youtube.com/embed/TgobEh52GSc?"
frameborder="0"
allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>&lt;strong>These are the websites and other software I mention in the video:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://lwt.sf.net" target="_blank">Learning With Texts&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://ankisrs.net/" target="_blank">Anki&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.libreoffice.org/" target="_blank">LibreOffice&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.fluentin3months.com/" target="_blank">FluentIn3Months.com&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20230622040254/http://www.alljapaneseallthetime.com/blog/" target="_blank">AllJapaneseAllTheTime.com&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>For quick reference, these are roughly the steps to export terms from LWT to Anki:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>In LWT, go to Terms in the menu&lt;/li>
&lt;li>Set Text to the name of the text you are getting words from&lt;/li>
&lt;li>Set Status to Learning/-ed [1..5]&lt;/li>
&lt;li>Set Tag #1 to UNTAGGED&lt;/li>
&lt;li>Set All x Terms to Export ALL Terms (Anki)&lt;/li>
&lt;li>Open LibreOffice Calc (or OpenOffice or MS Excel)&lt;/li>
&lt;li>File -&amp;gt; Open&lt;/li>
&lt;li>Set filter to Text CSV&lt;/li>
&lt;li>Select the file you downloaded from LWT and click Open&lt;/li>
&lt;li>Select Tab Separated and Unicode&lt;/li>
&lt;li>Look at opened document&lt;/li>
&lt;li>Note which columns you want for the front and back (in the video I choose columns E and B)&lt;/li>
&lt;li>Open Anki, and open the deck you want to import into&lt;/li>
&lt;li>File -&amp;gt; Import&lt;/li>
&lt;li>Select the file you downloaded from LWT&lt;/li>
&lt;li>Set the fields (which correspond to columns in the spreadsheet) to map to the Front and Back&lt;/li>
&lt;li>Click Import. Your LWT terms are now in your Anki deck! Rejoice!&lt;/li>
&lt;li>Go back to your browser window with LWT open&lt;/li>
&lt;li>Set All x Terms to Add Tag&lt;/li>
&lt;li>Type in “anki” so that these terms won’t appear in future exports. All done!&lt;/li>
&lt;/ol></description></item><item><title>The Wonder of Critical Frequency</title><link>https://peterextexia.com/blog/the-wonder-of-critical-frequency/</link><pubDate>Fri, 07 Jan 2011 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/the-wonder-of-critical-frequency/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>About two weeks ago, in an effort to increase my
&lt;a href="https://peterextexia.com/blog/jes-mi-lernas-esperanton-yes-im-learning-esperanto">Esperanto&lt;/a>
vocabulary, I signed up for lernu.net’s
&lt;a href="https://web.archive.org/web/20110615202633/http://en.lernu.net/lernado/vortoj/tagovortoj/" target="_blank">Vorto de la Tago&lt;/a>
(Word of the Day) service, which sends a daily email with, you guessed it, the word of the day. These emails are great for
&lt;a href="https://peterextexia.com/tags/srs/">SRS&lt;/a>
because they include quite a few example sentences. The definitions are also
&lt;a href="https://web.archive.org/web/20110316062531/http://babelhut.com/languages/japanese/going-monolingual/" target="_blank">monolingual&lt;/a>
(Esperanto-only, no English translations), which I think is a good thing because I notice that when I read Esperanto text I translate it to English mentally, thus slowing me down. So now I have these great daily reminders to add some new sentences to my SRS, and they’re forcing me to use the language to describe itself rather than using the crutch called English. And what did I do with these fantastic reminders?&lt;/p>
&lt;p>&lt;strong>I let them sit in my inbox unread.&lt;/strong>&lt;/p>
&lt;p>Why did I such a thing? I did it because I procrastinate; because I was busy; because I didn’t have time right now and I’d come back to it later. And these emails continued to come in daily, reminding me that I need to get to them. This was not good for me, mentally. These emails were becoming an itch in my brain that I could feel constantly but couldn’t scratch. I didn’t want to unsubscribe from the emails either. That would be admitting failure, admitting that I’m not truly serious about learning this language.&lt;/p>
&lt;p>Yesterday, I intended to do something about these emails, but realized that I didn’t look forward to going through the dozen or so emails that have built up and copy-pasting sentences into
&lt;a href="http://ankisrs.net/" target="_blank">Anki&lt;/a>
. That would take time that I wanted to spend elsewhere. I then remembered reading about
&lt;a href="https://web.archive.org/web/20230606102813/http://www.alljapaneseallthetime.com/blog/critical-frequency-a-brand-new-way-of-looking-at-language-exposure/" target="_blank">Critical Frequency&lt;/a>
from the great Khatzumoto, which is the concept of
&lt;strong>only doing a couple minutes worth of a task at a time, but doing it many times a day&lt;/strong>
. Before going to bed last night, I setup some events in my Google Calendar, at 5 minutes before each hour from 8am to 5pm, which last 5 minutes a piece and repeat daily. These sync up with my Android phone to create a device which beeps at me at 5 minutes before each hour to remind me to do a language task of some sort, whether that’s doing my reps in Anki, or copying sentences from an email into Anki.&lt;/p>
&lt;p>&lt;strong>This system worked perfectly.&lt;/strong>
I did my daily Anki reps during these times, then copied the sentences from the emails. I only cleared half of those emails, but my mind is at ease. Using this system, I know that I will clear those emails in the next day or two, and will be able to keep up with them,
&lt;strong>stress-free&lt;/strong>
. And that is the wonder of Critical Frequency.&lt;/p></description></item><item><title>Verifying that an MP3 File is valid in Python</title><link>https://peterextexia.com/blog/verifying-that-an-mp3-file-is-valid-in-python/</link><pubDate>Fri, 10 Sep 2010 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/verifying-that-an-mp3-file-is-valid-in-python/</guid><description>&lt;p>This post is a result of many attempts at trying to find an existing solution, deciding that nothing did what I needed, and writing the code myself. Specifically, I wanted to be able to verify whether or not that a file is a valid MP3 file from Python. I did not want any dependency on non-Python code (for cross-platform reasons), nor did I need to encode, decode, play, record, or any other such operations to the file. I just needed to know if it was an MP3 or not, and that is all. Oh yeah, and the file will probably have a random file name without the .mp3 extension.&lt;/p>
&lt;p>At first, I downloaded several python libraries. The documentation was poor on most of them so I had to experiment to figure out if they did what I needed. All were failures or required something external like ffmpeg. I found library that seemed to check if an Â Â mp3 file was valid, but discovered it only worked if the file was named with the mp3 extension. A closer look at its code revealed that it was just checking the file&amp;rsquo;s mime-type based on the file extension. That was useless for me.&lt;/p>
&lt;p>So I decided that this was something I needed to do myself. With this &lt;a href="http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm" target="_blank">mp3 file format specification&lt;/a> as a reference, I sat down and wrote the code that follows, which seems to work very well. Basically the code searches for the first valid audio frame, makes sure that the frame&amp;rsquo;s header values are sane, and then checks that the second frame seems to start where it should. This code does not decode any audio in those frames.&lt;/p>
&lt;p>Here is the code:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">isMp3Valid&lt;/span>(file_path):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f &lt;span style="color:#f92672">=&lt;/span> open(file_path, &lt;span style="color:#e6db74">&amp;#39;r&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> block &lt;span style="color:#f92672">=&lt;/span> f&lt;span style="color:#f92672">.&lt;/span>read(&lt;span style="color:#ae81ff">1024&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> frame_start &lt;span style="color:#f92672">=&lt;/span> block&lt;span style="color:#f92672">.&lt;/span>find(chr(&lt;span style="color:#ae81ff">255&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> block_count &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span> &lt;span style="color:#75715e">#abort after 64k&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">while&lt;/span> len(block)&lt;span style="color:#f92672">&amp;gt;&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span> &lt;span style="color:#f92672">and&lt;/span> frame_start &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#f92672">and&lt;/span> block_count&lt;span style="color:#f92672">&amp;lt;&lt;/span>&lt;span style="color:#ae81ff">64&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> block &lt;span style="color:#f92672">=&lt;/span> f&lt;span style="color:#f92672">.&lt;/span>read(&lt;span style="color:#ae81ff">1024&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> frame_start &lt;span style="color:#f92672">=&lt;/span> block&lt;span style="color:#f92672">.&lt;/span>find(chr(&lt;span style="color:#ae81ff">255&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> block_count&lt;span style="color:#f92672">+=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> frame_start &lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> frame_hdr &lt;span style="color:#f92672">=&lt;/span> block[frame_start:frame_start&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> frame_hdr[&lt;span style="color:#ae81ff">0&lt;/span>] &lt;span style="color:#f92672">==&lt;/span> chr(&lt;span style="color:#ae81ff">255&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mpeg_version &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> layer_desc &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> uses_crc &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> padding &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> frame_length &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> is_valid:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0xe0&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0xe0&lt;/span> &lt;span style="color:#75715e">#validate the rest of the frame_sync bits exist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> is_valid:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0x18&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mpeg_version &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;2.5&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">elif&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0x18&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mpeg_version &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;2&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">elif&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0x18&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0x18&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mpeg_version &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> is_valid:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> layer_desc &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Layer III&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">elif&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> layer_desc &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Layer II&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">elif&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> layer_desc &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Layer I&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> is_valid:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> uses_crc &lt;span style="color:#f92672">=&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">1&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_chart &lt;span style="color:#f92672">=&lt;/span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">0&lt;/span>,&lt;span style="color:#ae81ff">0&lt;/span>,&lt;span style="color:#ae81ff">0&lt;/span>,&lt;span style="color:#ae81ff">0&lt;/span>,&lt;span style="color:#ae81ff">0&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">32&lt;/span>,&lt;span style="color:#ae81ff">32&lt;/span>,&lt;span style="color:#ae81ff">32&lt;/span>,&lt;span style="color:#ae81ff">32&lt;/span>,&lt;span style="color:#ae81ff">8&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">64&lt;/span>,&lt;span style="color:#ae81ff">48&lt;/span>,&lt;span style="color:#ae81ff">40&lt;/span>,&lt;span style="color:#ae81ff">48&lt;/span>,&lt;span style="color:#ae81ff">16&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">96&lt;/span>,&lt;span style="color:#ae81ff">56&lt;/span>,&lt;span style="color:#ae81ff">48&lt;/span>,&lt;span style="color:#ae81ff">56&lt;/span>,&lt;span style="color:#ae81ff">24&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">128&lt;/span>,&lt;span style="color:#ae81ff">64&lt;/span>,&lt;span style="color:#ae81ff">56&lt;/span>,&lt;span style="color:#ae81ff">64&lt;/span>,&lt;span style="color:#ae81ff">32&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">160&lt;/span>,&lt;span style="color:#ae81ff">80&lt;/span>,&lt;span style="color:#ae81ff">64&lt;/span>,&lt;span style="color:#ae81ff">80&lt;/span>,&lt;span style="color:#ae81ff">40&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">192&lt;/span>,&lt;span style="color:#ae81ff">96&lt;/span>,&lt;span style="color:#ae81ff">80&lt;/span>,&lt;span style="color:#ae81ff">96&lt;/span>,&lt;span style="color:#ae81ff">40&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">224&lt;/span>,&lt;span style="color:#ae81ff">112&lt;/span>,&lt;span style="color:#ae81ff">96&lt;/span>,&lt;span style="color:#ae81ff">112&lt;/span>,&lt;span style="color:#ae81ff">56&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">256&lt;/span>,&lt;span style="color:#ae81ff">128&lt;/span>,&lt;span style="color:#ae81ff">112&lt;/span>,&lt;span style="color:#ae81ff">128&lt;/span>,&lt;span style="color:#ae81ff">64&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">288&lt;/span>,&lt;span style="color:#ae81ff">160&lt;/span>,&lt;span style="color:#ae81ff">128&lt;/span>,&lt;span style="color:#ae81ff">144&lt;/span>,&lt;span style="color:#ae81ff">80&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">320&lt;/span>,&lt;span style="color:#ae81ff">192&lt;/span>,&lt;span style="color:#ae81ff">160&lt;/span>,&lt;span style="color:#ae81ff">160&lt;/span>,&lt;span style="color:#ae81ff">96&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">352&lt;/span>,&lt;span style="color:#ae81ff">224&lt;/span>,&lt;span style="color:#ae81ff">192&lt;/span>,&lt;span style="color:#ae81ff">176&lt;/span>,&lt;span style="color:#ae81ff">112&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">384&lt;/span>,&lt;span style="color:#ae81ff">256&lt;/span>,&lt;span style="color:#ae81ff">224&lt;/span>,&lt;span style="color:#ae81ff">192&lt;/span>,&lt;span style="color:#ae81ff">128&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">416&lt;/span>,&lt;span style="color:#ae81ff">320&lt;/span>,&lt;span style="color:#ae81ff">256&lt;/span>,&lt;span style="color:#ae81ff">224&lt;/span>,&lt;span style="color:#ae81ff">144&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">448&lt;/span>,&lt;span style="color:#ae81ff">384&lt;/span>,&lt;span style="color:#ae81ff">320&lt;/span>,&lt;span style="color:#ae81ff">256&lt;/span>,&lt;span style="color:#ae81ff">160&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_index &lt;span style="color:#f92672">=&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">2&lt;/span>]) &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> bitrate_index&lt;span style="color:#f92672">==&lt;/span>&lt;span style="color:#ae81ff">15&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> mpeg_version &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;1&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> layer_desc &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Layer I&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">elif&lt;/span> layer_desc &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Layer II&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> layer_desc &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Layer I&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bitrate &lt;span style="color:#f92672">=&lt;/span> bitrate_chart[bitrate_index][bitrate_col]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> bitrate &lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> is_valid:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate_chart &lt;span style="color:#f92672">=&lt;/span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">44100&lt;/span>, &lt;span style="color:#ae81ff">22050&lt;/span>, &lt;span style="color:#ae81ff">11025&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">48000&lt;/span>, &lt;span style="color:#ae81ff">24000&lt;/span>, &lt;span style="color:#ae81ff">12000&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#ae81ff">32000&lt;/span>, &lt;span style="color:#ae81ff">16000&lt;/span>, &lt;span style="color:#ae81ff">8000&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate_index &lt;span style="color:#f92672">=&lt;/span> (ord(frame_hdr[&lt;span style="color:#ae81ff">2&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0xc&lt;/span>) &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> sample_rate_index &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> mpeg_version &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;1&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">elif&lt;/span> mpeg_version &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;2&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate_col &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sample_rate &lt;span style="color:#f92672">=&lt;/span> sample_rate_chart[sample_rate_index][sample_rate_col]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> is_valid:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> padding &lt;span style="color:#f92672">=&lt;/span> ord(frame_hdr[&lt;span style="color:#ae81ff">2&lt;/span>]) &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> padding_length &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> layer_desc &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Layer I&amp;#39;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> padding:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> padding_length &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> frame_length &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#ae81ff">12&lt;/span> &lt;span style="color:#f92672">*&lt;/span> bitrate &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#ae81ff">1000&lt;/span> &lt;span style="color:#f92672">/&lt;/span> sample_rate &lt;span style="color:#f92672">+&lt;/span> padding_length) &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> padding:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> padding_length &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> frame_length &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">144&lt;/span> &lt;span style="color:#f92672">*&lt;/span> bitrate &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#ae81ff">1000&lt;/span> &lt;span style="color:#f92672">/&lt;/span> sample_rate &lt;span style="color:#f92672">+&lt;/span> padding_length
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> frame_length &lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Verify the next frame&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span>(frame_start &lt;span style="color:#f92672">+&lt;/span> frame_length &lt;span style="color:#f92672">&amp;lt;&lt;/span> len(block)):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> block[frame_start &lt;span style="color:#f92672">+&lt;/span> frame_length] &lt;span style="color:#f92672">==&lt;/span> chr(&lt;span style="color:#ae81ff">255&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> offset &lt;span style="color:#f92672">=&lt;/span> (frame_start &lt;span style="color:#f92672">+&lt;/span> frame_length) &lt;span style="color:#f92672">-&lt;/span> len(block)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> block &lt;span style="color:#f92672">=&lt;/span> f&lt;span style="color:#f92672">.&lt;/span>read(&lt;span style="color:#ae81ff">1024&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> len(block) &lt;span style="color:#f92672">&amp;gt;&lt;/span> offset:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> block[offset] &lt;span style="color:#f92672">==&lt;/span> chr(&lt;span style="color:#ae81ff">255&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> is_valid &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f&lt;span style="color:#f92672">.&lt;/span>close()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> is_valid
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Jes, Mi Lernas Esperanton - Yes, I'm Learning Esperanto</title><link>https://peterextexia.com/blog/jes-mi-lernas-esperanton-yes-im-learning-esperanto/</link><pubDate>Tue, 31 Aug 2010 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/jes-mi-lernas-esperanton-yes-im-learning-esperanto/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;strong>Consider this an admission of guilt.&lt;/strong>
I am learning
&lt;a href="http://en.wikipedia.org/wiki/Esperanto" target="_blank">Esperanto&lt;/a>
. Esperanto has both its
&lt;a href="https://web.archive.org/web/20100731132233/http://www.yearlyglot.com/2010/07/five-failures-of-esperanto/" target="_blank">critics&lt;/a>
and
&lt;a href="http://www.fluentin3months.com/2-weeks-of-esperanto/" target="_blank">proponents&lt;/a>
in the language learning community, which initially bothered me. Nobody has criticized me for wanting to learn Spanish, nor has anyone (including myself) felt the need to defend that desire. I expect that the same would be true if I suddenly decided to learn German, Hindi, Arabic, or Navajo. Yet, for some reason, Esperanto draws in critics and defenders. This has kept me from posting about it here, but now I’ve decided that my decisions don’t need to be defended, and criticisms are easily ignored.&lt;/p>
&lt;p>I first heard about Esperanto from a friend in my high school German class. He didn’t know the language but he knew of it, and while the idea was fascinating, I wasn’t interested enough in languages at the time. In the past year or so I’ve become more and more curious about Esperanto but I didn’t want to sidetrack any progress I was making in Spanish. Just over four months ago, I decided that while I am not yet fluent in Spanish, I am comfortable enough with it to attempt to learn Esperanto using Spanish. So far, I don’t regret this decision at all. Spanish is established in my head well enough that I don’t confuse any of my new Esperanto vocabulary with it or vice-versa.&lt;/p>
&lt;p>&lt;strong>Learning Spanish is still my primary focus&lt;/strong>
, but sometimes when I feel like I’m starting to burn out in Spanish, I switch to studying Esperanto. Esperanto is an exciting language for me, and studying it seems to help me regain my enthusiasm for Spanish as well. I feel that my Spanish has improved at a faster rate since I started studying Esperanto.&lt;/p>
&lt;p>&lt;strong>Resources&lt;/strong>&lt;/p>
&lt;p>So far I’ve only been using online resources to learn Esperanto, but I have just recently purchased a couple of books as well. This is what I’ve been using so far:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://lernu.net/" target="_blank">lernu.net&lt;/a>
– I’ve primarily been using lernu.net in Spanish, so that my Spanish will improve as I study Esperanto. I spent a lot of time with
their Esperanto puzzle tutorial
, which appealed to my style of learning a lot. Lernu.net also has forums, reading material, a dictionary, and other useful materials to help you learn.&lt;/li>
&lt;li>&lt;a href="https://peterextexia.com/blog/use-tatoebaorg-for-mining-sentences">Tatoeba.org&lt;/a>
– This site is great to find sentences using a new word in many languages, including Esperanto. It currently has over 10,000 sentences in Esperanto. I take the sentences I find here and put them in my SRS. Many of these sentences are also translated to Spanish, and so if I find the Spanish sentence useful, I will copy it into my Spanish SRS deck as well.&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/product/160620906X?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=160620906X" target="_blank">A Complete Grammar of Esperanto&lt;/a>
– This is one of the two books I just purchased. I bought this to help expand my vocabulary, explain a few of the concepts I don’t quite understand just yet, and also because this book contains graded reading material. I wanted reading material in Esperanto, in printed form, but I also wanted something that would start at a simple level and build up from there. Since receiving this book, I’ve discovered that the text of it is in the public domain, and can be found for free from
&lt;a href="http://www.gutenberg.org/etext/7787" target="_blank">Project Gutenberg&lt;/a>
. I’ve downloaded the text version to make copying sentences into my SRS a simple matter of copy and paste.&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/product/0939785064?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0939785064" target="_blank">Esperanto Learning and Using the International Language&lt;/a>
– This is the other book I purchased, and I bought it for mostly the same reasons I bought the previous book. This book is more modern, and also contains a section giving the history of the Esperanto language and community. I purchased two books because I wanted to see if there was one book I preferred over the other, and also to push my Amazon order over $25 so I could get free shipping. =)&lt;/li>
&lt;li>&lt;a href="http://www.esperanto.mv.ru/Ek/" target="_blank">Ek&lt;/a>
– If you are using Windows, this tool is handy for helping to type the Esperanto special characters: ĉ, ĝ, ĥ, ĵ, ŝ, and ŭ. The only problem I’ve had with Ek is that it doesn’t work correctly with
&lt;a href="http://ichi2.net/anki/" target="_blank">Anki&lt;/a>
, which is why I built:&lt;/li>
&lt;li>An
&lt;a href="https://peterextexia.com/blog/esperanto-support-plugin-for-anki/">Esperanto Support plugin for Anki&lt;/a>
– Simply install this plugin in Anki, configure your deck to use the Esperanto card model, and after that you can type in cx, gx, hx, jx, sx, and ux in your cards, which the plugin will automatically convert to ĉ, ĝ, ĥ, ĵ, ŝ, and ŭ.&lt;/li>
&lt;li>If you are a Linux user, you can use an Esperanto keyboard layout that is usually already built-in with their distribution of choice. Unfortunately, I don’t own a Mac so I have no idea what tools exist for the Mac. If you know of one, please comment about it.&lt;/li>
&lt;/ul>
&lt;p>I’m curious to hear about other resources that people are using to learn Esperanto. If you have any, please leave a comment and tell me about it!&lt;/p></description></item><item><title>Use tatoeba.org for mining sentences</title><link>https://peterextexia.com/blog/use-tatoebaorg-for-mining-sentences/</link><pubDate>Thu, 26 Aug 2010 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/use-tatoebaorg-for-mining-sentences/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Usually when I am reading in Spanish, and I find a word I don’t know and can’t figure out from context, I look it up in a dictionary. Often the sentence I originally found that word in is long and/or complex, which doesn’t make it a good candidate for entry in my SRS, so I will usually enter the example sentence in the dictionary into my SRS instead. But what if there is no example sentence for that word? This dilemma happens with at least half of the words I look up. Until recently, I didn’t have a good solution. Most of the time I would just let it go and later forget the word, causing myself to look it up again.&lt;/p>
&lt;p>Now I take that word and search
&lt;a href="http://tatoeba.org/" target="_blank">tatoeba.org&lt;/a>
for sentences containing that word. And most of the time (at least with Spanish), I can find a sentence with that word and copy it to a new card in my SRS. Tatoeba.org supports a lot of languages, with 1,000 or more sentences in at least 22 of those languages. As of this writing there are 10,140 sentences in Spanish, 41,850 in French, and 152,705 in Japanese!&lt;/p>
&lt;p>I have noticed that there are audio icons next to the sentences on tatoeba.org, but very few actually have audio available. While you are mining sentences from there, take them over to
&lt;a href="http://rhinospike.com" target="_blank">RhinoSpike.com&lt;/a>
and find a native speaker to read them to you!&lt;/p></description></item><item><title>Esperanto Support Plugin for Anki</title><link>https://peterextexia.com/blog/esperanto-support-plugin-for-anki/</link><pubDate>Thu, 05 Aug 2010 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/esperanto-support-plugin-for-anki/</guid><description>&lt;p>So I decided to learn &lt;a href="http://lernu.net/" target="_blank">Esperanto&lt;/a>, which as an avid user of the &lt;a href="http://en.wikipedia.org/wiki/Spaced_repetition" target="_blank">SRS&lt;/a> application &lt;a href="http://ichi2.net/anki/" target="_blank">Anki&lt;/a>, meant I needed to either enter Esperanto&amp;rsquo;s special characters &lt;em>(ĉ, ĝ, ĥ, ĵ, ŝ, ŭ­)&lt;/em> into my flash cards, which can&amp;rsquo;t easily be typed with the &lt;a href="https://peterextexia.com/blog/why-you-should-be-using-the-us-international-keyboard-layout/">US International keyboard layout&lt;/a>, or I could deal with the ugly &amp;ldquo;x method&amp;rdquo; workaround &lt;em>(cx, gx, hx, jx, sx, ux)&lt;/em>. At first, I was only creating Esperanto cards from my Linux computers at home, which let me use an Esperanto keyboard layout to type in the special characters. Pretty soon though, I found myself creating cards from my Windows machine at work during breaks. There is no Esperanto keyboard layout in Windows by default, so I tried to install some third party keyboard layouts without success. I eventually came across a program called &lt;a href="http://www.esperanto.mv.ru/Ek/" target="_blank">Ek&lt;/a>, which seemed to do the job of letting me type special characters, except in Anki where it would only type &amp;ldquo;ĉ&amp;rdquo;. So I just dealt with the &amp;ldquo;x method&amp;rdquo; and was typing words like &lt;em>vojagxas&lt;/em> instead of &lt;em>vojaĝas&lt;/em>. I don&amp;rsquo;t know why, but after a while all the x&amp;rsquo;s began to really bother me. I didn&amp;rsquo;t want to see &lt;em>mangxi&lt;/em> in my flash cards, it just doesn&amp;rsquo;t seem as natural as &lt;em>manĝi&lt;/em> does. So I did what any other software developer would do&amp;hellip;.&lt;/p>
&lt;p>I wrote some code.&lt;/p>
&lt;p>Specifically, I wrote a plugin for Anki which converts all those terrible &lt;em>cx&lt;/em>, &lt;em>gx&lt;/em>, &lt;em>hx&lt;/em>, &lt;em>jx&lt;/em>, &lt;em>sx&lt;/em>, and &lt;em>ux&lt;/em> combinations into the aesthetically pleasing &lt;em>ĉ&lt;/em>, &lt;em>ĝ&lt;/em>, &lt;em>ĥ&lt;/em>, &lt;em>ĵ&lt;/em>, &lt;em>ŝ&lt;/em> and &lt;em>ŭ­­&lt;/em> characters. Prior to this I&amp;rsquo;ve never written a plugin for Anki, and even now I claim no expertise. Anki is written in Python, and so are its plugins. I found a plugin that adds some support for the German language to Anki and used that as a model to build my plugin.&lt;/p>
&lt;p>To use the Esperanto plugin, open Anki, go to File -&amp;gt; Download -&amp;gt; Shared Plugin. Type &amp;ldquo;esperanto&amp;rdquo; into the search box. My plugin is the only one that matches that search, so it should be highlighted already. The plugin is called &amp;ldquo;Esperanto Support for Anki&amp;rdquo;. Click Ok and it should download and install for you. In your deck, when you want to add a card for Esperanto, make sure the card is using the &amp;ldquo;Esperanto&amp;rdquo; model rather than &amp;ldquo;Basic&amp;rdquo; model.&lt;/p>
&lt;p>I&amp;rsquo;m open to suggestions and feedback, and if you are curious about the code at all, open up your Anki plugins folder and take it a look. The code is right there and it&amp;rsquo;s very simple.&lt;/p></description></item><item><title>Foreign Language Audio on Demand at RhinoSpike.com</title><link>https://peterextexia.com/blog/foreign-language-audio-on-demand-at-rhinospikecom/</link><pubDate>Thu, 15 Apr 2010 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/foreign-language-audio-on-demand-at-rhinospikecom/</guid><description>&lt;p>&lt;a href="http://rhinospike.com" target="_blank">&lt;img src="https://peterextexia.com/site_media-static-images-rs_logo_60.png" alt="RhinoSpike" title="RhinoSpike">&lt;/a>&lt;/p>
&lt;p>So aside from my day job and my family, I&amp;rsquo;ve been keeping myself busy since December working on a project with my friend &lt;a href="http://twitter.com/tummai" target="_blank">Thomas&lt;/a> that we&amp;rsquo;ve released to the public just a few weeks ago. That project is &lt;a href="http://rhinospike.com/" target="_blank">RhinoSpike&lt;/a>, a web site where people can submit text in a foreign language to be read aloud and recorded by native speakers of that language. In return, people can read and record themselves reading texts submitted in their native language for students of that language. It&amp;rsquo;s swap meet of mp3 files, only instead of copyrighted music, these mp3 files contain the voice and sound of many languages worldwide! I consider it my small and humble contribution to the goal of bringing peace and goodwill towards men through learning each others language.&lt;/p>
&lt;p>The entire venture is a part-time deal for myself and Thomas, because we both have day jobs. So we had to maximize the effect of our efforts by building on a platform that provides all of the basic stuff that just about any website needs these days. That platform for us is &lt;a href="http://pinaxproject.com/" target="_blank">Pinax&lt;/a>, which is itself built on top of &lt;a href="http://www.djangoproject.com/" target="_blank">Django&lt;/a> in the &lt;a href="https://peterextexia.com/tags/python/">Python&lt;/a> programming language. I can&amp;rsquo;t say enough good things about Pinax because it let us focus on what was unique to our site, while Pinax handled user authentication, &lt;a href="http://openid.net/" target="_blank">OpenID&lt;/a>, avatars, &lt;a href="http://en.gravatar.com/" target="_blank">Gravatar&lt;/a>, social network features like friends and messaging, announcements, administration, error handling, internationalization, and so much more that we actually had to strip out some of the built-in features because we felt it was too much for our site. These features are very modular and allowed us to essentially turn them on and off as if by a switch.&lt;/p>
&lt;p>This project has been a great learning experience for me and continues to be so. In just three weeks we have almost 900 users, who mostly have found their way to our site via word of mouth on &lt;a href="http://twitter.com/rhino_spike" target="_blank">Twitter&lt;/a> and some &lt;a href="http://www.tofugu.com/2010/04/09/getting-japanese-people-to-record-japanese-audio-for-you-with-rhinospike/" target="_blank">great&lt;/a> &lt;a href="https://web.archive.org/web/20161018154616/http://www.spanish-only.com/2010/04/weekly-newsletter-6-7/" target="_blank">language&lt;/a> &lt;a href="https://web.archive.org/web/20100427160902/http://www.fluentin3months.com/language-hacking-links/" target="_blank">learning&lt;/a> &lt;a href="https://web.archive.org/web/20220519160034/http://www.alljapaneseallthetime.com/blog/ajatt-twitter-tweets-for-week-of-2010-04-03/" target="_blank">blogs&lt;/a>. These users have been making many suggestions to make RhinoSpike even better, some of which we&amp;rsquo;ve already implemented and many more which we plan to do soon.&lt;/p>
&lt;p>If you haven&amp;rsquo;t done so already, check &lt;a href="http://rhinospike.com/" target="_blank">RhinoSpike&lt;/a> out, and tell me what you think! I&amp;rsquo;d love to hear it!&lt;/p></description></item><item><title>I am starting to learn Japanese, not for fluency, but for travel.</title><link>https://peterextexia.com/blog/i-am-starting-to-learn-japanese-not-for-fluency-but-for-travel/</link><pubDate>Thu, 11 Mar 2010 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/i-am-starting-to-learn-japanese-not-for-fluency-but-for-travel/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Within the last few months, I decided that I am finally going to get some international travel under my belt. I’m going to save my money, and I’m going to Japan. The actual trip probably won’t happen until next year, but it’s going to happen, and I’ve already made good progress in saving up for the trip. Why Japan? Mostly because
&lt;a href="https://twitter.com/tummai" target="_blank">Thomas&lt;/a>, my friend and fellow Babelhut.com writer, lives there with his wife and child. What better way to travel internationally than to get someone you know to show you around?&lt;/p>
&lt;p>Because of this decision, my girlfriend and I have decided to start learning Japanese. Spanish is still my primary language of study, and that won’t change, so we plan to only study Japanese for one hour a week. We don’t intend to become fluent speakers, we just want to be able to get around. We just started this and have only studied twice now, but so far we have been having fun.&lt;/p>
&lt;p>We are focusing mostly on learning to communicate verbally, and in our first sesssion we sampled both
&lt;a href="http://www.ikindalikelanguages.com/courses/JapaneseBasicsAudio/" target="_blank">Carl Kenner’s free Japanese audio course&lt;/a>, and the
&lt;a href="http://www.amazon.com/gp/product/0071614362?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0071614362" target="_blank">Michel Thomas Method Japanese for Beginners&lt;/a>. Carl Kenner’s course teaches writing along with speaking, while the Michel Thomas course is focused entirely on speaking. We found that Carl Kenner moved a little to quickly for us to keep up, and decided to stick with the Michel Thomas course for now.&lt;/p>
&lt;p>I was surprised at just how much fun learning a brand new language together with my girlfriend is. We both laugh at our silly mistakes, while simultaneously being very encouraging to each other. During our second session, we needed to say “&lt;em>kore o kudasai&lt;/em>,” which means something like “please may I have this?” My girlfriend couldn’t remember how to say it, so I held up a piece of mail and said “&lt;em>correo&lt;/em>” which in Spanish means “mail”, but sounds very similar to the Japanese “&lt;em>kore o&lt;/em>.” This got a laugh out of her and now she remembers that “&lt;em>kore&lt;/em>” means “this” in Japanese.&lt;/p>
&lt;p>I hope we continue to have this much fun with Japanese, because we are both looking forward to our next Japanese session!&lt;/p>
&lt;p>One last thing. I know it’s been very quiet around here. Thomas and I have been working on something big, and soon we’ll be able to tell you all about it! I’m actually very excited about this, but I can’t say more yet! Stay tuned…&lt;/p></description></item><item><title>Spanish Verb Highlight: Oír</title><link>https://peterextexia.com/blog/spanish-verb-highlight-o%C3%ADr/</link><pubDate>Tue, 12 Jan 2010 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/spanish-verb-highlight-o%C3%ADr/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2010/01/1359721335_9b9dfffb7d_m.jpg" alt="oír" title="oír">
Welcome to the first post of a new series at Babelhut.com, Spanish Verb Highlight. This series will highlight a different Spanish verb in every post, and provide several example sentences showing how the verb is used in different tenses.&lt;/p>
&lt;p>The first verb highlighted is
&lt;strong>oír&lt;/strong>
, which means to hear, or to listen to. Oír is an irregular verb, and one that I personally have trouble remembering how to conjugate. You have probably seen or heard oír in the form of
&lt;strong>¡oye!&lt;/strong>
, which is used to get someone’s attention in the same way that we would say “hey!” in English.&lt;/p>
&lt;p>Let’s look at some example sentences, some of which I have pulled from the
&lt;a href="https://web.archive.org/web/20100427035500/http://sentences.spanish-only.com/" target="_blank">Spanish-English Sentence Database&lt;/a>
:&lt;/p>
&lt;p>&lt;strong>He tenido que dormir con tapones para no oír tus ronquidos.&lt;/strong>&lt;/p>
&lt;p>&lt;em>I’ve had to sleep with earplugs so I wouldn’t hear your snores.&lt;/em>&lt;/p>
&lt;p>&lt;strong>Oigo las sirenas muy cerca.&lt;/strong>&lt;/p>
&lt;p>&lt;em>I hear sirens very close by.&lt;/em>&lt;/p>
&lt;p>&lt;strong>Se oyeron unos gritos de dolor.&lt;/strong>&lt;/p>
&lt;p>&lt;em>They heard some painful screams.&lt;/em>&lt;/p>
&lt;p>&lt;strong>¿Has oído lo que han dicho las noticias?&lt;/strong>&lt;/p>
&lt;p>&lt;em>Have you heard what they’re saying on the news?&lt;/em>&lt;/p>
&lt;p>&lt;strong>Creo que oiga algo.&lt;/strong>&lt;/p>
&lt;p>&lt;em>I think I hear something.&lt;/em>&lt;/p>
&lt;p>&lt;strong>¿Qué estás oyendo?&lt;/strong>&lt;/p>
&lt;p>&lt;em>What are you listening to?&lt;/em>&lt;/p>
&lt;p>&lt;strong>Te oyó la primera vez.&lt;/strong>&lt;/p>
&lt;p>&lt;em>He heard you the first time.&lt;/em>&lt;/p>
&lt;p>Add these sentences to the
&lt;a href="https://peterextexia.com/tags/srs/">SRS&lt;/a>
of your choice so that you don’t forget how to use this verb!&lt;/p>
&lt;p>&lt;em>Photo credit:
&lt;a href="https://web.archive.org/web/20190131120036/https://www.flickr.com/photos/carbonnyc/1359721335/" target="_blank">CarbonNYC&lt;/a>&lt;/em>&lt;/p></description></item><item><title>¡Muchas gracias, Time Warner Cable! How did you know I am studying Spanish?</title><link>https://peterextexia.com/blog/muchas-gracias-time-warner-cable-how-did-you-know-i-am-studying-spanish/</link><pubDate>Thu, 17 Dec 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/muchas-gracias-time-warner-cable-how-did-you-know-i-am-studying-spanish/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Today I received yet another envelope from Time Warner Cable addressed to “Peter Carroll or Current Resident,” which was seconds from being thrown in the trash can when I decided to open it. This is what was inside:&lt;/p>
&lt;p>&lt;a href="https://peterextexia.com/2009/12/twc_flier1.png" title="Click to enlarge">&lt;img src="https://peterextexia.com/2009/12/twc_flier1-300x232.png" alt="twc_flier1" title="twc_flier1">&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://peterextexia.com/2009/12/twc_flier2.png" title="Click to enlarge">&lt;img src="https://peterextexia.com/2009/12/twc_flier2-300x232.png" alt="twc_flier2" title="twc_flier2">&lt;/a>&lt;/p>
&lt;p>I was surprised to receive the advertisement in Spanish. I don’t think the neighborhood I live in has a high concentration of Hispanic people, though I could be wrong about that. All my previous dealing with TWC has been in English. Still, it was nice to read it before I threw it away, and realize I understood most of it without any trouble. I did have to look up
&lt;em>sorteo&lt;/em>
though, which looks odd to me the way it was conjugated, but I’m no expert.&lt;/p>
&lt;p>Has anyone else ever received mail in an unexpected language? Talk about it in the comments!&lt;/p></description></item><item><title>Barra de Español 1.2 is now available!</title><link>https://peterextexia.com/blog/barra-de-espanol-12-is-now-available/</link><pubDate>Fri, 20 Nov 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/barra-de-espanol-12-is-now-available/</guid><description>&lt;p>The newest version of Barra de Español, version 1.2, is now available! See details about what&amp;rsquo;s new in this version in &lt;a href="https://peterextexia.com/blog/barra-de-espa%C3%B1ol-12-is-now-available/">my post on Babelhut.com&lt;/a>.&lt;/p></description></item><item><title>Barra de Español 1.2 is now available!</title><link>https://peterextexia.com/blog/barra-de-espa%C3%B1ol-12-is-now-available/</link><pubDate>Fri, 20 Nov 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/barra-de-espa%C3%B1ol-12-is-now-available/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>The latest version of Barra de Español is now available from
&lt;a href="https://addons.mozilla.org/" target="_blank">addons.mozilla.org&lt;/a>
! Those of you who already have an older version installed should see an update notification in Firefox soon, if you haven’t already.&lt;/p>
&lt;p>What’s new in 1.2? The biggest new feature is the ability to find pronunciations of Spanish words. You can select a word on any web page, right-click on it, and choose “Pronunciar,” or you may type in the word into the toolbar’s search box and select “Pronunciar” from the dropdown to the right. The pronunciations are found on
&lt;a href="http://es.forvo.com/" target="_blank">forvo.com&lt;/a>
.&lt;/p>
&lt;p>Version 1.2 also adds support for Firefox 3.6, and drops support for Firefox versions below 2.0. Inserting the accented characters now works in rich text email editors such as Gmail and Yahoo mail. I’ve also added a new video link to
&lt;a href="http://fomny.com/Espana-tv.php" target="_blank">fomny.com&lt;/a>
.&lt;/p>
&lt;p>Check it out and feel free to leave feedback in the comments!&lt;/p></description></item><item><title>Simulating a keypress in Firefox</title><link>https://peterextexia.com/blog/simulating-a-keypress-in-firefox/</link><pubDate>Tue, 27 Oct 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/simulating-a-keypress-in-firefox/</guid><description>&lt;p>Last night, I was working on &lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">Barra de Español&lt;/a> and had spent quite a bit of time on Google looking for how to simulate a keypress in Firefox. It&amp;rsquo;s as simple as creating an event and dispatching it, though how to do so is not exactly intuitive. I needed to be able to do this because inserting accented characters from Barra de Español was not working in the message body textbox in Gmail and other webmail apps.&lt;/p>
&lt;p>The way I inserted the characters before was to find the currently focused element, assume it was a textbox, and modify its value using the selectionStart property to know where the cursor was. Once I learned that the message body textbox could not be found using &lt;code>document.commandDispatcher.focusedElement&lt;/code>, (that&amp;rsquo;s what &lt;code>if(!focused) focused = document.commandDispatcher.focusedWindow.document.activeElement;&lt;/code> is all about) I found that the element used by Gmail for the message body wasn&amp;rsquo;t even a textbox, and didn&amp;rsquo;t have a value or selectionStart properties.&lt;/p>
&lt;p>So the solution is to create a keypress event and dispatch it, like so:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">insertchar&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#66d9ef">function&lt;/span>(&lt;span style="color:#a6e22e">ch&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">focused&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">commandDispatcher&lt;/span>.&lt;span style="color:#a6e22e">focusedElement&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span>(&lt;span style="color:#f92672">!&lt;/span>&lt;span style="color:#a6e22e">focused&lt;/span>) &lt;span style="color:#a6e22e">focused&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">commandDispatcher&lt;/span>.&lt;span style="color:#a6e22e">focusedWindow&lt;/span>.document.&lt;span style="color:#a6e22e">activeElement&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">var&lt;/span> &lt;span style="color:#a6e22e">evt&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">createEvent&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;KeyboardEvent&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">evt&lt;/span>.&lt;span style="color:#a6e22e">initKeyEvent&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;keypress&amp;#34;&lt;/span>, &lt;span style="color:#66d9ef">true&lt;/span>, &lt;span style="color:#66d9ef">true&lt;/span>, &lt;span style="color:#66d9ef">null&lt;/span>, &lt;span style="color:#66d9ef">false&lt;/span>, &lt;span style="color:#66d9ef">false&lt;/span>, &lt;span style="color:#66d9ef">false&lt;/span>, &lt;span style="color:#66d9ef">false&lt;/span>, &lt;span style="color:#ae81ff">0&lt;/span>, &lt;span style="color:#a6e22e">ch&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">focused&lt;/span>.&lt;span style="color:#a6e22e">dispatchEvent&lt;/span>(&lt;span style="color:#a6e22e">evt&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>One important thing to note is that the parameter ch is not a character value, but an integer containing the character code you want to insert. So, for example, to insert the character &amp;lsquo;á&amp;rsquo;, ch must be the value 225. To find the values I needed I used the wonderful character lookup tool at &lt;a href="http://entity-lookup.leftlogic.com/" target="_blank">http://entity-lookup.leftlogic.com/&lt;/a>.&lt;/p>
&lt;p>&lt;strong>Bonus tip:&lt;/strong> If you are developing a Firefox extension and are using a text file in your profile&amp;rsquo;s extension directory to point to the folder where your code is located, and you move your code to another folder, you will discover that Firefox won&amp;rsquo;t load your extension, even though you edited the text file with the new location. The fix is to find a file in your profile directory called extensions.cache and delete it. This frustrated me for at least an hour last night, and Google failed me on this.&lt;/p></description></item><item><title>Update on my Android Developer Challenge 2 attempt</title><link>https://peterextexia.com/blog/update-on-my-android-developer-challenge-2-attempt/</link><pubDate>Tue, 08 Sep 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/update-on-my-android-developer-challenge-2-attempt/</guid><description>&lt;p>So the deadline for the &lt;a href="https://peterextexia.com/blog/my-development-plan-for-the-android-developer-challenge-2/">Android Developer Challenge 2&lt;/a> has come and gone, and I did not submit an entry. It wasn&amp;rsquo;t for a lack of trying though. This was entirely a spare time project and I worked on it 3 to 5 days a week for an hour or more at a time. I&amp;rsquo;m still not comfortable going into specifics about the project because I think it&amp;rsquo;s still a viable project. I do still hope to release it to the public at some point.&lt;/p>
&lt;p>I will say that I was able to write one of the major features completely, and nearly completed the second major feature. The main reason I didn&amp;rsquo;t complete the second feature is because it required scraping some data from a web site, and that web site made some of the data difficult to parse by putting it into an image. I didn&amp;rsquo;t discover this until about 2 nights before the deadline. Without the second feature I didn&amp;rsquo;t feel the application was compelling enough to enter into the contest, which is too bad. I think I will be able to get the data I need from an alternate source, so I will resume development of this app and hopefully release it to the public later.&lt;/p>
&lt;p>I didn&amp;rsquo;t realize it at the time, but working on this project had increased my stress level quite a bit. I enjoyed working on it, and I&amp;rsquo;m beginning to appreciate how the Android SDK works, but the deadline was always in the back of my mind. When I decided to call it off, I felt a quite noticeable relief. I don&amp;rsquo;t think the stress builds as much for deadlines at my day job, but having to focus my spare time on one project to the exclusion of others was too much for me. I think I need to keep my side projects deadline-free from now on.&lt;/p></description></item><item><title>Barra de Español has been accepted to Mozilla's public addon list</title><link>https://peterextexia.com/blog/barra-de-espanol-has-been-accepted-to-mozillas-public-addon-list/</link><pubDate>Sat, 29 Aug 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/barra-de-espanol-has-been-accepted-to-mozillas-public-addon-list/</guid><description>&lt;p>I got an email today from the Mozilla Add-ons group that my add-on for Firefox, &lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">Barra de Español&lt;/a>, has been approved to be in the public listing for Firefox add-ons! This means that it&amp;rsquo;s no longer listed as &amp;ldquo;experimental&amp;rdquo; and no longer requires that users check a box in order to install it.&lt;/p>
&lt;p>I was a bit surprised by how long this process took. I nominated it when I released version 1.1 on June 7. 83 days later it was accepted, and during those 83 days I had no feedback as to what was going on. A week or two ago I visited an IRC chat room for add-on developers and was told that 2 or 3 months was pretty common. Recently Mozilla released a &lt;a href="https://addons.mozilla.org/en-US/statistics" target="_blank">statistics dashboard&lt;/a> that shows how many add-ons get created or updated daily. I&amp;rsquo;m not sure how many reviewers Mozilla has, but it makes more sense why it takes as long as it does now that I can see those numbers.&lt;/p>
&lt;p>Regardless, I&amp;rsquo;m happy my little add-on has been accepted and I definitely have plans to enhance it in the future.&lt;/p></description></item><item><title>Barra de Español is now in the Public list on addons.mozilla.org</title><link>https://peterextexia.com/blog/barra-de-espa%C3%B1ol-is-now-in-the-public-list-on-addonsmozillaorg/</link><pubDate>Sat, 29 Aug 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/barra-de-espa%C3%B1ol-is-now-in-the-public-list-on-addonsmozillaorg/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I received an email today from the Mozilla Add-ons group that
&lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">Barra de Español&lt;/a>
has been approved to be in the public listing on addons.mozilla.org! This means that it no longer has the “experimental” label and can be installed without the user needing to check a box. For those of you who forgot what Barra de Español is, check out the
&lt;a href="https://peterextexia.com/blog/barra-de-espa%c3%b1ol-a-new-firefox-toolbar-for-spanish-students">original announcement&lt;/a>
. If you haven’t installed it yet,
do so today!&lt;/p></description></item><item><title>Ramses launches the Spanish-English Sentence Database</title><link>https://peterextexia.com/blog/ramses-launches-the-spanish-english-sentence-database/</link><pubDate>Mon, 10 Aug 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/ramses-launches-the-spanish-english-sentence-database/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Our good friend
&lt;a href="https://ramses.blog/" target="_blank">Ramses&lt;/a>
has just launched a wonderful database of Spanish-English sentences at
&lt;a href="https://web.archive.org/web/20091222005336/http://sentences.spanish-only.com/" target="_blank">sentences.spanish-only.com&lt;/a>. I insist that you go there now and bookmark it. I’ll wait.&lt;/p>
&lt;p>This thing is great for the Spanish student! How many times do you learn a new word but you don’t have a sentence for it to put in your SRS? This happens to me all the time. Now you can go to the Spanish-English Sentence Database (SESDB? Am I allowed to make acronyms for something I didn’t create?) and search for the word and find a sentence containing that word. You may browse the database  by the first letter in the sentence, if you like, too.&lt;/p>
&lt;p>Ramses has a lot more detail about his creation at his blog,
&lt;a href="https://web.archive.org/web/20091207201250/http://www.spanish-only.com/2009/08/sentence-database-live-beta/" target="_blank">read it for more details&lt;/a>
.&lt;/p></description></item><item><title>Why You Should Be Using the US International Keyboard Layout</title><link>https://peterextexia.com/blog/why-you-should-be-using-the-us-international-keyboard-layout/</link><pubDate>Tue, 04 Aug 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/why-you-should-be-using-the-us-international-keyboard-layout/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>The bold statement that is the title of this post should really read “&lt;em>Why You Should Be Using the US International Keyboard Layout If You are Studying Languages that Use the Roman Alphabet and Especially If You are a Software Developer&lt;/em>,” but that makes a monster of an already long title. So keep in mind this post is not aimed at anyone studying languages that use non-Roman-derived writing systems.&lt;/p>
&lt;p>&lt;strong>It all began so innocently…&lt;/strong>&lt;/p>
&lt;p>On June 13th, I received
&lt;a href="http://twitter.com/darmorrow/statuses/2157478309" target="_blank">this tweet from @darmorrow&lt;/a>
which thanked me for creating
&lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">Barra de Español&lt;/a>
and asked me how to type the “@” key. That was followed by
&lt;a href="https://web.archive.org/web/20150427070351/http://babelhut.com/languages/spanish/barradeespanol/update-barra-de-espanol-version-11-has-been-released/#comment-788" target="_blank">a comment she made here on babelhut&lt;/a>, explaining that she had
&lt;a href="https://peterextexia.com/blog/i-switched-my-kde-desktop-to-spanish">transformed her whole computer to Spanish&lt;/a>
but was still figuring it out. I realized that she had begun using the
&lt;a href="https://peterextexia.com/blog/setting-up-a-spanish-keyboard-in-windows-vista">Spanish keyboard layout&lt;/a>
exclusively, but I was still primarily using the US English keyboard layout and switching to the Spanish layout only when I needed to type in Spanish.
&lt;em>Oh no&lt;/em>, I thought.
&lt;em>My immersion experience is incomplete unless I use the Spanish layout full-time!&lt;/em>&lt;/p>
&lt;p>&lt;strong>The quest for the holy grail a more complete immersion experience&lt;/strong>&lt;/p>
&lt;p>I decided right away to switch my keyboard layout to a Spanish layout full-time, but I was concerned that learning where the various punctuation keys were would be a nightmare. I briefly considered purchasing an actual Spanish keyboard, but instead found a more frugal solution.
&lt;a href="http://www.amazon.com/gp/product/B000ZMXATG?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000ZMXATG" target="_blank">Stickers&lt;/a>! I bought three sets of stickers which I put on my keyboards at home and at work. The first keyboard I did I put every single sticker on the keyboard, which took some time. On subsequent keyboards I only put on the stickers on keys that were different between the US and Spanish layouts. Once the stickers were in place, I switched all of the computers that I used to the Spanish layout.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2009/08/2009-08-04-150819.jpg" alt="My keyboard with stickers" title="My keyboard with stickers">&lt;/p>
&lt;p>&lt;strong>Codito ergo sum&lt;/strong>&lt;/p>
&lt;p>With this setup I was doing fine writing emails and surfing the web. But I’m a software developer, and one who deals with a lot of HTML and XML. I very quickly realize there was no easy way to type the greater-than and less-than signs! “&amp;lt;” and “&amp;gt;” were seemingly unobtainable! On my Linux computers at home I discovered an obscure key combination that produced those characters, but on my Windows machine at work, nothing worked. Greater-than and less-than were not my only problems though. When I write code, I need to know where all the various punctuation marks are. The Spanish layout has them moved all over the place, and although I planned to just learn the new layout, many of the keys seemed like there were in very inconvenient places. I was frustrated.&lt;/p>
&lt;p>&lt;strong>The US International Keyboard Layout&lt;/strong>&lt;/p>
&lt;p>I then remembered a
&lt;a href="https://web.archive.org/web/20140806203839/http://babelhut.com/languages/spanish/setting-up-a-spanish-keyboard-in-windows-vista/#comment-326" target="_blank">comment&lt;/a>
made by my friend
&lt;a href="https://ramses.blog/" target="_blank">Ramses&lt;/a>
suggesting that I try the
&lt;a href="http://en.wikipedia.org/wiki/Keyboard_layout#US-International" target="_blank">US International keyboard layout&lt;/a>. I set it up and I immediately knew this was what I needed. The layout has all of the punctuation marks where I expect them. I can easily type
&lt;em>áéíóúñ¿¡&lt;/em>
just by hitting the Alt key on the right side of the space bar and the corresponding key. I can also get those accented vowels by hitting the
&lt;em>‘&lt;/em>
key first. I am able to type
&lt;em>äëïöü&lt;/em>
with the
&lt;em>“&lt;/em>
key, even though only
&lt;em>ü&lt;/em>
is used in Spanish. I can do all that without having to switch keyboard layouts or being mindful of my current keyboard layout.&lt;/p>
&lt;p>Like everything else, there are some drawbacks. In order to produce a
&lt;em>‘&lt;/em>
or
&lt;em>”&lt;/em>
or
&lt;em>~&lt;/em>
or
&lt;em>^&lt;/em>
you must hit the space bar following those keys. I’ve had this layout setup for over a month now and I’m finally hitting the space bar automatically after those keys. Overall, I feel the benefits outweigh the drawbacks and I intend to continue using the US International keyboard layout.&lt;/p>
&lt;p>Have you experimented with other keyboard layouts, or are you considering it? Write about it in the comments!&lt;/p></description></item><item><title>My development plan for the Android Developer Challenge 2</title><link>https://peterextexia.com/blog/my-development-plan-for-the-android-developer-challenge-2/</link><pubDate>Wed, 29 Jul 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/my-development-plan-for-the-android-developer-challenge-2/</guid><description>&lt;p>I haven&amp;rsquo;t posted lately about &lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">Barra de Español&lt;/a> or the &lt;a href="https://peterextexia.com/tags/biblefeed/">Biblefeed Project&lt;/a> because my free time has been split among other projects and I have not been able to return to these two for the moment. Barra de Español is still awaiting approval on &lt;a href="https://addons.mozilla.org/" target="_blank">addons.mozilla.org&lt;/a> to be put in the public section, so I don&amp;rsquo;t want to make further improvements to it until that happens.&lt;/p>
&lt;p>Recently I purchased an &lt;a href="http://en.wikipedia.org/wiki/HTC_Dream" target="_blank">Android phone&lt;/a>, and I love it! It&amp;rsquo;s everything I wanted a phone to be. It has an excellent web browser, a full QWERTY keyboard, GPS, and it&amp;rsquo;s hackable! I decided pretty quickly that I wanted to write an app for it, and as I start looking for the documentation on how to write one, I discover that Google is holding a developer contest. This discovery changed my approach to developing this app.&lt;/p>
&lt;p>I&amp;rsquo;m not going to talk about the app I&amp;rsquo;m working on, but I did want to share how I intend to work on it, because it&amp;rsquo;s a little different than my normal approach to personal projects. Normally I start with a minimal list of features. These are the features that are most important to me. I work on each one a little at time, slowly improving the pieces until they are functional and working well together. Each piece that I work usually causes me to improve the other pieces of the program until finally they&amp;rsquo;re all done at around the same time. At this point the project is probably ugly. I may give it some finishing touches, but not always. The project is for me, so functionality trumps aesthetics.&lt;/p>
&lt;p>For this contest I felt that developing an app required a different approach. I made a larger list of features that I felt the app could do that I had not originally planned for, especially features which would take advantage of some of the built-in hardware and software on the Android platform. I then prioritized each feature based on how essential the functionality is to the application, how much the feature took advantage of the platform, and how impressive I thought that the feature could be.&lt;/p>
&lt;p>With this prioritized list, I&amp;rsquo;m going to develop each feature as a whole, one feature at a time. Each feature must be functionally complete and aesthetically pleasing before I move on to the next feature. The reason for this is because if the entry deadline arrives before all of the features are complete, I can still submit an application which is still functional and polished, even if it has fewer features than planned. With my normal development style I could be stuck with an ugly app where only half of the features work by the time the deadline rolls around.&lt;/p>
&lt;p>I don&amp;rsquo;t expect that I will be able to complete all of my planned features for this project by the August 31 deadline, but I hope with this plan I will have a decent app to submit. There is a bit of a learning curve that is slowing me down though. Even though it&amp;rsquo;s been over five or six years since I&amp;rsquo;ve worked with Java, the changes to the language are similar to the changes to C# over the same time period. The real learning curve comes from the Android framework. The &lt;a href="http://developer.android.com/guide/topics/fundamentals.html" target="_blank">activities, intents, content providers, etc.&lt;/a> are easy enough to understand but I&amp;rsquo;m still dealing with an API that is brand new to me, and will take time to absorb.&lt;/p>
&lt;p>Wish me luck!&lt;/p></description></item><item><title>What's on your playlist?</title><link>https://peterextexia.com/blog/whats-on-your-playlist/</link><pubDate>Fri, 10 Jul 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/whats-on-your-playlist/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Listening and understanding Spanish is a big weakness for me. I can read Spanish much better than I can listen to it. So, to get better at it I’ve been spending more time listening to Spanish music and podcasts. Since I last wrote about
&lt;a href="https://peterextexia.com/blog/find-music-you-actually-like-in-the-language-you-are-learning">finding music you like in your language of study&lt;/a>
, I have discovered
&lt;a href="http://pandora.com/" target="_blank">Pandora&lt;/a>
. Pandora is great because you start with an artist or multiple artists you like, and it starts playing similar artists. As you listen, you can give thumbs up or down to each song, and Pandora will adjust what it plays next based on your choices, essentially learning what you will probably like to hear. Another great thing about Pandora is that it will often play artists in your target language that are difficult to find in your home country, even stuff that I’ve found difficult to find on Amazon.&lt;/p>
&lt;p>In English I listen primarily to metal and hard rock, but in Spanish I’ve noticed that while I still like some metal, I’ve been leaning more towards rap, even though I can’t stand most rap in English. I’m not entirely sure why this is yet, I’m still getting a feel for what’s out there. I’ve also been listening to a couple of podcasts, these are also to practice listening to Spanish.&lt;/p>
&lt;p>Here are some of the things I’ve been listening to:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FHamlet%2FB001LHBFCS%3Fie%3DUTF8%26ref%255F%3Dntt%255Fmus%255Fgen%255Fpel&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">Hamlet&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FSkunk-D.F.%2FB001LHVIBQ%3Fie%3DUTF8%26ref%255F%3Dntt%255Fmus%255Fgen%255Fpel&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">Skunk DF&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FSkizoo%2FB001LHTOY4%3Fie%3DUTF8%26ref%255F%3Dntt%255Fmus%255Fgen%255Fpel&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">Skizoo&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FA.N.I.M.A.L.%2FB000AP951A%3Fie%3DUTF8%26ref%255F%3Dntt%255Fmus%255Fgen%255Fpel&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">A.N.I.M.A.L.&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FMolotov%2FB000APZ0FU%3Fie%3DUTF8%26ref%255F%3Dntt%255Fmus%255Fgen%255Fpel&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">Molotov&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fentity%2FControl-Machete%2FB000ARDG0E%3Fie%3DUTF8%26ref%255F%3Dntt%255Fmus%255Fgen%255Fpel&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">Control Machete&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.newsinslowspanish.com/" target="_blank">News in Slow Spanish&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.vozdeamerica.com/Buenos-dias-america-radio" target="_blank">VOA en Español – Buenos Días America&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://ssl4you.es/" target="_blank">SSL4YOU&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Definitely check out
&lt;a href="http://pandora.com/" target="_blank">Pandora&lt;/a>
for yourself. (Update:
&lt;a href="https://twitter.com/tummai/" target="_blank">Thomas&lt;/a>
tells me that Pandora only works within the US. It may be possible to get around this using a proxy.)&lt;/p>
&lt;p>What have you been listening to in your target language?&lt;/p></description></item><item><title>The Winner of a Free Copy of '601 Spanish Verbs'</title><link>https://peterextexia.com/blog/the-winner-of-a-free-copy-of-601-spanish-verbs/</link><pubDate>Tue, 30 Jun 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/the-winner-of-a-free-copy-of-601-spanish-verbs/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I’m sure the question on your mind right now is: So, who won the free copy of
&lt;a href="https://peterextexia.com/blog/review-of-601-spanish-verbs--a-giveaway">601 Spanish Verbs&lt;/a>? Was it me?&lt;/p>
&lt;p>Well if you are &lt;strong>mrcneff&lt;/strong>, then the answer is yes, you won! I will be contacting you for delivery information shortly.&lt;/p>
&lt;p>For everybody else, I’m sorry. Maybe you will win next time. You could always
&lt;a href="http://www.amazon.com/gp/product/9812686436?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=9812686436" target="_blank">purchase a copy for yourself&lt;/a>.&lt;/p>
&lt;p>¡Felicidades, &lt;strong>mrcneff&lt;/strong>!&lt;/p></description></item><item><title>Review of 601 Spanish Verbs + a Giveaway</title><link>https://peterextexia.com/blog/review-of-601-spanish-verbs--a-giveaway/</link><pubDate>Fri, 19 Jun 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/review-of-601-spanish-verbs--a-giveaway/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;strong>Update:&lt;/strong>
The deadline for entering the drawing has been extended, see details at the bottom of this post.&lt;/p>
&lt;p>A couple of months ago I received a copy of
&lt;a href="http://www.amazon.com/gp/product/9812686436?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=9812686436" target="_blank">601 Spanish Verbs&lt;/a>
for me to review. I incorporated this book into my Spanish studies to see how well it fared. Read on to find out what I think of it and how you can win a free copy for yourself!
&lt;a href="http://www.amazon.com/gp/product/9812686436?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=9812686436" target="_blank">&lt;img src="https://peterextexia.com/2009/06/ber_601verbs_sp09_small.jpg" alt="601 Spanish Verbs" title="601 Spanish Verbs">&lt;/a>&lt;/p>
&lt;p>&lt;strong>The Verb Guide&lt;/strong>&lt;/p>
&lt;p>The Verb Guide section at the beginning of this book is pure gold. I’ve had trouble with the more advanced tenses in Spanish until I read this section. The descriptions of each tense are the clearest and most easily understood of any Spanish book that I’ve come across. I know some of you have heard “&lt;a href="https://web.archive.org/web/20090201061842/http://www.spanish-only.com/2009/01/screw-grammar/" target="_blank">Screw Grammar&lt;/a>!” from my friend Ramses, and to some extent I agree, but I think you still need to know when and how to use your verb tenses. You don’t need to memorize the rules but you do need read about them, and more importantly study sentences in your SRS that demonstrate these rules. This book has enough example sentences for each of the verb tenses that you will learn how to use them well.&lt;/p>
&lt;p>This book also does an excellent job of explaining many of the exceptions that you must deal with in Spanish, and identifies the patterns you will see with irregular verbs, as well as the cases where there is no pattern, like that
&lt;em>fui/fuiste/fue/fuimos/fueron&lt;/em>
can be either
&lt;em>ser&lt;/em>
or
&lt;em>ir&lt;/em>, which I did not know before. I can honestly say that my Spanish has improved a lot just because of this section of the book.&lt;/p>
&lt;p>&lt;strong>The 601 Verbs&lt;/strong>&lt;/p>
&lt;p>The bulk of this book is the reference section for the 601 verbs. This section is neatly laid out, with one verb per page. The verb’s infinitive form and meaning in English are at the top of the page with all the possible conjugations laid out in charts neatly over the rest of the page.  The charts are very easy to read, with the suffix changes for each conjugation in bold. Some verbs in this section are highlighted as “must know verbs.” These pages have a light blue background instead of white, so that there are easy to see as you flip through the book. As a reference section it’s very well done, there’s only thing I think it lacks. In other verb books I’ve seen there are a few example sentences for each verb demonstrating the use of that verb in a several different tenses. Unfortunately this book does not have that.&lt;/p>
&lt;p>&lt;strong>Other sections&lt;/strong>&lt;/p>
&lt;p>The book has a few more smaller sections in the back. The first is an activity section which is basically just a little test of how well you can use verbs in a sentence. Some of the questions are multiple choice and some are fill-in-the-blank. I haven’t tried quizzing myself with it just yet, but I intend to because this is another good source of sentences that show how the verbs are used.&lt;/p>
&lt;p>The next section is a list of 75 “must know verbs,” which are the same 75 verbs highlighted in the main reference section. Following that are a list of tech verbs. The list is pretty short, and if you’ve already
&lt;a href="https://peterextexia.com/blog/i-switched-my-kde-desktop-to-spanish">setup your computer for Spanish&lt;/a>, you’ve probably seen most of these already. Following this is a section on text message abbreviations in Spanish. This is an interesting section, and maybe useful to those of you who text message with Spanish speakers. I can’t verify its utility though, as the only Spanish speaker that I send text messages to doesn’t know any of these abbreviations, although to be fair, we are in Texas and not in a Spanish-speaking country.&lt;/p>
&lt;p>The next little section is a test preparation guide which are useful tips for students in academic settings, and they’re applicable for tests in subjects other than Spanish as well. Following this is the answer key to the earlier activity section. After that is the last section, which lists over 2500 more verbs. This section is actually great because if you could not find your verb in the main reference section, you can find it here with a short English definition and a page number which refers to a verb in the main reference section that conjugates in the exact same way. They really could have named this book
&lt;em>3101+ Verbs&lt;/em>
because that’s really what you get with this section.&lt;/p>
&lt;p>&lt;strong>The CD-ROM&lt;/strong>&lt;/p>
&lt;p>Like many educational books, this book included a CD-ROM. Don’t waste your time with it. It contains an e-book for the iPod of useful phrases in Spanish. It only works with the iPod, and not any other music device. I don’t own an iPod so I borrowed one from a friend to review the CD-ROM. The installer program on the CD is very clunky and requires you to changes all sorts settings in iTunes that you may not want to change. Once installed on your iPod, the e-book is located under “Extras -&amp;gt; Notes.” The whole experience feels very kludgy and you’re really better off with a real travel guide if that’s what you’re after. There are actual mp3 files on the CD if you want to listen to Spanish pronunciation of the phrases in the e-book.&lt;/p>
&lt;p>&lt;strong>The Verdict&lt;/strong>&lt;/p>
&lt;p>Because I find that numeric ratings are pretty useless, I like to give a score of either
&lt;em>buy&lt;/em>,
&lt;em>borrow&lt;/em>, or
&lt;em>avoid&lt;/em>. I rate this book as
&lt;strong>buy&lt;/strong>
for any student of the Spanish language.&lt;/p>
&lt;p>&lt;strong>The Pros:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Description of verb tenses are clearest and easiest to understand of any Spanish book I’ve read&lt;/li>
&lt;li>Covers typical verb stem-change patterns well&lt;/li>
&lt;li>Good example sentences demonstrating the various tenses&lt;/li>
&lt;li>The reference section is laid-out well&lt;/li>
&lt;li>Low price: the cover price is only $15.99&lt;/li>
&lt;li>You really get over 3101 verbs&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>The Cons:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>In the verb reference section there are no sentences for each of the verbs&lt;/li>
&lt;li>The CD-ROM is not very useful&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Giveaway: Win a free copy of 601 Spanish Verbs&lt;/strong>&lt;/p>
&lt;p>I have an extra copy of
&lt;a href="http://www.amazon.com/gp/product/9812686436?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=9812686436" target="_blank">601 Spanish Verbs&lt;/a>
that I will give to a randomly selected entrant. There are two ways to enter the drawing. The first way to enter is to leave a comment on this post. The second way is to send a tweet via
&lt;a href="http://twitter.com" target="_blank">Twitter&lt;/a>
that contains both the text “#babelhut.com” and a link to this article (it’s okay to use a url-shortener like
&lt;a href="http://tinyurl.com" target="_blank">tinyurl.com&lt;/a>
or
&lt;a href="http://bit.ly/" target="_blank">bit.ly&lt;/a>). The drawing is open to everyone. You may enter exactly twice, once in the comments on this post, and once on twitter.&lt;/p>
&lt;p>The winner will be selected on
&lt;strong>Monday&lt;/strong>, &lt;del>June 22&lt;/del>
&lt;strong>June 29&lt;/strong>
and notified either by email or by a direct message on Twitter. Good luck!&lt;/p>
&lt;p>&lt;strong>Update:&lt;/strong>
The deadline has been pushed by a week to give people more time to enter the drawing.&lt;/p></description></item><item><title>Barra De Español</title><link>https://peterextexia.com/projects/barra-de-espa%C3%B1ol/</link><pubDate>Sun, 07 Jun 2009 14:24:00 -0500</pubDate><guid>https://peterextexia.com/projects/barra-de-espa%C3%B1ol/</guid><description>&lt;p>Barra de Español was a Firefox toolbar for students of the Spanish language. It provided tools and links to resources useful to students, such as word definition lookup and links to native Spanish material.&lt;/p>
&lt;p>Barra de Español era una barra de herramientas de Firefox para estudiantes del español. Tuvo herramientas y enlaces a recursos útiles para estudiantes, como buscar las definiciones de palabras y enlaces a materiales nativos en español.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/bde-toolbar.png" alt="">&lt;/p>
&lt;h3 id="features--características">Features / Características&lt;/h3>
&lt;p>&lt;img src="https://peterextexia.com/bde-contextmenu.png" alt="">&lt;/p>
&lt;p>&lt;strong>Special characters&lt;/strong> Provides dropdown lists containing the lowercase and uppercase accented vowels and the Ñ, for users without an international keyboard.&lt;/p>
&lt;p>&lt;strong>Caracteres especiales&lt;/strong> Tiene listas desplegables con las letras acentuadas minúsculas o las letras acentuadas mayúsculas o la Ñ, para usuarios sin teclado internacional.&lt;/p>
&lt;p>&lt;strong>Definitions&lt;/strong> Defines words using &lt;a href="http://wordreference.com" target="_blank">Wordreference.com&lt;/a>. These definitions can be English to Spanish, Spanish to English, or Spanish to Spanish. Words to define can be entered through the toolbar, or by highlighting a word on a page and right-clicking on it.&lt;/p>
&lt;p>&lt;strong>Definiciones&lt;/strong> Define palabras con &lt;a href="http://wordreference.com" target="_blank">Wordreference.com&lt;/a>. Esas definiciones puede ser inglés a español, español a inglés, o español a español. Palabras para definir puede entrar en la barra de herramientas, o marcar una palabra en una página y hacer clic con el botón derecho del ratón.&lt;/p>
&lt;p>&lt;strong>Spanish websites&lt;/strong> Provides links to native Spanish websites useful for learning, including news websites, reference websites, and video websites.&lt;/p>
&lt;p>&lt;strong>Sitios españoles&lt;/strong> Tiene enlaces a sitios españoles nativos que están útiles para aprender, incluyendo sitios de noticias, sitios de referencias, o sitios de video.&lt;/p>
&lt;h3 id="more-screenshots--más-imágenes">More screenshots / Más imágenes&lt;/h3>
&lt;p>&lt;img src="https://peterextexia.com/bde-minuscula.png" alt="">
&lt;img src="https://peterextexia.com/bde-definehistory.png" alt="">
&lt;img src="https://peterextexia.com/bde-video.png" alt="">&lt;/p>
&lt;h3 id="related-posts">Related Posts&lt;/h3>
&lt;ul>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espanol-12-is-now-available/">Barra de Español 1.2 is now available!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espa%C3%B1ol-12-is-now-available/">Barra de Español 1.2 is now available!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/simulating-a-keypress-in-firefox/">Simulating a keypress in Firefox&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espanol-has-been-accepted-to-mozillas-public-addon-list/">Barra de Español has been accepted to Mozilla&amp;#39;s public addon list&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espa%C3%B1ol-is-now-in-the-public-list-on-addonsmozillaorg/">Barra de Español is now in the Public list on addons.mozilla.org&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/update-barra-de-espa%C3%B1ol-version-11-has-been-released/">Update: Barra de Español version 1.1 has been released&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/update-barra-de-espanol-version-11-released/">Update: Barra de Español version 1.1 released!&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espa%C3%B1ol-a-new-firefox-toolbar-for-spanish-students/">Barra de Español: A new Firefox toolbar for Spanish students&lt;/a>
&lt;/li>
&lt;li>
&lt;a href="https://peterextexia.com/blog/barra-de-espanol-the-making-of-a-firefox-extension/">Barra de Español: The making of a Firefox extension&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h3 id="credit">Credit&lt;/h3>
&lt;p>Some images used by Barra de Español were created by &lt;a href="https://p.yusukekamiyamane.com/" target="_blank">Yusuke Kamiyamane&lt;/a> under the &lt;a href="http://creativecommons.org/licenses/by/3.0/" target="_blank">Creative Commons 3.0 Attribution License&lt;/a>.&lt;/p></description></item><item><title>Update: Barra de Español version 1.1 has been released</title><link>https://peterextexia.com/blog/update-barra-de-espa%C3%B1ol-version-11-has-been-released/</link><pubDate>Sun, 07 Jun 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/update-barra-de-espa%C3%B1ol-version-11-has-been-released/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I’ve just released an update to Barra de Español, version 1.1. The new version has some new features that I believe make it a necessary upgrade for those of you currently using version 1.0. You can get the new version from
&lt;a href="https://addons.mozilla.org/" target="_blank">https://addons.mozilla.org/&lt;/a>.&lt;/p>
&lt;p>Here is what’s new in this version:&lt;/p>
&lt;ul>
&lt;li>Wrapped “loose” variables and function in a javascript object to meet addons.mozilla.org’s standards.&lt;/li>
&lt;li>Added cinetube.es to video sites&lt;/li>
&lt;li>Fixed unicode text in search history being stored incorrectly. This change may cause you to lose your previous search history.&lt;/li>
&lt;li>Replaced CNN en Español with CNN Chile, since the Chile site actually contains news.&lt;/li>
&lt;li>Words selected in text areas can now be defined with the right-click menu.&lt;/li>
&lt;li>Added a menu to insert the punctuation characters: upside-down question mark and upside-down exclamation mark.&lt;/li>
&lt;/ul>
&lt;p>For those of you who aren’t yet using Barra de Español, it’s a Firefox toolbar for students of the Spanish language. Find out more from
&lt;a href="https://peterextexia.com/blog/barra-de-espa%c3%b1ol-a-new-firefox-toolbar-for-spanish-students">the original release announcement&lt;/a>.&lt;/p></description></item><item><title>Update: Barra de Español version 1.1 released!</title><link>https://peterextexia.com/blog/update-barra-de-espanol-version-11-released/</link><pubDate>Sun, 07 Jun 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/update-barra-de-espanol-version-11-released/</guid><description>&lt;p>Just a quick update to announce that Barra de Español version 1.1 has been released. For more details, see &lt;a href="https://peterextexia.com/blog/update-barra-de-espa%c3%b1ol-version-11-has-been-released/">my post on babelhut.com about the release&lt;/a>.&lt;/p></description></item><item><title>False friends: decepcionar</title><link>https://peterextexia.com/blog/false-friends-decepcionar/</link><pubDate>Mon, 25 May 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/false-friends-decepcionar/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Every once in a while, we all run into a word that
&lt;em>deceives&lt;/em>
us about its meaning. Often it is because the word looks similar to a word in your native language, which happened to me today on twitter. I had just discovered an excellent blog called
&lt;a href="https://web.archive.org/web/20101124091909/http://www.reverbspanish.com/" target="_blank">ReVerbSpanish&lt;/a>
and I had tweeted about it. The author of that blog, Eleena, sent me
&lt;a href="http://twitter.com/ReVerbSpanish/status/1911265885" target="_blank">this tweet&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>@peterjcarroll ¡Muchas gracias por tu voto de confianza! Espero que no te
&lt;em>decepcione&lt;/em>
.&lt;/p>&lt;/blockquote>
&lt;p>Decepcione? I read that and thought to myself, “Why would she hope to not deceive me?” It was clearly dictionary time. It turns out that the verb
&lt;em>decepcionar&lt;/em>
means
&lt;a href="http://www.wordreference.com/es/en/translation.asp?spen=decepcionar" target="_blank">to disappoint&lt;/a>. I felt silly, but I’ve learned a new word and I won’t make that same mistake again!&lt;/p>
&lt;p>Are there any false friends in your language of study that have
&lt;em>deceived&lt;/em>
you before? Tell us in the comments!&lt;/p></description></item><item><title>Barra de Español: A new Firefox toolbar for Spanish students</title><link>https://peterextexia.com/blog/barra-de-espa%C3%B1ol-a-new-firefox-toolbar-for-spanish-students/</link><pubDate>Fri, 22 May 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/barra-de-espa%C3%B1ol-a-new-firefox-toolbar-for-spanish-students/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2009/05/bde-contextmenu1.png" alt="Right-clicking to define a highlighted word" title="Right-clicking to define a highlighted word">
Ladies and gentlemen, Spanish students across the globe, I’d like to introduce you to my latest creation! It’s a Firefox add-on called
&lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">&lt;strong>Barra de Español&lt;/strong>&lt;/a>. It lets you find word translations and definitions using
&lt;a href="http://wordreference.com" target="_blank">wordreference.com&lt;/a>
by typing the word in the toolbar, or by highlighting the word and right-clicking on it. It helps insert the special characters that Spanish uses that may not be on your keyboard.  It provides links to native Spanish web sites which can help you in your study of the language, including news, reference, and video sites. But the best part is that it’s free!&lt;/p>
&lt;p>Phew! I’m done with the sales pitch now. Seriously though, check it out. You can
&lt;a href="https://addons.mozilla.org/" target="_blank">download it from addons.mozilla.org&lt;/a>. It’s currently considered “experimental” on their site so you have to check a little box that says that yes, you really want to install this. Don’t worry though, I’ve tested it thoroughly and I use it myself daily. It is definitely release-quality, and hopefully the reviewers at Mozilla will upgrade the add-on from its experimental status shortly.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2009/05/bde-definehistory1.png" alt="Searching for definitions in the toolbar" title="Searching for definitions in the toolbar">
Why would I create such a thing? Well, why wouldn’t I? I’m studying Spanish and I know how to program a computer. The natural conclusion is that I would write this, right? The truth is, I didn’t think of it until I saw
&lt;a href="https://web.archive.org/web/20110106220137/http://www.tofugu.com/2009/03/08/nipponsters-japanese-toolbar/" target="_blank">this article on Tofugu.com talking about a Japanese toolbar&lt;/a>. I began to wonder why all the cool Japanese studying kids got the cool tools, but I had nothing like that to help me with my Spanish studies. I think this shows that jealousy is not always a bad thing.&lt;/p>
&lt;p>If you interested in more details about the creation of Barra de Español, I wrote about the process on
&lt;a href="https://peterextexia.com/blog/barra-de-espanol-the-making-of-a-firefox-extension/">my personal blog&lt;/a>. Also, I want to thank Ramses from
&lt;a href="https://web.archive.org/web/20101201124349/http://www.spanish-only.com/" target="_blank">spanish-only.com&lt;/a>
for checking my Spanish on
&lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">the project site&lt;/a>.&lt;/p></description></item><item><title>Barra de Español: The making of a Firefox extension</title><link>https://peterextexia.com/blog/barra-de-espanol-the-making-of-a-firefox-extension/</link><pubDate>Fri, 22 May 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/barra-de-espanol-the-making-of-a-firefox-extension/</guid><description>&lt;p>&lt;img src="https://peterextexia.com/wp-content-uploads-2009-05-bde-toolbar.png" alt="Barra de Español" title="bde-toolbar">&lt;/p>
&lt;p>I have just &lt;a href="https://peterextexia.com/blog/barra-de-espa%c3%b1ol-a-new-firefox-toolbar-for-spanish-students/">released a new Firefox add-on&lt;/a> called &lt;a href="https://peterextexia.com/projects/barra-de-espa%c3%b1ol/">Barra de Español&lt;/a>, a toolbar for those who are studying the Spanish language. It makes it easier to find definitions for words in Spanish or English, it helps you insert special characters that are specific to Spanish into any textbox in Firefox, and it provides links to native Spanish websites useful for learning the language. You may &lt;a href="https://addons.mozilla.org/" target="_blank">install it from addons.mozilla.org&lt;/a>.&lt;/p>
&lt;p>Jealousy inspired me to create this add-on. A couple of months ago, I saw an &lt;a href="https://web.archive.org/web/20110106220137/http://www.tofugu.com/2009/03/08/nipponsters-japanese-toolbar/" target="_blank">article on Tofugu.com about a Japanese toolbar&lt;/a> and thought to myself, &amp;ldquo;Why do the people who study Japanese have all the cool tools? Where is the cool stuff for Spanish students?&amp;rdquo; Seriously, I see links to cool Japanese tools all the time, but rarely do I see the same thing for other languages. So rather than letting jealousy slowly consume me like a snake eating a mouse, I did something about it.&lt;/p>
&lt;p>Doing something about it did not happen instantly though. With as many years as I&amp;rsquo;ve been writing code, I still cannot conjure working applications into being through wishful thinking alone. Also, I&amp;rsquo;ve never written an add-on for Firefox before, I did not know what was involved. Searching the tubes provided me with &lt;a href="https://web.archive.org/web/20090204014436/https://borngeek.com/firefox/toolbar-tutorial/" target="_blank">this handy tutorial on creating a Firefox toolbar&lt;/a>. This was exactly what I needed, and explained in small steps the process of creating a toolbar.&lt;/p>
&lt;p>Firefox add-ons are written using XUL, Javascript, and CSS. As a web developer, I already knew two out of the three. XUL turned out to be pretty simple though. It&amp;rsquo;s just an XML-based language used to describe the UI, just like you would use HTML on a web page. Some of the Javascript I wrote did require some googling, because in addition to the standard stuff (DOM, etc) used in Javascript when doing web pages, there are APIs specific to Firefox that you need to use. Overall the process of putting together this add-on was pretty quick and easy.&lt;/p>
&lt;p>While I may have skills in art of coding, I lack any skill in the art of&amp;hellip; art. So while I was able to put together a nice, functional toolbar on my own, it was ugly. What it really needed was some decent icons. Instead of taking art lessons, I looked around a bit and I found an excellent set of icons created by &lt;a href="http://www.pinvoke.com/" target="_blank">Yusuke Kamiyamane&lt;/a> which were free to use under the &lt;a href="http://creativecommons.org/licenses/by/3.0/" target="_blank">Creative Commons Attribution License 3.0&lt;/a>. What a deal! I can use some nice icons for my toolbar for free as long as I give credit to the person who made them? I can&amp;rsquo;t beat that.&lt;/p>
&lt;p>To my credit, I did create the icons that look like &amp;ldquo;á&amp;rdquo; and &amp;ldquo;Á&amp;rdquo;. Even I can select a font and type in an image editor.&lt;img src="https://peterextexia.com/wp-content-uploads-2009-05-bde-minuscula.png" alt="Typing can be art, right?" title="Typing can be art, right?">&lt;/p>
&lt;p>Once I had the toolbar put together and looking nice, I needed a way to distribute it. I can use my website, but that&amp;rsquo;s not visible enough. The place to go for Firefox extensions is &lt;a href="https://addons.mozilla.org" target="_blank">addons.mozilla.org&lt;/a>. The process to get your add-on on their site is pretty easy. You register as a user, go to their developer tools page and follow the directions to upload your add-on. Your add-on isn&amp;rsquo;t publicly listed at this point though. You must first fill out all the required information about your add-on, and categorize it properly. Once you&amp;rsquo;ve done that, you can have it moved into the Sandbox, which is where Barra de Español is as I write this. Add-ons in the Sandbox get the &amp;ldquo;Experimental&amp;rdquo; label that you may have seen on some Firefox extensions. It&amp;rsquo;s also a little harder to search for them because you have to specify that you want to include experimental extensions when you search for add-ons.&lt;/p>
&lt;p>The next step beyond the Sandbox is to get your add-on publicly listed. In order to do that you must upload some images showing your extension to the addons.mozilla.org site, your add-on must not be considered &amp;ldquo;pre-release&amp;rdquo;, and you must get some user reviews. Barra de Español meets all three requirements now, so I&amp;rsquo;m going to nominate to be moved to public today. When I do that, I need to describe my testing process for the add-on. I tested it by installing it and using it on Firefox 1.5, 2.0, 3.0, and the 3.5 beta on Windows XP, and also on Firefox 3.0 on Linux. Worked like a charm on all of those versions thankfully, since that&amp;rsquo;s what I claim to support. From here I&amp;rsquo;m not sure how long it will take to be publicly listed. It has to go through some review process that I&amp;rsquo;m not familiar with yet. I hope it&amp;rsquo;s as easy as the rest of the process has been.&lt;/p>
&lt;p>I&amp;rsquo;d like to add a special thank you to Ramses of &lt;a href="https://web.archive.org/web/20101201124349/http://www.spanish-only.com/" target="_blank">spanish-only.com&lt;/a> for correcting my Spanish on the Barra de Español homepage. I hope this article was informative, interesting, or both for you. If it wasn&amp;rsquo;t, then why did you read it all the way to the bottom?&lt;/p></description></item><item><title>We have hopped onto the Twitter bandwagon</title><link>https://peterextexia.com/blog/we-have-hopped-onto-the-twitter-bandwagon/</link><pubDate>Thu, 30 Apr 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/we-have-hopped-onto-the-twitter-bandwagon/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Joining Twitter has become the trendy thing for bloggers to do, and while the non-conformist inside of me tells me to go against the trend, I think there may be some value in Twitter that I haven’t totally realized yet. With that in mind, Thomas and I have both signed up for Twitter experimentally, and we hope that our readers will follow us there!&lt;/p>
&lt;p>Thomas can be followed at
&lt;a href="http://twitter.com/tummai" target="_blank">http://twitter.com/tummai&lt;/a>
and I can be followed at
&lt;a href="http://twitter.com/peterextexia" target="_blank">http://twitter.com/peterextexia&lt;/a>
. I’m not entirely certain what you’ll see from us there yet, but at a minimum we will tweet when there is a new post on Babelhut. I’ll see you there!&lt;/p>
&lt;p>Edit: Btw, if you are a language learner or blogger, leave a comment with your twitter username or url.&lt;/p></description></item><item><title>Lojban</title><link>https://peterextexia.com/blog/lojban/</link><pubDate>Wed, 29 Apr 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/lojban/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I had once assumed that if I were to learn a constructed language, it would be Esperanto. It seems to be the most popular conlang out there, with
&lt;a href="http://en.wikipedia.org/wiki/Esperanto#Language_acquisition" target="_blank">several studies done on its effectiveness on improving language-aquisition skills&lt;/a>. But last week my brother reminded me
&lt;a href="https://www.urbandictionary.com/define.php?term=Assume" target="_blank">what assuming does&lt;/a>
and convinced me to start learning
&lt;a href="http://www.lojban.org" target="_blank">Lojban&lt;/a>
with him. Lojban is described as a
&lt;a href="http://xkcd.com/191/" target="_blank">logical language with unambiguous grammar&lt;/a>, so it should be easier to learn than a natural language.&lt;/p>
&lt;p>Lojban.org describes the features of the language as such:&lt;/p>
&lt;ul>
&lt;li>Lojban is designed to be used by people in
&lt;strong>communication&lt;/strong>
with each other, and possibly in the future with computers.&lt;/li>
&lt;li>Lojban is designed to be
&lt;strong>culturally neutral&lt;/strong>
.&lt;/li>
&lt;li>Lojban has an
&lt;strong>unambiguous grammar&lt;/strong>
, which is based on the
&lt;strong>principles of logic&lt;/strong>
.&lt;/li>
&lt;li>Lojban has
&lt;strong>phonetic spelling&lt;/strong>
, and unambiguous resolution of sounds into words.&lt;/li>
&lt;li>Lojban is
&lt;strong>simple&lt;/strong>
compared to natural languages; it is easy to learn.&lt;/li>
&lt;li>Lojban’s
&lt;strong>1300 root words&lt;/strong>
can be easily combined to form a vocabulary of
&lt;strong>millions of words&lt;/strong>
.&lt;/li>
&lt;li>Lojban is regular; the rules of the language are
&lt;strong>without exception&lt;/strong>
.&lt;/li>
&lt;li>Lojban attempts to
&lt;strong>remove restrictions&lt;/strong>
on creative and clear thought and communication.&lt;/li>
&lt;li>Lojban has a
&lt;strong>variety of uses&lt;/strong>
, ranging from the creative to the scientific, from the theoretical to the practical.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Why learn it?&lt;/strong>&lt;/p>
&lt;p>Everyone’s reasons for learning a particular language are personal, whether that language is natural or constructed. For my brother and I, we have always had similar interests, including an interest in learning other languages, but we’ve never agreed on a language to learn. I took German in high school, he took French. I primarily study Spanish now, he studies Japanese on occasion. With both of us studying Lojban, we now have a language that we both study together, and in theory requires less time and energy than a natural language to learn. Hopefully this means we can quickly be effective in communicating with each using Lojban.&lt;/p>
&lt;p>&lt;strong>Lojban Resources&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://www.lojban.org" target="_blank">http://www.lojban.org&lt;/a>
– Official site of the Lojban language&lt;/li>
&lt;li>&lt;a href="https://mw.lojban.org/papri/Word_Lists" target="_blank">https://mw.lojban.org/papri/Word_Lists&lt;/a>
– Lojban word lists and dictionaries&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20081223013956/https://www.tlg.uci.edu/~opoudjis/lojbanbrochure/lessons/book1.html" target="_blank">https://web.archive.org/web/20081223013956/https://www.tlg.uci.edu/~opoudjis/lojbanbrochure/lessons/book1.html&lt;/a>
– Lojban for beginners&lt;/li>
&lt;/ul></description></item><item><title>Dreaming in another language</title><link>https://peterextexia.com/blog/dreaming-in-another-language/</link><pubDate>Thu, 16 Apr 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/dreaming-in-another-language/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Last night I found
&lt;a href="https://www.youtube.com/results?search_query=dos&amp;#43;hombres&amp;#43;y&amp;#43;medio" target="_blank">Spanish-dubbed versions&lt;/a>
of a couple of
&lt;a href="https://www.youtube.com/results?search_query=frasier&amp;#43;espa%C3%B1ol" target="_blank">American television shows&lt;/a>
online, and I was watching them while doing laundry. I was doing this until about 1am, when I crashed and fell asleep. I don’t remember much about what I dreamt, except that everyone in the dream, including me, was speaking Spanish. Sort of. Some of it was Spanish. Some of it was gibberish that my mind made up and pretended to be Spanish. I think this was because I still am not good at comprehending spoken Spanish, so that’s what it sounds like to my mind. This is the first time I’ve had a dream that wasn’t in my native tongue, and now I’m curious if this is common for language students.&lt;/p>
&lt;p>Has anyone else ever had a dream in another language? Tell me about it.&lt;/p></description></item><item><title>BibleFeed Project: Consuming a SOAP web service</title><link>https://peterextexia.com/blog/biblefeed-project-consuming-a-soap-web-service/</link><pubDate>Mon, 30 Mar 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/biblefeed-project-consuming-a-soap-web-service/</guid><description>&lt;p>This is the third post in the BibleFeed Project. If you haven&amp;rsquo;t already, read the &lt;a href="https://peterextexia.com/blog/introducing-the-biblefeed-project/">first&lt;/a> and &lt;a href="https://peterextexia.com/blog/biblefeed-project-creating-the-models/">second&lt;/a> posts.&lt;/p>
&lt;p>In &lt;a href="https://peterextexia.com/blog/the-difficulty-of-consuming-a-net-web-service-using-python/">my last post&lt;/a> I stated the difficulty I was having finding a python library to handle the SOAP web service which I&amp;rsquo;ll be using to get the data for this project. I gave up on using a library for SOAP and decided to use &lt;a href="https://docs.python.org/2.7/howto/urllib2.html" target="_blank">urllib2&lt;/a> to send the SOAP request and retrieve the response, and &lt;a href="http://docs.python.org/library/xml.etree.elementtree.html" target="_blank">ElementTree&lt;/a> to parse the response. Both of these are standard libraries in Python 2.5 and higher, so you should not need to install anything extra to use these libraries.&lt;/p>
&lt;p>&lt;strong>Creating the SOAP request&lt;/strong>&lt;/p>
&lt;p>I decided to take advantage of &lt;a href="http://docs.djangoproject.com/en/dev/topics/templates/" target="_blank">Django&amp;rsquo;s template system&lt;/a> to create the SOAP requests. The advantages of this approach are that I can easily insert variable data into each SOAP request, I don&amp;rsquo;t have to manually build the XML in code using a potentially clumsy API, I&amp;rsquo;m not hard-coding the XML in a string, and tweaking the request is as simple as editing any other XML file.&lt;/p>
&lt;p>To accomplish this, I created a templates directory under the bible directory (this the directory where models.py lives). I edited settings.py so that Django knows where the template directory is.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>TEMPLATE_DIRS &lt;span style="color:#f92672">=&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Put strings here, like &amp;#34;/home/html/django_templates&amp;#34; or &amp;#34;C:/www/django/templates&amp;#34;.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Always use forward slashes, even on Windows.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Don&amp;#39;t forget to use absolute paths, not relative paths.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;bible/templates&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In the templates directory I created a file called soaprequest_listbooks.xml which contains the SOAP request to get the list of books from the web service.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">&amp;lt;SOAP-ENV:Envelope&lt;/span> &lt;span style="color:#a6e22e">xmlns:ns0=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://www.francisshanahan.com/&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:SOAP-ENC=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://schemas.xmlsoap.org/soap/encoding/&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:xsi=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:SOAP-ENV=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://schemas.xmlsoap.org/soap/envelope/&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;SOAP-ENV:Header/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;SOAP-ENV:Body&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;ns0:ListBooks/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/SOAP-ENV:Body&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You may have noticed that this template doesn&amp;rsquo;t use any variables at all. That&amp;rsquo;s okay, in the future I will be making this code usuable for all our SOAP requests, so I will need to be able to use template variables in the future.&lt;/p>
&lt;p>&lt;strong>Sending the SOAP request and reading the response&lt;/strong>&lt;/p>
&lt;p>At this point, I haven&amp;rsquo;t written any code that does anything yet. I&amp;rsquo;m going to change that now. In the bible directory there is a mostly empty file called views.py. This file is intended to contain &lt;a href="http://docs.djangoproject.com/en/dev/topics/http/views/#topics-http-views" target="_blank">views&lt;/a>, which are methods that produce an HttpResponse based on a given HttpRequest. I created a view called listbooks_view, which will retrieve the list of books of the Bible from the web service, and save these books in my database.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> urllib2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> django.template &lt;span style="color:#f92672">import&lt;/span> Context, loader
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> django.http &lt;span style="color:#f92672">import&lt;/span> HttpResponse
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> bible.models &lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#f92672">*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> string &lt;span style="color:#f92672">import&lt;/span> atoi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> xml.etree.ElementTree &lt;span style="color:#66d9ef">as&lt;/span> ET
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">listbooks_view&lt;/span>(request):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Create the SOAP request and send it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> url &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;http://francisshanahan.com/TheHolyBible.asmx&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> headers &lt;span style="color:#f92672">=&lt;/span> {&lt;span style="color:#e6db74">&amp;#39;Soapaction&amp;#39;&lt;/span> : &lt;span style="color:#e6db74">&amp;#39;&amp;#34;http://www.francisshanahan.com/ListBooks&amp;#34;&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;Content-Type&amp;#39;&lt;/span> : &lt;span style="color:#e6db74">&amp;#39;text/xml&amp;#39;&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> request_template &lt;span style="color:#f92672">=&lt;/span> loader&lt;span style="color:#f92672">.&lt;/span>get_template(&lt;span style="color:#e6db74">&amp;#39;soaprequest_listbooks.xml&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> request_context &lt;span style="color:#f92672">=&lt;/span> Context({}) &lt;span style="color:#75715e">#nothing is needed for this request&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> request_data &lt;span style="color:#f92672">=&lt;/span> request_template&lt;span style="color:#f92672">.&lt;/span>render(request_context)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> http_req &lt;span style="color:#f92672">=&lt;/span> urllib2&lt;span style="color:#f92672">.&lt;/span>Request(url, request_data, headers)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> http_resp &lt;span style="color:#f92672">=&lt;/span> urllib2&lt;span style="color:#f92672">.&lt;/span>urlopen(http_req)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Assuming we got a successful response, parse it and store the results in the database&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> soap_resp &lt;span style="color:#f92672">=&lt;/span> ET&lt;span style="color:#f92672">.&lt;/span>fromstring(http_resp&lt;span style="color:#f92672">.&lt;/span>read())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Lovely path, huh?&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> books_xml &lt;span style="color:#f92672">=&lt;/span> soap_resp&lt;span style="color:#f92672">.&lt;/span>findall(&lt;span style="color:#e6db74">&amp;#39;{http://schemas.xmlsoap.org/soap/envelope/}Body/{http://www.francisshanahan.com/}ListBooksResponse/{http://www.francisshanahan.com/}ListBooksResult/{urn:schemas-microsoft-com:xml-diffgram-v1}diffgram/NewDataSet/bible_content&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">for&lt;/span> book_xml &lt;span style="color:#f92672">in&lt;/span> books_xml:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> id &lt;span style="color:#f92672">=&lt;/span> atoi(book_xml&lt;span style="color:#f92672">.&lt;/span>find(&lt;span style="color:#e6db74">&amp;#39;Book&amp;#39;&lt;/span>)&lt;span style="color:#f92672">.&lt;/span>text)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> id&lt;span style="color:#f92672">&amp;lt;&lt;/span>&lt;span style="color:#ae81ff">100&lt;/span>: &lt;span style="color:#75715e"># This webservice returns other stuff numbered 100 and higher that isn&amp;#39;t actual bible content&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> book &lt;span style="color:#f92672">=&lt;/span> Book()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> book&lt;span style="color:#f92672">.&lt;/span>id &lt;span style="color:#f92672">=&lt;/span> id
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> book&lt;span style="color:#f92672">.&lt;/span>name &lt;span style="color:#f92672">=&lt;/span> book_xml&lt;span style="color:#f92672">.&lt;/span>find(&lt;span style="color:#e6db74">&amp;#39;BookTitle&amp;#39;&lt;/span>)&lt;span style="color:#f92672">.&lt;/span>text
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> id&lt;span style="color:#f92672">&amp;lt;&lt;/span>&lt;span style="color:#ae81ff">40&lt;/span>: &lt;span style="color:#75715e">#The first 39 books are in the Old Testament, the rest are New Testament&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> book&lt;span style="color:#f92672">.&lt;/span>testament &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;O&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> book&lt;span style="color:#f92672">.&lt;/span>testament &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;N&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> book&lt;span style="color:#f92672">.&lt;/span>save()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> HttpResponse(&lt;span style="color:#e6db74">&amp;#39;Success!&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The path used to parse the XML in the SOAP response is kind of nasty due to the heavy use of XML namespaces in the SOAP response. In my experience this is pretty common, and is just the nature of dealing with SOAP. To give you an idea of what the XML that I&amp;rsquo;m parsing looks like, here&amp;rsquo;s a snippet of the SOAP response:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">&amp;lt;soap:Envelope&lt;/span> &lt;span style="color:#a6e22e">xmlns:soap=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://schemas.xmlsoap.org/soap/envelope/&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:xsi=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:xsd=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://www.w3.org/2001/XMLSchema&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;soap:Body&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;ListBooksResponse&lt;/span> &lt;span style="color:#a6e22e">xmlns=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://www.francisshanahan.com/&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;ListBooksResult&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:schema&lt;/span> &lt;span style="color:#a6e22e">id=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;NewDataSet&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:xs=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;http://www.w3.org/2001/XMLSchema&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:msdata=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;urn:schemas-microsoft-com:xml-msdata&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:element&lt;/span> &lt;span style="color:#a6e22e">name=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;NewDataSet&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">msdata:IsDataSet=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;true&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">msdata:UseCurrentLocale=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:complexType&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:choice&lt;/span> &lt;span style="color:#a6e22e">minOccurs=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;0&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">maxOccurs=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;unbounded&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:element&lt;/span> &lt;span style="color:#a6e22e">name=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;bible_content&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:complexType&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:sequence&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:element&lt;/span> &lt;span style="color:#a6e22e">name=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Book&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">type=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;xs:int&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">minOccurs=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;0&amp;#34;&lt;/span> &lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;xs:element&lt;/span> &lt;span style="color:#a6e22e">name=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;BookTitle&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">type=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;xs:string&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">minOccurs=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;0&amp;#34;&lt;/span> &lt;span style="color:#f92672">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/xs:sequence&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/xs:complexType&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/xs:element&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/xs:choice&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/xs:complexType&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/xs:element&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/xs:schema&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;diffgr:diffgram&lt;/span> &lt;span style="color:#a6e22e">xmlns:msdata=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;urn:schemas-microsoft-com:xml-msdata&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">xmlns:diffgr=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;urn:schemas-microsoft-com:xml-diffgram-v1&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;NewDataSet&lt;/span> &lt;span style="color:#a6e22e">xmlns=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;bible_content&lt;/span> &lt;span style="color:#a6e22e">diffgr:id=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;bible_content1&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">msdata:rowOrder=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;0&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;Book&amp;gt;&lt;/span>1&lt;span style="color:#f92672">&amp;lt;/Book&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;BookTitle&amp;gt;&lt;/span>The First Book of Moses, called Genesis&lt;span style="color:#f92672">&amp;lt;/BookTitle&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/bible_content&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;bible_content&lt;/span> &lt;span style="color:#a6e22e">diffgr:id=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;bible_content2&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">msdata:rowOrder=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;Book&amp;gt;&lt;/span>2&lt;span style="color:#f92672">&amp;lt;/Book&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;BookTitle&amp;gt;&lt;/span>The Second Book of Moses, Called Exodus&lt;span style="color:#f92672">&amp;lt;/BookTitle&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;/bible_content&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;bible_content&lt;/span> &lt;span style="color:#a6e22e">diffgr:id=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;bible_content3&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">msdata:rowOrder=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;2&amp;#34;&lt;/span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;lt;Book&amp;gt;&lt;/span>3&lt;span style="color:#f92672">&amp;lt;/Book&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you&amp;rsquo;re following along at home, you may be tempting to run the django test web server and see if the code works. You will be disappointed when you see &amp;ldquo;ProgrammingError at /listbooks/ ERROR: value too long for type character varying(50).&amp;rdquo; What this means is that the name field in the Book model is too short. As you can see from the SOAP response above, this webservice uses long names for each of the books of the Bible. Where I initially expected names like &amp;ldquo;Matthew&amp;rdquo; and &amp;ldquo;Corinthians I&amp;rdquo;, instead I got names like &amp;ldquo;The Gospel According to St. Matthew&amp;rdquo; and &amp;ldquo;The First Epistle of Paul the Apostle to the Corinthians.&amp;rdquo; Thankfully this is easy to fix. I edited models.py so that the name field in the Book model is 120 characters long instead of 50.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">Book&lt;/span>(models&lt;span style="color:#f92672">.&lt;/span>Model):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> TESTAMENTS &lt;span style="color:#f92672">=&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#e6db74">&amp;#39;O&amp;#39;&lt;/span>,&lt;span style="color:#e6db74">&amp;#39;Old Testament&amp;#39;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#e6db74">&amp;#39;N&amp;#39;&lt;/span>,&lt;span style="color:#e6db74">&amp;#39;New Testament&amp;#39;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>CharField(max_length&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">120&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> testament &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>CharField(max_length&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>, choices&lt;span style="color:#f92672">=&lt;/span>TESTAMENTS)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Next, I need to adjust the database so that the name column for the &amp;ldquo;bible_book&amp;rdquo; table is 120 characters long. Note that in the snippet below I use PostgreSQL for my database. If you are using MySQL or some other database, the SQL will be slightly different.&lt;/p>
&lt;pre tabindex="0">&lt;code>$ python manage.py dbshell
Password for user postgres:
Welcome to psql 8.3.3, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
biblefeed=# alter table bible_book alter name type varchar(120);
ALTER TABLE
biblefeed=# \d bible_book
Table &amp;#34;public.bible_book&amp;#34;
Column | Type | Modifiers
-----------+------------------------+---------------------------------------------------------
 id | integer | not null default nextval(&amp;#39;bible_book_id_seq&amp;#39;::regclass)
 name | character varying(120) | not null
 testament | character varying(1) | not null
Indexes:
&amp;#34;bible_book_pkey&amp;#34; PRIMARY KEY, btree (id)
&lt;/code>&lt;/pre>&lt;p>Now, you can run the django test webserver. Open http://localhost:8000/listbooks/ and you should see &amp;ldquo;Success!&amp;rdquo;&lt;/p>
&lt;p>So how do I know this worked? I go back to the database to see what&amp;rsquo;s in the &amp;ldquo;bible_book&amp;rdquo; table.&lt;/p>
&lt;pre tabindex="0">&lt;code>$ python manage.py dbshell
Password for user postgres:
Welcome to psql 8.3.3, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
biblefeed=# select * from bible_book order by id;
 id | name | testament
----+-------------------------------------------------------------+-----------
1 | The First Book of Moses, called Genesis | O
2 | The Second Book of Moses, Called Exodus | O
3 | The Second Book of Moses, called Leviticus | O
4 | The Fourth Book of Moses, called Numbers | O
5 | The Fifth Book of Moses, called Deuteronomy | O
6 | The Book of Joshua | O
7 | The Book of Judges | O
8 | The Book of Ruth | O
9 | The First Book of Samuel | O
 10 | The Second Book of Samuel | O
 11 | The First Book of the Kings | O
 12 | The Second Book of the Kings | O
 13 | The First Book of the Chronicles | O
 14 | The Second Book of the Chronicles | O
 15 | The Book of Ezra | O
 16 | The Book of Nehemiah | O
 17 | The Book of Esther | O
 18 | The Book of Job | O
 19 | The Book of Psalms | O
 20 | The Proverbs | O
 21 | Ecclesiastes or, The Preacher | O
 22 | The Song of Songs, Which is Solomon&amp;#39;s | O
 23 | The Book of the Prophet Isaiah | O
 24 | The Book of the Prophet Jeremiah | O
 25 | The Lamentations of Jeremiah | O
 26 | The Book of the Prophet Ezekiel | O
 27 | The Book of Daniel | O
 28 | The Book of Hosea | O
 29 | The Book of Joel | O
 30 | The Book of Amos | O
 31 | The Book of Obadiah | O
 32 | The Book of Jonah | O
 33 | The Book of Micah | O
 34 | The Book of Nahum | O
 35 | The Book of Habakkuk | O
 36 | The Book of Zephaniah | O
 37 | The Book of Haggai | O
 38 | The Book of Zechariah | O
 39 | The Book of Malachi | O
 40 | The Gospel According to St. Matthew | N
 41 | The Gospel According to Saint Mark | N
 42 | The Gospel According to St. Luke | N
 43 | The Gospel According to Saint John | N
 44 | The Acts of the Apostles | N
 45 | The Epistle of Paul the Apostle to the Romans | N
 46 | The First Epistle of Paul the Apostle to the Corinthians | N
 47 | The Second Epistle of Paul the Apostle to the Corinthians | N
 48 | The Epistle of Paul the Apostle to the Galatians | N
 49 | The Epistle of Paul the Apostle to the Ephesians | N
 50 | The Epistle of Paul the Apostle to the Philippians | N
 51 | The Epistle of Paul the Apostle to the Colossians | N
 52 | The First Epistle of Paul to the Thessalonians | N
 53 | The Second Epistle of Paul the Apostle to the Thessalonians | N
 54 | The First Epistle of Paul the Apostle to Timothy | N
 55 | The Second Epistle of Paul the Apostle to Timothy | N
 56 | The Epistle of Paul to Titus | N
 57 | The Epistle of Paul to Philemon | N
 58 | The Epistle to the Hebrews | N
 59 | The General Epistle of James | N
 60 | The First Epistle General of Peter | N
 61 | The Second Epistle General of Peter | N
 62 | The First Epistle General of John | N
 63 | The Second Epistle of John | N
 64 | The Third Epistle of John | N
 65 | The General Epistle of Jude | N
 66 | The Revelation to Saint John | N
(66 rows)
&lt;/code>&lt;/pre>&lt;p>If you have questions, or if I missed something or just didn&amp;rsquo;t cover it enough, then leave a comment.&lt;/p></description></item><item><title>The difficulty of consuming a .NET Web Service using Python</title><link>https://peterextexia.com/blog/the-difficulty-of-consuming-a-net-web-service-using-python/</link><pubDate>Fri, 06 Mar 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/the-difficulty-of-consuming-a-net-web-service-using-python/</guid><description>&lt;p>This post is not part of my &lt;a href="https://peterextexia.com/tags/biblefeed">Biblefeed&lt;/a> series of posts, but it is very much related. For the Biblefeed project, I was hoping to consume &lt;a href="https://web.archive.org/web/20090218110225/https://www.francisshanahan.com/Bible.aspx" target="_blank">this web service&lt;/a> in order to get the data I need to make the project work. The web service appears to be a SOAP web service written in .Net.&lt;/p>
&lt;p>In my day job, I develop using C# and VB.Net and use .Net web services all the time. Of course, consuming a .Net web service with a .Net client is very easy. I had hoped that with the relative popularity of the .Net programming languages that python would have a good SOAP library that could make the task easier.&lt;/p>
&lt;p>Based I what I&amp;rsquo;ve been able to discover so far, I can only state that python does indeed have libraries for dealing with SOAP. I have not been able to make any of them work with the web service mentioned above though.&lt;/p>
&lt;p>When googling, the first thing I found was &lt;a href="http://pywebsvcs.sourceforge.net/" target="_blank">SOAPpy and ZSI&lt;/a>. I was a bit alarmed that the last release date for these was in 2001. I tried to install SOAPpy, which seemed to install ok, but apparently had a dependency on &lt;a href="http://sourceforge.net/projects/pyxml" target="_blank">PyXML&lt;/a>, which is no longer maintained. I abandoned trying to use the libraries at this point.&lt;/p>
&lt;p>After some digging, I discovered there are two more modern libraries, soaplib and suds. Both of these seemed to be capable libraries. Soaplib seems like it&amp;rsquo;s a little stronger on the server side and suds looks to be easier to use on the client side.&lt;/p>
&lt;p>To use soaplib as client like I want to do here, I need to create stub classes which resemble the structures used by the web service. I played with this for a little while, but gave up on it because I realized that the web service uses &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx" target="_blank">Dataset&lt;/a> objects, which I couldn&amp;rsquo;t figure out how to represent in a python stub class.&lt;/p>
&lt;p>Suds is a little nicer because it reads the WSDL for the web service to keep from requiring you to build stub classes, however it does not like Dataset&amp;rsquo;s either. I was running into the issue described &lt;a href="https://web.archive.org/web/20101216192011/https://fedorahosted.org/suds/ticket/64" target="_blank">here&lt;/a>. As of this writing that issue is still open. One of the comments on that issue suggested removing the &lt;em>&amp;lt;s:element ref=&amp;ldquo;s:schema&amp;rdquo;/&amp;gt;&lt;/em> tags from the WSDL, so I saved the WSDL file locally and tried it. I was able to progress with suds a little further because of that, but when I actually tried to call the webservice it errored out.&lt;/p>
&lt;p>So I guess no luck today for me with any SOAP libraries. The examples out there seem to show that consuming web services created in Java or Python works just fine, and even .Net web services can work when they use simple types. Unfortunately I have no control of the service that I want to consume and so I must try something else.&lt;/p>
&lt;p>Possible solutions? While I&amp;rsquo;m sure I could use &lt;a href="http://mono-project.com/Main_Page" target="_blank">mono&lt;/a> to access the web service and have it return something I can use in python, I don&amp;rsquo;t want to make my solution too complex. I have an idea that I&amp;rsquo;m going to try next that will involve Django&amp;rsquo;s template system. If it works, it will be in the next post concerning the Biblefeed project.&lt;/p></description></item><item><title>Huevos verdes con jamón</title><link>https://peterextexia.com/blog/huevos-verdes-con-jam%C3%B3n/</link><pubDate>Mon, 02 Mar 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/huevos-verdes-con-jam%C3%B3n/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;a href="http://www.amazon.com/gp/product/1880507013?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1880507013" target="_blank">&lt;img src="https://peterextexia.com/2009/03/71nxme2m8hl_sl160_.gif" alt="Huevos verdes con jamón" title="Huevos verdes con jamón">&lt;/a>&lt;/p>
&lt;p>This past Christmas, I received
&lt;a href="http://www.amazon.com/gp/product/1880507013?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1880507013" target="_blank">Huevos verdes con jamón&lt;/a>, which is the Spanish translation of
&lt;a href="http://en.wikipedia.org/wiki/Green_eggs_and_ham" target="_blank">Green Eggs and Ham&lt;/a>
by Dr. Seuss. I’ve read the book a few times now, but I just read it again, this time adding quite a bit to my &lt;a href="https://peterextexia.com/tags/srs/">SRS&lt;/a> as I went. By total coincidence, this post is in time for
&lt;a href="http://en.wikipedia.org/wiki/Dr._Seuss" target="_blank">Dr. Seuss’s birthday&lt;/a>.&lt;/p>
&lt;p>The first Wikipedia article I linked to above says that the book came about as a bet by Dr. Seuss’s editor that he couldn’t write a book with only 50 unique words. The original English version of Green Eggs and Ham uses 50 unique words exactly, making the book one of the easiest to read for new readers while remaining entertaining.&lt;/p>
&lt;p>I was curious if the Spanish version of the book kept a similar principal, but it does not. My count has 96 unique words. I expect that keeping the rhyme and the tone of the story in the translation was far more important than keeping the number of unique words low. The translation is not exact because of this, for instance, Sam-I-am is replaced by Juan Ramón. Some of these interesting sentences from the book also demonstrate this:&lt;/p>
&lt;p>&lt;strong>No los como en un barco, ni navegando en un charco.&lt;/strong>
This translates to
&lt;em>I do not eat them on a boat, nor sailing in a pool.&lt;/em>
Wordreference.com tells me that
&lt;a href="http://www.wordreference.com/es/en/translation.asp?spen=charco" target="_blank">charco&lt;/a>
can colloquially refer to the Atlantic, even though it means pool or puddle.&lt;/p>
&lt;p>&lt;strong>No los quiero en la tormenta, no me tientan, ni en el túnel ni en el tren me sientan bien.&lt;/strong>
This one took me some time to translate:&lt;/p>
&lt;p>&lt;em>I do not want them in the storm, they don’t tempt me, nor in the tunnel nor on the train do they agree with me well.&lt;/em>&lt;/p>
&lt;p>&lt;strong>En la tormenta o en el tren, ni por asomo.&lt;/strong>
Translation:
&lt;em>In the rain or on the train, not a chance.&lt;/em>
It took some googling for me to discover that
&lt;em>ni por asomo&lt;/em>
is an idiom meaning something like “not a chance.” Literally it seems to mean “not for show.”&lt;/p>
&lt;p>For the curious, here are the 96 words used in Huevos verdes con jamón:&lt;/p>
&lt;p>&lt;em>allá aquí árbol asomo barco basta bien cabra cajón caserón charco coche cómelos comeré comería comerías comerlos como con déjame dejas después dime dirás doy el en enfrían ese esta gracias gusta gustan gustarán gustarían huevos jamón Juan la lo los más me menos mucho nada navegando ni ninguna no noche o ocasión palabra paz podría podrías probaré pruébalos pruebas puedes pues que querría querrías quieres quiero quizás Ramón ratón ricos ridiculez rincón se si sientan son soy tal también tampoco te tientan tormenta tren túnel un una vaya verás verdes vez y ya yo zorro&lt;/em>&lt;/p>
&lt;p>While googling, I did find a PDF containing the entire text of the book, though without the matching illustrations. You can find that
&lt;a href="https://files.ecatholic.com/19024/documents/2017/11/III-9%20Los%20Huevos%20Verdes%20con%20Jam%C3%B3n.pdf?t=1544829987000" target="_blank">here&lt;/a>.&lt;/p></description></item><item><title>BibleFeed Project: Creating the models</title><link>https://peterextexia.com/blog/biblefeed-project-creating-the-models/</link><pubDate>Thu, 29 Jan 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/biblefeed-project-creating-the-models/</guid><description>&lt;p>This is the second post relating to the BibleFeed Project. If you haven&amp;rsquo;t yet, you may want to read the &lt;a href="https://peterextexia.com/blog/introducing-the-biblefeed-project">first post&lt;/a>.&lt;/p>
&lt;p>As with most applications, this one needs to store data. To store data in a &lt;a href="http://www.djangoproject.com/" target="_blank">django&lt;/a> project, I need to first create models representing the data. While I&amp;rsquo;m sure that the following will not be everything, this is good enough to start with:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">Book&lt;/span>(models&lt;span style="color:#f92672">.&lt;/span>Model):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> TESTAMENTS &lt;span style="color:#f92672">=&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#e6db74">&amp;#39;O&amp;#39;&lt;/span>,&lt;span style="color:#e6db74">&amp;#39;Old Testament&amp;#39;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#e6db74">&amp;#39;N&amp;#39;&lt;/span>,&lt;span style="color:#e6db74">&amp;#39;New Testament&amp;#39;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>CharField(max_length&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">50&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> testament &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>CharField(max_length&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>, choices&lt;span style="color:#f92672">=&lt;/span>TESTAMENTS)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">Chapter&lt;/span>(models&lt;span style="color:#f92672">.&lt;/span>Model):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> book &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>ForeignKey(Book)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> chapter_num &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>IntegerField()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">Verse&lt;/span>(models&lt;span style="color:#f92672">.&lt;/span>Model):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> chapter &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>ForeignKey(Chapter)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> text &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>TextField()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> verse_num &lt;span style="color:#f92672">=&lt;/span> models&lt;span style="color:#f92672">.&lt;/span>IntegerField()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>These models are straightforward. There is a Book class which will store the name of book and which testament it is part of. The Chapter class has a field storing which book it is part of, and a field for the chapter number. The Verse class points to the chapter that contains it and has fields for the text of the verse and the verse number. Now I need to have somewhere to store the data now that I have the models to represent it. Before I do that though, I need to let django know it should include the BibleFeed application. I edit the INSTALLED_APPS setting in the settings.py field:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>INSTALLED_APPS &lt;span style="color:#f92672">=&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;django.contrib.auth&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;django.contrib.contenttypes&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;django.contrib.sessions&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;django.contrib.sites&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;biblefeed.bible&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now I can run the syncdb command which will create the database tables.&lt;/p>
&lt;pre tabindex="0">&lt;code>$ python manage.py syncdb
Creating table bible_book
Creating table bible_chapter
Creating table bible_verse
Installing index for bible.Chapter model
Installing index for bible.Verse model
&lt;/code>&lt;/pre>&lt;p>I realize at this point I haven&amp;rsquo;t shown anything too exciting, and there&amp;rsquo;s not much that is interactive here, unless you really enjoy viewing the tables in the database. The next post will create something a little more interactive.&lt;/p></description></item><item><title>Listening to compressed words in Spanish</title><link>https://peterextexia.com/blog/listening-to-compressed-words-in-spanish/</link><pubDate>Thu, 29 Jan 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/listening-to-compressed-words-in-spanish/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I’ve been trying to improve my listening skills in Spanish. So far I’m terrible at it but I’m picking up more words the longer I listen. I’ve discovered part of the reason I have difficulty understanding words is because
&lt;strong>Spanish speakers like to compress their words together when consecutive words end and begin with a vowel sound&lt;/strong>.&lt;/p>
&lt;p>For example: Listen to the
&lt;a href="https://en.wikibooks.org/wiki/Spanish_by_Choice%2FSpanishPod_newbie_lesson_A0076" target="_blank">jet-lag lesson on SpanishPod.com&lt;/a>. Pay attention to the 4th line of the dialog (about 1:25 into the lesson). The man says “&lt;em>Ah, claro. Porqué aquí son ocho horas más.&lt;/em>” but what it sounds like is “&lt;em>Ah, claro. Porquéqui son ochoras más.&lt;/em>”
&lt;strong>This takes some getting used to&lt;/strong>, and I admit I’m still not good at differentiating each word when it all runs together, but I’m getting better.
&lt;strong>Practice, practice, practice.&lt;/strong>&lt;/p></description></item><item><title>Find music you actually like in the language you are learning</title><link>https://peterextexia.com/blog/find-music-you-actually-like-in-the-language-you-are-learning/</link><pubDate>Sun, 11 Jan 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/find-music-you-actually-like-in-the-language-you-are-learning/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2009/01/2565850315_6a74f8b9d0.jpg" alt="Photo by [nati]" title="Photo by [nati]">&lt;/p>
&lt;p>&lt;em>&lt;a href="http://flickr.com/photos/natita2/2565850315/" target="_blank">Photo by [nati]&lt;/a>&lt;/em>&lt;/p>
&lt;p>One of the great challenges of learning a new language is
&lt;strong>immersing yourself in the new language enough&lt;/strong>
so that you can almost
&lt;strong>absorb it through osmosis&lt;/strong>
. In addition to putting index cards up around your house, setting up
&lt;a href="https://peterextexia.com/blog/frases-en-espa%c3%b1ol-mobile-phone">your mobile phone&lt;/a>
and
&lt;a href="https://peterextexia.com/blog/i-switched-my-kde-desktop-to-spanish">your computer&lt;/a>
in your target language,
&lt;a href="https://web.archive.org/web/20100324104122/http://babelhut.com/languages/japanese/project-mayhem/chapter-5-japanese-giants/" target="_blank">watching movies&lt;/a>
in your new language, or
&lt;a href="https://peterextexia.com/blog/learn-spanish-vocabulary-in-the-shower/">installing a new shower curtain&lt;/a>, you can also
&lt;a href="http://www.spanish-only.com/2008/06/rapping-all-day-long/" target="_blank">listen to music&lt;/a>
in the language you are learning.&lt;/p>
&lt;p>If you happen to like the most popular music genres in your target language, this isn’t that hard. For example a search for “&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref%255F%3Dnb%255Fss%255Fgw%26y%3D0%26field-keywords%3Dspanish%2520music%26url%3Dsearch-alias%253Daps&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">spanish music&lt;/a>” on amazon.com gives you some Spanish guitar music and some children’s songs. The children’s songs might be helpful, but
&lt;strong>I’m certain this would drive me crazy quickly&lt;/strong>
. Another example could be a search for “&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref%255F%3Dnb%255Fss%255Fgw%26y%3D0%26field-keywords%3Dgerman%2520music%26url%3Dsearch-alias%253Daps&amp;amp;tag=babelhut-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957" target="_blank">german music&lt;/a>,” which gives a lot of folk music and beer drinking music.&lt;/p>
&lt;p>This is all well and good, and you may actually like listening to the stuff you find in those searches every once in a while.
&lt;strong>But is it music that you would really rock out to?&lt;/strong>
Would you like listening to it over and over during your commute to work everyday? Would it last on your mp3 player’s playlist for you exercise routine? I suspect that the most likely answer is no.&lt;/p>
&lt;p>So what do you do? What if what really gets you going is heavy metal? Or rap? Or industrial techno? I didn’t see any of those music genres in the searches I just did on amazon. Often the first place I go to is google. A search for “spanish heavy metal” brought up some band names. This is a start, but
&lt;strong>how do you know if you will actually like any of these bands?&lt;/strong>&lt;/p>
&lt;p>&lt;a href="http://last.fm" target="_blank">Last.fm&lt;/a>
is a great resource for this. Either start searching for bands based on the names you found in your google search, or search the tags for the genre and language, like “spanish heavy metal.” From here you can click on a page for a band. Last.fm provides streaming audio for music from this band, and from bands that are similar. If you don’t like the band you looked at, try another.
&lt;strong>Once you find one you like, you will probably also like some of the bands listed as being similar.&lt;/strong>&lt;/p>
&lt;p>Another important tip: Don’t just search for music using English language terms like “spanish metal” or “german rap.”
&lt;strong>Use the terms in your target language&lt;/strong>
like “metal español” or “deutsch rapmusik.”&lt;/p>
&lt;p>There is one more place to search that has worked very well for me. Amazon.com’s users can put together lists of similar items that they like and share them, in a section called “Listmania.” A search of “&lt;a href="https://web.archive.org/web/20091126161710/http://www.amazon.com/gp/community-content-search/results?ie=UTF8&amp;amp;x=0&amp;amp;search-alias=rp-listmania&amp;amp;ref%5F=cm%5Fsrch%5Fq%5Fcol%5Frpli&amp;amp;y=0&amp;amp;query=espa%C3%B1ol%20metal" target="_blank">español metal&lt;/a>” in the Listmania category helped me to find
&lt;a href="https://web.archive.org/web/20091126150241/http://www.amazon.com/Best-Rock-amp-Metal-Espa%C3%B1ol/lm/R3SIHT7AFZ3JZI" target="_blank">this awesome list&lt;/a>, which I have used to find Spanish metal bands that I like.&lt;/p>
&lt;p>Do you have other tips for finding music? Post them in the comments!&lt;/p></description></item><item><title>Introducing the BibleFeed project</title><link>https://peterextexia.com/blog/introducing-the-biblefeed-project/</link><pubDate>Fri, 09 Jan 2009 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/introducing-the-biblefeed-project/</guid><description>&lt;p>I&amp;rsquo;m definitely a creature of habit. I often tell myself I need to read the bible more, so I could actually know something about my faith. I haven&amp;rsquo;t been doing this because it has been difficult I never bothered to put it into my routine. I figure if I can integrate the bible with something I read everyday, like &lt;a href="https://en.wikipedia.org/wiki/Google_Reader" target="_blank">Google Reader&lt;/a>, I may actually accomplish something instead of just setting up yet another abstract desire in my mind without a plan of action.&lt;/p>
&lt;p>The idea for this project is simple. Create an RSS feed of verses from the bible which I can add to Google Reader or any other feed reader. If I read a chapter a day, then over time (around 3 years) I will have read the entire bible.&lt;/p>
&lt;p>I&amp;rsquo;ll admit that there&amp;rsquo;s another purpose here. I want to practice development with &lt;a href="http://www.djangoproject.com/" target="_blank">Django&lt;/a> and &lt;a href="http://python.org/" target="_blank">Python&lt;/a>. This is not my first Django project. Ok, it&amp;rsquo;s my second, but the first project is something that a friend and I are slowly working on that I can&amp;rsquo;t talk about yet.&lt;/p>
&lt;p>Just like most software developers, documentation is a weakness of mine, so I will be documenting this project as I go. This helps me practice writing and documentation, and helps you if you have any interest in Django or just how to go about creating an RSS feed of the bible.&lt;/p>
&lt;p>On a technical note, I am using Linux, but this can be done with Windows and Mac OS X as well. The steps may vary slightly for those operating systems.&lt;/p>
&lt;p>The first place to start is to actually create the project. The steps I&amp;rsquo;m using will mostly follow along with the official Django tutorial. See &lt;a href="http://docs.djangoproject.com/en/dev/intro/tutorial01/" target="_blank">http://docs.djangoproject.com/en/dev/intro/tutorial01/&lt;/a>.&lt;/p>
&lt;blockquote>
&lt;p>django-admin.py startproject biblefeed&lt;/p>&lt;/blockquote>
&lt;p>Create the database, which I&amp;rsquo;m calling &amp;ldquo;biblefeed&amp;rdquo;. I&amp;rsquo;m using PostgreSQL and the command that follows will be different if you use a different database backend.&lt;/p>
&lt;blockquote>
&lt;p>createdb -E UTF8 -U postgres biblefeed&lt;/p>&lt;/blockquote>
&lt;p>Edit the settings.py to match your database settings:&lt;/p>
&lt;blockquote>
&lt;p>DATABASE_ENGINE = &amp;lsquo;postgresql&amp;rsquo; DATABASE_NAME = &amp;lsquo;biblefeed&amp;rsquo; DATABASE_USER = &amp;lsquo;postgres&amp;rsquo; DATABASE_PASSWORD = &amp;lsquo;xxxxxxxx&amp;rsquo;&lt;/p>&lt;/blockquote>
&lt;p>Sync the database to setup default tables and create a super user when prompted.&lt;/p>
&lt;blockquote>
&lt;p>python manage.py syncdb&lt;/p>&lt;/blockquote>
&lt;p>Create the application.&lt;/p>
&lt;blockquote>
&lt;p>python manage.py startapp bible&lt;/p>&lt;/blockquote>
&lt;p>At this point I will add the project to my &lt;a href="https://subversion.apache.org/" target="_blank">subversion&lt;/a> repository. You do use a version control system, right?&lt;/p>
&lt;p>In the next article I will create the models I need to store bible verses in the database.&lt;/p></description></item><item><title>Learn Spanish Vocabulary in the Shower</title><link>https://peterextexia.com/blog/learn-spanish-vocabulary-in-the-shower/</link><pubDate>Sat, 06 Dec 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/learn-spanish-vocabulary-in-the-shower/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>It is said that the best way to learn a foreign language is through total immersion. So why should your shower be any different? Someone who was Christmas shopping for me found this &lt;a href="https://tilco.com/products/spanish-curtain" target="_blank">wonderful shower curtain&lt;/a>, which contains 250 Spanish words and their English definitions. It’s also available in &lt;a href="https://tilco.com/products/french-curtain" target="_blank">French&lt;/a>.&lt;/p>
&lt;p>Honestly, I’m awestruck.&lt;/p>
&lt;p>Have you seen other odd language learning material? Leave a comment to tell us about it…&lt;/p></description></item><item><title>Frases en Español: Néctar de Guayaba de concentrado</title><link>https://peterextexia.com/blog/frases-en-espa%C3%B1ol-n%C3%A9ctar-de-guayaba-de-concentrado/</link><pubDate>Sat, 22 Nov 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/frases-en-espa%C3%B1ol-n%C3%A9ctar-de-guayaba-de-concentrado/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>While celebrating my youngest son’s birthday earlier this week, I was enjoying a can of my favorite drink from México:
&lt;a href="https://www.coca-colamexico.com.mx/marcas/del-valle" target="_blank">Del Valle&lt;/a>
&lt;em>Néctar de Guayaba de concentrado&lt;/em>
(guava juice nectar from concentrate) when I realized I had just found the source for my next
&lt;a href="https://peterextexia.com/blog/frases-en-espa%c3%b1ol-mobile-phone">Frases en Español&lt;/a>
post! Conveniently the text on the can is bilingual so I did not need to do the translation myself, although I try not to look at the English text normally.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/11/delvalle.jpg" alt="25% de jugo de fruta" title="25% de jugo de fruta">&lt;/p>
&lt;p>Some handy advice from the side of the can:&lt;/p>
&lt;p>&lt;strong>Agítese antes de abrir&lt;/strong>&lt;/p>
&lt;p>Shake well before opening&lt;/p>
&lt;p>&lt;strong>Una vez abierto consérvese en refrigeración&lt;/strong>&lt;/p>
&lt;p>Refrigerate after opening&lt;/p>
&lt;p>&lt;strong>Disfruta, haz deporte, tomalo bien frío&lt;/strong>&lt;/p>
&lt;p>Enjoy, exercise, drink cold&lt;/p>
&lt;p>This is on the banner in the lower part of the can in the picture:&lt;/p>
&lt;p>&lt;strong>Buena fuente de vitamina C, sin conservadores&lt;/strong>&lt;/p>
&lt;p>Good source of vitamin C, without preservatives&lt;/p>
&lt;p>From the ingredients:&lt;/p>
&lt;p>&lt;strong>puré de guayaba a partir de concentrado&lt;/strong>&lt;/p>
&lt;p>guava puree from concentrate&lt;/p></description></item><item><title>Frases en Español: Mobile Phone</title><link>https://peterextexia.com/blog/frases-en-espa%C3%B1ol-mobile-phone/</link><pubDate>Mon, 17 Nov 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/frases-en-espa%C3%B1ol-mobile-phone/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I recently discovered that I could switch my phone’s display language from English to Spanish, and in doing so I was blown away by the new vocabulary that I hadn’t seen elsewhere. This, along with an
&lt;a href="https://web.archive.org/web/20100902122744/http://www.spanish-only.com/tag/word-of-the-day/" target="_blank">excellent series of posts from Ramses&lt;/a>, has inspired me to help others by sharing what I have learned.&lt;/p>
&lt;p>This is the first post in what may become a semi-regular series from me, called
&lt;em>Frases en Español&lt;/em>. In this series I will give you several sentences or phrases in Spanish from a particular source. These phrases will ideally introduce you and me to new vocabulary, and are ideal for adding to your
&lt;a href="https://peterextexia.com/tags/srs/">SRS&lt;/a>
study.&lt;/p>
&lt;p>By their nature, mobile phones have small screens, so the phrases found here are pretty short. Future posts in this series will contain longer phrases so that new grammar can be shown with the new vocabulary.&lt;/p>
&lt;p>Here are the phrases I found:&lt;/p>
&lt;p>&lt;strong>El dispositivo de bolsillo está bloqueado.&lt;/strong>&lt;/p>
&lt;p>The handheld device is locked.&lt;/p>
&lt;p>&lt;strong>Bloqueo del teclado&lt;/strong>&lt;/p>
&lt;p>Lock the keypad&lt;/p>
&lt;p>&lt;strong>Hacer una llamada&lt;/strong>&lt;/p>
&lt;p>Make a call&lt;/p>
&lt;p>&lt;strong>Números de marcación rápida&lt;/strong>&lt;/p>
&lt;p>Speed dial numbers&lt;/p>
&lt;p>&lt;strong>Libreta de direcciones&lt;/strong>&lt;/p>
&lt;p>Address Book&lt;/p>
&lt;p>&lt;strong>Mis tonos de llamada&lt;/strong>&lt;/p>
&lt;p>My ringtones&lt;/p>
&lt;p>If you have other mobile phone related phrases, or wish to correct my phrases (I’m a beginner after all), please comment below!&lt;/p></description></item><item><title>Recovering from a period of demotivation</title><link>https://peterextexia.com/blog/recovering-from-a-period-of-demotivation/</link><pubDate>Fri, 24 Oct 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/recovering-from-a-period-of-demotivation/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I need to make a confession. Over the past month or two, I’ve not been studying Spanish or any other language as I should. I found myself neglecting my
&lt;a href="https://peterextexia.com/tags/srs/">SRS&lt;/a>
for up to a couple of weeks at a time. I was not studying any new material. I was not playing
&lt;a href="http://www.amazon.com/gp/product/B000SQ5LOQ?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000SQ5LOQ" target="_blank">My Spanish Coach&lt;/a>
on my Nintendo DS and I was not listening to any of the Spanish podcasts that I had subscribed to. I was not watching Spanish television and I was not practicing speaking and listening with my Spanish-speaking friends.&lt;/p>
&lt;p>There are many things I’d like to blame. A stressful personal life. A busy work schedule. Lack of sleep. I’m sure these were all contributing factors, but I think I know the source of the problem: me.&lt;/p>
&lt;p>More specifically, it was my decision not to spend at least a few minutes a day on my SRS or any of my learning materials. Even when I was the most busy and the most tired I could have done at least that much. Another problem was that I decided that it was absolutely important that I learn all the verb endings for the preterite and imperfect tenses quickly, so I input all the possible conjugations of
&lt;em>hablar&lt;/em>,
&lt;em>comer&lt;/em>, and
&lt;em>vivir&lt;/em>
in those tenses into my SRS. This was a big mistake! My SRS study became pure drudgery.
&lt;a href="https://web.archive.org/web/20230328172532/http://www.alljapaneseallthetime.com/blog/secrets-to-smoother-srsing-part-2-fun/" target="_blank">It’s supposed to be fun!&lt;/a>
If it isn’t, why bother?
&lt;img src="https://peterextexia.com/2008/10/desechar.png" alt="Deleting the cards that demotivate" title="Deleting the cards that demotivate">&lt;/p>
&lt;p>I am happy to say that I’m on the path to recovery. I’ve taken
&lt;a href="https://web.archive.org/web/20221205115654/http://www.alljapaneseallthetime.com/blog/secrets-to-smoother-srsing-part-4-collect-em-to-throw-away/" target="_blank">Khatzumoto’s advice&lt;/a>
and have begun to delete all those boring conjugations, choosing instead to rely on adding sentences to my SRS. I now understand why Ramses says
&lt;a href="https://web.archive.org/web/20100804000112/http://www.spanish-only.com/2008/10/how-to-threat-the-rules-read-about-them-but-dont-learn-them/" target="_blank">I should read about the rules, but not learn them&lt;/a>. I’ve burned a CD full of various Spanish podcast episodes so that I can listen to them at time when I listen to audio the most: in my car. As soon as I finish this post, I’m going to grab my DS and play My Spanish Coach.&lt;/p>
&lt;p>Once I realized I was avoiding my studies because it had become work, I took steps to correct that, and now I’m excited about learning Spanish once again!&lt;/p></description></item><item><title>I switched my KDE desktop to Spanish</title><link>https://peterextexia.com/blog/i-switched-my-kde-desktop-to-spanish/</link><pubDate>Mon, 08 Sep 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/i-switched-my-kde-desktop-to-spanish/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>As I mentioned at the end of my article,
&lt;a href="https://peterextexia.com/blog/setting-up-a-spanish-keyboard-in-windows-vista">Setting up a Spanish keyboard in Windows Vista&lt;/a>
, I am primarily a user of Linux and the KDE desktop environment. In an small effort to immerse myself in a little more Spanish, I changed my desktop from English to Spanish. To do this, I opened the KDE Control Center. Under “Regional &amp;amp; Accessibility” I selected “Country/Region &amp;amp; Language.” I added Spanish to the list of languages, and made sure it was at the top of the list. After clicking on “Apply,” the new settings only apply to programs that start after the change. So in order to make the whole desktop in Spanish, I had to logoff and log back in.
&lt;img src="https://peterextexia.com/2008/09/escritorio-reloj.png" alt="Hovering over the clock shows the date in Spanish" title="Hovering over the clock shows the date in Spanish">&lt;/p>
&lt;p>Once I logged backed in, I was a bit overwhelmed with new vocabulary. One good source of vocabulary was the clock in the lower right-hand corner. When I hovered the mouse over the clock, it shows the current day of the week, day of the month, the current month and year. I had been having trouble with remembering the days of the week before this. Now everyday I hover the mouse over that clock to see the name for today. I probably should have added the days of the week to my
&lt;a href="https://peterextexia.com/tags/srs/">SRS&lt;/a>
a long time ago, but I had never thought to before.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/09/escritorio.png" alt="The K-menu in my desktop in Spanish" title="The K-menu in my desktop in Spanish">&lt;/p>
&lt;p>I’ve also been learning other words through my daily computer use. Many of the words I’ve had to look up to know what they are.
&lt;a href="http://lingro.com/dictionary" target="_blank">Lingro.com&lt;/a>
has been invaluable for this. Some of the words I already knew like
&lt;strong>abrir&lt;/strong>
(open) and
&lt;strong>salir&lt;/strong>
(close), but there were many that I had not seen before. These include
&lt;strong>carpeta&lt;/strong>
(folder),
&lt;strong>archivo&lt;/strong>
(file),
&lt;strong>tipo&lt;/strong>
(type),
&lt;strong>marcadores&lt;/strong>
(bookmarks),
&lt;strong>herramientes&lt;/strong>
(tools),
&lt;strong>guardar&lt;/strong>
(save),  and
&lt;strong>enviar&lt;/strong>
(send).&lt;/p>
&lt;p>While most of this new vocabulary is not useful to me in daily conversation just yet, it will be useful when discussing use of a computer or even discussion concerning an office environment in Spanish. It also another way to motivate myself with Spanish and keep myself interested in learning more.&lt;/p>
&lt;p>Unfortunately this change isn’t totally complete. While all of my KDE applications are now in Spanish, applications written with GTK or other toolkits are still in English. This includes applications like Firefox, the GIMP, and OpenOffice. I’m not quite sure what’s required to make those display in Spanish, though I intend to research that at a later date.&lt;/p></description></item><item><title>10 free 1 hour tutoring sessions on eduFire</title><link>https://peterextexia.com/blog/10-free-1-hour-tutoring-sessions-on-edufire/</link><pubDate>Fri, 11 Jul 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/10-free-1-hour-tutoring-sessions-on-edufire/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Babelhut was recently named one of the
&lt;a href="https://web.archive.org/web/20081208141900/http://blog.edufire.com/2008/06/19/the-top-20-language-bloggers-on-the-web/" target="_blank">top 21 language bloggers on the web&lt;/a>
by
&lt;a href="https://web.archive.org/web/20081207191428/http://edufire.com/" target="_blank">eduFire&lt;/a>. EduFire is a site that matches up language tutors with language students, and that tutoring takes place via video chat on eduFire. I’ve yet to try it out, but I certainly intend to do so. But there’s more than just the video tutoring on eduFire. They have an
&lt;a href="https://web.archive.org/web/20090903003903/http://edufire.com/games/flashcards" target="_blank">excellent flashcard section&lt;/a>
which plays as a multiple choice game that gives you more points the faster that you answer correctly. Some of these flashcards are good to put in your
&lt;a href="https://peterextexia.com/tags/srs/">SRS&lt;/a>. They also have a
&lt;a href="https://web.archive.org/web/20080724225857/http://resources.edufire.com/" target="_blank">resource section&lt;/a>
with lots of embedded language learning videos.&lt;/p></description></item><item><title>Setting up a Spanish keyboard in Windows Vista</title><link>https://peterextexia.com/blog/setting-up-a-spanish-keyboard-in-windows-vista/</link><pubDate>Wed, 04 Jun 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/setting-up-a-spanish-keyboard-in-windows-vista/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Can’t figure out how to type “¿Dónde está el baño?” on your keyboard? If you use Windows Vista, this article will tell you how to setup a Spanish keyboard so that you can type all those characters that aren’t standard on your keyboard. Users of older versions of Windows (XP, 2000, etc) won’t be able to use the directions exactly, but you should be able to get a general idea of how to setup a Spanish keyboard.&lt;/p>
&lt;p>First open up your Control Panel. The Control Panel can be found in your Start menu. Depending on your setup, the Control Panel should display in one of two views: Classic View or Home View.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/06/control_panel_classic.thumbnail.JPG" alt="Control Panel Classic View">
&lt;img src="https://peterextexia.com/2008/06/control_panel_home.thumbnail.JPG" alt="Control Panel Home View">&lt;/p>
&lt;p>In the Classic View, you will want to open “Regional and Language Options.” In Home View, you need to click on the “Change keyboards or other input methods” link underneath “Clock, Language, and Region.” A window titled “Regional and Language Options” should have appeared no matter which view you were using. Click on the “Keyboards and Languages” tab.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/06/keyboard_and_languages_tab.thumbnail.JPG" alt="Keyboards and Languages Tab">&lt;/p>
&lt;p>Click on the “Change Keyboards” button. A window titled “Text Services and Input Languages” should appear.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/06/click_add.thumbnail.JPG" alt="Text Services and Input Languages">&lt;/p>
&lt;p>Click on the “Add” button. You should see the “Add Input Language” window.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/06/choose_keyboard.thumbnail.JPG" alt="Add Input Language">&lt;/p>
&lt;p>Dig through the list of keyboards and check the box for the Spanish keyboard variant you’re looking for. I’m personally most familiar with the Latin American keyboard, so I chose “Spanish (Mexico)” and “Latin American,” though I could have found this same layout under “Spanish (United States)” or any of the Spanish-speaking South American countries. If you’re not sure what keyboard to use, you can select one and click the “Preview” button to see what the keyboard looks like. This is also useful even if you know which layout to use because you will need to learn where some of the keys are. When you’re done looking at the preview, click the “Close” button.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/06/keyboard_preview.thumbnail.JPG" alt="Latin American Keyboard Preview">&lt;/p>
&lt;p>In the end, if you can’t decide what keyboard to use and you plan on visiting a Spanish-speaking country, learn and use the keyboard layout of that country. Click “Ok” to close the “Add Keyboard Dialog.” You should be back to the “Text Services and Input Languages” window. Click on the “Advanced Key Settings” tab.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2008/06/shortcut_key.thumbnail.JPG" alt="Advanced Key Settings">&lt;/p>
&lt;p>Make note of the default key combination to switch keyboard layouts. The default is Left Alt + Shift, but you may change this to whatever you like. Click “Ok” to close the window. Note that you should now have a little “EN” in your taskbar, assuming you have a US English keyboard. If you have a different keyboard you may see some other two letter abbreviation.&lt;/p>
&lt;p>&lt;a href="https://peterextexia.com/2008/06/taskbar_en.JPG" title="Taskbar with “EN”">&lt;img src="https://peterextexia.com/2008/06/taskbar_en.JPG" alt="Taskbar with “EN”">&lt;/a>&lt;/p>
&lt;p>Now hit the key combination you chose to switch keyboards, or Left Alt and Shift if you kept the default. Your taskbar should now display “ES” to show that you are now using a Spanish keyboard.&lt;/p>
&lt;p>&lt;a href="https://peterextexia.com/2008/06/taskbar_es.jpg" title="Taskbar with “ES”">&lt;img src="https://peterextexia.com/2008/06/taskbar_es.jpg" alt="Taskbar with “ES”">&lt;/a>&lt;/p>
&lt;p>Your keyboard is now setup! Looking at the keyboard preview from earlier, it’s obvious how to type “Ñ” and “¿”, but how do you type “áéíóú”? All you have to do is type the key for the accent mark, which is the key to the right of “P” on the Latin American keyboard, followed by the key for the letter you wish to put the accent above.&lt;/p>
&lt;p>The process is similar if you wish to setup a keyboard for other languages. I have followed the same process to setup the Greek keyboard in Windows. Wikipedia also has a
&lt;a href="http://en.wikipedia.org/wiki/Keyboard_layout" target="_blank">good article on keyboard layouts&lt;/a>
, which displays the keyboard layout for many different languages.&lt;/p>
&lt;p>I’m also a Linux user, and I dual-boot Windows Vista and Linux, working primarily in Linux using KDE. If there is interest I may also cover this subject in KDE.&lt;/p></description></item><item><title>Patrick's Spanish Study Methods</title><link>https://peterextexia.com/blog/patricks-spanish-study-methods/</link><pubDate>Tue, 20 May 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/patricks-spanish-study-methods/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I was on the phone with my friend Patrick, who has been my friend for about 12 years, and one of the things we discussed was our study of Spanish. Patrick has gone a little further than I have and I found his description of his study habits interesting. He doesn’t use an
&lt;a href="https://web.archive.org/web/20230530083908/http://www.alljapaneseallthetime.com/blog/what-is-an-srs/" target="_blank">SRS program&lt;/a>
like myself or
&lt;a href="https://twitter.com/tummai" target="_blank">Thomas&lt;/a>, but through his use of
&lt;a href="http://www.amazon.com/gp/product/B000P87C80?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000P87C80" target="_blank">Rosetta Stone&lt;/a>
he has had some similar results to what users of SRS programs have seen. I asked him to write a brief description of his study methods so that I can post them here:&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>The method I’ve been using to learn Spanish so far consists of a grammar book called “&lt;a href="http://www.amazon.com/gp/product/159257453X?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=159257453X" target="_blank">The Pocket Idiot’s Guide to Spanish Phrases&lt;/a>“, and the Rosetta Stone program. I also have a bilingual Spanish dictionary for words i come across that are new.&lt;/em>&lt;/p>
&lt;p>&lt;em>Rosetta Stone: So far this has had a positive effect for teaching me new words, masculine or feminine gender of words, and sentence structure. It sticks mostly in only one verb tense so far. (The present progressive or gerunds.) I think the subjunctive is more used than any other verb tense, but not sure. The only issue i have with this is that it doesn’t cover much ground being mainly in one tense. It does however make the words stick in your head and its not so repetitive that you get bored with it.&lt;/em>&lt;/p>
&lt;p>&lt;em>The grammar book: Shows all the verb tenses and when they are used. With example sentences in each tense, you could listen to Rosetta Stone and after a bit start to pick up the slight differences of a word in each tense you just read it in. The best thing about the book is that it is straightforward and simple. If you were to go over the charts for each verb tense and write down a couple of sentences you will start to catch the patterns in it.&lt;/em>&lt;/p>&lt;/blockquote>
&lt;p>Patrick also pointed me to a couple of new resources that he plans to try out soon:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://www.livemocha.com/" target="_blank">Livemocha.com&lt;/a>
– Patrick just signed up for this so he doesn’t have any real feedback about it yet, but it looks like a good language learning social network site.&lt;/li>
&lt;li>&lt;a href="http://www.amazon.com/gp/product/0976666103?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0976666103" target="_blank">Learning Spanish Like Crazy&lt;/a>
– Patrick had heard that was a good companion to learning with Rosetta Stone and intends to purchase this soon.&lt;/li>
&lt;/ul></description></item><item><title>Los Verbos y La Gramática</title><link>https://peterextexia.com/blog/los-verbos-y-la-gram%C3%A1tica/</link><pubDate>Tue, 06 May 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/los-verbos-y-la-gram%C3%A1tica/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>I recently purchased a book called
&lt;a href="http://www.amazon.com/gp/product/0844272140?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0844272140" target="_blank">Spanish Verbs And Essentials of Grammar&lt;/a>
to strengthen my understanding of Spanish grammar and conjugation. I didn’t feel I was getting enough of this from my existing study materials. It’s funny how some themes seem to occur at the same time. On Friday, Ramses at Spanish Only posted
&lt;a href="http://spanish-only.blogspot.com/2008/05/studying-grammar-can-help.html" target="_blank">&lt;em>Studying Grammar CAN Help&lt;/em>&lt;/a>. He discusses how much grammar has improved his study progress, which is what I am hoping for with my recent purchase.&lt;/p>
&lt;p>The book itself is only a little over a hundred pages, but it was perfect for what I was looking for. I did not yet have a book that explained the familiar forms of you (&lt;em>tú, vosotros, etc&lt;/em>) and how verbs are conjugated with those pronouns. I haven’t gone very far into this book yet, but I did look ahead at the object pronouns (&lt;em>me, te, le, lo, etc.&lt;/em>), which have been stumping me when I run across them.&lt;/p>
&lt;p>I also purchased
&lt;a href="http://www.amazon.com/gp/product/0071474730?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0071474730" target="_blank">The Big Red Book of Spanish Verbs&lt;/a>
which has some explanation of conjugation but mostly it is a big list of Spanish verbs and all the different ways in which they can be conjugated, which is exactly why I bought it. I kept finding words like
&lt;em>eran&lt;/em>
which I couldn’t find in my Spanish dictionary. I did guess from context that it was a form of
&lt;em>ser&lt;/em>
(to be) but now I know it’s the third person plural form in the imperfect tense. This led me to learn that the imperfect tense is one of two past tenses in Spanish, though I don’t yet understand the differences between them.&lt;/p>
&lt;p>I’ve yet to take a look at the CD-ROM that came with the Big Red Book but at some point I intend to.&lt;/p>
&lt;p>BTW, I know I’m a day late, but Happy Cinco de Mayo!&lt;/p></description></item><item><title>Children's Books in Spanish</title><link>https://peterextexia.com/blog/childrens-books-in-spanish/</link><pubDate>Tue, 08 Jan 2008 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/childrens-books-in-spanish/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Earlier this evening I was reading a book to my five year old son as I do almost nightly. He and his brother are blessed to have a large collection of children’s books, many of them they have not read yet. A significant portion were given to them by a family friend who is a former school teacher who natively speaks Spanish and English. Most of the books are in English but a few are in Spanish. I’ve looked at a few of the Spanish books before but for the most part I am not far enough along in my studies to read them. I’m very much in a beginner with Spanish and I just don’t know enough words yet.&lt;/p>
&lt;p>But tonight I found a book in their collection that is perfect for me! It is
&lt;a href="http://www.amazon.com/gp/product/074602309X?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=074602309X" target="_blank">The Usborne First Thousand Words in Spanish&lt;/a>
by Heather Amery &amp;amp; Stephen Cartwright. On each page is a theme with a large illustration showing various objects related to the theme, and then along the outside of the large illustration are pictures of the individual objects in the illustration and the name of the object in Spanish. There are no English words on these pages until you get to the word list at the end of the book, which provides English translations for the Spanish words if you need them.&lt;/p>
&lt;p>For example, the theme of the first page is “La casa”
&lt;em>(trans.: the house).&lt;/em>
The large illustration in the middle shows a bathroom, a bedroom, a living room, and the front door. The illustration also contains objects you would normally find in those places. These same objects are shown around the illustration. Objects like “la esponja”
&lt;em>(the sponge)&lt;/em>, “la toalla”
&lt;em>(the towel)&lt;/em>, “las escaleras”
&lt;em>(the stairs)&lt;/em>, and “el cepillo”
&lt;em>(the brush)&lt;/em>.&lt;/p>
&lt;p>Of course, this is not a book that I could base all of my Spanish study around. It will not build any grammar skills. Heck, only one page seems to contain any verbs at all. But this is very useful for a beginner like me to build up vocabulary for everyday objects.&lt;/p></description></item><item><title>¡Mnemosyne Al Rescate!</title><link>https://peterextexia.com/blog/mnemosyne-al-rescate/</link><pubDate>Tue, 06 Nov 2007 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/mnemosyne-al-rescate/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>“Al rescate” is Spanish for “to the rescue.”&lt;/p>
&lt;p>Some of you may have noticed my lack of posts in the past couple of weeks. My work life and my home life conspired to consume any free time I had so that I could not even study new Spanish or Greek material, let alone write about it. I did manage, with the help of
&lt;a href="https://peterextexia.com/blog/%ce%b5%ce%bd-%ce%b1%cf%81%cf%87%ce%b7-starting-with-new-testament-greek-again">Mnemosyne&lt;/a>, to maintain what I had already learned so that I was able to pick up where I left off. That little bit of maintenance did the job fantastically!&lt;/p>
&lt;p>Earlier tonight I was able to continue in my Spanish book right where I left off. I did not need to go back and review what I had learned previously. In fact, I think I was better off than I would have been had I studied two nights in a row because no matter how crazy things were for me, most days I could still find 20 minutes to study with Mnemosyne.&lt;/p>
&lt;p>I recommend that anyone who is learning a new language use a
&lt;a href="https://web.archive.org/web/20230530083908/http://www.alljapaneseallthetime.com/blog/what-is-an-srs/" target="_blank">Spaced Repitition System&lt;/a>
like
&lt;a href="https://mnemosyne-proj.org/" target="_blank">Mnemosyne&lt;/a>,
&lt;a href="https://apps.ankiweb.net/" target="_blank">Anki&lt;/a>,
&lt;a href="http://www.supermemo.com/" target="_blank">SuperMemo&lt;/a>, or similar.&lt;/p>
&lt;p>Do you use a different SRS program? Leave a comment and tell me about it.&lt;/p></description></item><item><title>Spanish Update: Shorter study time</title><link>https://peterextexia.com/blog/spanish-update-shorter-study-time/</link><pubDate>Fri, 19 Oct 2007 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/spanish-update-shorter-study-time/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>In a
&lt;a href="https://peterextexia.com/blog/step-2-survive-the-flood">previous post&lt;/a>, I had decided to stop studying after a set amount of time to prevent being overwhelmed. I have studied Greek once since, completing a full chapter, and I studied Spanish tonight, covering about half a chapter. I didn’t quite study for a full hour, instead choosing to stop when I was tired. I think this is appropriate considering it was after midnight. I feel I made good progress today though.&lt;/p>
&lt;p>It’s not exactly fair to compare the study between the two books by chapters. My
&lt;a href="http://www.amazon.com/gp/product/0801031060?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0801031060" target="_blank">Greek book&lt;/a>
is about 4 or 5 pages a chapter, while the
&lt;a href="http://www.amazon.com/gp/product/0922066280?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0922066280" target="_blank">Spanish book’s&lt;/a>
chapters are about 8 to 10 pages on average. So really I studied about the same amount. This does make me wonder which language I should study next. I have been alternating between Greek and Spanish, but since I did not finish the Spanish chapter, maybe I should study Spanish next to complete it. This would mean I study Spanish two nights for every night that I study Greek. I’m not sure that this is a bad thing.&lt;/p>
&lt;p>The chapter I’m on in Spanish is covering numbers. I already knew 1 to 20
&lt;em>(uno a veinte)&lt;/em>
but I did not know the larger numbers like 40, 50, 100, 1000, and 1000000.
&lt;em>(cuarenta, cincuenta, cien, mil, y millón)&lt;/em>
It seems that the rest of the chapter deals with telling time and the time of day. I do look forward to finishing the chapter despite my prior bitching.&lt;/p></description></item><item><title>Step 2: Survive the flood</title><link>https://peterextexia.com/blog/step-2-survive-the-flood/</link><pubDate>Mon, 15 Oct 2007 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/step-2-survive-the-flood/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Last night, having been delayed by sickness, I studied Step 2 of
&lt;a href="http://www.amazon.com/gp/product/0922066280?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0922066280" target="_blank">Spanish Step-by-Step&lt;/a>. In this book, each chapter is called a step, which contains a list of sentences and phrases in Spanish which will introduce new words and concepts. At the end of each step is a section called “Instant Conversation” in which you read along with a conversation between Spanish-speaking people, followed by a quick test. Underneath each Spanish sentence or phrase is a line describing how to say the words, and underneath that is the English translation. Sprinkled between some of the sentences are little “sidebars” which explain new concepts or things to pay special attention to.&lt;/p>
&lt;p>For the most part, I like this format. This seems a natural way to learn a language and the rules of grammar are presented in pieces as you read, rather than acting as a wall you must climb before you really learn anything.&lt;/p>
&lt;p>While I like the format of the book, I think far too much was thrown at me at this step. This step contained all of the Spanish pronouns, three verbs and every possible conjugation of each of these verbs. While I’m sure that in the future these will be no big deal, I’ve never done any verb conjugation more than “yo hablo”
&lt;em>(trans: I speak)&lt;/em>
and “Usted habla”
&lt;em>(trans: you speak)&lt;/em>.&lt;/p>
&lt;p>I have an idea about what I can do to avoid problems like this in the future. As I study I enter the sentences from the book into
&lt;a href="https://peterextexia.com/blog/%ce%b5%ce%bd-%ce%b1%cf%81%cf%87%ce%b7-starting-with-new-testament-greek-again">Mnemosyne&lt;/a>, which slows me down for the purpose really learning the material later. Instead of forcing myself to complete a chapter as I did last night, I should just set aside a certain amount of time to study, maybe about an hour. I can apply this to my Greek study as well.&lt;/p>
&lt;p>I will post in the next few days to see if this change in my study helps keep me from being overwhelmed by new material.&lt;/p></description></item><item><title>The Greek Alphabet Song</title><link>https://peterextexia.com/blog/the-greek-alphabet-song/</link><pubDate>Mon, 15 Oct 2007 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/the-greek-alphabet-song/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Quite by accident, I found a site with a recording of a
&lt;a href="https://web.archive.org/web/20090827021909/http://lingamish.wordpress.com/2007/09/01/sing-the-greek-alphabet-song/" target="_blank">Greek alphabet song&lt;/a>. I personally am far too shy to sing this aloud, even by myself, but this could be a good memory aid for those just learning the Greek alphabet. The rest of the site is pretty interesting as well. The author is a Christian Missionary in Mozambique with his family and has interesting little stories about life there.&lt;/p></description></item><item><title>Remember the Alamo!</title><link>https://peterextexia.com/blog/remember-the-alamo/</link><pubDate>Thu, 11 Oct 2007 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/remember-the-alamo/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Spanish has been a back and forth battle for me for years. A better analogy would be a series of small border conflicts, as most of the time nothing is going on, but when I do decide to learn Spanish, I charge into it and I’m soon pushed back away, and nothing more happens for a while. I’ve finally had enough, and I’ve declared war! I will learn Spanish, and I intend to at least be able to hold a conversation, watch television in Spanish, and read a Spanish newspaper or book with ease.&lt;/p>
&lt;p>My weapons in this engagement include
&lt;a href="http://www.amazon.com/gp/product/0922066280?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0922066280" target="_blank">Spanish Step-by-Step by Charles Berlitz&lt;/a>,
&lt;a href="http://www.amazon.com/gp/product/1853263389?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1853263389" target="_blank">a Spanish-English Dictionary&lt;/a>, and
&lt;a href="https://peterextexia.com/blog/%ce%b5%ce%bd-%ce%b1%cf%81%cf%87%ce%b7-starting-with-new-testament-greek-again">Mnemosyne&lt;/a>. As I progress I expect I will bring in additional tools, especially audio like the excellent
&lt;a href="http://www.amazon.com/gp/product/0743523571?ie=UTF8&amp;amp;tag=babelhut-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0743523571" target="_blank">Pimsleur audiobooks&lt;/a>, which I have used before.&lt;/p>
&lt;p>Although I’ve already gone through an equal number of lessons for Greek and Spanish, I feel as though I’ve been getting more out of the Greek so far. I think that while I don’t really know the material I’m studying, it feels almost familiar because of my previous exposure to Spanish. This makes it feel more like review, even though it really is not.&lt;/p>
&lt;p>As I learn Spanish, real-world study material will be easy to come by. There are two free Spanish-language newspapers published locally by the major English-language papers here. There are two or three Spanish television channels. There are a few people at my work who speak Spanish that I would be comfortable with speaking to in Spanish.&lt;/p>
&lt;p>Overall, I think my chances of gaining a decent command of Spanish is good as long as I stick with it.&lt;/p></description></item><item><title>Εν αρχη: Starting with New Testament Greek (again)</title><link>https://peterextexia.com/blog/%CE%B5%CE%BD-%CE%B1%CF%81%CF%87%CE%B7-starting-with-new-testament-greek-again/</link><pubDate>Sun, 07 Oct 2007 00:00:00 +0000</pubDate><guid>https://peterextexia.com/blog/%CE%B5%CE%BD-%CE%B1%CF%81%CF%87%CE%B7-starting-with-new-testament-greek-again/</guid><description>&lt;p>&lt;em>This post was originally posted on &lt;a href="https://peterextexia.com/projects/babelhut">Babelhut&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Εν αρχη (&lt;em>en archae&lt;/em>) means “in the beginning.”&lt;/p>
&lt;p>After 7 months without studying at all, I’ve finally sat down and spent some time a couple nights ago to study New Testament Greek (also called
&lt;a href="http://en.wikipedia.org/wiki/Koine_greek" target="_blank">Koine Greek&lt;/a>). I’m primarily following the lessons in a book called “&lt;a href="http://www.amazon.com/Learn-Testament-Greek-John-Dobson/dp/0801031060/ref=pd_bbs_sr_1/002-6886364-5100855?ie=UTF8&amp;amp;s=books&amp;amp;qid=1191736592&amp;amp;sr=8-1" target="_blank">Learn New Testament Greek&lt;/a>” by John H. Dobson. I started on the third lesson as the first was all about the Greek alphabet, which I still remember, and the second lesson was mostly simple words that I also still remember.&lt;/p>
&lt;p>Though the book does not instruct me to do so, I wrote down every Greek word in the lesson and it’s English meaning as I proceeded. I also wrote down many of the small phrases that were in the lesson, like “όιτος ό λογος (&lt;em>hoitos ho logos&lt;/em>
– this word).” It took me much longer to study this way, but I think the effect will be worth it.&lt;/p>
&lt;p>Earlier tonight I installed
&lt;a href="https://mnemosyne-proj.org/" target="_blank">Mnemosyne&lt;/a>, an open-source flash card program which uses
&lt;a href="http://en.wikipedia.org/wiki/Spaced_repetition" target="_blank">spaced repetition&lt;/a>
to help you study more efficiently. Mnemosyne is written in Python and runs on Linux, Windows, and Max OS X. Mnemosyne works by displaying the flash cards that you don’t know well more often than cards that you do know well. This method of study is more efficient than just studying words in a list day after day. Mnemosyne’s website has a good page
&lt;a href="https://mnemosyne-proj.org/principles.php" target="_blank">describing this process&lt;/a>
without getting too technical.&lt;/p>
&lt;p>&lt;img src="https://peterextexia.com/2007/10/mnemosyne.png" alt="Mnemosyne in action">&lt;/p>
&lt;p>Once I had Mnemosyne installed, I entered all the words and phrases I had written down two nights ago into the application. I was then able to test myself with the cards, slightly dismayed at how many I could not recall, even though I had written the words down previously and just now typed them into the computer. Clearly, I have my work cut out for me. I expect that Mnemosyne will be of great value to my study. I plan to write a more in-depth review of Mnemosyne later, after I have a better feel for its effectiveness.&lt;/p>
&lt;p>Stay tuned next time for my discussion of starting with Spanish!&lt;/p></description></item><item><title>Squelch</title><link>https://peterextexia.com/projects/squelch/</link><pubDate>Wed, 26 Sep 2007 14:16:00 -0500</pubDate><guid>https://peterextexia.com/projects/squelch/</guid><description>&lt;p>&lt;img src="https://peterextexia.com/squelchshot12.gif" alt="Squelch Screenshot">&lt;/p>
&lt;p>&lt;a href="https://peterextexia.com/squelch.zip">Download Squelch&lt;/a> for PalmOS&lt;/p>
&lt;p>Squelch is a game I made for PalmOS in 2000. I used to sell it as shareware on a site called PalmGear for $5, and believe it or not, people would occassionally buy it at that price.&lt;/p>
&lt;p>The game is not something I invented. It was a game my co-workers and I played at the office and we would gamble our spare change on it. At one point we also each wrote a program to play the game and those programs competed against each. The AI in this game is based on that program I wrote for our office competition.&lt;/p>
&lt;h3 id="how-to-play-squelch">How to play Squelch&lt;/h3>
&lt;p>Each turn you must collect points or you lose all your points for that turn. This is a Squelch. To collect points, you may tap on any 1s, 5s, 3 of kinds, 123456s, or 3 pairs. You may then keep rolling or end turn. End Turn will save your points that turn. When a player reaches 5000 points the other player gets one more turn to win.&lt;/p>
&lt;h3 id="scoring">Scoring&lt;/h3>
&lt;ul>
&lt;li>Ones - 100 points&lt;/li>
&lt;li>Fives - 50 points&lt;/li>
&lt;li>Three of a kind - 100x# on dice (Three ones are 1000 points)&lt;/li>
&lt;li>Three pairs - 750 points&lt;/li>
&lt;li>Straight (123456) - 1500 points&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://peterextexia.com/s-logo.gif" alt="Squelch Logo">&lt;/p>
&lt;h3 id="download-squelch">Download Squelch&lt;/h3>
&lt;p>To download Squelch, click &lt;a href="https://peterextexia.com/squelch.zip">here.&lt;/a>&lt;/p></description></item><item><title>Pocket Freemind</title><link>https://peterextexia.com/projects/pocket-freemind/</link><pubDate>Wed, 26 Sep 2007 14:11:00 -0500</pubDate><guid>https://peterextexia.com/projects/pocket-freemind/</guid><description>&lt;p>&lt;img src="https://peterextexia.com/screenshot.png" alt="">&lt;/p>
&lt;p>Pocket Freemind was an open-source &lt;a href="https://en.wikipedia.org/wiki/Windows_Mobile" target="_blank">Windows Mobile&lt;/a> application for taking notes in a hierarchical structure. This allows you organize your notes as you take them. The file format used by Pocket Freemind is compatible with the desktop application &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" target="_blank">Freemind&lt;/a>, an open-source &lt;a href="http://en.wikipedia.org/wiki/Mind_map" target="_blank">mind-mapping&lt;/a> application. Although Pocket Freemind uses the same file format as Freemind, Pocket Freemind is not techincally a mind-mapping application because it does not display the data radially. However, you can still use Pocket Freemind for this purpose, as it was designed to be a way to create and modify Freemind mindmaps on the go.&lt;/p>
&lt;p>Pocket Freemind requires the &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=10537" target="_blank">.NET Compact Framework 2.0&lt;/a> to be installed on your Windows Mobile device.&lt;/p>
&lt;p>To download, visit &lt;a href="https://sourceforge.net/projects/pocketfreemind/" target="_blank">https://sourceforge.net/projects/pocketfreemind/&lt;/a>&lt;/p></description></item><item><title>Head Coach</title><link>https://peterextexia.com/projects/head-coach/</link><pubDate>Wed, 26 Sep 2007 14:04:00 -0500</pubDate><guid>https://peterextexia.com/projects/head-coach/</guid><description>&lt;p>&lt;img src="https://peterextexia.com/anim-hc.gif" alt="Head Coach Screenshot">&lt;/p>
&lt;p>&lt;a href="https://peterextexia.com/headcoach.zip">Download Head Coach&lt;/a> for PalmOS&lt;/p>
&lt;p>Head Coach is a game I made for PalmOS in 2000. I used to sell it as shareware on a site called PalmGear for $7, and believe it or not, people would occassionally buy it at that price.&lt;/p>
&lt;p>This game was inspired by a BASIC game found in the book &lt;a href="http://vintage-basic.net/games.html" target="_blank">BASIC Computer Games&lt;/a> which I typed in on my family&amp;rsquo;s &lt;a href="https://en.wikipedia.org/wiki/Tandy_1000#1000_SX" target="_blank">Tandy 1000 SX&lt;/a> at some point during my childhood.&lt;/p>
&lt;h3 id="how-to-play-head-coach">How to play Head Coach&lt;/h3>
&lt;p>Head Coach is a portable American Football game. The basic idea is to take the ball to your end zone, and keep the other team from doing the same. If you manage to get the ball to your end zone, you will score 7 points. If you kick a field goal successfully, you get 3 points. If you drive the opposing team&amp;rsquo;s offense to your end zone, that is a safety and you get 2 points.
If you play a season, you play nine games, and if your team is in the top two teams, you get to play in the Championship Bowl.&lt;/p>
&lt;h3 id="download-head-coach">Download Head Coach&lt;/h3>
&lt;p>To download Head Coach, click &lt;a href="https://peterextexia.com/headcoach.zip">here.&lt;/a>&lt;/p></description></item><item><title>Wabajump</title><link>https://peterextexia.com/projects/wabajump/</link><pubDate>Thu, 13 Sep 2007 15:25:00 -0500</pubDate><guid>https://peterextexia.com/projects/wabajump/</guid><description>&lt;p>Wabajump was an open-source project to allow applications written for &lt;a href="https://web.archive.org/web/20190614185607/http://wabasoft.com:80/" target="_blank">the Waba Virtual Machine&lt;/a> to be compiled directly to a PalmOS program, so that the application no longer needed the Waba VM on the PalmOS device to run. This was accomplished using the &lt;a href="http://jump.sourceforge.net/" target="_blank">Jump&lt;/a> java to 68k assembly compiler.&lt;/p>
&lt;p>The sourceforge page still remains at &lt;a href="http://sourceforge.net/projects/wabajump" target="_blank">http://sourceforge.net/projects/wabajump&lt;/a> for those still interested in this project.&lt;/p></description></item></channel></rss>