Archive for March, 2010

Thơ ca qua chuyến du lịch miền Tây Nam Bộ

Quả mít có trái đực & trái cái. Trái đực chỉ có nhiệm vụ thụ phấn cho trái cái và có 2 quả giống 2 “trái dấn”. Hiện tượng này được dân gian nhắc đến trong câu thơ:

Nước chảy, cặc bần rung bây bẩy
Gió đưa, dái mít giãy tê tê.

Và để mít mau chín, người ta đóng 1 cây cọc gỗ vào giữa trái mít. Thơ bà Hồ Xuân Hương cũng từng mượn hiện tượng này để làm thơ:

Quả Mít
Thân em như quả mít trên cây
Da nó xù xì, múi nó dầy
Quân tử có thương thì đóng cọc,
Xin đừng mân mó, nhựa ra taỵ

^_^

[MSBuild] How to implement nested loops

Let’s say we have nested loops through two list aa={1; 22; 333} and bb={a; bb; ccc} like:

foreach (i in aa) {
  foreach (j in bb) {
    print "i=? j=??";
  }
}

The solution is quite complicated and as below.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="MAIN" >
  <!--<Import Project="$(MSBuildExtensionsPath)\MSBuildContrib\MSBuildContrib.Tasks"/>-->
  <!--<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks"/>-->

  <Target Name="MAIN" >
    <CallTarget Targets="t" />
    <CallTarget Targets="tt" />
  </Target>

  <Target Name="t">
    <ItemGroup>
      <aa Include="1;22;333" />
    </ItemGroup>
  </Target>

  <Target Name="tt" Outputs="%(aa.Identity)">
    <Message Text="aa %(aa.Identity)" />

    <MSBuild Projects="$(MSBuildProjectFile)" Targets="ttt" Properties="aa=%(aa.Identity)" />
  </Target>

  <Target Name="ttt">
    <CallTarget Targets="ttt_1" />
    <CallTarget Targets="tttt" />
  </Target>

  <Target Name="ttt_1">
    <ItemGroup>
      <bb Include="a;bb;ccc" />
    </ItemGroup>
  </Target>

  <Target Name="tttt" Outputs="%(bb.Identity)">
    <Message Text="aa $(aa)" />
    <Message Text="bb %(bb.Identity)" />
  </Target>

</Project>

And for an even more complex nested loops (3 nested), see sample script below.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="MAIN" >
  <Target Name="MAIN">
    <CallTarget Targets="t"/>
    <CallTarget Targets="tt"/>
  </Target>

  <Target Name="t" Outputs="%(aaList.Identity)">
    <ItemGroup>
      <aaList Include="1; 22; 333;" />
    </ItemGroup>
    <Message Text="Foreach aa in aaList:" />
  </Target>

  <Target Name="tt">
    <MSBuild Projects="$(MSBuildProjectFile)"
             Targets="ttt"
             Properties="aa=%(aaList.Identity)"
    />
  </Target>

  <Target Name="ttt">
    <CallTarget Targets="tttt" />
    <CallTarget Targets="ttttt" />
  </Target>

  <Target Name="tttt">
    <ItemGroup>
      <bbList Include="a; bb; ccc;" />
    </ItemGroup>
  </Target>

  <Target Name="ttttt" Outputs="%(bbList.Identity)">
    <Message Text="aa:$(aa)" />
    <MSBuild Projects="$(MSBuildProjectFile)"
             Targets="t2"
             Properties="bb=%(bbList.Identity); aa=$(aa)"
    />
  </Target>
  <Target Name="t2">
    <CallTarget Targets="tt2" />
    <CallTarget Targets="ttt2" />
  </Target>

  <Target Name="tt2">
    <ItemGroup>
      <ccList Include="x; yy; zzz;" />
    </ItemGroup>
  </Target>
  <Target Name="ttt2" Outputs="%(ccList.Identity)">
    <Message Text="aa:$(aa) bb:$(bb)" />
    <Message Text="cc:%(ccList.Identity)" />
  </Target>

</Project>

[MSBuild] Note when working with Condition

The < and > comparision may be tricky!

Example:

<Target Name="ttt">
<Message Text="1" Condition="2>1" />
<Message Text="22" Condition="2&gt;1" />
<Message Text="a" Condition="2>=2" />
<Message Text="bb" Condition="2&gt;=2" />

<Message Text="1x" Condition="1<2" /> <!--error-->
<Message Text="22x" Condition="1&lt;2" />
<Message Text="ax" Condition="2<=2" /> <!--error-->
<Message Text="bbx" Condition="2&lt;=2" />
</Target>

10 thành phố giàu nhất thế giới

10 thành phố giàu nhất thế giới

Đăng ngày: 08:14 28-03-2010

Danh sách những thành phố giàu có nhất thế giới vừa được công bố hôm qua, với sự dẫn đầu của New York.

Top 10 này do hãng bất động sản Anh Knight Frank và Ngân hàng Mỹ Citi Bank đưa ra, Xinhua cho hay. Các tiêu chí để đánh giá bao gồm: độ sống động về kinh tế, ảnh hưởng chính trị, khả năng nghiên cứu và mức sống của cư dân.

Châu Âu, Bắc Mỹ và châu Á chiếm trọn danh sách này, các nơi khác trên thế giới không có cơ hội chen chân.

New York chiếm vị trí đầu bảng về tổng thể. Tính riêng các tiêu chí, thành phố này nhất về kinh tế và khả năng nghiên cứu, nhưng mức sống đứng thứ 8.
London, trung tâm tài chính của thế giới, chiếm vị trí thứ nhì trong bảng xếp hạng.
Kinh đô ánh sáng Paris của Pháp xếp thứ ba.
Thành phố giàu nhất châu Á là Tokyo, đứng thứ tư trên thế giới.
Tiếp theo là Los Angeles của Mỹ.
Thủ đô Brussels của Bỉ đứng thứ 6. Thành phố này là trung tâm chính trị của châu Âu, nơi có trụ sở của Liên minh.
Một thành phố nữa của châu Á là Singapore cũng góp mặt trong top 10 đô thị giàu có nhất. Quốc đảo sư tử nhận vị trí thứ 7.
Berlin đứng thứ 8 trong bảng tổng sắp, nhưng dẫn đầu về mức sống của cư dân.
Thủ đô Trung Quốc – Bắc Kinh – đứng thứ 9.
Cuối cùng trong top 10 là Toronto của Canada.
(Ảnh: Global Times)
Theo VnExpress

[MSBuild] Custom Tasks

MSBuild Community Tasks

  1. Download at msbuildtasks.tigris.org
  2. Usage:
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

MSBuild Extension Pack

  1. Download at MSBuild Extension Pack
  2. Usage:
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks"/>

MSBuild SDC Tasks

  1. Download at SDC Tasks Library
  2. Usage: You need to copy the task manually.

[MSBuild] Caution on properties's value when calling another target

Cautions:

  1. Property values updated in a called target can be visible in another called target but not in the current target.
  2. Programmatic properties & items are not emitted (can not be passed) to CallTarget invocation down the stream until the target that created these properties & items completes its execution. In order to pass a newly created property to subsequent targets, you need to create it outside the context of the current target.  In other words, you need to create a new target and place the creation in that target.

[MSBuild] Overwrite global property.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="uu" >
  <PropertyGroup>
    <aa>1</aa>
  </PropertyGroup>

  <Target Name="t"> <!--try to overwrite value of 'aa'-->
    <PropertyGroup>
      <aa>22</aa>
    </PropertyGroup>

    <Message Text="tt:$(aa) - print 'aa' insdie of t." />

    <CallTarget Targets="tt" />
  </Target>

  <Target Name="tt">
    <Message Text="tt:$(aa) - print 'aa' outside of t, t is not done." />
  </Target>

  <Target Name="u">
    <Message Text="u:$(aa) - print 'aa' outside of t, after t is done." />
  </Target>

  <Target Name="uu">
    <CallTarget Targets="t"/> <!--update 'aa' then print 'aa' inside t-->

    <CallTarget Targets="u"/> <!--print 'aa' outside of t-->
  </Target>
</Project>