<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Anna Filina &#187; Uncategorized</title>
	<atom:link href="http://annafilina.com/blog/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://annafilina.com/blog</link>
	<description>I fix stuff</description>
	<lastBuildDate>Wed, 04 Jan 2012 14:56:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQuery Performance Pitfalls</title>
		<link>http://annafilina.com/blog/jquery-perf-pitfalls/</link>
		<comments>http://annafilina.com/blog/jquery-perf-pitfalls/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 23:45:24 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=710</guid>
		<description><![CDATA[Introduction
At FooLab, we have been using jQuery because it&#8217;s easy to learn, there is a big community with a lot of examples and advice and also because it&#8217;s easier to find developers familiar with it. It&#8217;s not a bad framework, but it&#8217;s very easy to abuse when you do not know how it works and<div><a href="http://annafilina.com/blog/jquery-perf-pitfalls/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>At FooLab, we have been using jQuery because it&#8217;s easy to learn, there is a big community with a lot of examples and advice and also because it&#8217;s easier to find developers familiar with it. It&#8217;s not a bad framework, but it&#8217;s very easy to abuse when you do not know how it works and what it implies.</p>
<h3>Selectors</h3>
<p>Consider these two selectors: &#8220;.photo&#8221; and &#8220;#photo&#8221;. The first one will force jQuery to go through every single DOM element, searching for the class attribute, searching for the one containing the word &#8220;photo&#8221;, because you can have multiple class names separated with spaces. Now imagine that you do that for a dozen selectors, inside a function that can be executed multiple times per second. The second selector will simply go and get the element by id, directly. No traversing.</p>
<p>You can&#8217;t always use ids, but you can help jQuery narrow the scope. You can define a scope using a second parameter: $(&#8220;.photo&#8221;, container). In this example, container = $(&#8220;.container&#8221;) so jQuery has no business traversing elements outside of that container. If the container has an id, then you can just write $(&#8220;#container .photo&#8221;).</p>
<p>You can also prevent jQuery from traversing every element by specifying the node name $(&#8220;div.photo&#8221;). This way, jQuery will not have to check the class attribute if it&#8217;s not a div. Yes, it is more flexible to use the same class across various HTML tags, but you have to make a choice.</p>
<p>Sometimes you will win a mere 0.5%, and sometimes you will win 2,485% performance increase and be really happy that you read about selectors. These tips can also be applied to CSS selectors, to style your page faster.</p>
<h3>The getComputedStyle()</h3>
<p>When you change the size of an element in the middle of the page, the browser has to recalculate many (if not all) element sizes to render your page correctly. And we&#8217;re not just talking about height x width. Borders, padding, margins, line-height all have to be taken into account. We don&#8217;t think much of it when the page first loads, because we attribute it to the network latency, but rendering a page is actually a lot of work. If you ever move elements around dynamically and notice a delay, that&#8217;s how much time it takes&#8230; with all your CPU cores.</p>
<p>Say you are using the<a href="http://jqueryui.com/demos/button/"> jQuery UI Button</a> to skin your elements. The page is loaded with default button elements. All is calculated and positioned. Then for every single .button() you call, the size of that element changes, and the entire page is redrawn. So for an initialization function calling 20 .button(), you get 20 page redraws. You may even get that problem when you enable and disable the buttons dynamically. If you&#8217;re only using .button() for skinning, it&#8217;s better to let go and use CSS instead.</p>
<h3>The hide()</h3>
<p>This one is related to the above measuring issue. When you .hide() an element, jQuery sets the display:none style, the space occupied by the element becomes empty and the page has to be redrawn. Whenever you can, set visibility:hidden instead. I once got a 2,740% performance increase on a commonly used function, with just that little thing.</p>
<p>Read my <a href="http://annafilina.com/blog/profiling-js-apps/">previous article</a> to learn how to find the areas of your application that are eating the most CPU.</p>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/jquery-perf-pitfalls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profiling JS Applications</title>
		<link>http://annafilina.com/blog/profiling-js-apps/</link>
		<comments>http://annafilina.com/blog/profiling-js-apps/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 23:44:45 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=704</guid>
		<description><![CDATA[Introduction
Some of the web apps that we build at FooLab rely heavily on Javascript. But when your CPU usage is through the roof, where do you start looking?
Methodology
Many developers start straight with a hypothesis and then try various corrections until something happens. This is a waste of time; no amount of experience changes that. Here&#8217;s<div><a href="http://annafilina.com/blog/profiling-js-apps/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>Some of the web apps that we build at FooLab rely heavily on Javascript. But when your CPU usage is through the roof, where do you start looking?</p>
<h3>Methodology</h3>
<p>Many developers start straight with a hypothesis and then try various corrections until something happens. This is a waste of time; no amount of experience changes that. Here&#8217;s I do it:</p>
<h4>1. Ask a question</h4>
<p>&#8220;Why is my machine using so much CPU?&#8221;</p>
<h4>2. Observe</h4>
<p>I use Chrome Developer Tools to poke around at first. Under the profiles tab, I start recording, perform the actions that seem to be causing the problem a few times and press stop. I remember seeing similar tools in Firefox and Safari.</p>
<p>There are many ways to analyze the data, but I found that sorting by Total to be most helpful. The Total is the time spent in the function and all functions called from within it, giving you the scope to look in.</p>
<h4>3. Propose an explanation</h4>
<p>Concentrate on functions that you wrote yourself, and then see in your code what they do. Try to think of any processes can be slow, unneeded or executed more times than needed.</p>
<h4>4. Benchmark</h4>
<p>I use benchmark.js which I include this file in my page. Then I add the necessary code to run the functions spotted in step 2. I like to run this code right after my home-brewed MVC has done initializing:</p>
<pre class="brush:js">var suite = new Benchmark.Suite;
suite.add('addEventListeners', function() {
  addEventListeners();
}).add('render', function() {
  render();
}).on('cycle', function(ev, bench) {
  console.log(String(bench));
}).run({
  'async': false,
  'minSamples': 50
});</pre>
<p>This will output a line for every .add you have, telling you the number of operations per second and margin of error. Rerun it if the margin is too wide. Make sure that you benchmark as many functions as you can before you start patching it. Write them in a table so that you can later compare with the improved code.</p>
<h4>5. Fix the code</h4>
<p>Now go ahead and start making adjustments. It&#8217;s good to make one type of optimization at once and run the benchmark again, writing all the numbers in a table side by side. Example: optimize jQuery selectors first. This way you can see which functions have been improved how, leading you to avoid certain mistakes in the future and having something to demonstrate and teach to your teammates.</p>
<p><a href="http://annafilina.com/blog/jquery-perf-pitfalls/">Read my next article</a> about some of the common places where jQuery murders your CPU.</p>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/profiling-js-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony Form: Extract Values</title>
		<link>http://annafilina.com/blog/symfony-form-extract-values/</link>
		<comments>http://annafilina.com/blog/symfony-form-extract-values/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 13:20:46 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=697</guid>
		<description><![CDATA[I had to look deep into Symfony 1.4 code this morning as I was trying to get a field&#8217;s value. Form values come from different sources: default values, record values (when editing, for example), original POST values and clean POST values. So when is each available and how do we get it?
Get the values by<div><a href="http://annafilina.com/blog/symfony-form-extract-values/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<p>I had to look deep into Symfony 1.4 code this morning as I was trying to get a field&#8217;s value. Form values come from different sources: default values, record values (when editing, for example), original POST values and clean POST values. So when is each available and how do we get it?</p>
<h3>Get the values by type</h3>
<p>Default values are what you will be presented with when you display an empty form.</p>
<blockquote><p>Get all values using $form-&gt;getDefaults() or a single value using $form-&gt;getDefault($name).</p></blockquote>
<p>Record values, which are merged with the default values, are displayed when a Doctrine record is associated with the form.</p>
<blockquote><p>Get all values using $form-&gt;getDefaults() or a single value using $form-&gt;getDefault($name).</p></blockquote>
<p>Original POST values are displayed when the form validation failed.</p>
<blockquote><p>Get all values using $form-&gt;getTaintedValues().</p></blockquote>
<p>Clean POST values are the ones that have been validated and transformed by the form validators. At that point, you will most likely choose to save the form and redirect.</p>
<blockquote><p>Get all values using $form-&gt;getValues() or a single value using $form-&gt;getValue($name).</p></blockquote>
<h3>Get all values regardless of origin</h3>
<p>In one scenario, I needed to access the form&#8217;s values to inject them into Javascript. There is a method to extract a value as it will appear in the HTML, without worrying about whether it&#8217;s default, record, dirty  POST or clean POST.</p>
<blockquote><p>Get the value directly from the field using $form-&gt;offsetGet($name)-&gt;getValue(). Alternatively, you can use $form[$name]-&gt;getValue() which will yield the same result.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/symfony-form-extract-values/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Their Programming Language Sucks!</title>
		<link>http://annafilina.com/blog/their-prog-language-sucks/</link>
		<comments>http://annafilina.com/blog/their-prog-language-sucks/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 13:16:14 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=690</guid>
		<description><![CDATA[Or at least this is what I hear often all around me. Many want to think that their language is better than all others, and go to great lengths to discredit them. Just like at sport events, people would paint their faces in their team&#8217;s colors and yell insults at the opponents.
I&#8217;m here to tell you that<div><a href="http://annafilina.com/blog/their-prog-language-sucks/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<p>Or at least this is what I hear often all around me. Many want to think that their language is better than all others, and go to great lengths to discredit them. Just like at sport events, people would paint their faces in their team&#8217;s colors and yell insults at the opponents.</p>
<p>I&#8217;m here to tell you that all languages are great and suck in their own way. There is no need to switch to a language just because someone told you that it was better; that&#8217;s often irrelevant, although counter-intuitive. You will always be more productive with the language that you have worked with for the past 10 or more years. While you spend another 10 years becoming an expert in a new language, you&#8217;re providing lower value for your customers. And what if by the time you are finally done switching, a shiny new awesome language comes out? You&#8217;ll be chasing your tail all your life. It&#8217;s like trying to keep up with teenage fashion.</p>
<p>If you&#8217;re fresh out of college, the same rules don&#8217;t apply. You&#8217;re not an expert in anything yet, even if your youth arrogance screams otherwise. You haven&#8217;t dealt with clients that will have your head on a spike if you don&#8217;t meet the deadline. You didn&#8217;t have junior freelancers do half the work, encrypt their code and disappear. You didn&#8217;t have to take over large teams that wasted millions of dollars and haven&#8217;t even finished arguing about the framework. Those are the real problems.</p>
<p>When you didn&#8217;t swear any allegiances yet, you are free to choose your language. So choose one that has potential in your eyes, one that has strong community support (even if it&#8217;s not an open source language), one that has good job prospects, one that has training and conferences available&#8230; this is what&#8217;s going to affect your life most, and not some pretty syntax.</p>
<p>In conclusion, I&#8217;d like to say that it&#8217;s not helpful to attack a programming language based on function names, frequency of releases, syntax, market share and other meaningless aspects. The real questions that you should be asking are whether your sh*t can be written in that language and whether you can get a well-paid job or contract. Finally, a diversity of languages and philosophies should be encouraged, so that we can learn from them and bring the concepts back to our own little world and flourish.</p>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/their-prog-language-sucks/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>On Food Additives and Cancer</title>
		<link>http://annafilina.com/blog/on-food-additives-and-cancer/</link>
		<comments>http://annafilina.com/blog/on-food-additives-and-cancer/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 15:47:48 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[health]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=676</guid>
		<description><![CDATA[Do you enjoy soft drinks? Do you drink the diet version for less sugar? Many of these drinks contain cancerogenic additives, especially the sugar-free versions. Read until the end for a not-so-drastic solution.]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">Disclaimer: Brand names are used for comparison only. It is not my intention to attack a product&#8217;s or a company&#8217;s reputation. Equivalent products may contain the same ingredients.</span></p>
<p>Do you enjoy soft drinks? Do you drink the diet version for less sugar? Many of these drinks contain cancerogenic additives, especially the sugar-free versions. Read until the end for a not-so-drastic solution.</p>
<h3>The numbers</h3>
<pre>Product   | Volume | Calories | Sugar | Cancerogenic Ingredients
---------------------------------------------------------------------------------------
Coke      | 237ml  | 100      | 27g   | Caramel coloring
Diet Coke | 237ml  | 0        | 0     | Caramel coloring, aspartame, potassium benzoate
Guru      | 250ml  | 100      | 25g   | None</pre>
<h3>The explanation</h3>
<p><strong>Coke</strong> contains caramel coloring. That subtance contains compounds proven to cause cancer in mammals<sup>1</sup>.</p>
<p>Turn to <strong>Diet Coke</strong> to save a few calories, and it gets scarier: three ingredients cause cancer. Aspartame causes cancer over a long-term consumption and is especially dangerous for children<sup>2</sup>. Potassium benzoate, much like sodium benzoate, reacts with vitamin C to create small amounts of benzene: a chemical that causes leukemia and other cancers<sup>3</sup>.</p>
<p><strong>Guru</strong>, on the other hand, contains less sugar, even for a higher volume. Sugar comes from sugarcane which is more expensive to produce. It contains guarana, a common ingredient in soft drinks in South America. It&#8217;s high in caffeine but is not dangerous when consumed moderately.</p>
<h3>Nobody lives forever, say you?</h3>
<p>Even infants have been diagnosed with cancer and one may suffer all his life instead of dying. I had a friend in his early thirties who had colorectal cancer. This means that he had to wear adult diapers so we wouldn&#8217;t defecate in his underwear. It was painful and embarrassing for him. He did not catch it early, so he will bear it all his life.</p>
<h3>The lesson</h3>
<p>Our bodies are so complex and different that there are no absolutely safe substances out there. Even water can be fatal if consumed abusively<sup>4</sup>. Consuming generally safe products in moderation is a good bet.</p>
<p>Many companies, striving to make increasingly cheaper and appealing products, often use cheap artificial alternatives to common ingredients. It&#8217;s mostly the consumer&#8217;s fault. We ask for cheap products, good food texture, long conservation, availability all year round and other follies. There is no point in blaming companies for satisfying our impractical requests.</p>
<p>I am ready to pay double or even triple for my grocery if that means living cancer-free until the ripe age of 120. Are you ready to sacrifice some extravagant requests to live healthier? Will you demand a more expensive but safer product variations from your favorite companies?</p>
<hr />
<h3>References</h3>
<p>1. The “caramel coloring” used to color all the top cola brands isn’t natural caramel coloring at all. Instead, it’s made by reacting sugars with ammonia and sulfites at high temperatures. This reaction results in the formation of 2-methylimidazole and 4-methylimidazole, both of which are chemicals documented by the U.S. government to cause cancer in mammals.</p>
<p><a href="http://www.naturalnews.com/031383_caramel_coloring_cola.html">http://www.naturalnews.com/031383_caramel_coloring_cola.html</a></p>
<p>2. [The study] indicated that rats first exposed to aspartame at eight weeks of age caused lymphomas and leukemias in females.</p>
<p><a href="http://www.cspinet.org/reports/chemcuisine.htm#aspartame">http://www.cspinet.org/reports/chemcuisine.htm#aspartame</a></p>
<p>3. Another problem occurs when sodium benzoate is used in beverages that also contain ascorbic acid (vitamin C). The two substances, in an acidic solution, can react together to form small amounts of benzene, a chemical that causes leukemia and other cancers.</p>
<p><a href="http://www.cspinet.org/reports/chemcuisine.htm#sodiumb">http://www.cspinet.org/reports/chemcuisine.htm#sodiumb</a></p>
<p>4. Water can be considered a poison when over-consumed just like any other substance.</p>
<p><a href="http://en.wikipedia.org/wiki/Water_intoxication">http://en.wikipedia.org/wiki/Water_intoxication</a></p>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/on-food-additives-and-cancer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updating RubyGem on OSX</title>
		<link>http://annafilina.com/blog/updating-rubygem-on-osx/</link>
		<comments>http://annafilina.com/blog/updating-rubygem-on-osx/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 18:30:12 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=672</guid>
		<description><![CDATA[No gem would install on my machine because my RubyGem was outdated and rubyforge.org kept returning 302 (redirect) status code. After trying every recipe to update RubyGem on Mac OSX that I had the patience for, I came up with my own solution.
Failed attempts
sudo ruby ~/Downloads/rubygems-1.8.6/setup.rb
sudo gem update --system
sudo gem install rubygems-update --source http://production.s3.rubygems.org/
update_rubygems
Successful attempt
sudo gem<div><a href="http://annafilina.com/blog/updating-rubygem-on-osx/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<p>No gem would install on my machine because my RubyGem was outdated and rubyforge.org kept returning 302 (redirect) status code. After trying every recipe to update RubyGem on Mac OSX that I had the patience for, I came up with my own solution.</p>
<h3>Failed attempts</h3>
<pre class="brush:shell">sudo ruby ~/Downloads/rubygems-1.8.6/setup.rb
sudo gem update --system
sudo gem install rubygems-update --source http://production.s3.rubygems.org/
update_rubygems</pre>
<h3>Successful attempt</h3>
<pre class="brush:shell">sudo gem update --system --source http://production.s3.rubygems.org/yaml</pre>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/updating-rubygem-on-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s hot. What are you doing about it?</title>
		<link>http://annafilina.com/blog/what-are-you-doing-about-the-heat/</link>
		<comments>http://annafilina.com/blog/what-are-you-doing-about-the-heat/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 21:10:57 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=659</guid>
		<description><![CDATA[In the last few weeks I heard a lot of people complaining that it&#8217;s hot. Not just in Montreal, but around the world. It&#8217;s so hot that the air smells differently. Let me share with you some tricks that I picked up in places where the thermometer shows over 40°C (100°F).
Drink
I mention it because many<div><a href="http://annafilina.com/blog/what-are-you-doing-about-the-heat/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<p>In the last few weeks I heard a lot of people complaining that it&#8217;s hot. Not just in Montreal, but around the world. It&#8217;s so hot that the air smells differently. Let me share with you some tricks that I picked up in places where the thermometer shows over 40°C (100°F).</p>
<h3>Drink</h3>
<p>I mention it because many people don&#8217;t know when to drink. They wait until they are thirsty, which is a mistake. You must drink regularly, regardless of whether you feel the thirst or not. During the hottest summer days, keep a full glass next to you almost all the time. Doctors recommend that you drink about 2 liters every day, which is roughly 8 glasses of 250ml (8 ounces).</p>
<p>If you wait too long, you&#8217;ll start by feeling weak, tired and irritable. You may even get muscle cramps and increased heart rate. Don&#8217;t wait. Also, avoid too much physical effort.</p>
<h3>No Air Conditioner&#8230; Oh Well</h3>
<p>If you don&#8217;t have an air conditioner, it&#8217;s not the end of the world. The human body can take a lot more than you think. For the record, I don&#8217;t even own a fan.</p>
<p>To fight the discomfort of sweating, refresh yourself every few hours. If you don&#8217;t have access to a shower or it is impractical, use a slightly wet washcloth and dry your skin afterwards. You should carry one with you to work. Remember the movie &#8220;The Book of Eli&#8221;.</p>
<h3><span style="font-weight: normal; font-size: 13px;">If it&#8217;s an option, close the blinds or curtains. Sunlight heats up the Earth, so imagine what it does to your floor and furniture (or your car&#8217;s dashboard)! When outside, don&#8217;t expose your skin too much or wear sunblock. If you can, avoid being outside in the sun between 10am and 4pm.</span></h3>
<h3><span style="font-weight: normal; font-size: 13px;">Open multiple windows to allow for the air to move in and out. It&#8217;s often cooler outside than inside, and you want to refresh the entire house by forcing the cool air inside. </span><span style="font-weight: normal; font-size: 13px;">If it gets very cool at night, keep the windows open and close them as the Sun goes up, thus trapping the cool air inside for a good part of the day.</span></h3>
<p><span style="font-weight: normal; font-size: 13px;">If you got any more advice, feel free to post a comment.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/what-are-you-doing-about-the-heat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Public Call for Papers: What Does That Mean?</title>
		<link>http://annafilina.com/blog/public-call-for-papers/</link>
		<comments>http://annafilina.com/blog/public-call-for-papers/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 19:37:07 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[ConFoo]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=652</guid>
		<description><![CDATA[Some of you may have already heard that the ConFoo call for papers is already open. The great thing about it this year, is that it&#8217;s public. This means that anyone can vote on the proposals. Besides being fun for the speakers and attendees, it opens up a whole lot of possibilities.
Selection
As organizers, we can<div><a href="http://annafilina.com/blog/public-call-for-papers/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<p>Some of you may have already heard that the <a href="http://confoo.ca/en/call-for-papers">ConFoo call for papers</a> is already open. The great thing about it this year, is that it&#8217;s public. This means that anyone can vote on the proposals. Besides being fun for the speakers and attendees, it opens up a whole lot of possibilities.</p>
<h3>Selection</h3>
<p>As organizers, we can provide our attendees with better content. Not just with content that we believe is good, but with content that people actually want to see. However, public votes will not be the only selection criteria, because we need to balance the content and our budget (we are, after all, non for profit). Don&#8217;t be upset if you were not selected even if you had many positive votes. We get hundreds of proposals each year and a limited number of slots.</p>
<h3>Topic Spread</h3>
<p>Many speakers do not propose on certain topics, because they expect many others to propose on the same thing. But you never know! It is possible to completely overlook an important topic simply because everyone is expecting someone else to submit, and doesn&#8217;t want to compete for it. This happens every year.</p>
<p>Now, a speaker can see other proposals by tag. If a tag or topic has little or no proposals, then the speaker would be tempted to submit. Even if there are proposals, a speaker may decide to offer a different perspective, or decide that the other proposal does represent the topic well enough.</p>
<h3>Speaker Guidelines</h3>
<p>By seeing what other do, speakers get a better picture of what works and what doesn&#8217;t. If a speaker sees that a topic had great votes, it will give him an idea of what makes a good topic. If the score is low, then he&#8217;ll know what to avoid. In any case, it&#8217;s good to know how others do it.</p>
<p>Also, consider a speaker whose proposals got low scores. He can try to figure out what&#8217;s wrong and fix it, or propose different topics that he believes are more appealing to the public. No more getting feedback when it&#8217;s already too late (and hope to see you next year)!</p>
<h3>Scheduling</h3>
<p>Once the papers are selected by the committee, creating a timetable is not an easy task. The ConFoo team spends weeks every year trying to find the best arrangement. With all the votes that will come in, we will be able to better determine the appropriate room size based on popularity. We will also be able to see which topics the same attendees are interested in, and schedule them at different times as much as possible.</p>
<h3>Promotion</h3>
<p>The more attendees we have, the better conference we can deliver. We hope that the speakers will promote their proposals in order to get votes, thus letting people know about ConFoo. More attendees also mean a bigger audience for speakers, so spread the good word!</p>
<p>Follow @confooca and share with the #confoo tag.</p>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/public-call-for-papers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SoundMixer + ByteArray</title>
		<link>http://annafilina.com/blog/soundmixer-bytearray/</link>
		<comments>http://annafilina.com/blog/soundmixer-bytearray/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 15:26:30 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[as3]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=638</guid>
		<description><![CDATA[{EAV_BLOG_VER:ef10600706258406}
As I was writing a prototype for a voice-driven user interface, I ran into a wall. I was convinced that I could analyze a sound&#8217;s frequency spectrum with ActionScript 3. It turn out that the awesome SoundMixer.computeSpectrum(), which implements the Fast-Fourier Transformation, can only sample currently played sounds. It cannot be supplied a ByteArray, such<div><a href="http://annafilina.com/blog/soundmixer-bytearray/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<p>{EAV_BLOG_VER:ef10600706258406}</p>
<p>As I was writing a prototype for a voice-driven user interface, I ran into a wall. I was convinced that I could analyze a sound&#8217;s frequency spectrum with ActionScript 3. It turn out that the awesome SoundMixer.computeSpectrum(), which implements the Fast-Fourier Transformation, can only sample currently played sounds. It cannot be supplied a ByteArray, such as microphone data.</p>
<p>I do not see any reason why feeding a ByteArray to SoundMixer.computeSpectrum() would not be allowed. I would appreciate if Adobe would supply the SoundMixer&#8217;s source code to the public so that I may implement the missing feature, instead of reverse engineering the whole class.</p>
<p><strong>Edit</strong>: Robin Millette found a library packaged as a SWC that I could easily inject into my prototype. Here is the app and <a href="http://annafilina.com/blog/wp-content/uploads/2011/06/mic-spectrum/mic-spectrum.zip">source</a>.</p>
<p>Try to speak, whiste, blow into the microphone or clap your hands to see different results. Every bar represents a half-octave.</p>
<p><iframe width="550" height="400" src="http://annafilina.com/blog/wp-content/uploads/2011/06/mic-spectrum/Main.html" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/soundmixer-bytearray/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sync git fork with maintainer</title>
		<link>http://annafilina.com/blog/sync-git-fork-with-maintainer/</link>
		<comments>http://annafilina.com/blog/sync-git-fork-with-maintainer/#comments</comments>
		<pubDate>Mon, 30 May 2011 21:28:57 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://annafilina.com/blog/?p=605</guid>
		<description><![CDATA[I forked the joind.in project on GitHub, committed a few patches and sent pull requests. It was fun until I asked myself &#8220;how do I keep my fork synced with the maintainer&#8217;s repo?&#8221; I found the info (with minor bug) on Google Groups by Matt Todd. It deserved its own post post.
Create and checkout &#8220;upstream/master&#8221;<div><a href="http://annafilina.com/blog/sync-git-fork-with-maintainer/">Read the rest...</a></div><br />]]></description>
			<content:encoded><![CDATA[<p>I forked the joind.in project on GitHub, committed a few patches and sent pull requests. It was fun until I asked myself &#8220;how do I keep my fork synced with the maintainer&#8217;s repo?&#8221; I found the info (with minor bug) on Google Groups by Matt Todd. It deserved its own post post.</p>
<p>Create and checkout &#8220;upstream/master&#8221; branch (or whatever you want to call it):</p>
<pre class="brush:shell">git checkout -b upstream/master</pre>
<p>Link branch to maintainer&#8217;s repo:</p>
<pre class="brush:shell">git remote add upstream git://github.com/upstream_maintainer/master.git</pre>
<p>Pull maintainer&#8217;s repo:</p>
<pre class="brush:shell">git pull upstream master</pre>
<p>Switch to your fork&#8217;s master branch:</p>
<pre class="brush:shell">git checkout master</pre>
<p>Merge maintainer&#8217;s repo into your fork:</p>
<pre class="brush:shell">git merge upstream/master</pre>
<h3>Subsequent syncs</h3>
<p>The next time you want to sync, you only need to switch branches, pull and merge:</p>
<pre class="brush:shell">git checkout upstream/master
git pull upstream master
git checkout master
git merge upstream/master</pre>
]]></content:encoded>
			<wfw:commentRss>http://annafilina.com/blog/sync-git-fork-with-maintainer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

