<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Artem Aginskiy</title>
	
	<link>http://www.aaginskiy.com</link>
	<description>A personal blog on language study and self-improvement.</description>
	<lastBuildDate>Thu, 22 Dec 2011 02:38:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/aaginskiy" /><feedburner:info uri="aaginskiy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Install Rails 3.1 from Scratch with RVM, Git, and all the goodies on Ubuntu!</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/PJpnUl0GlJQ/</link>
		<comments>http://www.aaginskiy.com/technology/2011/12/install-rails-3-1-from-scratch/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 02:31:57 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[guard]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rvm]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=70</guid>
		<description><![CDATA[<p>When I started using Rails, I heard a lot about all the different components that you should have to enhance rails like RVM, RSpec, Guard, Git and many others.  Unfortunately, I could never find a tutorial that put it all together from start to finish in setting up a project in Rails.  Since then, I&#8217;ve [...]]]></description>
				<content:encoded><![CDATA[<p>When I started using Rails, I heard a lot about all the different components that you should have to enhance rails like RVM, RSpec, Guard, Git and many others.  Unfortunately, I could never find a tutorial that put it all together from start to finish in setting up a project in Rails.  Since then, I&#8217;ve worked on several ruby projects and this is the set up I use when creating a new project from scratch on a machine that previously did not have Rails.</p>
<h3>1. Installing Ruby Version Manager (RVM)</h3>
<p>Ruby Version Manager is a great tool for isolating your development environment to each individual project.  This allows you to have specific ruby versions with specific gemsets isolated from the rest of your development environment, virtually eliminating any potential conflicts.  Although not absolutely required to use Rails or Ruby, RVM will greatly reduce headaches with managing ruby.  To learn more about RVM, visit the <a title="RVM Homepage" href="http://beginrescueend.com/" target="_blank">RVM homepage.</a></p>
<p>Luckily, RVM provides an install script that we can download and execute with a single command.  This command will download the latest code from the github repository, so you need to have git and curl installed on the system.  If you are using a recent linux distro like Ubuntu 11.10, then you might already have git and curl installed. If not, execute the following command:</p>
<pre class="brush: bash; title: ; notranslate">$ sudo apt-get install git curl </pre>
<p>Start the RVM installation by running this command:</p>
<pre class="brush: bash; title: ; notranslate">$ bash -s stable &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)</pre>
<p>Now that the installation completed, we need to add the loader for RVM to our .bash_profile. Open the file in your favorite editor:</p>
<pre class="brush: bash; title: ; notranslate">$ gedit .bash_profile </pre>
<p>Next, past the following command into the text file:</p>
<pre class="brush: bash; title: ; notranslate">[[ -s &quot;/home/artem/.rvm/scripts/rvm&quot; ]] &amp;&amp; source &quot;/home/artem/.rvm/scripts/rvm&quot;</pre>
<p>For the .bash_profile to take effect, we need to restart the bash shell.  Once the bash shell restarts, let&#8217;s verify that RVM is properly installed by running the following command:</p>
<pre class="brush: bash; title: ; notranslate">$ type rvm | head -1

rvm is a function</pre>
<p>Next, let&#8217;s check what dependencies we need to install on our platform by running:</p>
<pre class="brush: bash; title: ; notranslate">$ rvm requirements</pre>
<p>This returns a number of requirements you will need for different ruby compilers. We will use MRI (official) ruby interpreter, so copy and paste the command under that and run it:</p>
<pre class="brush: bash; title: ; notranslate">$ sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion</pre>
<h3>2. Installing Ruby</h3>
<p>Now that we got RVM all ready to go, let&#8217;s jump right into installing Ruby.  First, let&#8217;s see what version of ruby are available to us through RVM:</p>
<pre class="brush: bash; title: ; notranslate">$ rvm list known</pre>
<p>We can see there are quite a few different ruby installations available:</p>
<pre class="brush: bash; title: ; notranslate"># MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p352]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-p180
[ruby-]1.9.2[-p290]
[ruby-]1.9.2-head
[ruby-]1.9.3-preview1
[ruby-]1.9.3-rc1
[ruby-]1.9.3[-p0]
[ruby-]1.9.3-head
ruby-head

# GoRuby
goruby

# JRuby
jruby-1.2.0
...

# Rubinius
rbx-1.0.1
...

# Ruby Enterprise Edition
ree-1.8.6

...

# Kiji
kiji

# MagLev
maglev[-head]
..

# Mac OS X Snow Leopard Only
macruby[-0.10]
...

# IronRuby -- Not implemented yet.
ironruby-0.9.3
...</pre>
<p>Let&#8217;s start by installing Ruby 1.8.7:</p>
<pre class="brush: bash; title: ; notranslate">$ rvm install 1.8.7</pre>
<p>This will download and install Ruby 1.8.7.  After installation is complete let&#8217;s set RVM to use this Ruby installation:</p>
<pre class="brush: bash; title: ; notranslate">$ rvm use 1.8.7@defaultgems --create
Using /home/artem/.rvm/gems/ruby-1.8.7-p352 with gemset defaultgems</pre>
<p>You can also set this to be the default version, overriding the system installation of Ruby, by running the following command:</p>
<pre class="brush: bash; title: ; notranslate">$ rvm use 1.8.7@defaultgems --default
Using /home/artem/.rvm/gems/ruby-1.8.7-p352 with gemset defaultgems</pre>
<p>You can always switch back to the system ruby by running:</p>
<pre class="brush: bash; title: ; notranslate">$ rvm use system</pre>
<p>3. Installing RubyGems and Rails</p>
<p>Ruby is fully functional now, but we are not done yet.  We want to get Rails set up on this installation, so let&#8217;s start by installing RubyGems (ruby package manager).  Start by downloading the setup file from <a title="RubyForget - RubyGems Setup FIles" href="http://rubyforge.org/frs/?group_id=126" target="_blank">RubyForge</a>, then extract the archive and execute the setup.rb file:</p>
<pre class="brush: bash; title: ; notranslate">$ sudo ruby setup.rb</pre>
<p>Once the installation finishes, simply execute the following command to install Rails:</p>
<pre class="brush: bash; title: ; notranslate">$ gem install rails</pre>
<h3>4. Starting the first project and configuring the basics</h3>
<p>We are finally ready to get to the good part of actually setting up a new project.  Start by navigating to the directory where you want to store rails project and create a new rails project:</p>
<pre class="brush: bash; title: ; notranslate">$ rails new Project -T
$ cd Project</pre>
<p>Note the &#8216;-T&#8217; option; it tells rails not to use Test::Unit.  Instead, we will use RSpec that we will install shortly.</p>
<p>Remember we installed Ruby 1.8.7?  Let&#8217;s say for this project we want to use version 1.9.2 instead (because that&#8217;s what our server uses), but we only want 1.9.2 to execute for this project <strong>AND</strong> we want it to that automatically.  Additionally, we want to isolate the gems for this project so that we don&#8217;t have any hard to trace conflicts between unused gems.  It&#8217;s a tough order, but that&#8217;s exactly what RVM is made to do.  We can customize the RVM behavior by placing .rvmrc file inside the root directory of our project:</p>
<pre class="brush: bash; title: ; notranslate">$ gedit .rvmrc</pre>
<p>Now we need to put one line to load the ruby we want with a gemset that&#8217;s specific to the project.  Recall that we wanted to use Ruby 1.9.2, so paste the following:</p>
<pre class="brush: bash; title: ; notranslate">rvm 1.9.2@project_name</pre>
<p>Save the file and exit the directory and enter it again:</p>
<pre class="brush: bash; title: ; notranslate">$ cd ..
$ cd Project</pre>
<p>RVM will ask you if you trust this .rvmrc file (and you should! you made it).  Click yes, and it should prompt you with an error that we didn&#8217;t install this version of Ruby yet.  Copy and paste the instructions given by the error:</p>
<pre class="brush: bash; title: ; notranslate">$ rvm install 1.9.2
$ rvm gemset create 'project_name'</pre>
<p>At this point, we need to reinstall rails for this specific gemset, so run:</p>
<pre class="brush: bash; title: ; notranslate">$ gem install rails</pre>
<p>5. Installing RSpec and Guard</p>
<p>Now that we got our project set up, we should add a testing environment since we removed Unit::Test. Let&#8217;s start by opening the Gemfile and adding the following:</p>
<pre class="brush: ruby; title: ; notranslate">group :test, :development do
  gem 'rspec-rails'
  gem 'capybara'
  gem 'guard-rspec'
end</pre>
<p>Next run the bundle command from the bash shell, and initialize RSpec and Guard:</p>
<pre class="brush: bash; title: ; notranslate">$ bundle
$ rails g rspec:install
mkdir spec/support spec/models spec/routing
guard init rspec</pre>
<p>And, now we are all set to start programming the first application. Fortunately, starting a new project will take a lot less time, now that we got everything installed, so don&#8217;t be afraid to experiment</p>
<p>Let me know how this works out for you. If you have any question, be sure to leave comments below and share this if you liked it!</p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/PJpnUl0GlJQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/technology/2011/12/install-rails-3-1-from-scratch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/technology/2011/12/install-rails-3-1-from-scratch/</feedburner:origLink></item>
		<item>
		<title>Long Overdue Update</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/CIutRWHDBFU/</link>
		<comments>http://www.aaginskiy.com/site/2011/06/long-overdue-update/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 14:56:42 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Site]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=60</guid>
		<description><![CDATA[<p>The last two month have certainly been rather hecktic due to moving to a new city as well as a vacation in Russia.  Certainly didn&#8217;t have much time to update the blog, but I did continue working on the  DuZhe Analyzer/Reader.  The beta should come out right around when Ruby on Rails 3.1.0 goes stable. [...]]]></description>
				<content:encoded><![CDATA[<p>The last two month have certainly been rather hecktic due to moving to a new city as well as a vacation in Russia.  Certainly didn&#8217;t have much time to update the blog, but I did continue working on the  DuZhe Analyzer/Reader.  The beta should come out right around when Ruby on Rails 3.1.0 goes stable.  It will mostly feature a way to log in and submit revisions to the words.</p>
<p>I&#8217;ve also been drafting several articles on the extended airplane rides, but they aren&#8217;t quite ready to publish.</p>
<p>Stay tuned!</p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/CIutRWHDBFU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/site/2011/06/long-overdue-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/site/2011/06/long-overdue-update/</feedburner:origLink></item>
		<item>
		<title>Getting Started with 读者 (DuZhe)</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/zWaPRtTA__k/</link>
		<comments>http://www.aaginskiy.com/technology/2011/04/getting-started-with-duzhe/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 05:51:59 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[chinese]]></category>
		<category><![CDATA[DuZhe]]></category>
		<category><![CDATA[读者]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[Text Analyzer]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=47</guid>
		<description><![CDATA[<p>读者 (DuZhe) has reached a point where it is fairly usable, but it&#8217;s probably a bit difficult to use without a decent guide so I am writing a guide to help the early adapters.  The analyzer comes with 3 basic options for text analysis: Read, Analyze, and Segment.</p> <p>Let&#8217;s get started by inserting some Chinese [...]]]></description>
				<content:encoded><![CDATA[<p>读者 (DuZhe) has reached a point where it is fairly usable, but it&#8217;s probably a bit difficult to use without a decent guide so I am writing a guide to help the early adapters.  The analyzer comes with 3 basic options for text analysis: Read, Analyze, and Segment.</p>
<div id="attachment_48" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/input.png" rel="lightbox[47]"><img class="size-medium wp-image-48" title="Input Screen" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/input-300x193.png" alt="Input Screen" width="300" height="193" /></a><p class="wp-caption-text">Input Screen</p></div>
<p>Let&#8217;s get started by inserting some Chinese text to analyze.  If you don&#8217;t have any readily available, check out 盗墓笔记, and copy the first chapter <a title="盗墓笔记" href="http://www.daomubiji.com/qi-xing-lu-wang-01.html" target="_blank">here</a>.</p>
<h3>Segment</h3>
<p>This option is very straight forward.  It simply returns the input text with spaces between the words. Such as for the example above it will return something like shown below.  It won&#8217;t display any definitions or save word lists.  It&#8217;s only for segmenting the text.</p>
<div id="attachment_49" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/segment.png" rel="lightbox[47]"><img class="size-medium wp-image-49" title="Text Segmentation" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/segment-300x197.png" alt="Text Segmentation" width="300" height="197" /></a><p class="wp-caption-text">Segment Option</p></div>
<h3>Analyze</h3>
<p>This option is a whole lot more interesting than the previous one.  It judges the text for the perceived difficulty in relation to a typical HSK text of an equivalent level.  I&#8217;m still ironing out the kinks in the formula to calculate the difficulty level, so I&#8217;m not ready to disclose the details, but stayed tune.  Getting to the analysis page, you&#8217;ll be greeted with an over all difficulty score.</p>
<div id="attachment_50" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/diff.png" rel="lightbox[47]"><img class="size-medium wp-image-50" title="Difficulty Score" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/diff-300x157.png" alt="Difficulty Score" width="300" height="157" /></a><p class="wp-caption-text">Difficulty Score</p></div>
<p>Below the difficulty score, you can see an analysis of the word frequencies.  Next is the break down of the HSK words in the text, both new and old.  The respective scores represent how well this text matches up with the difficulty of the HSK.</p>
<div id="attachment_51" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/hsk.png" rel="lightbox[47]"><img class="size-medium wp-image-51" title="HSK Scores" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/hsk-300x104.png" alt="HSK Scores" width="300" height="104" /></a><p class="wp-caption-text">HSK Scores</p></div>
<p>Finally, on this page, you can see a list of all the words in the text.  The table of the words is paginate and can be filtered and searched.</p>
<div id="attachment_52" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/wordlist.png" rel="lightbox[47]"><img class="size-medium wp-image-52" title="Word List" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/wordlist-300x66.png" alt="Word List" width="300" height="66" /></a><p class="wp-caption-text">Word List Table</p></div>
<p>Each row is selectable and the selected rows can be downloaded as a CSV file.</p>
<h3 class="mceTemp mceIEcenter">
<dl id="attachment_53" class="wp-caption aligncenter" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/download.png" rel="lightbox[47]"><img class="size-medium wp-image-53" title="Download the Word List" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/download-300x139.png" alt="Download the Word List" width="300" height="139" /></a></dt>
<dd class="wp-caption-dd">Download the Word List</dd>
</dl>
</h3>
<h3>Read</h3>
<p>This is where there real fun starts.  The Read section let&#8217;s you read the submitted text with the help of a mouseover dictionary.  The words are already pre-segmented, so there is no need to highlight or select words, just mouseover.</p>
<div id="attachment_54" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/read.png" rel="lightbox[47]"><img class="size-medium wp-image-54" title="Mouseover Words for Definition" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/read-300x185.png" alt="Mouseover Words for Definition" width="300" height="185" /></a><p class="wp-caption-text">Mouseover Words for Definition</p></div>
<p>A cool feature about it is that the definition is always displayed on the bottom in a single row, but if a single row is not enough to show the whole definition, arrows on the left of the definition appear to indicate that the definition can be expended by clicking the word.</p>
<div id="attachment_55" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/defn.png" rel="lightbox[47]"><img class="size-medium wp-image-55" title="Expandable Definition" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/defn-300x36.png" alt="Expandable Definition" width="300" height="36" /></a><p class="wp-caption-text">Expandable Definition</p></div>
<p>Clicking the word will also bring up a menu that lets you add the word to a word list or flag it as inaccurate.  At the moment flagging words won&#8217;t do anything because I disabled it until I can get a better editor in place.</p>
<div id="attachment_56" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/wordadd.png" rel="lightbox[47]"><img class="size-medium wp-image-56" title="Add Word to List" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/wordadd-300x130.png" alt="Add Word to List" width="300" height="130" /></a><p class="wp-caption-text">Add Word to List</p></div>
<p>The words will be added to a list that can be viewed from the menu accessible from the button next to the definition.</p>
<div id="attachment_57" class="wp-caption aligncenter" style="width: 167px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/show.png" rel="lightbox[47]"><img class="size-full wp-image-57" title="Show the Word List" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/show.png" alt="Show the Word List" width="157" height="88" /></a><p class="wp-caption-text">Show the Word List</p></div>
<p style="text-align: left;">This will pull up a table of all the words added to the list.  The words can be removed by hitting the &#8216;x&#8217; button in each respective row.  The whole word list can be downloaded by click the down arrow.</p>
<p style="text-align: left;">&nbsp;</p>
<div id="attachment_59" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.aaginskiy.com/wp-content/uploads/2011/04/wordtable1.png" rel="lightbox[47]"><img class="size-medium wp-image-59" title="Selected Word List" src="http://www.aaginskiy.com/wp-content/uploads/2011/04/wordtable1-300x114.png" alt="Selected Word List" width="300" height="114" /></a><p class="wp-caption-text">Selected Word List</p></div>
<p style="text-align: left;">This is pretty much all to it at the moment.  The functionality, overall, is very straight forward.</p>
<p style="text-align: left;">Let me know how it works out for you and leave a comment!  I&#8217;m looking forward to any suggestion and bug reports.</p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/zWaPRtTA__k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/technology/2011/04/getting-started-with-duzhe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/technology/2011/04/getting-started-with-duzhe/</feedburner:origLink></item>
		<item>
		<title>读者 (DuZhe) Alpha 2 Release</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/np6avRA4mg0/</link>
		<comments>http://www.aaginskiy.com/technology/2011/04/duzhe-alpha-2-release/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 23:56:30 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[chinese]]></category>
		<category><![CDATA[DuZhe]]></category>
		<category><![CDATA[读者]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[Text Analyzer]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=45</guid>
		<description><![CDATA[<p>I took a bit longer than I initially thought to refactor the back-end code of DuZhe, but I took that opportunity to update some of the front-end as well.  Alpha 1 release had significant issues on the front-end, but I think I knocked a lot of them out.  I plan to write a quick Getting [...]]]></description>
				<content:encoded><![CDATA[<p>I took a bit longer than I initially thought to refactor the back-end code of DuZhe, but I took that opportunity to update some of the front-end as well.  Alpha 1 release had significant issues on the front-end, but I think I knocked a lot of them out.  I plan to write a quick Getting Started Guide over the next couple of days; for now, here is the change log.</p>
<h4>Backend</h4>
<ul>
<li>Optimize database access</li>
<li>Refactor code for faster execution</li>
</ul>
<h4>Frontend</h4>
<ul>
<li>Added ability to view added words</li>
<li>Added ability to remove words from list</li>
<li>Added support for multi-line dictionary entry display</li>
<li>Fixed some CSS/Browser issues</li>
</ul>
<p>See it here:</p>
<p><a title="读者 (DuZhe) Alpha 2 Release" href="http://duzhe.aaginskiy.com/">http://duzhe.aaginskiy.com</a></p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/np6avRA4mg0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/technology/2011/04/duzhe-alpha-2-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/technology/2011/04/duzhe-alpha-2-release/</feedburner:origLink></item>
		<item>
		<title>Learning a Language: Two Steps Forward, One Step Back</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/87ddx-k4rww/</link>
		<comments>http://www.aaginskiy.com/language/2011/04/learning-a-language-two-steps-forward-one-step-back/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 00:16:25 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Chinese]]></category>
		<category><![CDATA[Korean]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[foreign language]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[learn a language]]></category>
		<category><![CDATA[linguistics]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=40</guid>
		<description><![CDATA[<p>Learning a language is a challenging and rewarding process, be it your first foreign language or your tenth. It&#8217;s not by any means an instant satisfaction, but it will certainly last for many years; not to mention the benefit gained from the acquired skill will last a life time.  Since mastering a language can take a [...]]]></description>
				<content:encoded><![CDATA[<p><!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } -->Learning a language is a challenging and rewarding process, be it your first foreign language or your tenth. It&#8217;s not by any means an instant satisfaction, but it will certainly last for many years; not to mention the benefit gained from the acquired skill will last a life time.  Since mastering a language can take a long time with large commitment, it&#8217;s important to make it as enjoyable as possible.  If you enjoy learning it, every word acquired will bring you joy and satisfaction.</p>
<p>The first step is to decide the purpose for learning the language.  Having a clear understanding of what you want to gain from the language will help you develop realistic goals and expectation as you make progress.</p>
<h3>Set Realistic Goals</h3>
<p>As with any other skill, there exist two types of goals, long-term and short-term.  For long-term goals, you need to decide what you want to do with a language and how far you’d like to pursue it.  For example, if you are traveling for business in 10-weeks, you probably aren&#8217;t interested in acquiring full fluency in the language.  Instead, you may prefer to gain basic knowledge of key situations you might encounter during travel.  On the other hand, if you want to gain full fluency in the language equal to your native language, you should keep that in mind as you develop your daily approach to learning the language.</p>
<p>Long-term goals are very important, but long-term goals alone tend to be detrimental to your progress.  It happens because with long-term goals only, you will quickly become discouraged without reaching those goals for a long time.  In this respect, the short-term goals complement the long-term goals to help you make solid progress and stay motivated.</p>
<p>Learning languages is a <em>two-step forward, one-step back</em> process, so set short-term goals that will keep you excited about making progress.  Without short-term goals, learning a language often feels like a moving backwards.  A good example of setting short-term goals is choosing a topic goal for the week, such as learning the words and grammatic structures to introduce yourself.  You can then develop a plan to reach the goal that fits your personal schedule.  You could spend the first two days learning the vocabulary and the grammatical structures, then you could spend the next three days practicing.  On the  6<sup>th</sup> day, you may consider writing a short 7-8 sentence journal entry introducing yourself.  Finally, on the 7<sup>th</sup> day, you can practice it on someone who speaks the language (of course, if you have access to a native speaker, you can practice it every day for 7 days).</p>
<h3>Choose Interesting and Relevant Material</h3>
<p>If you are taking classes, you will be required to follow a textbook and the choice of words and material that it provides.  Often, you will find that this material is not interesting or pertinent to what you want to learn.  For this reason, it’s very important that you supplement that textbook material with what you actually enjoy.  For example, if you enjoy music of the language you are studying, then you may want to learn vocabulary in your favorite song.</p>
<p>By choosing material you enjoy, you will also select real-world usage of the language.  While classes can be very helpful for developing understanding of the language and how the grammar functions, but learning how to conjugate every single verb will not be so helpful because you will easily forget some of the obscure conjugations that you don’t practice.  Learning relevant real-world material that interests you will help you remember the more complex topics you learn in class</p>
<h3>Develop a Daily Routine</h3>
<p>Developing a daily routine depends on your personal schedule and other time commitments.  I find the best way is to develop a daily minimum and maximum.  For example, let’s say you would like to learn 35 new words every week;  you could decide to learn 5 words per day, but what if you skip one day?  This can become quickly discouraging when you are not meeting your goal of 35 words per week.  Instead, I recommend you set a daily minimum and a maximum.  Let’s say every day you learn at least 2 words and no more than 8 words.  This way, if you are busy one day, you can still reasonable learn a couple of words and then get caught up when you have more time without forcing yourself to study too much.  Being flexible is important when learning a language.</p>
<p>Also, I highly recommend carrying with you a small notebook (maybe something pocket-sized?) where you can record any new words you hear or words you’d like to learn.  For example, let’s say you are at a store buying a pack of gum and it hits you that you’d like to know how to say a pack of gum in the language you are learning.  You tell yourself that you will look it up when you get home, but very likely you will forget you even had the thought within the next 20 minutes.  For this, I recommend keeping a list of words you’d like to learn.  This will keep you motivated because you will see progress relevant to your daily life.  If you buy coffee every morning before work, you’ll be delighted to know that you could do the same thing when you travel.</p>
<p>Most of all, remember to spend at least some time reviewing every single day no matter how busy you are.  You can play an audio CD on the way to work, review your words from last night during your coffee break, or maybe practice your new words on co-workers who speak the language.  Every bit of review puts you that much closer to reaching your short-term goals, which in turn help you reach the long-term goals.</p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/87ddx-k4rww" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/language/2011/04/learning-a-language-two-steps-forward-one-step-back/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/language/2011/04/learning-a-language-two-steps-forward-one-step-back/</feedburner:origLink></item>
		<item>
		<title>读者 (DuZhe) Enters Alpha Stage</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/kP-OjsPxHwQ/</link>
		<comments>http://www.aaginskiy.com/technology/2011/03/duzhe-enters-alpha-stage/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 07:24:40 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[DuZhe]]></category>
		<category><![CDATA[读者]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=37</guid>
		<description><![CDATA[<p>After coding some of the UI for the reader, I decided to streamline some of the features for the alpha release and move them down the road to future alpha iteration.  As such, earlier today I pushed version 0.1 to the server.  A key feature that is missing at the moment is editing bad dictionary [...]]]></description>
				<content:encoded><![CDATA[<p>After coding some of the UI for the reader, I decided to streamline some of the features for the alpha release and move them down the road to future alpha iteration.  As such, earlier today I pushed version 0.1 to the server.  A key feature that is missing at the moment is editing bad dictionary entries.  I decided to push this feature until beta because I think it is best to have user management to track what changes are submitted to the dictionary.   Guests can still flag incorrect words, so anyone can still flag a word by clicking it and selecting the flag button (marked by X).  Selected words can also be saved into a CSV file, but the list of selected words is not persistent.  You have to save the word list before navigating away from the page, otherwise it is lost for good.</p>
<p>The next big step will be refactoring my Rails code.  In an effort to get all my ideas down quickly, I&#8217;ve turned the code into a lot of mess.  The next alpha (2) release will bring no visible improvements to the user, but it will streamline the code for future updates.</p>
<p>The following, and final, alpha (3) will bring user registration and management.  This will not necessarily come with any benefits to registration at that point, but it paves the way for future updates.</p>
<p>The beta release will come with a full word editor to submit updates to the dictionary, as well as many other features.</p>
<p>For now check out the alpha (1) release:</p>
<p><a title="读者 (DuZhe) Text Analyzer" href="http://duzhe.aaginskiy.com">http://duzhe.aaginskiy.com</a></p>
<p><a href="http://www.aaginskiy.com/wp-content/uploads/2011/03/alpha1.png" rel="lightbox[37]"><img class="aligncenter size-full wp-image-38" title="alpha1" src="http://www.aaginskiy.com/wp-content/uploads/2011/03/alpha1.png" alt="" width="552" height="398" /></a></p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/kP-OjsPxHwQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/technology/2011/03/duzhe-enters-alpha-stage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/technology/2011/03/duzhe-enters-alpha-stage/</feedburner:origLink></item>
		<item>
		<title>RegEx to Parse CC-CEDICT Entries</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/VkoHcmqgDds/</link>
		<comments>http://www.aaginskiy.com/technology/2011/03/regex-to-parse-cc-cedict-entries/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 16:52:07 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[CC-CEDICT]]></category>
		<category><![CDATA[CEDICT]]></category>
		<category><![CDATA[chinese]]></category>
		<category><![CDATA[RegEx]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=35</guid>
		<description><![CDATA[<p>I haven&#8217;t had a chance to update the blog as much as I&#8217;d like to in the past couple of weeks.  Lack of updates gave me some extra time to work on the 读者 (DuZhe) Text Analyzer, which is progressing very well.  I have the reader working in a very rough form, but I still [...]]]></description>
				<content:encoded><![CDATA[<p>I haven&#8217;t had a chance to update the blog as much as I&#8217;d like to in the past couple of weeks.  Lack of updates gave me some extra time to work on the 读者 (DuZhe) Text Analyzer, which is progressing very well.  I have the reader working in a very rough form, but I still need to add a reasonable UI.  Although, I do have an article that I&#8217;m polishing up now, almost ready to publish.</p>
<p>While evaluating the different dictionaries to use with the reader, I came across the need to parse CC-CEDICT entries from their text form.  After an initial quick google, I didn&#8217;t see any articles with a quick RegEx solution for doing just that, so I jotted down my RegEx for parsing CC-CEDICT.  Hopefully this will help other people who might google for the same purpose.</p>
<p>The RegEx:</p>
<p><strong>^\s*(.+)\s+(.+)\s+\[(.+)\]\s+\/(.+)\/\s*$</strong></p>
<p>This RegEx will take care of any trailing spaces before or after the actual dictionary entry.  It assumes that each line follows the standard CC-CEDICT formatting, and will spit out four matches (1: Simplified 2: Traditional 3:Pinyin 4:English).  Each individual English entry is still separated by &#8216;/&#8217;, but the trailing &#8216;/&#8217; are removed.</p>
<p><strong><br />
</strong></p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/VkoHcmqgDds" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/technology/2011/03/regex-to-parse-cc-cedict-entries/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/technology/2011/03/regex-to-parse-cc-cedict-entries/</feedburner:origLink></item>
		<item>
		<title>读者 Text Analyzer Update – Download [UPDATED]</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/ihNxc0QFQ6k/</link>
		<comments>http://www.aaginskiy.com/language/2011/03/duzhe-text-analyzer-update-download/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 22:40:52 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Language]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=29</guid>
		<description><![CDATA[<p>I rolled out a new update to the <a title="读者 (DuZhe) Text Analyzer" href="http://duzhe.aaginskiy.com">读者 Text Analyzer</a>.  It&#8217;s not a major update, but it comes with some fixes to the user interface.  I added a paginated table of all the words that the analyzer segments.  The table is interactive so you can filter and sort it [...]]]></description>
				<content:encoded><![CDATA[<p>I rolled out a new update to the <a title="读者 (DuZhe) Text Analyzer" href="http://duzhe.aaginskiy.com">读者 Text Analyzer</a>.  It&#8217;s not a major update, but it comes with some fixes to the user interface.  I added a paginated table of all the words that the analyzer segments.  The table is interactive so you can filter and sort it based on what you&#8217;d like to see.  When there are rows selected, you can download a CSV list of the words.  At the moment, there are no definitions because I haven&#8217;t selected a dictionary to use yet.  I will decide on a dictionary soon, so there will be an update that will also attach definitions to the CSV.</p>
<p><a title="读者 (DuZhe) Text Analyzer" href="http://duzhe.aaginskiy.com/">http://duzhe.aaginskiy.com/</a></p>
<p>[UPDATE] I selected the dictionary, so the flashcards now include the definitions.  The definitions are provided by the excellent <a title="ADSOtrans" href="http://www.adsotrans.com">ADSOtrans</a>.</p>
<p><img class="aligncenter size-full wp-image-32" title="DuZhe Download Update" src="http://www.aaginskiy.com/wp-content/uploads/2011/03/download2.png" alt="DuZhe Download Screenshot" width="550" height="223" /></p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/ihNxc0QFQ6k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/language/2011/03/duzhe-text-analyzer-update-download/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/language/2011/03/duzhe-text-analyzer-update-download/</feedburner:origLink></item>
		<item>
		<title>Deploying Rails 3 Apps with Git, Capistrano and Passenger</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/7mJDSRkK2_I/</link>
		<comments>http://www.aaginskiy.com/technology/2011/02/deploying-rails-3-apps-with-capistrano/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 22:08:14 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[rails 3]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=26</guid>
		<description><![CDATA[<p>I have been developing DuZhe Text Analyzer using Ruby on Rails 3 (since it is my preferred method of developing backend for online applications) over the last month or so.  Since this is longer than a 20-minute application, I decided to use a version control system, git.  I intend to roll out features continuously so a [...]]]></description>
				<content:encoded><![CDATA[<p>I have been developing DuZhe Text Analyzer using Ruby on Rails 3 (since it is my preferred method of developing backend for online applications) over the last month or so.  Since this is longer than a 20-minute application, I decided to use a version control system, git.  I intend to roll out features continuously so a good deployment strategy is very important for me.  I decided to use Capistrano for no particular reason other than the flexibility it offers to deploying rails applications.</p>
<p>Finally, to run the Rails 3 app, I&#8217;m using Passenger (mod_rails) to execute the ruby code.  I&#8217;ve chosen Passenger because it is the fastest option for executing Ruby apps offered by my web hosting provider.</p>
<p>Getting all 3 components to work together, unfortunately, was not trivial.  It took a while to get it all to work because primarily there is not much documentation on generating a recipe for Capistrano that works with Rails 3.</p>
<p>Here is a step by step on how to get Ruby on Rails 3 deployed on Passenger-enabled servers with git and Capistrano.</p>
<h3>1. Set Up Git Repository</h3>
<p>I will not go into how to install git on the server and locally; that is for another tutorial.  I recommend to make sure the git locally and remotely are of the same version or some unexpected bugs may arise.</p>
<p>First, make a copy of your project, just to be safe, then change directory to the project directory:</p>
<pre class="brush: bash; title: ; notranslate">[localuser ~]$ cd projectdir</pre>
<p>Now that we are in the right folder, let&#8217;s set up the project as a local git project.  First, let&#8217;s look at all the steps and analyze them one by one:</p>
<pre class="brush: bash; title: ; notranslate">[localuser projectdir]$ git init
[localuser projectdir]$ touch .gitignore
[localuser projectdir]$ git add .
[localuser projectdir]$ git commit</pre>
<p>The first line tells git to initialize this folder as a repository.  After it is done, we create an empty .gitignore file.  This is where you can write what files to include from the repository.  I&#8217;m leaving it blank for now.  Next I let git know to add all the files in the directory to the local repository (note the &#8220;.&#8221; at the end; it can be replaced for specific files).  Finally, I let git know to commit any changes (which in this case would be everything).</p>
<p>Now we need to switch over to the remote server and and set up a remote repository:</p>
<pre class="brush: bash; title: ; notranslate">[localuser projectdir]$ ssh [remoteuser@]host
[remoteuser ~]$ mkdir projectdir.git
[remoteuser ~]$ cd projectdir.git
[remoteuser projectdir.git]$ git init --bare
[remoteuser projectdir]$ exit</pre>
<p>First, we SSH into the remote server and create a new directory where we want the remote files to be stored.  We initialize the directory as a barebones git repository, since there are no files there yet.  Finally we return back to the local machine.</p>
<p>Next we are going to push our local repository to the remote host and set up some short cuts to make it easier in the future:</p>
<pre class="brush: bash; title: ; notranslate">[localuser projectdir]$ git remote add origin ssh://[user@]host/~/projectdir.git
[localuser projectdir]$ git push origin master
[localuser projectdir]$ git branch --set-upstream master origin/master
</pre>
<p>In the first line we set up a short cut to push the repository to keyword: origin, rather than typing the address every single push.  Next we push the previous commitment to the &#8220;origin&#8221; server under master branch.  Finally, we set up our branch is the primary upstream branch, so we can just issue &#8220;git push&#8221; command without specifying a branch or remote host.</p>
<h3>2. Set Up Capistrano</h3>
<p>Capistrano is a wonderful program for deploying Rails 3 apps; it allows for great customization and is very simple to use.  Best of all, it is very flexible and will work with almost any version control system out there.  Of course, we will be using it with git, so we will develop the right recipe for that.</p>
<p>The first step is to install Capistrano with the following command:</p>
<pre class="brush: bash; title: ; notranslate">[localuser projectdir]$ gem install capistrano</pre>
<p>After the installation is done, open up your Gemfile and add:</p>
<pre class="brush: ruby; title: ; notranslate">gem 'capistrano'</pre>
<p>Finally, we initialize Capistrano by running:</p>
<pre class="brush: bash; title: ; notranslate">[localuser projectdir]$ capify .</pre>
<p>This creates two files Capfile and config/deploy.rb.  The Capfile is like a a make file and can be left alone.  The second file, config/deploy.rb, is the one that we will customize.  Fill in all the necessary information that is representative of your connection:</p>
<pre class="brush: ruby; title: ; notranslate">
require 'bundler/capistrano'
set :user, 'username'
set :domain, 'web.host.com'
set :applicationdir, &quot;appdir&quot;

set :scm, 'git'
set :repository,  &quot;ssh://[user@]host/~/projectdir.git&quot;
set :git_enable_submodules, 1 # if you have vendored rails
set :branch, 'master'
set :git_shallow_clone, 1
set :scm_verbose, true

# roles (servers)
role :web, domain
role :app, domain
role :db,  domain, :primary =&gt; true

# deploy config
set :deploy_to, applicationdir
set :deploy_via, :export

# additional settings
default_run_options[:pty] = true  # Forgo errors when deploying from windows
#ssh_options[:keys] = %w(/home/user/.ssh/id_rsa)            # If you are using ssh_keysset :chmod755, &quot;app config db lib public vendor script script/* public/disp*&quot;set :use_sudo, false

# Passenger
namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles =&gt; :app, :except =&gt; { :no_release =&gt; true } do
    run &quot;#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}&quot;
  end
end
</pre>
<p>The first line is very important for making Capistrano work with Ruby on Rails 3.  Without it, Capistrano will throw a bunch of errors when running the bundler on the remote host.  Line 2-4 are relevant to your server configuration and should be filled in accordingly.  Lines 6-11 set up git as the version control system; you should adjust line 7 for where you set up the remote repository in the previous section.  Lines 14-16 set up the addresses of the different services (all the same in this case), and line 19-20 set up the deployment location.  Finally, lines 27-33 let Capistrano know that we need to create a file tmp/restart.txt to reboot Passenger after any deployment.</p>
<p>This pretty much all you need to do to get it deployed:</p>
<pre class="brush: bash; title: ; notranslate">[localuser projectdir]$ cap deploy</pre>
<p>That&#8217;s all it takes to get the app deployed.  Leave a comment and let me know if this worked for you <img src='http://www.aaginskiy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/7mJDSRkK2_I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/technology/2011/02/deploying-rails-3-apps-with-capistrano/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/technology/2011/02/deploying-rails-3-apps-with-capistrano/</feedburner:origLink></item>
		<item>
		<title>读者 (DuZhe) – Text Analyzer</title>
		<link>http://feedproxy.google.com/~r/aaginskiy/~3/BjLFMeVlPe4/</link>
		<comments>http://www.aaginskiy.com/language/2011/02/duzhe-text-analyzer/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 02:26:20 +0000</pubDate>
		<dc:creator>Artem Aginskiy</dc:creator>
				<category><![CDATA[Language]]></category>

		<guid isPermaLink="false">http://www.aaginskiy.com/?p=23</guid>
		<description><![CDATA[<p>I haven&#8217;t posted anything in a couple of weeks because I have been working on my new project.  It is a Chinese segmentation tool that divides any Chinese text into words and analyzes them for frequency and difficulty.  It also generates flashcards from the generated word list and let&#8217;s the user select which cards to [...]]]></description>
				<content:encoded><![CDATA[<p>I haven&#8217;t posted anything in a couple of weeks because I have been working on my new project.  It is a Chinese segmentation tool that divides any Chinese text into words and analyzes them for frequency and difficulty.  It also generates flashcards from the generated word list and let&#8217;s the user select which cards to download and save.  Finally, it allows for reading texts with annotated definitions.</p>
<p>At the moment, I&#8217;m only rolling out the Pre-Alpha version.  In this version, 读者 (DuZhe) Text Analyzer segments and analyzes the text for difficulty.</p>
<p>It generates three (3) different scores.  The first score is the overall Difficulty Score, which represents how the piece of text ranks on the scale of 1 to 10.  The algorithm for predicting the difficulty is still being tweaked, so I won&#8217;t be disclosing it yet.  However, I will discuss the algorithm in a later post.</p>
<p>The second score is the Old HSK difficulty score; it ranks the frequency distribution of the words in the text as compared to the typical HSK test passages.  The scale is from 0 to 4, representative of the HSK levels.</p>
<p>The third score is similar to the Old HSK score, but it is designed for the New HSK.  This score also is derived by comparing the word frequency distribution to a typical New HSK test passage.  The scale is from 0 to 6.</p>
<p>You can experiment with the Pre-Alpha version <a title="DuZhe Text Analyzer" href="http://duzhe.aaginskiy.com">here</a>.</p>
<p>读者 (DuZhe) Text Analyzer: <a title="DuZhe Text Analyzer" href="http://duzhe.aaginskiy.com">http://duzhe.aaginskiy.com</a></p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/aaginskiy/~4/BjLFMeVlPe4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaginskiy.com/language/2011/02/duzhe-text-analyzer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaginskiy.com/language/2011/02/duzhe-text-analyzer/</feedburner:origLink></item>
	</channel>
</rss>
