tag:blogger.com,1999:blog-25135368627207716432024-03-13T09:49:33.029-07:00Philological ProgrammerAnonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-2513536862720771643.post-18549933418761528822012-08-31T02:21:00.000-07:002012-08-31T02:21:48.962-07:00Bit fields as text in Infragistics UltraWinGridIf you receive a bit field from database and want to show some text (Yes/No in this example), instead of checkboxes here is the solution. First you need a class that implements the <b>Infragistics.Win.IEditorDataFilter</b> interface. Here is my implementation:
<pre class="c"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">using System;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">using System.<span style="color: #202020;">Windows</span>.<span style="color: #202020;">Forms</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">using Infragistics.<span style="color: #202020;">Win</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">namespace dbMotion.<span style="color: #202020;">DAT</span> <span style="color: #66cc66;">{</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> internal class GridCheckBoxDataFilter:IEditorDataFilter <span style="color: #66cc66;">{</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#region IEditorDataFilter Members</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> object IEditorDataFilter.<span style="color: #202020;">Convert</span><span style="color: #66cc66;">(</span>EditorDataFilterConvertArgs args<span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span></div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">(</span>args.<span style="color: #202020;">Direction</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">case</span> ConversionDirection.<span style="color: #202020;">EditorToOwner</span>:</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> args.<span style="color: #202020;">Handled</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> args.<span style="color: #202020;">IsValid</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> CheckState state = <span style="color: #66cc66;">(</span>CheckState<span style="color: #66cc66;">)</span> args.<span style="color: #202020;">Value</span>;</div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">(</span>state<span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">case</span> CheckState.<span style="color: #202020;">Checked</span>:</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">"Yes"</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">case</span> CheckState.<span style="color: #202020;">Unchecked</span>:<span style="color: #b1b100;">return</span> <span style="color: #ff0000;">"No"</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">case</span> CheckState.<span style="color: #202020;">Indeterminate</span>:<span style="color: #b1b100;">return</span> <span style="color: #993333;">string</span>.<span style="color: #202020;">Empty</span>;</div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">}</span> <span style="color: #000000; font-weight: bold;">break</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">case</span> ConversionDirection.<span style="color: #202020;">OwnerToEditor</span>:args.<span style="color: #202020;">Handled</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> args.<span style="color: #202020;">IsValid</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">return</span> args.<span style="color: #202020;">Value</span>.<span style="color: #202020;">ToString</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span> == bool.<span style="color: #202020;">TrueString</span> ? <span style="color: #ff0000;">"Yes"</span> : <span style="color: #ff0000;">"No"</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">case</span> ConversionDirection.<span style="color: #202020;">DisplayToEditor</span>:args.<span style="color: #202020;">Handled</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> args.<span style="color: #202020;">IsValid</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">return</span> args.<span style="color: #202020;">Value</span>.<span style="color: #202020;">ToString</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span> == <span style="color: #ff0000;">"Yes"</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">case</span> ConversionDirection.<span style="color: #202020;">EditorToDisplay</span>:args.<span style="color: #202020;">Handled</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> args.<span style="color: #202020;">IsValid</span> = <span style="color: #000000; font-weight: bold;">true</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #b1b100;">return</span> args.<span style="color: #202020;">Value</span>;</div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">}</span> throw new Exception<span style="color: #66cc66;">(</span><span style="color: #ff0000;">"Invalid value passed into GridChecBoxDataFilter.Convert()"</span><span style="color: #66cc66;">)</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">}</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#endregion</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> <span style="color: #66cc66;">}</span></div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">}</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div></li></ol></pre>
And after this add the following code to the "InitializeLayout" event of your UltraWinGrid:
<pre class="c"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">private <span style="color: #993333;">void</span> Grid_InitializeLayout<span style="color: #66cc66;">(</span>object sender, InitializeLayoutEventArgs e<span style="color: #66cc66;">)</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">{</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> e.<span style="color: #202020;">Layout</span>.<span style="color: #202020;">Bands</span><span style="color: #66cc66;">[</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">]</span>.<span style="color: #202020;">Columns</span><span style="color: #66cc66;">[</span><span style="color: #ff0000;">"Col1"</span><span style="color: #66cc66;">]</span>.<span style="color: #202020;">Editor</span> = new EditorWithText<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> e.<span style="color: #202020;">Layout</span>.<span style="color: #202020;">Bands</span><span style="color: #66cc66;">[</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">]</span>.<span style="color: #202020;">Columns</span><span style="color: #66cc66;">[</span><span style="color: #ff0000;">"Col1"</span><span style="color: #66cc66;">]</span>.<span style="color: #202020;">Style</span> = ColumnStyle.<span style="color: #202020;">FormattedText</span>;</div></li><li style="font-weight: bold;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> e.<span style="color: #202020;">Layout</span>.<span style="color: #202020;">Bands</span><span style="color: #66cc66;">[</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">]</span>.<span style="color: #202020;">Columns</span><span style="color: #66cc66;">[</span><span style="color: #ff0000;">"Col1"</span><span style="color: #66cc66;">]</span>.<span style="color: #202020;">Editor</span>.<span style="color: #202020;">DataFilter</span> = new GridCheckBoxDataFilter<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">}</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">}</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"> </div></li></ol></pre>Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-35032796453975277402012-03-06T05:15:00.000-08:002012-03-06T05:19:47.317-08:00Multiselect dropdown/comboboxIn my current project i need a dropdown list where user can pick multiple items and then, after double-clickin on any of selected items, all of them appears in the tex area of dropdown. There is no standard controls that are offering this functionality, so i did it by hand. It's not something uniqe, i saw some samples on the web, but thi one is done using Infragistics controls for Windows forms and is relatively easy to implement.
So here is the code (just one file)
<!-- code formatted by http://manoli.net/csharpformat/ -->
<head><link rel="stylesheet" type="text/css" href="csharp.css" ></head>
<pre class="csharpcode">
<span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.ComponentModel;
<span class="kwrd">using</span> System.Drawing;
<span class="kwrd">using</span> System.Linq;
<span class="kwrd">using</span> System.Windows.Forms;
<span class="kwrd">using</span> Infragistics.Win;
<span class="kwrd">using</span> Infragistics.Win.UltraWinEditors;
<span class="kwrd">using</span> Infragistics.Win.UltraWinListView;
<span class="kwrd">namespace</span> MyControls
{
<span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> MultiSelectComboBox : UltraTextEditor
{
<span class="kwrd">private</span> UltraListView lv;
<span class="kwrd">public</span> MultiSelectComboBox()
{
InitializeComponent();
SetTextEditorProperties();
}
<span class="kwrd">public</span> MultiSelectComboBox(IContainer container)
{
container.Add(<span class="kwrd">this</span>);
InitializeComponent();
SetTextEditorProperties();
}
<span class="kwrd">public</span> UltraListViewItemsCollection ListItems
{
<span class="kwrd">get</span> { <span class="kwrd">return</span> lv.Items; }
}
<span class="kwrd">private</span> <span class="kwrd">void</span> SetTextEditorProperties()
{
DropDownEditorButton button = <span class="kwrd">new</span> DropDownEditorButton();
lv = <span class="kwrd">new</span> UltraListView();
lv.AutoSize = <span class="kwrd">false</span>;
lv.Width = Width;
lv.View = UltraListViewStyle.List;
lv.ViewSettingsList.ImageSize = Size.Empty;
lv.ViewSettingsList.ColumnWidth = Width;
lv.ViewSettingsList.MultiColumn = <span class="kwrd">false</span>;
lv.DoubleClick += lv_DoubleClick;
lv.Width = Size.Width;
button.ButtonStyle = Infragistics.Win.UIElementButtonStyle.Office2010ScrollbarButton;
button.Control = lv;
ButtonsRight.Add(button);
Enabled = <span class="kwrd">true</span>;
UseFlatMode = DefaultableBoolean.True;
}
<span class="kwrd">private</span> <span class="kwrd">void</span> lv_DoubleClick(<span class="kwrd">object</span> sender, EventArgs e)
{
UltraListView listView = sender <span class="kwrd">as</span> UltraListView;
<span class="kwrd">if</span> (listView == <span class="kwrd">null</span>)
{
<span class="kwrd">return</span>;
}
<span class="kwrd">string</span> result = <span class="kwrd">string</span>.Empty;
<span class="kwrd">foreach</span> (<span class="kwrd">var</span> item <span class="kwrd">in</span> listView.Items)
{
<span class="kwrd">if</span> (!<span class="kwrd">string</span>.IsNullOrEmpty(item.Text) && item.IsSelected)
{
result += item.Text + <span class="str">";"</span>;
}
}
Text = result.Remove(result.Length - 1, 1);
DropDownEditorButton btn = ButtonsRight[0] <span class="kwrd">as</span> DropDownEditorButton;
<span class="kwrd">if</span> (btn != <span class="kwrd">null</span>)
{
btn.CloseUp();
}
}
<span class="preproc">#region</span> Methods
<span class="kwrd">public</span> <span class="kwrd">void</span> LoadControl(List<<span class="kwrd">string</span>> items)
{
lv.Items.Clear();
lv.Width = Size.Width;
Enabled = <span class="kwrd">false</span>;
<span class="kwrd">if</span> (items == <span class="kwrd">null</span>)
{
<span class="kwrd">return</span>;
}
<span class="kwrd">if</span> (items.Count == 0)
{
<span class="kwrd">return</span>;
}
Enabled = <span class="kwrd">true</span>;
<span class="kwrd">try</span>
{
lv.Items.Add(<span class="kwrd">new</span> UltraListViewItem(<span class="kwrd">string</span>.Empty));
<span class="kwrd">foreach</span> (<span class="kwrd">var</span> item <span class="kwrd">in</span> items)
{
<span class="kwrd">if</span> (!lv.Items.Exists(item))
{
lv.Items.Add(item, item);
}
}
}
<span class="kwrd">catch</span> (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
<span class="kwrd">public</span> <span class="kwrd">void</span> LoadControl(<span class="kwrd">object</span>[] items)
{
<span class="kwrd">try</span>
{
List<<span class="kwrd">string</span>> list = <span class="kwrd">new</span> List<<span class="kwrd">string</span>>();
list.AddRange(items.Select(t => t.ToString()));
LoadControl(list);
}
<span class="kwrd">catch</span> (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
<span class="preproc">#endregion</span>
}
}</pre>Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-15761682449212252642011-03-17T00:59:00.000-07:002011-03-17T01:06:11.915-07:00Хочу на DevCon'11Страдаю программизмом уже больше 6 лет. Но все как-то варюсь в собственном соку, а душа, знаете-ли жаждет общения. Да еще суровая реальность жизни не позволяет объять необъятное, а иногда так хочется. Народ с завидной регулярностью придумывает все новые и новые, часто интересные и иногда очень полезные вещи, и остается только узнавать о них по заголовкам новостей. А так чтобы руками потрогать - это редко. А уж поговорить с теми кто все это придумал - еще реже. Вот и тянет меня на людей посмотреть, да послушать, ума-разума набраться в том месте, где нога моя не стояла, но куда я бы с удовольствием плюхнулся всем весом.<br />
<a href="http://www.msdevcon.ru"><img border="0" width="180" height="150" src="http://event.msdevcon.ru/userfiles/image/devcon_want.png" /></a><br />
<br />
<a href="http://www.msdevcon.ru">Или просто ссылка</a>Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-78475879908425796152010-12-06T03:45:00.000-08:002010-12-06T03:48:32.375-08:00Governemetn and open sourceAustralian citizens are trying to make all government IT software open source. The motivation is: as this software is developed using state budget and this budget is taxes (everyone pays it) so this software should be accessible for everyoneAnonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-83016925725359794322010-11-12T00:29:00.000-08:002010-11-12T03:46:10.732-08:00Update Samsung Vibrant from android 2.1 (Eclair) to android 2.2 (Froyo). My own experienceI recommend to read this post till the end and make your decision about upgrade after careful reading. Do not repeat my mistakes.<br /><br />3 days ago i finally received my brand new Samsung Vibrant phone. Thanks to a <a href="http://myworld.ebay.com/stickboy46/">very good Ebay seller</a>.<br />Out-of-the-box Vibrant (currently) has android 2.1 (Eclair) but android 2.2 is available and contains many bug fixes and improvements. So, update is the option. But it isn't so easy.<br />First, Samsung Kies for Galaxy S 9000 does not recognize the phone. There is <a href="http://www.samsung.com/us/support/downloads/SGH-T959ZKATMB">special version</a>, but i haven't tried it yet. In any case there is no official update to android 2.2 (Froyo) from Samsung or T-Mobile. After little googling i found <a href="http://www.pathikshah.com/blog/install-android-2-2-froyo-galaxy-s/">a good how-to</a>. But there is always some "but". It's for Galaxy S. What's the problem, can you ask? Vibrant is Galaxy S! Not 100% as i discovered. I recommend you to read this post and comments too. Some answers are there, some in my post.<br />So, let's start.<br /><span style="font-weight:bold;">First</span> thing to check is if your phone supports three-keys command to switch to recovery mode:<br />1.Turn off the phone.<br />2.Hold volume up and volume down keys and then hold power-on key.<br />3.You will see "Vibrant" on your screen. for 3-4 seconds. Keep holding three key until you'll see yellow messages. Release buttons.<br />4.You should see a blue menu. Restart the phone.<br />5. Turn off the phone (neither by restarting and then switching it off or by pulling the battery out and reinserting it).<br /><span style="font-weight:bold;"><br />Second</span>, firmware itself. DO NOT UPDATE WITH FIRMWARE FOR GALAXY S!<br />Do not use i9000XXJP2 or any other listed on <a href="http://www.samfirmware.com/WEBPROTECT-t959.htm">this site</a>. This site requires registration to download. They listed T959UVJI2, T959UVJI4, T959UVJI6 as firmware for "Vibrant" but they are for Galaxy S. Only T959UVJFD is valid for "Vibrant" but it's the same firmware (2.1) that the phone has already.<br />I found <a href="http://forum.xda-developers.com/showthread.php?t=833024">this</a> unofficial firmware (TMO) that is really good. And it works great. There is <a href="http://forum.xda-developers.com/showthread.php?t=820414">another one</a> (MacnutR10) from the same team but i haven't tried it. So, go to see one of this and read the description VERY CAREFULLY.<br />Later i describe my experience of updating with TMO.<br /><span style="font-weight:bold;">Third</span>, Downloading mode. <span style="font-weight:bold;">ATTENTION, DO NOT TRY IT NOW (will explain shortly)</span>. To enter to downloading mode, turn off your phone and press the volume up button and power button. If it does not help, pull off the battery, press those keys and with keys pressed insert the battery. <span style="font-style:italic;">Once in downloading mode, you cannot switch back to normal working mode</span> (at least i haven't found the way) so there is no option but upgrade your firmware. While in downloading mode you should see a droid in yellow triangle.<br /><br />So let's begin.<br /><br />You need 3 packages: firmware (your choice TMO or MacnutR10), <a href="http://forum.xda-developers.com/showthread.php?t=821625">Odin3 1.7</a> (upgrade tool) and <a href="http://www.multiupload.com/I5WICSBFJ1">pit file</a> (not always applicable, but ...). Download all.<br /><br /><span style="font-weight:bold;">ATTENTION</span> Firmware update erases anything in your phone. So you cannot revert to factory-installed operating system. No recovery. After upgrading factory reset means that you will have a clean copy (without applications that you have installed and without all you data) of new firmware.<br /><br />1. Connect your Vibrant to your PC with the USB cable and set USB Debugging On (System > Applications > Development > USB Debugging.). Very important step.<br /><br />2. Remove the battery, SIM card and MicroSD card from your phone and reinsert the battery. Do it. You can lose anything on your SD card and I like very much the "Avatar" so i don't want to lose it.<br /><br />3. Open Odin 3 v1.0<br /><br />4. Click on the PIT button and load the “s1_odin_20100512.pit” file<br /><br />5. Click on the PDA button and load the “Eugene_2E_JK2_Froyo.tar.md5”.<br /><br />6. DO NOT check repartition check box (as stated in the FAQ for TMO)<br /><br />7. Most important part. You should have your Odin ready to start (so check steps 4-6 once again). Also insert your usb cable into your computer but not in the phone! Switch you phone in downloading mode and then connect the usb cable. In 3-4 seconds you will see a yellow COM port number in Odin. Hit the "Start" button immediately.<br />You will have problem if you plug in the phone before setting up Odin. Odin will see your phone but will stuck on connection phase. So be fast. If you will have problem, try to pull off the battery, hold volume up and power keys, insert the battery and plug in the cable, wait for yellow COM port number and hit "Start" again.<br />If everything is OK then you will see the green progress bar in Odin and a cyan progress bar on your phone.<br /><br />8. There is no Sims3 in this firmware, you can find the apk file <a href="www.mediafire.com/?j5r73xj3djf3d2o">here</a>. Works perfectly with TMO firmware<br /><br />9. Enjoy<br /><br /><span style="font-weight:bold;">DO NOT REPEAT MY MISTAKES</span><br /><br />1. Just try to enter to downloading mode. I have tried and successfully but after i discovered that i cannot switch back. I unplugged the battery and inserted it again but the only thing I saw was the icon of phone and computer and orange triangle between them. Nothing more. Pressing on any keys didn't help. At this moment I pissed off for the first time. My brand new Vibrant was inoperable. <br />2. Thanks God I had my Odin prepared with i9000XXJP2 firmware and just by coincidence i did the right sequence. Holding volume up key and power key I plugged in the battery, then my phone to the computer and hit "Start" in Odin. And downloading started. "Thanks God" I said, but...<br />3. After loading this firmware phone showed me that he is Samsung Galaxy S (not Vibrant) and the only thing available was the recovery mode. There is a subtle difference between them<br /><br />Vibrant<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_KtXXnkdlf_0/TN0k-bCh3JI/AAAAAAAAACY/GYdUovbMm8w/s1600/vibrant.GIF"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 250px; height: 108px;" src="http://2.bp.blogspot.com/_KtXXnkdlf_0/TN0k-bCh3JI/AAAAAAAAACY/GYdUovbMm8w/s320/vibrant.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5538623771564432530" /></a><br /><br/><br /><br/><br /><br/><br /><br />Galaxy S<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KtXXnkdlf_0/TN0lHzw6YPI/AAAAAAAAACg/ZUcTFJzriiU/s1600/galaxys.GIF"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 192px; height: 108px;" src="http://1.bp.blogspot.com/_KtXXnkdlf_0/TN0lHzw6YPI/AAAAAAAAACg/ZUcTFJzriiU/s320/galaxys.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5538623932820250866" /></a><br /><br />No "OK" key on Vibrant (this huge key in the center of Galaxy S).<br />So the only option for me was to watch this recovery screen and restart phone bu pulling of and reinserting the battery. I pissed off for the second time.<br /><br />3. Now, really thanks to Samsung engineers, switch to downloading mode worked! Even with wrong firmware. But there is Odin too. Being pissed off two times I switched to downloading mode and plugged the phone into my computer. And waited 20 minutes for new firmware to complete downloading. Then i started Odin, but Odin haven't found any phone. Unplug and plug back to the computer helped and i started to setting up Odin. After I hit the "Start" key and after few seconds I saw "Connecting" in the log screen. But it stuck on it (I have unplugged the phone after 15 minutes of waiting). And, as you can guess, I pissed off for the third time.<br /><br />4. Thanks to google i found the info about fast plugging the phone and starting the update. But it was a piss off day.<br /><br />Remember, anything you do you are doing on your own risk<br /><br /><br />Any suggestions, comments and improvements are welcomeAnonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com4tag:blogger.com,1999:blog-2513536862720771643.post-61235315000367158492010-11-07T04:09:00.000-08:002010-11-07T04:28:22.776-08:00Oracle 11g and Ubuntu 10.04Quite non-trivial task to install Oracle 11g on ubuntu 10.04. Thanks to <a href="http://www.pythian.com/news/13291/installing-oracle-11gr2-enterprise-edition-on-ubuntu-10-04-lucid-lynx/">this post</a>Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-40383621444471169002010-11-02T04:15:00.001-07:002010-11-02T04:15:10.870-07:00<a href="http://stackoverflow.com/users/164124/b-rain"><br /><img src="http://stackoverflow.com/users/flair/164124.png" width="208" height="58" alt="profile for B-Rain at Stack Overflow, Q&A for professional and enthusiast programmers" title="profile for B-Rain at Stack Overflow, Q&A for professional and enthusiast programmers"><br /></a>Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-36552518475294520942010-11-01T02:08:00.000-07:002010-11-01T02:09:50.492-07:00AndroidStarting to learnd Android development. A great way to know something new and swith from Windows and C# to completely new environmentAnonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-15380048587990812192009-08-27T04:48:00.000-07:002009-08-27T04:52:03.808-07:00Getting installed Windows components with C#There is a good way to get the list of installed windows components using PowerShell <a href="http://www.techmumbojumblog.com/?p=217">here</a>. So i just rewrote it on C#<br /><br /> private void GetListOfInstalledWinComponents()<br /> {<br />string componentsList = string.Empty;<br /> string componentsKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Oc Manager\Subcomponents";<br /> using (RegistryKey regKey = Registry.LocalMachine.OpenSubKey(componentsKey))<br /> {<br /> try<br /> {<br /> // getting all names from this key<br /> foreach (string componentName in regKey.GetValueNames())<br /> {<br /> //getting the key value<br /> object val = regKey.GetValue(componentName);<br /> int keyData;<br /> // try to figure out if the value field is defined<br /> // if not - go to the next<br /> if (!int.TryParse(val.ToString(), out keyData))<br /> {<br /> continue;<br /> }<br /> //if the value for a given name is more than 0 it<br /> // means that this component is installed<br /> if (keyData >0)<br /> {<br /> componentsList += componentName + " - Installed" +Environment.NewLine;<br /> }<br /><br /> }<br /> }<br /> catch (Exception ex)<br /> { }<br /> }<br /> }Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-35796780103892087462009-08-25T01:47:00.000-07:002009-08-25T01:49:50.002-07:00Producing OSS translation continuesAfter a long vacation break I'm back to translation of "Producing Open Source Software" book from English to Russian. As i read the book more and more i'll become more and more interested in it. I'm not a manager, i'm a developer but many principles in this book are true for work inside the team. So thanks to Karl Fogel.Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-48971430009852461882009-03-29T23:43:00.000-07:002009-03-29T23:44:41.527-07:00So, the translation work is on the way, i have finished the translation of chapter 1. I use emacs for my work, it's a great editor for plain text.Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-242955232010951132009-03-09T23:50:00.000-07:002009-03-09T23:53:56.376-07:00Producing Open Source SoftwareNow I'm engaged to translation of the book "Producing Open Source Software: How to Run a Successful Free Software Project" by Karl Fogel. I'm already started to contribute to the russian section. Book site is http://producingoss.com/Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com1tag:blogger.com,1999:blog-2513536862720771643.post-85506190283811720862008-11-11T01:16:00.000-08:002008-11-11T01:38:00.050-08:00AddToFavorites function for IE6, Firefox 3 and Opera 9.6Solution presented <a href="http://labnol.blogspot.com/2006/01/add-to-favorites-ie-bookmark-firefox.html">here</a> and in some other places, offered by google doesn't work for me. The solution is to have a link <a href="#" onclick="addToFavorites();" rel="sidebar" id="addToFavoritesLink">Add to Favorites</a> with <span style="font-weight: bold;">rel=sidebar</span> attribute.<br />There are some tricks for this. When you click the link the name for link in the dialog box equals to the <span style="font-weight: bold;">title</span> attribute of your link. So i added a javascript function onclick="addToFavorites();". I do the following<br />function addToFavorites()<br />{<br />var lnk = document.getElementById('addToFavoritesLink');<br />if (lnk!=null)<br />{lnk.title = 'Some name';}<br />}Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-71494552809310869442008-10-09T04:33:00.000-07:002008-10-09T04:51:28.473-07:00Джошуа Клессиг , Земля (тм)Закончил перевод рассказа, оригинал <a href="http://textfiles.poboxes.info/russian/cyberlib.narod.ru/lib/burz/klessig5.html">здесь</a><br />Перевод ниже<br /><br />Джошуа Клессиг: ЗЕМЛЯ (tm)<br /> Перевод: Е.С. Федотов, 2008<br />Было 9 часов 57 минут вечера, три минуты до закрытия.<br />«К нам только что зашли, они хотят красной свеклы и рикотту с начинкой из жидкокого сыра, плюс еще салат,» раздался голос совсем рядом с кухней Итальянского Ресторана Марсело. Для Адама Ева, шеф-повара, почти наступило время уходить домой. Он жил в нескольких домах от ресторана, находяшегося в Мэдисоне, штат Висконсин. Адам приготовил рикотту, а его помошник – салат. «Рикотта готова», сказал Адам снимая свой рабочий халат и бросая его в бак в углу. Он попрощался с оставшимися на кухне работниками и вышел. Пройдя через заднюю дверь, он пошел по тротуару к своему дому. Он был на полпути, когда заметил на тротуаре что-то мерцающее через дом от него. Подойдя поближе, он обнаружил что мерцает сам тротуар. Выглядело это как телевизионная картинка при плохом приеме. Он потрогал его и тот оказался необычайно гладким, но иногда можно было почувствовать шероховатости. Он вглядывался в тротуар некоторое время и тут мерцание прекратилось. Он продолжил свой путь домой, размышляя о мерцании.<br />Адам подошел ко входу в здание, где распологалась его квартира. Оно находилось сразу за Стейт стрит, улицей, набитой псевдохиповскими магазинами и барами. Здесь интересно жить, город закрывает улицу по выходным, потому что слишком много народа развлекается и ширяется здесь, так что ездить по улице становится слишком опасно. В любом случае движение тут никогда не было оживленным, может быть потому что было не похоже что дорога ведет куда-нибудь, кроме самого высокого здания в городе, а множество других улиц делали то же самое. На торце его жилого здания имелась большая цветная фреска, комнаты были просторными и обслуживание дома было на уровне. Он набрал код на цифровой клавиатуре рядом с дверью в свою квартиру и вошел.<br />Он плюхнулся на свой диван и схватил карманный компьютер «Юпитер». Его всегда восхищало, как быстро они превратили маленькую игрушку в полнофункциональный компьютер. Что было большим наладонником на рынке несколько лет назад, Палм Пилот? Он сжал компьютер и направил его на телевизор. Тот ожил, молодой репортер говорил об избирательной кампании Моники Левински на выборах 2004 года. Щелк, и вот MTV. Адам вытянулся на своем диване и погрузился в сон.<br />Облака, потом гром. В облаках образовалась трещина и стена цифр, букв и знаков полилилась с неба, окружая Адама. Потом все закружилось и его объяла тьма. Он был чистыми данными, соединеным со всем сразу. Раздался голос.<br />— Черт! Вот опять. Кто-то опять просочился за границу виртуальной среды.<br />Другой голос, «Я всегда говорил, что REM подпрограмма сна слишком глючная, чтобы ее использовать. Мы должны прекратить ей пользоваться.»<br />Снова первый голос, «Если они не спят, то она ведет себя как по-настоящему большая неконтролируемая переменная величина при исследованиях. Симулятор должен быть единым целым, иначе поведение будет неточным».<br />— Ладно, неважно. Я изолировал у объекта нервный канал ввода/вывода. Мы просто обнулим тот сектор...<br />Внезапная вспышка, потеря ориентации, и вот Адам стоит на кровати. Он не знает почему стоит, или когда он проснулся и встал, но он запомнил сон. Этот сон был не похож на другие, когда память сразу начинает блекнуть как полароидная фотография, только наоборот. Снова садясь на кровать, он смотрел на телевизор, прием был плохой. Он присмотрелся, прием на самом деле был необычно хорош, это само изображение было плохим, рваная, мерцающая картинка тротуара.<br />Адам схватил свой наладонник и посмотрел на экран. Тоже самое. Он поднялся и подошел к своему компьютеру, тот тоже застыл и показывал ту картинку, которую он видел по дороге домой. Адам нажал кнопку сброса. Экран побелел, потом вернулся к жизни. Вместо нормальной заставки при загрузке, там оказалось изображение вращающейся Земли, а под ней появилась надпись «Добро пожаловать в ОС Земля версия 2.3».<br />Затем картинка превратилась в экран интерфейса. Адам начал водить мышкой, но обнаружил, что курсора там нет. Он с сомнением попытался коснуться кнопок на экране. Появилась карта мира. Он коснулся США. Она увеличилась и подсветила 50 штатов. Он выбрал Висконсин, потом Мэдисон, потом Стейт стрит, потом свою квартиру. И увидел самого себя сидящего за экраном своего компьютера. Он нажал кнопку отмены. Назад к главному экрану. Он нажал кнопку, помеченную «Голосовое управление».<br />— Модуль голосового управления активирован. Что вы хотите сделать?<br />— Что такое Земля?<br />— Земля является широкомасштабной симуляцией окружающей среды человека, с целью изучения взаимодейсвия человек - человек и взаимодействия человек – окружающая среда. Группа добровольцев из различных слоев общества была отобрана для сканирования мозга устройствами квантовой интерференции. Структуры их мозга были затем использованы в качестве моделей для коренных обитателей Земли.<br />— Как насчет тепершних обитателей, откуда они взялись?<br />— Когда два «человека» воспроизводятся, упрошенная составная комбинация их моделей служит основой для новой личности.<br />— Так я виртуальное существо?<br />— Согласно нашим записям, да.<br />— Здесь все модели?<br />— Нет, некоторые из обитателей земли это исследователи, изучающие человеческое поведение на личном опыте, с помощью устройств для нейронных взаимодействий.<br />— Нейронных взаимодействий?<br />— Нейронный интерфейс напрямую соединяет компьютерную систему с сознанием индивида, создавая таким образом полное погружение в среду.<br />— Хорошо, я работал с компьютерами с детства и знаю кое-что о программировании. Может ли менять Землю и управлять ей?<br />— Да, используя ОС Земля, вы можете управлять внешними и внутренними условиями. Исследователи подключаются к ОС Земля через наладонники или домашние компьютеры, когда они погружаются в среду Земли.<br />— Почему они просто не изучают настоящих людей?<br />— ОС Земля очень управляемая среда, и они могут ставить довольно экзотические эксперименты. И потом, целью этого проекта является не просто изучение человеческого поведения, цель – изучить как личность воспримет реальность которую ей скармливают.<br />— Что конкретно пытаются найти ученые?<br />— Человеческое общество достигло точки в которой технологическое/социальное развитие пришло в безвыходное положение. Они пытаются понять, может ли виртуальная среда дать подсказку для дальнейшего продвижения, изменений в истории.<br />— И когда решение будет найдено, что случится с нами?<br />— В планах превратить эту программу в своебразное развлечение. Типа снисходительного подглядывания.<br />— Могут ли люди снаружи видеть меня?<br />— В данный момент процессоры не следят за вашими действиями. Земля может отслеживать действия 10 миллионов человек одновременно. У процессоров есть свои ограничения.<br />— Могу ли я быть удален?<br />— Да.<br />«Это все, что мне нужно знать. Отключить голосовое управление», сказал Адам и компьютер затих. Он знал, что пройдет немного времени, прежде чем кто-нибудь обнаружит его подключение к ОС Земля. Быстро подумав он схватил наладонник, который ничего не показывал, как впрочем, и телевизор. Он перезагрузил его и тот заработал в обычном режиме. Подключив его в разъем, он стал управлять им с домашнего компьютера. Используя программы в своем наладоннике он создал вирус, защищающий его от удаления, и проверив его продолжил работу с ОС Земля.<br />«Теперь посмотрим, сработает ли это», и Адам выбрал «черных ход на Землю» на своем наладоннике. Сначала появился маленький экран приветствия, затем всплыло меню. Он нашел файл самого себя внутри Земли, а затем стал играться с параметрами тела. Его тело изменилось, сбросив около 20 фунтов лишнего веса, который он набрал с тех пор как стал шеф-поваром. Он встал перед зеркалом, изучая себя. Потом он выбрал настройку лица, по нему пробежала волна и глаза стали ближе друг к другу, нос стал короче и общий вид улучшился. Следующими были волосы, он поменял цвет со светло-коричневого на черный. Адам забавлялся, но забава могла подождать. Он решил, что если возможности Земли обрабатывать действия индивидуума ограничены, то ему надо попасть туда где плотность населения относительно высока. Используя ОС Земля, он заказал билет на самолет до Мехико Сити, население 22 миллиона. Это значительно лучше, чем холодные зимы в Висконсине. Адам отправился в аэропорт Мэдисона; было 3 часа утра.<br />На рассвете Адам проходил таможню. Он был уверен, что пройдет, даже если бы у него было оружие, ОС Земля позаботилась об этом. Он подумал от том как он выглядит для центрального компьютера Земли. Думает ли тот, что он просто пользователь, подключившийся к земле, или он похож на очередную программу?<br />В любом случае, он был уверен, что кто-то снаружи уже узнал, что происходит. Он вышел из аэропорта и пошел по улице. Сперва нужно было найти, где остановиться. Нет, плевать на жилье, сначала нужен транспорт. Он обошел паркинг, стараясь не привлекать внимания, и оказался в дальнем его конце. Вытащив свой наладонник, он выбрал генератор объектов. Маленький двухдверный Олдсмобиль материализовался перед ним.<br />Он уже был в машине, когда заметил две черные машины, выскочившие впереди и сзади него. Он запаниковал и завел машину. Он сдал назад, развернулся и поехал в обратную сторону. Достав пистолет он выжал газ и поехал прямо к выходу, который теперь блокировала вторая машина. Он позволил трем пулям вылететь из его пистолета, две из них попали в машину, и та начала отъезжать. Адам проехал мимо нее.<br />Он выскочил на городские улицы, но машины все еще преследовали его. Заднее стекло лопнуло и рассыпалось, когда две пули попали в его машину. Благодаря вирусу, они не могли его ранить, но они все еще могли повредить его тачку.<br />Адам свернул на другую улицу, аллею, погруженную в сумрак. Еще две пули пролетели сзади него, одна попала в бок машины, в опасной близости от бензобака, другая прошла совсем мимо. Машины теперь находились с двух сторон от него. Одна вмяла его в другую. Адам ударил по тормозам и обе машины проскочили вперед. Он дал задний ход, удаляясь от них.<br />Двое мужчин выскочили из машин и открыли огонь. Удачный выстрел пробил Адаму шину. Он влетел в стоящее рядом здание. Подушка безопасности сильно ударила его по лицу, он на секунду застыл, но быстро пришел в себя и вывалился из машины на аллею. Потом он побежал, обрывки одежды со свистом развевались за ним. Он поворачивал за угол, когда услышал шаги за спиной, но до того как он смог обернуться, он почувствовал как что-то сильно ударило его сзади. Потом все почернело.<br />*****<br />Когда Адам пришел в сознание, он не мог пошевелить ни рукой, ни ногой.Он был привязан к стулу в пустой комнате с очень толстыми стенами. Открылась дверь.<br />«Ну, не первый ли человек на земле перед нами. Вы знаете, мистер Ева, у вас действительно ироничное имя, ваша модель, это клон одного из первых людей в мейнфрейме Земли. Переработка старых моделей позволяет экономить дисковое пространство», сказал мужской голос. Адам еще не пришел в себя и перед глазами у него все расплывалось. Человек подошел близко к нему, с хрустом открыл капсулу с нюхательной солью и поводил ей перед носом Адама. Тот тут же очнулся.<br />«Я знаю что в действительности этого можно было и не делать. Я мог бы просто нажать кнопку. Но так веселее», говорил человек, в то время как другой мужчина входил в комнату.<br />«Где я?» сказал Адам, еще не полностью придя в себя.<br />«Ты в заброшенном доме, предназначенном на снос. Никто не найдет тебя – не то чтобы это было важно – мы же все еще можем удалять других людей. Это подводит меня к первому вопросу, как получилось, что мы не можем тебя удалить?»<br />«Я не знаю», солгал Адам, пока человек, который только что вошел, подступил совсем близко к нему.<br />«О, я думаю ты знаешь», сказал он и ударил Адама пистолетом в лицо.<br />«Я же сказал, что не знаю», произнес Адам, оглянулся вокруг, увидел свой пистолет, наладонник и бумажник, на столике поблизости.<br />«Ты знаешь, что пока мы не можем тебя убить», сказал первый, «Ты единственный, кто знает почему, но это не помешает нам мучить тебя пока ты сам не захочешь умереть.» Сказав это, он разорвал рубашку Адама и прикрепил несколько электродов к его груди.<br />— С их помощью мы можем стимулировать ощущения боли, самой разной, снова и снова, или мы можем перенести троды на более чувствительные места.<br />«Да пошли вы», с трудом сказал Адам. Второй мужчина нажал кнопку на своем наладоннике, и внезапно Адам почувствовал сильную боль на всей правой стороне тела. Человек отпустил кнопку.<br />— Теперь ты нам скажешь?<br />Адам поколебался. «Вирус, я запустил вирус в код Земли».<br />— Нам не удалось найти вирус.<br />— Земля настолько сложна, что мне удалось скрыть вирус внутри файла модели, он... он маленький. Заголовок файла находится на моем домашнем компьютере.<br />«Прекрасно, мы получили то, за чем пришли, и мы больше ... не отвечаем за вас», оба нажали кнопки на своих наладонниках и замерцали, а потом исчезли совсем. Адам допрыгал на своем стуле до стола. Или они не знали, что он может получить доступ к ОС Земля со своего наладонника, или были слишком беспечны. Адам нащупал компьютер и нажал кнопку сбоку.<br />— Голосовое управление активировано.<br />— Доступ к Земле.<br />— Подключено к Земле.<br />— Загрузить генератор объектов.<br />— Генератор объектов доступен, ожидаю комманду.<br />— Дай мне нож.<br />— Укажите параметры ножа.<br />— Просто дай мне чертов нож.<br />Как только он сказал это, в другой его руке материализовался нож. Он раскрыл лезвие и освободился. Они скоро найдут вирус, и Адам запустил программу, которую он создал во время перелета, как последнее убежище. Она извлечет модель его мозга из общего хранилища Земли и сохранит в виде файла. Потом она выгрузит файл по Интернету в мир за пределы Земли. И тогда он будет существовать распределенно в их Интернете. Может быть они передумают, сделают Землю автономной, но времени обдумывать это уже не было. Двое мужчин в форме спецназа материализовались перед ним, держа в руках оружие.<br />«Брось его», закричали они. Адам отпрыгнул в сторону и воспользовался своим наладонником, чтобы прервать их подключение к Земле. Голоса двоих мужчин затихли, затем их изображения погасли. Потом он запустил программу, которая сильно затрудняла доступ к Земле. Адам выбежал наружу, программа для побега почти закончила загружаться.<br />На экране наладонника появилось сообщение: «Мы нейтрализовали вирус, теперь ты уязвим. Если ты начнешь закачку, мы удалим тебя», потом компьютер повторил его тихим голосом. Тут же система проинформировала Адама, что Закачка готова, и ему нужно просто нажать кнопку «Закачать». Они уже могли нейтрализовать вирус, это было возможно, но почему тогда у него все еще есть доступ к ОС Земля? Он мгновенно решил ответить на их блеф. И нажал «Закачать».<br />Наладонник упал на пол. Тело Адама распалось на тысячи кусочков. Потом показалось что он движется во всех направлениях одновременно, все быстрее и быстрее. Белый свет окружил его, и становился тем ярче, чем быстрее он двигался.Фрагменты стали исчезать один за другим, пока не остался последний. Один фрагмент, бесконечный свет, две возможности.Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-24797056988090322312008-09-25T05:15:00.000-07:002008-09-25T05:16:39.149-07:00Joshua Klessig. Earth (tm)В русском интернете не нашел перевода этого маленького рассказа, взялся переводить сам, чтоб не терять квалификацию. Закончу - обязательно выложу в блогAnonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0tag:blogger.com,1999:blog-2513536862720771643.post-57996175651422413712008-02-29T01:27:00.000-08:002008-03-02T12:33:58.042-08:00Test Multiple Events with Rhino.MocksThe situation when you should test the raising of one event with Rhino.Mocks is well documented/ But what to do if your page have 2 or more events?<br />Here is one of possible solutions:<br /><br />using System;<br />using System.Collections.Generic;<br />using MyProject.Presenters;<br />using MyProject.Presenters.Interfaces;<br />using NUnit.Framework;<br />using Rhino.Mocks;<br />using Rhino.Mocks.Constraints;<br />using Rhino.Mocks.Interfaces;<br /><br />// Here we have a page that sends a sms message. We have the ASP.NET ListBox control for<br />// message templates/ And we have 3 buttons "Add", "Remove" and "Edit". So we need to test // that appropriate events can be raised and the "Presenter" class (we use //(Model-View-Presenter" pattern) is subscibed to those events.<br /><br />namespace MyProject.Tests.Presenters<br />{<br /> [TestFixture]<br /> public class SendMessagePresenterTest<br /> {<br /> [SetUp]<br /> public void Setup()<br /> {<br /> mockery = new MockRepository();<br /> e = new EventArgs();<br /> sendMessageView = mockery.CreateMock(typeof (ISendMessageView), null) as ISendMessageView;<br /> }<br /><br /><br /> private MockRepository mockery;<br /> private IEventRaiser raiseEvent;<br /> private ISendMessageView sendMessageView;<br /> private SendMessagePresenter sendMessagePresenter;<br /> private EventArgs e;<br /><br /> [Test]<br /> public void ShouldSubscribeToPageEvents()<br /> {<br />// we have the list of objects of type IEventRaiser<br /> List<ieventraiser> listToInvoke = new List<ieventraiser>();<br /> using (mockery.Ordered())<br /> {<br />//here we work with IEventRaiser interface of Rhino.Mocks. See the Rhino.Mocks //documentation for details<br /> sendMessageView.AddTemplate += null;<br /> // In this method we make some constraints and we're adding each call to list<br /> PrepareEvent(listToInvoke);<br /> sendMessageView.DeleteTemplate += null;<br /> PrepareEvent(listToInvoke);<br /> sendMessageView.ModifyTemplate += null;<br /> PrepareEvent(listToInvoke);<br /> }<br /> mockery.ReplayAll();<br /> sendMessagePresenter = new SendMessagePresenter(sendMessageView);<br />//here we invoke all recorded events. If your events have different arguments you can invoke // all events by index like this listToInvoke[1].Raise (null, new MyEventArgs());<br /> foreach (IEventRaiser raiser in listToInvoke)<br /> {<br /> raiser.Raise(null, e);<br /> }<br /><br /> mockery.VerifyAll();<br /> }<br /> private void PrepareEvent(ICollection<ieventraiser> listToInvoke)<br /> {<br /> LastCall.Constraints(Is.NotNull());<br /> LastCall.IgnoreArguments();<br />//this is the event to invoke. We register it and then we're adding the event to raise to the //invocation list<br /> raiseEvent = LastCall.GetEventRaiser();<br /> listToInvoke.Add(raiseEvent);<br /> }<br /> }<br />}Anonymoushttp://www.blogger.com/profile/13439632718590966151noreply@blogger.com0