If Crashing Gracefully Is Nice, Recovering From It Is Awesome

Filed Under (Development, DotNetArabi, Misc, software management) by Emad Alashi on 02-03-2010

Tagged Under : , ,

Last Saturday we had a SharePointSaturday event here in Jordan, in which I had the pleasure of interviewing Joel Oleson and Michael Noel for DotNetArabi.

At the end of Joel’s valuable interview, which can happen only in a life time, I stopped the recording by hitting the “Stop” button, simple. Surprisingly, instead of stopping the recording, Audacity just froze! I could hear myself screaming inside “NOOO!!!”, I guess even Joel heard that! the whole machine stuck that I had to force it to a Hard Shut down.

But knowing Audacity as a great piece of software, which really is, I hoped that I could still retrieve the recording. I rebooted and started Audacity again, and here comes the so refreshing alert at the start:

CrashRecovery

Some projects were not saved properly the last time Audacity was run. Fortunately, the following projects can automatically be recovered

THAT is a successful software! of course I lost portions of the recording still, but I can’t complain; I have most of the interview. So, When you design your software, DO make sure you don’t crash gracefully only, but yet to recover correctly from the crash.

DotNetArabi Podcast Equipment

Filed Under (DotNetArabi, Misc) by Emad Alashi on 16-01-2010

Tagged Under : , , , ,

After publishing 8 episodes of DotNetArabi, I think it would be nice to share on this blog how it goes and what equipment needed in the process. But before we begin, dear reader, note that I am not an expert, I am still in the beginning of the way, though it’s going good so far.pavillion

  My working machine is HP dv 6700 laptop, my first trials with recording was with simple microphone like the ones you use for chats; recording in winter made things smooth, but when summer came a long the heating problem became obvious in the low quality of the audio recorded, in addition to the higher target I needed anyway, so a different measure had to take place.

 

I looked for an audio device that would clear the recording of any noise that is caused by the internal electrical and the fan. I had different options then, but the most interesting one was the MobilePre USB audio interface which I finally got. It takes analog inputs (2 of which are XLR) and transforms to digital signal view USB.

MobilePre_3qtrMobilePre_back

Of course it appeared that it is over bloated than what I really needed, but I liked it anyway and produced the quality I looked for, though if you are going to record voice only, I believe there are other devices with lower cost.

To complete the set I got myself two XLR Microphones, not fancy ones, 15 JD’s each (about 22 US $) and that was it.

microphone xlrPort

Now on the software side I use Audacity, I find it the best free audio software.

AudacityScreen audacity

After all that, you’d find it surprising that you still need to use the Noise Removal feature in Audacity. And by that you can have your own podcast :)

Communication Skills Session at MSP – Jordev

Filed Under (Development, Misc, software management) by Emad Alashi on 21-11-2009

Tagged Under : , ,

I just finished a session about Communication Skills one-to-one for the MSP program with Microsoft and Jordev. As I promised the audience, here are the slides shared on the very good site SlideShare:

Basics Of Successful Communication

Filed Under (Misc, software management) by Emad Alashi on 21-08-2009

Tagged Under :

CommunicationIt’s a waste of time trying to explain how important communication is in life, whether it is at work or personal life. So I will start immediately in group of points I find it to be basics when it comes to successful communication in general, and verbal communication in specific.

Here is the list of actions you need to take in order to explain your thoughts as clear as and descriptive as possible. I tried to put them in their proper order considering the communication process, though they can overlap:

  1. At the beginning of the conversation, make sure that the goal of the conversation is clear
    e.g. “the goal of this discussion is to discuss the problem x, and to find a proper solution for it”
  2. Put the listener in the context instantly
    e.g. “Remember the remark our client made on the page where we list his system users?”
  3. Unify the terms used in the discussion; giving special words to commonly used meanings and expressions
    e.g.  “users who are still work for the company but for some reason they are not available we will call them Deactivated Users, users who don’t work for the company anymore will be called Deleted Users
  4. Start from common ground of information
    e.g. “As you already know, this list is too long and a scrollbar shows, and you know too that the architecture team provided us with a tool for paging, now the problem is…”
  5. Sequence of thoughts is highly important; you should start from the most intrinsic and basic thought and build on it to conclude to the next, each thought should be a building block for the next
    “we are advised to use tool x for this problem, tool x uses technology y, technology y requires us to buy that license, and we cannot afford it right now, so what we can do is…”
  6. Aside from the terms in point 3, use language words that are understandable by the listener; don’t use a unique dialect for example. For this point I will give a negative example:
    e.g. An aussie would say “Don’t get your knickers in a knot”, when he really means “Don’t upset yourself”
  7. Don’t deviate from the subject or add information that is useless to the subject; the more you talk about irrelevant subjects, the closer to failure the communication would be. This point too should be explained with bad example:
    e.g. “Yes, this can be fixed but it only requires a small action from Ahmad, who happens to be working with the architecture team right now, on a new feature in the framework that might add a new challenge to our application because we will have to change the….”! 
  8. Don’t try to over explain the idea more than it needs; use short expressive words.
    e.g. “I get server error exception” rather than “I get error showing tags and line of code in the vb file where the error happened because it is an error from the server as you know”!
  9. Talk in digestible speed, a speed that suits the listener not you; reminding to point 5, thoughts are delivered in sequence, make sure the listener digested the current before you move to the next
  10. Ask questions that help the listener to understand, when you already know the answer, but you want to reach certain point with the question where the listener will have to think clearly about it
    “When request a page, what happens on the server?”
  11. Confirm that the listener is following right by asking regularly
    “are you following?”
  12. if the listener failed to understand at some point do the following:
    1. ask what part exactly he didn’t understand in order to take the proper action
    2. DON’T REPEATE THE SAME SENTENCE! rephrase the sentence in a more understandable way (needs a lot of training, I agree)
    3. Step one level back in your sequence of thoughts, probably the listener didn’t understand because of failure in explaining the previous though

By this I end the basics of successful communication, it’s not easy to follow these steps I am sure, it needs a lot of practice, especially when it comes to choosing words and preparing the sequence of thoughts. But if you practice enough and  you master it, your life will be much easier

I hope you benefit and have a nice discussions around :)

DotNetArabi Episode 4 دوت نت عربي الحلقة الرابعة

Filed Under (Development, Misc) by Emad Alashi on 19-08-2009

Tagged Under :

  

I just published episode 4 of the DotNetArabi podcast on www.dotnetarabi.com.

This episode was with guest Mohammad Zayed, he works as Strategic Technology Specialist in Microsoft Jordan. he worked on different Microsoft technologies ranging from Windows Forms applications, Web Forms and Mobile.
Mohammad talks in this episode about Sharepoint, the in’s and out’s, the benefits and the challenges.

لقد تم نشر الحلقة الرابعة من دوت نت عربي على www.dotnetarabi.com ، التي كان الضيف فيها محمد زايد. يعمل محمد زايد حاليا كمتخصص تقنيات استراتيجي لكبار العملاء في مايكروسوفت الأردن. و تكلم في هذه الحلقة عن الـ Sharepoint: ماهيته، و ما يلزم لتثبيته، و تراخيصه، و نقاط قوته، و نقاط التحدي فيه، و الكثير من المعلومات القيمة. 

JIT compiler and "Method Not Found" error

Filed Under (Development, Misc) by Emad Alashi on 11-08-2009

Tagged Under :

CropperCapture[20]

Actually it can be “Could Not Load Type” too, but the reason is the same: you are referencing the wrong DLL version.

well, this is totally understandable; of course you are going to get this exception when you use an outdated DLL that lacks the new extra parameter to THAT certain method. But the interesting part is it will not happen when you first run your application, and neither when execution reaches the changed method; it will happen when code-execution reaches a place that REFERENCES that changed method.

lets look at the following example.

I have created two projects: Windows Forms project called “HostDLL”, and a Class Library project called “BadDLL”.
The HostDLL references the BadDLL; upon clicking a button in the form, the HostDLL will create an instance of class “BadClass” and call the method “DoStuff” which takes two integer parameters.
everything goes fine:

   20 private void button1_Click(object sender, EventArgs e)

   21         {

   22             BadClass bc = new BadClass();

   23             int x = 3, y = 10;

   24 

   25             bool never = false;

   26             if (never)

   27             {

   28                 bc.DoStuff(x, y);

   29             }

   30             MessageBox.Show(“Done successfully”);

   31         }

Notice the IF clause in line 26, and notice that calling the method “bc.DoStuff” will never take place because the “never” variable is always false.

Now, intentionally, we will make a breaking change in the BadDLL; adding a new integer parameter z to the DoStuff method (we will make this change AFTER we have compiled the HostDLL so we don’t get compile-time correction).

Run the applicaion HostDLL to show the form, you will notice that there is no error, even when the BadDLL has been changed. Now hit the button… you will get a run-time error that says “Method Not Found”. The interesting part of the story is that even though DoStuff will never get called, yet we will still get this run-time error.
The reason is that the JIT compiler does what it’s called after: “Just-In-Time Compiler“; using help from the “CLR via C#” book authored by Jeffery Richter, specifically in “Executing Your Assembly’s Code” section, the explanation is that:

To execute a method, its Intermediate Language must first be converted to native CPU instructions. This is the job of the CLR’s JIT (just-in-time) compiler…Just before the method executes, the CLR detects all of the types that are referenced by the method’s
code (in our case it’s the BadClass). This causes the CLR to allocate an internal data structure that is used to manage access to the referenced types.

The author continues in a graph in which he explains the process:

1. In the assembly that implements the type, look up the method being called in the metadata
2. From the metadata, get the IL for this method
3. Allocate a block of memory
4. Compile the IL into native CPU instructions

So it is at that point the code is compiled, and at that point the JIT discovers that there is a type (which is BadClass in our case) is referenced having an invalid method with one extra parameter.

So always be careful when you reference other DLL’s, if you don’t make sure you have the right version, you will be subject to a potential lovely RTE message :)

“طور نفسك برمجيا”…موجة من عمر قعدان

Filed Under (Development, Misc) by Emad Alashi on 31-07-2009

Tagged Under :

قبل أيام، كتب أخي عمر قعدان في مدونته مقالا بعنوان “شيفرة مصدرية للقراءة” و في آخره استعمل أسلوب “الموجة” في المدونات و هو أسلوب مبتكر في عالم التدوين يقوم صاحبه بكتابة مقال، ثم يطلب في آخر المقال من مدونين معينين كتابة المقال نفسه لكن من تجربتهم الشخصية، و بدورهم يفعلون الأمر ذاته مع آخرين إن أرادوا.
يطلق على هذا الأسلوب في الإنجليزية كلمة “Tagging” و برأيي أن أقرب مرادف لهذا المعنى في اللغة العربية ضمن هذا السياق هو كلمة “موجة”. و ها أنا أستجيب للموجة التي أطلقها أخي عمر.

grow

أفصح عمر في مقالتين له عن كيفية تطوير المبرمج لنفسه، و طلب في موجته الإجابة عن ثلاثة أسئلة:

  • كيف تصقل مهارتك كمبرمج؟
  • ما رأيك بفكرة قراءة الشيفرة المصدرية للتعلم؟
  • و هل هناك برامج مفتوحة المصدر تعلمت منها؟

بالنسبة لي، صقل المهارة يكون: بالتأسيس من خلال القراءة و العلم النظري، و من ثم بالاستكمال في التطبيق العملي. فبدون أي من هذين الجناحين لا أتصور نجاح أي مبرمج أو تقني. فالقراءة و الجانب النظري يثري الجانب العلمي، و التطبيق يأكده؛ إما أن يشكك في صحته و ينفيه، أو يزيد من يقينه.

و إذا ولجنا بتفصيل أكبر في الموضوع، أرى أن في الجناح الأول – و هو الجانب النظري- قد تقيدنا فيه النقاط التالية:

  • بالنسبة للمواضيع الأساسية و القواعد الأولى لأي علم، يكون المصدر الأمثل للمعلومة هو الكتاب المفصل أو المقال الطويل أو المتسلسلات Tutorials (أروعها بالنسبة لي 4guysfromrolla)؛ فلأهميتها لا بد من قراءة متمعنة و عميقة ترسم في الذهن الأبعاد كلها، و تستكمل جميع جوانب الموضوع بتفصيل واسع و دقيق. أمثلة على هذه المواضيع: في عمل البرمجة بالدوت نت “أنواع المتغيرات في الـدوت نت”، في علم البرمجة في مجال الإنترنت “دورة حياة صفحة الـASP.NET” و هلم جر.
  • أما إذا كنت تبحث في علم لست مهتما به كثيرا، أو بعلم يهمك لكن بموضوع يلامسه من بعيد -نسبيا-، فتكون من خلال قراءة المقالات العامة، و التدوينات، و الفيديوهات (أولي بها أهمية أكبر لنجاعتها بتوصيل المعلمومة، و أضيف على عمر فيديوهات ASP.NET)، أو حضور المحاضرات التي تكون بمثابة “مدخل” لهذا العلم.
  • سؤال و متابعة المحترفين؛ مثل متابعة المدونات كمدونة: “سكوت ميتشيل Scott Mitchel” و “سكوت جوثري Scott Guthrie“، أو استخدام تويتر twitter.
  • قراءة “الشيفرة المصدرية” أو الـ Source Code لبرامج أنشأها مبرمجون محترفون في المجتمع، و هي من أهم طرق تحصيل العلم البرمجي؛ فهي مثال حقيقي مجرب بأيدي محترفين ذوي سنوات طويلة من الخبرة، تستطيع من قراءة المصدر أن تفهم كيف يفكر، و متى يستخدم أسلوبا معينا، و كيف يحل معضلة واقعية مشهورة. أمثلة: ASP.NET MVC Nerddinner، RSS.net، و Ninject.
  • تعليم الآخرين و إعطاء المحاضرات أو كتابة المدونات إن أمكن، فلا يزيد ترسيخ المعلومة -بعد التطبيق- أكثر من تعليم الآخرين (و هنا أقول لا تبخل بالمعلومة أبدا أبدا، فالخير العائد إليك أكبر بكثير من ما قد يخطر على بالك من الخسارة إن وجدت)

أما بالنسبة للتطبيق فهو استكمال البناء، فلقد تعلمت من بنيان Bunian أكثير من أي شيء آخر (على الرغم من أنه غير مستكمل لغاية الآن)؛ فإن تابع الشخص كل مدونين التكنولوجيا، و قرأ كتب العظماء، و شاهد جميع الفيديوهات و المتسلسلات، و لم يفتح Visual Studio و طبق ما عرف، فاعلم أنه ليس سوى فقاعة كبيرة -و للأسف-، و سيخونه علمه في أبسط التحديات البرمجية على الطريق.

و أخيرا، من أكثر ما يزيد مهارة الشخص، هو الهمة في التحصيل، و هذه الهمة تزيد أضعافا عند مشاركة الآخرين، سواء في مجتمعات البرمجة الحقيقية (كـ Jordev هنا في الأردن)، أو كالمجتمعات على الإنترنت (كـ www.vb4arab.com). فبمجرد أن تتكلم مع من يشاركك هذا الشغف، لن تتمالك نفسك حتى تعود للمنزل و تفتح الجهاز و تستمع بسماع صوت طرق لوحة المفاتيح :) .

و أمرر هذه الموجة إلى كل من: أحمد أبو عرجة، و طارق سيالة. دون أن يكون هذا على وجه الإلزام.

 

DotNetArabi Episode 3 دوت نت عربي الحلقة الثالثة

Filed Under (Misc) by Emad Alashi on 11-07-2009

 

I just published episode 3 of the DotNetArabi podcast on www.dotnetarabi.com.

This episode was with guest Mahmoud Alamanasrah, who have 7 years of experience on data-driven web applications with SQL Server. The episode was about the new features of SQL Server 2008, great for all developers who interact closely with SQL Server.

على موقع www.dotnetarabi.com تجدون الحلقة الثالثة من “دوت نت عربي”. موضوع الحلقة هو الـ”إس كيو إل سيرفر 2008 SQL Server”، عن آخر المستجدات و بعض النصائح العامة.
كان ضيف الحلقة الزميل محمود المناصرة، و هو عضو نشط في مجتمع مطروي الـ”دوت نت” في الأردن Jordev، لديه 7 سنوات من الخبرة و يعمل حاليا كـ “Technical Team Leader” أي قائد فريق مبرمجين.

Got a GPS? …Lets Play Geocaching

Filed Under (Misc, Personal) by Emad Alashi on 26-06-2009

Tagged Under : , ,

The other day I was roaming the Internet; link here link there, tweet here tweet there, and I stumbled upon a very nice game called Geocaching.
Geocaching, simply, is a game in which players hide items in any place in the world, and the other players should find, yes…Treasure Hunt. But the fun part is it’s Global, and the GPS is your primary tool!

The players who want to hide an item, should first label it and give it a unique identifier, then record the coordinates (longitude and latitude) of the place they hide it in, and finally they should post the information along with the coordinates on the game’s website www.geocaching.com.

And I was lucky enough to know that there are 17 geocaches in Jordan! below is an image of my first geocache quest result with my good friend Tamim Salem, using my iPhone’s GPS.

IMG_0105

IMG_0102 
The item was broken and this paper is the only thing left.

Can’t wait to quest the rest ;)

Technical Team Leader…Who Is Not

Filed Under (Development, Misc, Personal, software management) by Emad Alashi on 24-04-2009

Tagged Under :

image orginially was on "http://www.ccer.org/images/juggle.gif"

When I started this blog my goal was to make it a technical one, in which most posts would have code, samples, screen shots, architecture…etc. This was the primary goal, though it is totally fine with me to talk about software life in general.

The issue is that I get the ideas of my posts from my real daily life, which is mostly code challenges at work. I do write code in my leisure time, but for sure it is not as thorough as the thing at work.
And since I haven’t posted any technical stuff lately…the simple conclusion is I DON’T SEE CODE ANYMORE!

A Technical Team Leader in the place I work at right now has a different meaning from what I knew before; the first word in the title is “Technical” so I expect to deal a lot with code: planning it, reviewing it, discuss it with team members…etc.
But in the environment I work at, there is more pressure toward management and coordination; I find my self during the day doing stuff like updating the Microsoft Project plan, smoke testing, running between other teams we depend on to get their deliverables; checking with the User Experience team if they have the designs ready, checking with the Architecture team if they will pass by to set the folders structure for us…etc. All this leaves me no time to see code.

Is this right? Should a Technical Team Leader do these stuff? If not, who should? Is it a Project Coordinator? what is exactly the job description for a Technical Team Leader?
Questions like these should be discussed with the Development Process people, but till then I will have to say: “that’s not right”.
How about you? what do you think?