<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">

<channel>
	<title>Malvin Ly</title>
	
	<link>http://malvinly.com</link>
	<description />
	<lastBuildDate>Wed, 19 Jun 2013 23:38:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain="malvinly.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Malvin Ly</title>
		<link>http://malvinly.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://malvinly.com/osd.xml" title="Malvin Ly" />
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MalvinLy" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="malvinly" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://malvinly.com/?pushpress=hub" /><item>
		<title>Syncing TFS with a local directory</title>
		<link>http://malvinly.com/2013/06/19/syncing-tfs-with-a-local-directory/</link>
		<comments>http://malvinly.com/2013/06/19/syncing-tfs-with-a-local-directory/#comments</comments>
		<pubDate>Wed, 19 Jun 2013 23:38:38 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=489</guid>
		<description><![CDATA[I started learning PowerShell in order to automate some of the more tedious activities in TFS. For example, I needed to treat a local directory as the source of truth instead of the version in source control. I came across this blog post that provides a script that seemed to do exactly what I needed. [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=489&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I started learning PowerShell in order to automate some of the more tedious activities in TFS.  For example, I needed to treat a local directory as the source of truth instead of the version in source control.  I came across <a href="http://techblog.dorogin.com/2011/09/tfs-how-to-sync-server-folder-with.html" target="_blank">this blog post</a> that provides a script that seemed to do exactly what I needed.  The first time I executed this script on a directory with over 10,000 sub-directories and files, it took 10 minutes to finish.  </p>
<p>Here is phase 1 of the script:</p>
<pre class="brush: powershell; title: ; notranslate">
# Phase 1: add all local files into TFS which aren't under source control yet
$items = Get-ChildItem -Recurse 

foreach($item in $items) {
	$localItem = $item.FullName
	$serverItem = Get-TfsChildItem -Item &quot;$localItem&quot;
	
	if (!$serverItem -and !($pendingAdds -contains $localItem)) {
		# if there's no server item AND there's no a pending Add
		write &quot;No such item as '$localItem' on the server, adding&quot;
		Add-TfsPendingChange -Add &quot;$localItem&quot;
	}
}
</pre>
<p>With over 10,000 files in the local directory, calling <code>Get-TfsChildItem</code> for each item wasn&#8217;t time efficient.  Running phase 1 took approximately 3 minutes.</p>
<p>Looking at the help page for <code>Get-TfsChildItem</code>, we may pass an array <code>QualifiedItemSpec[]</code> instead of a single item.  Instead of calling <code>Get-TfsChildItem</code> thousands of time, we can call it just once.</p>
<pre class="brush: powershell; title: ; notranslate">
# Phase 1: add all local files into TFS which aren't under source control yet
$items = Get-ChildItem -Recurse | % { $_.FullName }

$serverItems = Get-TfsChildItem -Item $items

foreach($serverItem in $serverItems){
   if (!$serverItem -and !($pendingAdds -contains $localItem)) {
      write &quot;No such item as '$localItem' on the server&quot;
   }
}
</pre>
<p>Running the updated script still took approximately 2 minutes. It isn&#8217;t much of an improvement, but it is better nonetheless.  Phase 2 of the script has the same problem.</p>
<pre class="brush: powershell; title: ; notranslate">
# Phase 2: delete all subfolder/files in TFS if there's no local subfolder/file for them anymore, and check out other items
$items = Get-TfsChildItem -Recurse

foreach($item in $items) {
   $serverItem = $item.ServerItem
   $localItem = Get-TfsItemProperty -Item $serverItem 
   
   # Do other stuff...
}
</pre>
<p>For the entire collection of files found in TFS, the script will iterate through and call <code>Get-TfsItemProperty</code> for each file.  Running phase 2 took approximately 6 minutes.  Again, we can update the script to call <code>Get-TfsItemProperty</code> once by passing it an array.</p>
<pre class="brush: powershell; title: ; notranslate">
# Phase 2: delete all subfolder/files in TFS if there's no local subfolder/file for them anymore, and check out other items
$items = Get-TfsChildItem -Recurse
$itemProperties = Get-TfsItemProperty -Item $items

foreach($item in $itemProperties) {
   $serverItem = $item.SourceServerItem
   $localItem = $item.LocalItem
   
   # Do other stuff...
}
</pre>
<p>Running the updated script still took approximately 3 minutes. Better, but still slow.  After reading the help page for each cmdlet more carefully, I finally noticed that most of these cmdlets offer the <code>-Recurse</code> switch.  Instead of iterating through each of the files in the local workspace and server, we can use the top directory along with the <code>-Recurse</code> switch.</p>
<pre class="brush: powershell; title: ; notranslate">
$localItems = Get-ChildItem -Recurse | % { $_.FullName }
$serverItemProperties = Get-TfsItemProperty -Item . -Recurse
$serverItems = $serverItemProperties | % { $_.LocalItem }

# Phase 1: add all local files into TFS which aren't under source control yet
foreach ($item in $localItems) {
   if (!($serverItems -contains $item) -and !($pendingAdds -contains $item)) {
      write &quot;No such item as '$localItem' on the server, adding&quot;
      Add-TfsPendingChange -Add &quot;$item&quot;
   }  
}

# Phase 2: delete all subfolder/files in TFS if there's no local subfolder/file for them anymore, and check out
foreach($item in $serverItemProperties) {  
	$serverItem = $item.SourceServerItem
	$localItem = $item.LocalItem
	
	# Do other stuff...
}
</pre>
<p>The entire script runs in just 16 seconds instead of the original 10 minutes.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/489/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=489&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2013/06/19/syncing-tfs-with-a-local-directory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Motivation</title>
		<link>http://malvinly.com/2013/01/18/motivation/</link>
		<comments>http://malvinly.com/2013/01/18/motivation/#comments</comments>
		<pubDate>Fri, 18 Jan 2013 08:18:36 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=473</guid>
		<description><![CDATA[I&#8217;ve been doing a lot of soul searching lately. There have been a lot of changes recently. Some for the better and some for the worse. While watching the video below, I nearly jumped out of my seat a few times because of the deja vu moments. The two presenters are highly entertaining to watch. [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=473&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been doing a lot of soul searching lately.  There have been a lot of changes recently.  Some for the better and some for the worse.  While watching the video below, I nearly jumped out of my seat a few times because of the deja vu moments.</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='595' height='365' src='http://www.youtube.com/embed/OTCuYzAw31Y?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span></p>
<p>The two presenters are highly entertaining to watch.  Although the title may be a little sensational, I still think the video promotes important messages.  I&#8217;m sure a lot of people recognize the topics they discuss, but it&#8217;s still good to hear someone else talk about it openly.  There are numerous topics in this video that resonate with me.</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='595' height='365' src='http://www.youtube.com/embed/u6XAPnuFjJc?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span></p>
<p>This is a 10 minute video about what motivates people.  It&#8217;s an interesting video to watch, but I would take it with a grain of salt.  There&#8217;s actually an entire book about this.  The examples they use may or may not correlate to what happens in an actual work environment.  While it may work for a subset of people, this certainly isn&#8217;t something that would work for everyone.  However, I do agree with the three factors they discuss that lead to better performance and personal satisfaction:</p>
<ul>
<li>Autonomy</li>
<li>Mastery</li>
<li>Purpose</li>
</ul>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='595' height='365' src='http://www.youtube.com/embed/4zgYG-_ha28?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span></p>
<p>This last video is John Carmack&#8217;s keynote at QuakeCon 2011.  John Carmack is a brilliant programmer and is an inspiration to me.  Just listening to him talk motivates me to go try and build something great.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/473/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=473&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2013/01/18/motivation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Managers</title>
		<link>http://malvinly.com/2013/01/16/managers/</link>
		<comments>http://malvinly.com/2013/01/16/managers/#comments</comments>
		<pubDate>Wed, 16 Jan 2013 06:16:07 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=467</guid>
		<description><![CDATA[I was speaking with my manager recently and the conversation derailed a bit. Somehow we ended up discussing what I consider a good manager. In the past five years, I&#8217;ve reported to seven different people, each possessing their own unique traits that I respect. There are articles all over the web that lists the ideal [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=467&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I was speaking with my manager recently and the conversation derailed a bit. Somehow we ended up discussing what I consider a good manager.  In the past five years, I&#8217;ve reported to seven different people, each possessing their own unique traits that I respect.  There are articles all over the web that lists the ideal traits of a manager. Just to list a few:</p>
<ul>
<li>Empower your team and don&#8217;t micromanage.</li>
<li>Communicate well and listen to your team.</li>
<li>Encourage professional development.</li>
<li>etc&#8230;</li>
</ul>
<p>However, I consider two things of utmost importance above all else:</p>
<ul>
<li>Honor your commitments (trust)</li>
<li><a href="http://meatballwiki.org/wiki/FairProcess" target="_blank">Fair process</a></li>
</ul>
<p>If a manager promises my team something, then backtracks without discussing it with us, I will forever look at that manager differently.  There is nothing that will demotivate me faster than working for someone I can&#8217;t trust.  </p>
<p>To quote the <a href="http://meatballwiki.org/wiki/FairProcess" target="_blank">fair process</a> page:</p>
<blockquote>
<ul>
<li><strong>Engagement</strong>. Involve individuals in the decisions that involve them. Get their input, allow them to actively <a href="http://meatballwiki.org/wiki/PeerReview" target="_blank">PeerReview</a> the ideas on the table. Respect individuals for their ideas.</li>
<li><strong>Explanation</strong>. Everyone involved and affected must understand the reason why the decisions were made. Demonstrating the rationale behind decisions shows people that you have considered their opinions thoughtfully and impartially. Not only will this make people trust the decision maker but it will help them learn.</li>
<li><strong>Expectation clarity</strong>. Once a decision is made, clearly specify the expectations for the people involved, what responsibilities they have. Even if the expectations are demanding, people want to know by what standards they will be judged and what penalties there will be for failure. Understanding what to do reduces useless political maneuvering and it allows people to focus on the task at hand.</li>
</blockquote>
<p>Fair process goes hand in hand with trust.  If decisions are being made without input from my team, I feel completely disengaged with the task in hand.  If my manager cannot trust me enough to value my input, why should I go above and beyond for them?</p>
<p>For the managers I&#8217;ve worked with that employed fair process, it was an absolute pleasure working with them.  I was committed and motivated to get the task done because I felt like I had a stake in the result.</p>
<p>A lot of the traits that I value can be found in the book <a href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-Second/dp/0932633439" target="_blank">Peopleware</a>.  Just like how the agile manifesto states, software development is more than just processes.  If you value processes over people, you&#8217;re probably a bad manager.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/467/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=467&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2013/01/16/managers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>User stories, features, and epics</title>
		<link>http://malvinly.com/2013/01/10/user-stories-features-and-epics/</link>
		<comments>http://malvinly.com/2013/01/10/user-stories-features-and-epics/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 08:26:45 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=454</guid>
		<description><![CDATA[There have been a lot of discussions in my team recently about the definitions of a user story, feature, and epic. I&#8217;m by no means an agile expert, so this is just my opinion and interpretation. I&#8217;m the type of person who trusts their intuition, so the way we&#8217;re currently forced to group our requirements [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=454&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>There have been a lot of discussions in my team recently about the definitions of a user story, feature, and epic.  I&#8217;m by no means an agile expert, so this is just my opinion and interpretation. I&#8217;m the type of person who trusts their intuition, so the way we&#8217;re currently forced to group our requirements feels extremely awkward to me.  </p>
<p>Currently every user story that is created must be grouped under a feature.  All features must be grouped under an epic.  By the way I&#8217;ve described things so far, it appears there is a hierarchical structure that must always exist:  Epic -&gt; Feature -&gt; User story.</p>
<p>To be honest, I hate this.  I don&#8217;t like it at all.  If a user story is small enough to implement on its own, why do I need to bother creating a feature or epic?  This screams process over pragmatism.  If we&#8217;re forced to always create features and epics, they are no longer features that describe how a system works.  Instead, we&#8217;re using them as categories or buckets of work.</p>
<p>After reading multiple articles around the web, I found <a href="http://www.mountaingoatsoftware.com/blog/stories-epics-and-themes" target="_blank">this</a> article by Mike Cohn that contains a very simple and concise definition for each.</p>
<p>To me, a user story is a requirement that can stand on its own.  It doesn&#8217;t need to be grouped under a feature or epic.  If a user story is too large but not large enough to be considered an epic, it may be broken down into &#8220;tasks&#8221; that will eventually be absorbed back into the user story after completion.  Many people have the opinion that a user story should be sliced into multiple smaller stories instead of tasks.  I disagree because that story will be sliced to the point where it doesn&#8217;t provide any business value on its own.  Instead, they become system or technical stories.  A user story should be something that delivers business value on its own.</p>
<p>If a user story may be broken down into multiple smaller stories that can provide business value on its own, then it may be considered an epic.  I really like the way Mike Cohn described themes, or what we would consider features.  They are simply a &#8220;rubber band&#8221; around a collection related of user stories.  There isn&#8217;t a hierarchy between a feature and epic.  Since a feature is simply a collection of related stories, there are times when a feature may be larger than an epic or vice versa.</p>
<p>Neither epics nor features are required.  If a requirement is small enough to fit inside a single user story, then that is all there needs to be.</p>
<p>Again, I&#8217;m not an agile expert, so this is just my opinion and interpretation.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/454/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/454/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=454&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2013/01/10/user-stories-features-and-epics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Timesheets and developers</title>
		<link>http://malvinly.com/2013/01/10/timesheets-and-developers/</link>
		<comments>http://malvinly.com/2013/01/10/timesheets-and-developers/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 06:02:37 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=443</guid>
		<description><![CDATA[If I were a consultant or if I were working for a consulting firm that charged clients per hour of work, I would see why logging hours spent on a task is necessary and important. If I am a salaried employee working 40 hours a week, the idea of forcing me to record how many [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=443&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If I were a consultant or if I were working for a consulting firm that charged clients per hour of work, I would see why logging hours spent on a task is necessary and important.</p>
<p>If I am a salaried employee working 40 hours a week, the idea of forcing me to record how many hours I spend on bugs, new features, meetings, etc&#8230; is completely absurd.</p>
<p>Hours spent on a task is a poor metric in these cases.  The idea behind logging how much time is spent on bugs or new features is that goals can be created around how much time is spent on bugs.  For example, we want to spend 5% less time on bugs next quarter.   </p>
<p>Unfortunately, that&#8217;s a poor way of motivating people.  Developer &#8220;A&#8221; is responsible for 10 bugs and each takes 5 minutes to fix.  Developer &#8220;B&#8221; is responsible for a single bug that takes 3 days to debug and resolve because it&#8217;s a rare race condition.  Why should developer &#8220;B&#8221; be penalized in this case when clearly developer &#8220;A&#8221; needs to work on improving his code?  Metrics should be formed around the number of bugs introduced and the complexity of each bug.  Our goals should be to reduce the number of trivial bugs that make it into production, rather than reducing the amount of time spent on fixing bugs.</p>
<p>Creating goals around how much time is spent on bugs per sprint creates deceit.  People will be more focused on adding new features to their sprint rather than prioritizing the bugs in order to show management that they spent more time on features than bugs that sprint.  This will create software full of bugs.  Yes you&#8217;ll have plenty of new features, but buggy software is still buggy software.</p>
<p>There are times when we need to find out how much money it took to create a feature.  Since these features are estimated in story points, I don&#8217;t see why it&#8217;s so difficult to write a query in your project management software to find out it took 2 developers and half the sprint to create this feature.  Same concept can be applied to any bugs that were fixed or maintenance work.  </p>
<p>These are all estimates anyway.  If you think forcing people to log how many hours they worked on a feature will yield more accurate results, you&#8217;re in for a rude awakening.  People will forget how much time they spent on a feature and most people people already  estimate the approximate time they spent on a work item anyways.  You&#8217;ll get more accurate results by querying your project management software.</p>
<p>I also hear the argument that logging hours will help us identity when people are attending too many meetings, responding to too many emails, or other administrative work.  That may work for code monkeys that do nothing but follow orders, but now you&#8217;re burdening other people.  This relates to my previous post about discipline over forced processes.  If someone feels they are attending too many meetings and cannot get enough work done, then that person needs to take responsibility and stop attending useless meetings.  As long as I&#8217;m producing results on time, why should anyone care how many meetings I attend?  Getting the job done is why I get paid.  If someone isn&#8217;t producing value, then it should be the supervisors job to take notice and step in.  It doesn&#8217;t take a rocket scientist to identify people who can&#8217;t carry their weight.</p>
<p>The bottom line is that management needs to trust the people working for them and treat adults like adults.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/443/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=443&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2013/01/10/timesheets-and-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Team discipline over forced processes</title>
		<link>http://malvinly.com/2013/01/08/team-discipline-over-forced-processes/</link>
		<comments>http://malvinly.com/2013/01/08/team-discipline-over-forced-processes/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 11:14:29 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=439</guid>
		<description><![CDATA[I always strive for my team to be as autonomous as possible. The best way for a team to perform well is to have the responsibility to decide how they work. The process should work for the team, not the other way around. It really irritates me when I see agile zealots blindly following their [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=439&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I always strive for my team to be as autonomous as possible.  The best way for a team to perform well is to have the responsibility to decide how they work.  The process should work for the team, not the other way around. </p>
<p>It really irritates me when I see agile zealots blindly following their step-by-step checklist.  For example, some people have forgotten who our customers are.  As a developer, my customer is the business.  A typical agile zealot will value processes over business value.  If it goes against their prescribed set of agile processes, the business must be wrong and we have set them straight right?  Absolutely ridiculous.</p>
<p>&#8220;But that&#8217;s not Scrum&#8221;.  Well guess what?  I don&#8217;t care because no process is perfect.  The process is not more important than the customer&#8217;s satisfaction.  These agile zealots always claim to care about people and results more than processes, but they will interject if you don&#8217;t follow their checklist to the letter.  </p>
<p>Great teams should always have the power to decide how they work, because ultimately they will be responsible for the outcome.  Mistakes will be made, but it&#8217;s part of the learning process.  At the same time, I&#8217;m not saying that once a process has been decided upon that it needs to be written in stone.  A disciplined team will fine tune their workflow as the project progresses.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/439/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=439&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2013/01/08/team-discipline-over-forced-processes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Scrum should be renamed to Shit</title>
		<link>http://malvinly.com/2012/12/10/scrum-should-be-renamed-to-shit/</link>
		<comments>http://malvinly.com/2012/12/10/scrum-should-be-renamed-to-shit/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 01:36:49 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=428</guid>
		<description><![CDATA[Before I go any further, I want to mention that this post is based purely on my observations, my current state, and most importantly my sole opinion. Your mileage may vary. I&#8217;m sure there are teams that are living in Scrum bliss. I&#8217;ve debated for a few days whether to actually post this or not, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=428&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Before I go any further, I want to mention that this post is based purely on my observations, my current state, and most importantly my sole opinion.  Your mileage may vary.  I&#8217;m sure there are teams that are living in Scrum bliss.  I&#8217;ve debated for a few days whether to actually post this or not, due to the fact that it may seem like I&#8217;m railing against the blind and unthinking practitioners of &#8220;Agile&#8221;.  I removed half of this post because I wanted to keep it somewhat compact and not just rant on.</p>
<p>I&#8217;ve mentioned a few times that I&#8217;m a fan of the ideas behind the <a href="http://agilemanifesto.org/principles.html" target="blank">Agile Manifesto</a>.  However, I&#8217;m not a fan of the Agile (capital &#8220;A&#8221;) methodology/process/bullshit that is forced on me.  Here is <a href="http://en.wikipedia.org/wiki/Scrum_%28development%29" target="blank">Wikipedia&#8217;s</a> definition of Scrum:</p>
<blockquote><p>Scrum is an iterative and incremental agile software development framework for managing software projects and product or application development.</p></blockquote>
<p>The problem is <em>&#8220;managing projects&#8221;</em>.  This is what happens when people becomes overzealous about a process.  All I see is a narrow-minded, fixed set of steps that inhibits rationality.  Scrum is designed for mediocre developers who can&#8217;t think for themselves.  There, I said it.  </p>
<p>People tell you that if you don&#8217;t follow this approach, you&#8217;re doing it wrong.  If your project succeeds, then it&#8217;s because you did &#8220;Agile&#8221;. If you fail, then you were doing &#8220;Agile&#8221; wrong.  This mindset breeds mediocre teams.  Their goal is to teach everyone what a scrum is, what a sprint is, what are user stories, what the product owner is responsible for, etc&#8230;.   The problem is that they know how to do &#8220;Agile&#8221; (noun), but they don&#8217;t know how to be agile (adjective).</p>
<p>When people tell me that I can&#8217;t clarify requirements with the business because the business analyst will do that for me in a separate meeting, I can&#8217;t help but think whether they&#8217;ve actually read the manifesto or not.  This tells me that they&#8217;ve adopted the garden variety pseudo &#8220;Agile&#8221; bullshit and have simply cherry picked what looks good on paper.</p>
<p>The fourth principle of the manifesto states that &#8220;business people and developers must work together daily throughout the project&#8221;.  But in a dysfunctional Scrum world, this just means that the development team sits in the same meeting with the business without contributing.  I was even scolded last week when I attempted to clarify requirements during a meeting.  If I hear &#8220;we shouldn&#8217;t care how the business prioritizes tasks&#8221; one more time, my blood pressure will go through the roof.  </p>
<p>Some people may not care, but I certainly do care about why a task is prioritized in a certain order and the business history behind such a decision.  Domain experts and developers do not have to be separate roles, yet this mindset of &#8220;we don&#8217;t care&#8221; completely misses the point of the fourth principle from the manifesto.  People are too focused on what the software should do instead of what business goal we are solving. They are tasked with delivering a set of stories and measured on that, so they won&#8217;t see any benefit in coming up with alternative or better solutions.</p>
<p>The <a href="http://www.halfarsedagilemanifesto.org/" target="blank">manifesto for half-arsed agile software development</a> is amazingly accurate:</p>
<blockquote><p>Individuals and interactions over processes and tools <em>and we have mandatory processes and tools to control how those individuals (we prefer the term &#8216;resources&#8217;) interact</em>.</p></blockquote>
<p>Scrum is nothing more than just a bunch of rigid processes.  Being agile is supposed to be about flexibility and the ability to react. It&#8217;s not supposed to be about rigid processes and managers who are blindly devoted to their metrics.  </p>
<p>&#8220;Agile slave&#8221; is an accurate description.  I am told all that time that if a story isn&#8217;t completely defined, then throw it back to the business and it doesn&#8217;t make it into the current sprint.  This tells me two things:  the team doesn&#8217;t trust the business partners and you&#8217;re blindly following a process without thinking about the long term benefits.  There is still this mentality of &#8220;us&#8221; vs &#8220;them&#8221; when it comes to IT and business.  Yes, you&#8217;re protecting your team and velocity in the short term, but why should I put so much emphasis on velocity?  It&#8217;s just a number, an estimate.  </p>
<p>Rather then working with the business partners to build that knowledge and educate people, you&#8217;re throwing items over the fence and moving on.  People are missing the big picture.  As time goes on, a relationship is formed and both sides work in unison.  I don&#8217;t have to constantly question the business and vice versa because there is trust.  If you&#8217;re not working towards this goal, then you&#8217;re not trying.</p>
<blockquote><p>More and more shops now think of themselves as Agile. They&#8217;re investing in Agile training and attempting to adopt Agile methods such as Scrum and Kanban. But they&#8217;ve missed the point. Instead of becoming enlightened freethinkers, they&#8217;ve drunk the Kool-Aid and joined the Cult of Agile. Dogma and orthodoxy are alive and well. At the cutting edge of our profession are the people Andy Hunt calls &#8220;Agile slaves.&#8221;</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/428/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=428&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2012/12/10/scrum-should-be-renamed-to-shit/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Advanced distributed systems design</title>
		<link>http://malvinly.com/2012/11/11/advanced-distributed-systems-design/</link>
		<comments>http://malvinly.com/2012/11/11/advanced-distributed-systems-design/#comments</comments>
		<pubDate>Mon, 12 Nov 2012 03:54:35 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=423</guid>
		<description><![CDATA[I just got home after spending a week in Miami attending Udi Dahan&#8217;s &#8220;Advanced distributed systems design&#8221; course. This was by far the best training course I have ever attended. In fact, I believe it was one of the best investments I&#8217;ve ever made for my career. I&#8217;m sure it will take me many weeks [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=423&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I just got home after spending a week in Miami attending Udi Dahan&#8217;s &#8220;Advanced distributed systems design&#8221; course.  This was by far the best training course I have ever attended.  In fact, I believe it was one of the best investments I&#8217;ve ever made for my career.  I&#8217;m sure it will take me many weeks of reviewing my notes to fully digest all the information that was presented.  I am extremely excited to start thinking about and using some of the techniques and concepts that I learned during this course.  There is no doubt that it will take me several years of being a practitioner for these concepts and principles to become second nature, but the end result will be worth it.</p>
<p>If you are interested in distributed systems, I highly recommend attending this course if you ever get the opportunity.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/423/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=423&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2012/11/11/advanced-distributed-systems-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Pluralize words</title>
		<link>http://malvinly.com/2012/10/21/pluralize-words/</link>
		<comments>http://malvinly.com/2012/10/21/pluralize-words/#comments</comments>
		<pubDate>Mon, 22 Oct 2012 02:14:15 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=417</guid>
		<description><![CDATA[Whenever I&#8217;ve needed the plural form of a word, I&#8217;ve always relied on the Inflector class from the Castle ActiveRecord project. Since .NET 4.0, Microsoft has added their own PluralizationService class to pluralize words. Microsoft&#8217;s PluralizationService class is actually used in the Entity Framework tools to generate singular or plural entity names. There are cases [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=417&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Whenever I&#8217;ve needed the plural form of a word, I&#8217;ve always relied on the <a href="https://github.com/castleproject/ActiveRecord/blob/master/src/Castle.ActiveRecord/Framework/Internal/Inflector.cs" target="_blank"><code>Inflector</code></a> class from the Castle ActiveRecord project.  </p>
<pre class="brush: csharp; title: ; notranslate">
string plural = Inflector.Pluralize(&quot;planet&quot;);
Console.WriteLine (plural);
</pre>
<p>Since .NET 4.0, Microsoft has added their own <a href="http://msdn.microsoft.com/en-us/library/system.data.entity.design.pluralizationservices.pluralizationservice%28v=vs.100%29.aspx" target="_blank"><code>PluralizationService</code></a> class to pluralize words.  Microsoft&#8217;s <code>PluralizationService</code> class is actually used in the Entity Framework tools to generate singular or plural entity names.</p>
<pre class="brush: csharp; title: ; notranslate">
var service = PluralizationService
	.CreateService(CultureInfo.GetCultureInfo(&quot;en-us&quot;));

string plural = service.Pluralize(&quot;planet&quot;);
Console.WriteLine(plural);
</pre>
<p>There are cases when both classes do not generate the same plural form of a word.  For example, attempting to pluralize the word &#8220;virus&#8221; generates different results.  <code>Inflector</code> will return &#8220;viri&#8221; while the <code>PluralizationService</code> will return &#8220;virus&#8221;.  Neither generated the more common <a href="http://en.wikipedia.org/wiki/Plural_form_of_words_ending_in_-us#Virus" target="_blank">&#8220;viruses&#8221;</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/417/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/417/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=417&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2012/10/21/pluralize-words/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
		<item>
		<title>Castle DictionaryAdapter – Using TypeConverter to map different types</title>
		<link>http://malvinly.com/2012/10/20/castle-dictionaryadapter-using-typeconverter-to-map-different-types/</link>
		<comments>http://malvinly.com/2012/10/20/castle-dictionaryadapter-using-typeconverter-to-map-different-types/#comments</comments>
		<pubDate>Sun, 21 Oct 2012 04:04:03 +0000</pubDate>
		<dc:creator>Malvin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://malvinly.com/?p=406</guid>
		<description><![CDATA[I&#8217;ve posted about the DictionaryAdapter a few times in the past (here and here). There are scenarios when we want to map more than just simple types to strings. For example, we have an interface IPerson with the property Birthday representing the date in ticks. If we attempt to map a DateTime to the property [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=406&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve posted about the <code>DictionaryAdapter</code> a few times in the past (<a href="http://malvinly.com/2011/03/03/strongly-typed-asp-net-session/" target="_blank">here</a> and <a href="http://malvinly.com/2011/02/28/strongly-typed-dictionaries/" target="_blank">here</a>).  There are scenarios when we want to map more than just simple types to strings.  For example, we have an interface <code>IPerson</code> with the property <code>Birthday</code> representing the date in ticks.</p>
<pre class="brush: csharp; title: ; notranslate">
public interface IPerson
{
    string Name { get; set; }
    int Age { get; set; }
    long Birthday { get; set; }
}
</pre>
<p>If we attempt to map a <code>DateTime</code> to the property <code>Birthday</code>, an <code>InvalidCastException</code> will be thrown when we access the <code>Birthday</code> property.</p>
<pre class="brush: csharp; title: ; notranslate">
var dictionary = new Dictionary&lt;string, object&gt;
{ 
    { &quot;Name&quot;, &quot;John Doe&quot; },
    { &quot;Age&quot;, 30 },
    { &quot;Birthday&quot;, DateTime.Now },
};

IPerson person = new DictionaryAdapterFactory()
	.GetAdapter&lt;IPerson&gt;(dictionary);

Console.WriteLine(person.Birthday);
</pre>
<p>Fortunately, the <code>DictionaryAdapter</code> allows us to use attributes to define how properties should be mapped by creating a class that inherits from <code>System.ComponentModel.TypeConverter</code>.</p>
<pre class="brush: csharp; title: ; notranslate">
public class DateTimeToTicks : TypeConverter
{
	public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
	{
		if (sourceType == typeof(DateTime))
			return true;
		
		return base.CanConvertFrom(context, sourceType);
	}

	public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
	{
		return ((DateTime)value).Ticks;
	}
}
</pre>
<p>We can decorate the <code>Birthday</code> property with the <code>TypeConverter</code> attribute and specify that we want to use our new type converter.</p>
<pre class="brush: csharp; title: ; notranslate">
[TypeConverter(typeof(DateTimeToTicks))]
long Birthday { get; set; }
</pre>
<p>The previous example is a bit contrived.  However, I have run into issues when trying to use the <code>DictionaryAdapter</code> with a result set from a database that contains <code>NULL</code>s.  Here we&#8217;ve updated the <code>IPerson</code> interface with a <code>Nullable&lt;int&gt;</code>.</p>
<pre class="brush: csharp; title: ; notranslate">
public interface  IPerson
{
    string Name { get; set; }
    int? Age { get; set; }
}
</pre>
<p>The following code will throw an <code>InvalidCastException</code> on line 17 after mapping the results from a SQL query:</p>
<pre class="brush: csharp; highlight: [17]; title: ; notranslate">
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand(&quot;select 'John Doe' as [Name], NULL as [Age]&quot;, conn))
{
    conn.Open();

    using (SqlDataReader dr = cmd.ExecuteReader())
    {
        while (dr.Read())
        {
            var dictionary = Enumerable
                .Range(0, dr.FieldCount)
                .ToDictionary(dr.GetName, dr.GetValue);

            IPerson person = new DictionaryAdapterFactory()
                .GetAdapter&lt;IPerson&gt;(dictionary);

            Console.WriteLine(person.Age);
        }
    }
}    
</pre>
<p>We can create another <code>TypeConverter</code> to check for <code>DBNull</code> and returns <code>null</code> if found.</p>
<pre class="brush: csharp; title: ; notranslate">
public class DBNullable : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        if (sourceType == DBNull.Value.GetType())
            return true;

        return base.CanConvertFrom(context, sourceType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (DBNull.Value.Equals(value))
            return null;

        return base.ConvertFrom(context, culture, value);
    }
}
</pre>
<p>Again, we can decorate the <code>Age</code> property with our new type converter.</p>
<pre class="brush: csharp; title: ; notranslate">
[TypeConverter(typeof(DBNullable))]
int? Age { get; set; }
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nivlam.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nivlam.wordpress.com/406/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=malvinly.com&#038;blog=20601338&#038;post=406&#038;subd=nivlam&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://malvinly.com/2012/10/20/castle-dictionaryadapter-using-typeconverter-to-map-different-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/5d3dde70979847001714452779e70fc4?s=96&amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=PG" medium="image">
			<media:title type="html">nivlam</media:title>
		</media:content>
	</item>
	</channel>
</rss>
