d خليل سليم – الصفحة 15 – مدونة الفريق

الكاتب: خليل سليم

  • شاشة تقديمية (splash screen) أفضل لبرامج windows phone 7

    من منا لم تواجهه مشكلة عند جعل الشاشة التقديمية تظهر في الصفحة الأولى!، المشكلة ليست في التجريب، ولكن المشكلة ستظهر حينما تجرب مايكروسوفت تطبيقاتك قبل نشرها، لذلك ساحاول هنا عرض كيف يمكنك أن استبدال الشاشة التقديمية الاعتيادية بواحدة أفضل بكثير.

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

    وأيضا سوف أعرض كيفية إضافة شريط تحميل ( progressbar) لإعطاء البرنامج شيئا من الحركة والتفاعل

    ,تحميل المشروع جاهز وبه مكتبة العمل

    في البداية أنشئ مشروع جديد وبعد ذلك أنشئ صفحة جديدة بعنوان MySplash.xaml

    الآن أضف مرجع reference لفضاء الأسماء System.Windows.Controls.Primitives وهو System.Windows.Controls

    وبعد ذلك أضف شريط التحميل (progressbar) للصفحة ، وقد قمت بإنشاء مكتبة DLL لأوفر عليك كتابة الكود وهي باسم Libs_ProgressTempCSharp وموجودة في ملفات الكود المرفقة ويمكنك إضافتها من add reference

    وبعدها قم بفتح صفحة التطبيق العامة (App.xaml) واستدعي المكتبة بالشكل التالي :

    xmlns:unsupported="clr-namespace:Microsoft.Phone.Controls.Unsupported"    

    وبعد ذلك أضف هذه الوسوم بداخل وسم Application.Resources

          <Application.Resources>            
    <Style x:Key="PerformanceProgressBar" TargetType="ProgressBar">
    <Setter Property="Foreground" Value="{StaticResource PhoneAccentBrush}"/>
    <Setter Property="Background" Value="{StaticResource PhoneAccentBrush}"/>
    <Setter Property="Maximum" Value="100"/>
     <Setter Property="IsHitTestVisible" Value="False"/>
    <Setter Property="Padding" Value="{StaticResource PhoneHorizontalMargin}"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="ProgressBar">
    <unsupported:RelativeAnimatingContentControl HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
     <unsupported:RelativeAnimatingContentControl.Resources>
    <ExponentialEase EasingMode="EaseOut" Exponent="1" x:Key="ProgressBarEaseOut"/>
    <ExponentialEase EasingMode="EaseOut" Exponent="1" x:Key="ProgressBarEaseIn"/> </unsupported:RelativeAnimatingContentControl.Resources>
     <VisualStateManager.VisualStateGroups>
     <VisualStateGroup x:Name="CommonStates">
    <VisualState x:Name="Determinate"/>
     <VisualState x:Name="Indeterminate">
     <Storyboard RepeatBehavior="Forever" Duration="00:00:04.4">
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="IndeterminateRoot">
    <DiscreteObjectKeyFrame KeyTime="0">
    <DiscreteObjectKeyFrame.Value>
    <Visibility>Visible</Visibility>
     </DiscreteObjectKeyFrame.Value>
     </DiscreteObjectKeyFrame>
     </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DeterminateRoot">
    <DiscreteObjectKeyFrame KeyTime="0">
     <DiscreteObjectKeyFrame.Value>
     <Visibility>Collapsed</Visibility>
    </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.0" Storyboard.TargetProperty="X" Storyboard.TargetName="R1TT">
     <LinearDoubleKeyFrame KeyTime="00:00:00.0" Value="0.1"/>
    <EasingDoubleKeyFrame KeyTime="00:00:00.5" Value="33.1" EasingFunction="{StaticResource ProgressBarEaseOut}"/>
    <LinearDoubleKeyFrame KeyTime="00:00:02.0" Value="66.1"/>
    <EasingDoubleKeyFrame KeyTime="00:00:02.5" Value="100.1" EasingFunction="{StaticResource ProgressBarEaseIn}"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.2" Storyboard.TargetProperty="X" Storyboard.TargetName="R2TT">
    <LinearDoubleKeyFrame KeyTime="00:00:00.0" Value="0.1"/>
     <EasingDoubleKeyFrame KeyTime="00:00:00.5" Value="33.1" EasingFunction="{StaticResource ProgressBarEaseOut}"/>
    <LinearDoubleKeyFrame KeyTime="00:00:02.0" Value="66.1"/>
    <EasingDoubleKeyFrame KeyTime="00:00:02.5" Value="100.1" EasingFunction="{StaticResource ProgressBarEaseIn}"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.4" Storyboard.TargetProperty="X" Storyboard.TargetName="R3TT">
    <LinearDoubleKeyFrame KeyTime="00:00:00.0" Value="0.1"/>
     <EasingDoubleKeyFrame KeyTime="00:00:00.5" Value="33.1" EasingFunction="{StaticResource ProgressBarEaseOut}"/>
     <LinearDoubleKeyFrame KeyTime="00:00:02.0" Value="66.1"/>
     <EasingDoubleKeyFrame KeyTime="00:00:02.5" Value="100.1" EasingFunction="{StaticResource ProgressBarEaseIn}"/>
     </DoubleAnimationUsingKeyFrames>
     <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.6" Storyboard.TargetProperty="X" Storyboard.TargetName="R4TT">
    <LinearDoubleKeyFrame KeyTime="00:00:00.0" Value="0.1"/>
     <EasingDoubleKeyFrame KeyTime="00:00:00.5" Value="33.1" EasingFunction="{StaticResource ProgressBarEaseOut}"/>
    <LinearDoubleKeyFrame KeyTime="00:00:02.0" Value="66.1"/>
     <EasingDoubleKeyFrame KeyTime="00:00:02.5" Value="100.1" EasingFunction="{StaticResource ProgressBarEaseIn}"/>
     </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.8" Storyboard.TargetProperty="X" Storyboard.TargetName="R5TT">
    <LinearDoubleKeyFrame KeyTime="00:00:00.0" Value="0.1"/>
    <EasingDoubleKeyFrame KeyTime="00:00:00.5" Value="33.1" EasingFunction="{StaticResource ProgressBarEaseOut}"/>
     <LinearDoubleKeyFrame KeyTime="00:00:02.0" Value="66.1"/>
    <EasingDoubleKeyFrame KeyTime="00:00:02.5" Value="100.1" EasingFunction="{StaticResource ProgressBarEaseIn}"/>
     </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="R1">
    <DiscreteDoubleKeyFrame KeyTime="0" Value="1"/>
    <DiscreteDoubleKeyFrame KeyTime="00:00:02.5" Value="0"/>
     </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.2" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="R2">
    <DiscreteDoubleKeyFrame KeyTime="0" Value="1"/>
    <DiscreteDoubleKeyFrame KeyTime="00:00:02.5" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.4" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="R3">
    <DiscreteDoubleKeyFrame KeyTime="0" Value="1"/>
     <DiscreteDoubleKeyFrame KeyTime="00:00:02.5" Value="0"/>
     </DoubleAnimationUsingKeyFrames>
     <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.6" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="R4">
    <DiscreteDoubleKeyFrame KeyTime="0" Value="1"/>
    <DiscreteDoubleKeyFrame KeyTime="00:00:02.5" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
     <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.8" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="R5">
    <DiscreteDoubleKeyFrame KeyTime="0" Value="1"/>
    <DiscreteDoubleKeyFrame KeyTime="00:00:02.5" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
     </Storyboard>
    </VisualState>
    </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
     <Grid>
    <Grid x:Name="DeterminateRoot" Margin="{TemplateBinding Padding}" Visibility="Visible">
    <Rectangle x:Name="ProgressBarTrack" Fill="{TemplateBinding Background}" Height="4" Opacity="0.1"/>
    <Rectangle x:Name="ProgressBarIndicator" Fill="{TemplateBinding Foreground}" HorizontalAlignment="Left" Height="4"/> </Grid>
    <Border x:Name="IndeterminateRoot" Margin="{TemplateBinding Padding}" Visibility="Collapsed">
     <Grid HorizontalAlignment="Left">
    <Rectangle Fill="{TemplateBinding Foreground}" Height="6" IsHitTestVisible="False" Width="6" x:Name="R1" Opacity="0" CacheMode="BitmapCache">
    <Rectangle.RenderTransform>
    <TranslateTransform x:Name="R1TT"/>
     </Rectangle.RenderTransform> </Rectangle>
    <Rectangle Fill="{TemplateBinding Foreground}" Height="6" IsHitTestVisible="False" Width="6" x:Name="R2" Opacity="0" CacheMode="BitmapCache">
    <Rectangle.RenderTransform>
    <TranslateTransform x:Name="R2TT"/>
    </Rectangle.RenderTransform> </Rectangle>
    <Rectangle Fill="{TemplateBinding Foreground}" Height="6" IsHitTestVisible="False" Width="6" x:Name="R3" Opacity="0" CacheMode="BitmapCache"> <Rectangle.RenderTransform>
    <TranslateTransform x:Name="R3TT"/>
     </Rectangle.RenderTransform> </Rectangle>
    <Rectangle Fill="{TemplateBinding Foreground}" Height="6" IsHitTestVisible="False" Width="6" x:Name="R4" Opacity="0" CacheMode="BitmapCache">
    <Rectangle.RenderTransform>
     <TranslateTransform x:Name="R4TT"/>
     </Rectangle.RenderTransform> </Rectangle>
     <Rectangle Fill="{TemplateBinding Foreground}" Height="6" IsHitTestVisible="False" Width="6" x:Name="R5" Opacity="0" CacheMode="BitmapCache"> <Rectangle.RenderTransform>
    <TranslateTransform x:Name="R5TT"/>
     </Rectangle.RenderTransform> </Rectangle>
     </Grid> </Border> </Grid>
    </unsupported:RelativeAnimatingContentControl>
    </ControlTemplate>
     </Setter.Value>
    </Setter>
     </Style>
    </Application.Resources>

    حاول ترتيب وتزيين شاشتك التقديمية بالطريقة التي تحبها ( أنا قمت باستخدام أبسط طريقة ) ، أضف أداة شريط التحميل ( progressbar) ، واختر لون لها ولا تنسى استخدام التنسيق الخاص بها :

    <ProgressBar x:Name="DownloadProgress" IsIndeterminate="False"    Style="{StaticResource PerformanceProgressBar}" Margin="0,347,7,173" />    

    أيضا لا تنسى إسناد القيمة true للخاصية IsIndeterminate الخاصة بالأداة progressbar في حدث تحميل الصفحة بالشكل التالي:

    this.DownloadProgress.IsIndeterminate = true;    

    إلى الآن لم نقم بعمل أي شيء جديد ، اجعل الصفحة الأخرى ( ليست صفحة MySplash.xaml) هي الصفحة الافتراضية ( DefaultTask) ، بالتأكيد ستقوم بتغييرها من ملف WMAppManifest.xml وهنا قمت باستدعاء صفحة [ MainPage.xaml ]

    قم بفتح الصفحة  MainPage واستدعاء فضاء الأسماء التالية :

      using System.Threading; using System.Windows.Controls.Primitives;    

    وفضاء الأسماء الأول يحتوي على فئة BackgroundWorker  التي تستخدم لل multithreading وهي تستخدم لإراحة ال thread في الوقت الذي تريده

    والثاني يحتوي على أداة popup وهي مسؤولة عن إظهار الصفحة أو ال usercontrol أو أي قطعة في الصفحة الحالية

    الآن لنكتب الكود:

    ضع هذا الكود بداخل الفئة

        Popup Mypopup = new Popup() { IsOpen = true, Child = new MySplash() };
    BackgroundWorker MybackroungWorker=new BackgroundWorker();

    أنا استخدمت object initializer لل popup ثم أسندت قيمة true للمتغير IsOpen وهناك شيء آخر مهم وهو إسناد اسم لعنصر child ( وهي هنا الشاشة التقديمية MySplash ) ، ولاحظ أنه يجب استدعاء اسم فئة الصفحة وليس اسم الصفحة نفسها

                 private void PopupView()
     {
     MybackroungWorker.DoWork += ((s, args) =>< {
     Thread.Sleep(4000); // time here });
     MybackroungWorker.RunWorkerCompleted += ((s, args) =>
     { this.Dispatcher.BeginInvoke(() =>
     {
     this.Mypopup.IsOpen = false;
     }
     ); }); MybackroungWorker.RunWorkerAsync(); }

    هذه الدالة تدعى popup ، اجعل وقت ال backgroundworker أن يوقف ال thread بواسطة دالة Thread.Sleep() ، فهي تأخذ قيمة الوسيط بأجزاء الألف من الثانية وهنا 4 ثواني ( 4000 جزء من الألف من الثانية )

    الان تحتاج لإستدعاء الدالة وأنا أفضل أن تستدعيها من خلال مشيد

         PopupView();    

    بقي أمر واحد وهو عند الضفط على زر الرجوع ، سيتم ظهور هذه ال popup ، لذلك قمت بعمل متغير عام من خلاله يتم فحص هل تم ظهور الشاشة التقديمية أم لا ، ويمكن وضع هذا المتغير في فئة بالشكل التالي:

                    public class General              {             public static bool IsOpen = false;             
    }

    فحص العملية قبل استدعاء الدالة

      if (General.IsOpen==false)

    الشي المذهل يكمن في شيفرة فئة Popup انه يمكنك استخدامها في مواضع عدة ، حيث ستعطي برنامجك تأثيرا جميلا، على سبيل المثال يمكن ان تستخدمها لإظهار معلومات حول برنامجك ويمكن أن تخفيها عند ضغط المستخدم عليها... وغيرها الكثير فهذا الأمر سيعتمد على احتياجات البرنامج لديك ، وأنا سأترك لك حرية التفكير والابداع

  • تجربة برامجك على الهاتف Windows Phone 7

    تجربة برامجك على الهاتف Windows Phone 7
    لنفترض أنك جلست تتعلم الـWPF  والسيلفرلايت لمدة أشهر، وجلست أشهر تحاول اتقانه ، وكذلك أشهر للانتقال إلى بيئة الوندوز فون 7 ، وكذلك شهر وأنت تخطط للبرامج التي ستقوم بعملها ، وكذلك شهور في بناء هذه البرامج ، وشهر في التحضير لنشر البرامج والتسجيل لها ، ولكن بقي خطوة أخيرة ، وهي نقل البرنامج على هاتف يحمل هذا النظام لتجربته ، فالتجربة على جوال حقيقي قد تختلف نوعا ما عن التجربة على المحاكي، وأحيانا تتطرق لعمل خطوات على البرنامج وذلك بعد اخراجه في ملف XAP ، لنفرض أنك قمت بخطوة إضافية على الملف النهائي للبرنامج – مثلا منعت الهندسة العكسية – وتريد تجربة البرنامج على الهاتف ، وهنا لن يفيدك الفيجوال ستوديو Visual Studio ، والحل يكمن في هذه الاداة 

    أداة Application Deployment
    هذه الأداة جزء من الأدوات  التي صدرت في Windows Phone Developer Tools October 2010 Update ، ويمكنك تحميلها عبر هذا الرابط
    Windows Phone Developer Tools October 2010 Update

    قم بتنصيب الملف ، ثم افتح الأداة Application Deployment

    ثم اختار طريقة النشر ، مثلا على هاتف حقيقي ن أم على المحاكي ، واضغط على Deploy
    انتظر لحظات وستظهر النتيجة أمامك وستكتب لك الأداة النتيجة
    نجاح أو فشل عملية النشر.

    بالتوفيق لكم

  • ماذا تعني Submission In Progress عند نشر برامج الوندوز فون

    أحيانا عندما تنشر برنامجك ، تظهر لك عبارة Submission In Progress  بجانب البرنامج ، والمفترض أن تظهر رسالة Testing in Progress ، أي أن البرنامج قيد الفحص من قبل مايكروسوفت.

    العبارة التي تظهر Submission In Progress  تعني أن برنامجك قيد الإرفاق ، أي أنك لم تكمل باقي الخطوات الصحيحة لإكمال رفع البرنامج. ويحدث هذا غالبا في الخطوة الخامسة وهي أنك لم تضغط على زر Submit for Certification ، وقمت بالضفط على زر حفظ في أي مرحلة من مراحل رفع الملفات.
    ولو بقي برنامجك مدى الحياة فلن يظهر في السوق طالما أنك لم تطلب فحص من مايكروسوفت.
    يمكنك إعادة الخطوات من جديد ، أو الدخول على البرنامج المرفوع ومتابعة الخطوات حتى الخطوة الخامسة واهتيار Submit for Certification.

  • نظرة سريعة على الويندوز 8 النسخة التجريبية

    هذا الفيديو المتواضع قمنا بعمله وهو يعطيك نظرة سريعة على الويندوز 8 النسخة التجريبية Consumer Preview وفيه توضيح لبعض الخصائص الجديدة أيضا الفيديو تم رفعه بأعلى جودة ، لمن يرغب بمشاهدته بجودة عالية يختار الجودة التي يحبها ويستمتع

  • حل مشكلة منصة الدوت نت 3.5.1 على الوندوز 8

    حينما قمت بتجربة نسخة الوندوز 8 الإصدار 64 بت ، المدمج بها حزمة تطوير النظام ، واجهتني مشكلة في كافة برامج التطوير ، فلا الفيجوال ستوديو المدمج قد اشتغل ، ولا الفيجوال الذي قمت بتنصيبه أيضا ، بل ان الزوون ، والSQL Server  ما رضي ينزل بسبب هذه المشكلة.

    المشكلة
    عندما ترد أن تعمل أي حركة ـ يطلب منك تمكين الدوت نت فريم وورك 3.5.1 ، وعندما يبدأ بالتصيب يخبرك بأنه يجب توافر اتصال انترنت، وبعد محاولات عديدة ووقت طويل ، تجد أن عملية التنصيب تفشل.
    مهما حاولت من حلول من الدخول إلى إضافة أو إزالة مكونات الوندوز ، أو تنصيب الحزمة كاملة من الفريمورك فلن يعمل.

    أين تكمن بالضبط
    قمت بتنصيب عدة برمجيات لتصليح منصة العمل ولكن بلا جدوى فالبرمجيات تخبرك بعدم توافر المنصة 3 أو 2 أو 3.5 ، على النظام وهذا ما أثار دهشتي
    فكيف بنظام تشغيل حديث من مايكروسوفت ، لا يوجد به ضمنيا هذه المنصات .

    الحل
    قمت بالبحث في الإنترنت وفي المواقع المعنية ولم أجد للأسف حل لهذه المشكلة وكثيرون كانوا يواجهونها.

    قمت بتجربة هذا الحل البسيط وقد نجح
    قمت بالذهاب إلى مجلد المسار التالي
    C:\Windows\Microsoft.NET\Framework64\v3.5
    فوجدته لا يحتوي الا ملف واحد فقط ، فقمت بحذف المجلد كله.
    وقمت بتحميل الحزمة الكاملة من منصة الدوت نت 3.5.1
    http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe

    والحمد لله كل شيء يعمل بالشكل المطلوب

  • لا تقم بتنصيب Windows 8 Consumer Preview

    إذا كنت مطورا فإن هذه النصيحة ستفيدك كثيرا ، والنصيحة بجمل
    لا تقم بتنصيب نسخة Windows 8 Consumer Preview ، وإضاعة يومين كاملين من حياتك لأنك في النهاية ستحذفها
    والسبب أنها تحتوي على العديد من المشكلات
    منها
    – لم يعمل SQL Server 2008 Express وهو بنظري اساسي لعملي وايضا اساسي لعمل LightSwitch وبالتالي سيتوقف عملك
    – لم يتم يتنصيب حزمة التطوير الخاصة بالويندوز فون بالكامل وحديث مشكلة معي في خطوة تنصيب XNA

    الكثير من المشاكل الأخرى حصلت معي منها لا الحصر التعليق الدائم للبرامج ، التعليق للكيبورد ، وغيرها ، ولكن بنظري المشكلتين فوق كافيتين ، وهذا بعد أنني لم أجرب كافة التطبيقات والخصائص البرمجية.

    طبعا الويندوز جذاب ، وكم أنا حزين على فراقك يا ويندوز 8.

    عن إذنكم أقوم أبحث عن اسطوانة ويندوز 7 معربة ومكركة

  • صورة اليوم : وندوز 7

    هذه الصورة لحزمة تنصيب الوندوز 7

  • كل ما تحتاج معرفته عن نظام مايكروسوفت الجديد ويندوز 10

    بعد الكثير من التكهنات حول الاسم الذي اختارته مايكروسوفت لنظام تشغيلها الجديد يبدو أن توقعات الجميع كانت خاطئة، ففيما كانت التوقعات تشير إلى أنه سيحمل اسم ويندوز 9 أو حتى Windows TH فإن مايكروسوفت قررت أن يكون الاسم هو ويندوز 10 لكن هذه لم تكن المفاجئة الوحيدة.
    في فعالية بسيطة لم تشهد حضور المدير التنفيذي لمايكروسوفت (ساتيا نديلا) و عرفت مشاركة محدودة من وسائل الإعلام و لم يتم نقلها مباشرة على الإنترنيت أعلنت مايكروسوفت عن نظامها الجديد ويندوز 10 مخالفة بذلك كل التوقعات في هذا الصدد و التي أشارت إلى أن النظام الجديد سيحمل اسم إما ويندوز 9 احتراما للتسلسل الذي بدأ مع ويندوز 7 أو Windows TH، لكن يبدو في النهاية أن مايكروسوفت أرادت القطع مع ويندوز 8 و الابتعاد عنه خصوصا أنه لم يحقق النجاح المرجو.

    النظام الجديد من مايكروسوفت ويندوز 10 جاء ليؤكد أخبارا راجت منذ مدة طويلة و أكدت رغبة الشركة في توحيد جميع أنظمتها و هو بالضبط ما تأكد اليوم حيث أن ويندوز 10 سيأتي متوافقا مع جميع أنواع الأجهزة (حواسيب مكتبية و محمولة، هواتف ذكية، حواسيب لوحية، التلفزيونات الذكية) حيث سيكون النظام الجديد متوافقا مع أحجام شاشات مختلفة من 4 إلى 80 بوصة، بالإضافة إلى توحيد المتجر الإلكتروني لكل هذه الأجهزة.
    مايكروسوفت حرصت كذلك على التأكيد أن النظام الجديد (ويندوز 10) رعي فيه بشكل كبير مصالح الشركات و المقاولات، حيث أشارت إلى أن ويندوز 10 سيكون متوافقا مع جميع الأنظمة المعلوماتية الخاصة بتسيير الشركات المتوفرة حاليا، و هو الأمر الذي ينظر إليه على أنه محاولة لتجاوز مشاكل ويندوز 8.

    التصميم الجديد لويندوز 10 فيه العديد من المميزات حيث يبرز خصوصا عودة (قائمة البداية) بالإضافة لواجهة جديدة أكثر فعالية تمكن المستخدم من تحكم أفضل بالنوافذ و التطبيقات بالإضافة إلى زر (Task View) و الذي يمكن من التنقل بسهولة بين النوافذ و التطبيقات المختلفة في النظام الجديد، كما أنها ستدمج محرك بحث داخل نظام ويندوز 10.

    من جهة أخرى أعلنت مايكروسوفت أنها ستقدم النسخة النهائية من نظامها ويندوز 10 في النصف الثاني من العام المقبل لكن المستخدمين سيكونون قريبا على موعد مع نسخة تجريبية من هذا النظام.

  • من هو مهندس الحاسوب الحقيقي، ومن هو المبرمج الحقيقي ؟

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

    من خلال تعاملي مع شريحة واسعة من مستخدمي وخبراء تكنولوجيا المعلومات ، وجدت العجب العجاب ، فقد شاهدت مهندسي حاسوب ومن الأوائل على دفعاتهم، لا يعرفون كيف يستخدمون برنامج الرسام ، أو يعتقدون أن متصفح الإنترنت إكسبلورر هو الإنترنت ! ، بل ولا يفقهون في الإنترنت إلا اسمه ، وهنالك أشياء عجيبة وغريبة كنت أستغربها من مهندسين حاسوب كانوا يعتبرون النخبة في جامعاتهم.
    وفي المقابل ، تعرفت على العديد من غير دارسي الحاسوب في الجامعات ( الهواة كم يسمونهم الدارسون ) ، وقد كانوا من أمهر من تعرفت عليهم ، ولا تعرف أنهم ( هواة ) إلا إذا شخص ما أخبرك بهذا.

    السؤال هنا ما الذي يجعل هذا مهندس حاسوب ، وهذا ليس مهندس حاسوب ؟
    هل هي الشهادة ؟

    ففي سورة الكهف أرسل الله سيدنا موسى إلى الخضر ، وسيدنا موسى عند الله من أولي العزم من الرسل وهو أعلى درجة ومرتبة ، وأرسله الله ليتعلم من سيدنا الخضر فقد كان سيدنا الخضر لا يحمل شهادة النبوة ولكن الله فتح عليه بعلم لا يعلمه سيدنا موسى.

    هل إذا أردت التعامل مع شخص مثلا ليقوم ببرمجة برنامج أو موقع ، هل تذهب للشخص ذا الخبرة ولو لم يكن ذا شهادة ، أم تذهب لمهندس ذا شهادة ولو لم يكن يفقه في برمجة الموقع أو البرنامج ؟.

    السؤال هنا واضح والهدف منه حث المهندسين على العمل وعدم النوم والإعتماد كليا على الدراسة الجامعية.، بل والتصديق بأن بواسطة الشهادة الجامعية والعلم الجامعي القليل أمسوا لا أحد يلحق بهم.
    ولكن كيف تعرف نفسك أنك مهندس أو مبرمج ؟.

    لا أريد أن يكون رأي ساذج من وجهة نظركم ، ولكنني بعد ملاحظات عديدة عرفت من هو المهندس، والأمر يعتمد على تطبيق منطق الهندسة في الحياة العملية ، فاستعدوا للمفاجأة
    مهندس الحاسوب هو الشخص الذي يضغط الملفات !!!!!!!!!!.

    نعم هو الشخص الذي عندما يرسل لك ملف عبر البريد حجمه 4 ميغا ، يقوم بضغطه وإرساله ليصبح حجمه 200 كيلو.
    هو الشخص الذي يرسل 10 آلاف ملف على ذاكرة الفلاش ويعمل لها ضغط تخزين ، ولا يرسلها كما هي حتى لا يبقى ينسخ بها ساعات.
    المقصد هو أن مهندس الحاسوب يعرف هذه الأولويات والبديهيات، مثلا كأن تقول لي مهندس حاسوب لا يعرف برامج الضغط أو برامج الحاسوب ، هو مهندس فقط يفهم في تصميم الدوائر الكهربائية في وحدة الحساب والمنطق في وحدة المعالجة المركزية ( على مين هالفيلم هذا ، ما تحسسني إنك مصدقه ) .

    مرة أخرى ما أقصده هو أن مهندس الحاسوب الذي لا يعرف كيف يستخدم الحاسوب ليس بمهندس حاسوب، ولا تقل لي أنا محترف برمجة على الدوس، أو مهندس متفهم جدا في أمن وحماية المعلومات عبر الإنترنت وأنت لم تفتح إنترنت طوال حياتك، أو تخبر الناس بأنك قد حصلت في مادة الذكاء الصناعي أو قواعد البيانات على درجة 99 % وأنت لم تفتح في حياتك قاعدة بيانات ولا تعرف لماذا تستخدم.

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

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

    مصفوفة تقوم بتقسيم النص الأساسي إلى عناصر حسب الفاصل بين البنود الأساسية ( مثلا سطر جديد )
    تقوم بعمل تكرار على المصفوفة
    تقوم بإضافة البادئة على كل عنصر من المصفوفة
    تقوم بربط عناصر المصفوفة مرة أخرى بواسة سطر جديد وتخرجه في نص ، أو في الخطوة السابقة تخزن المخرجات في متغير نصي وليس في عناصر المصفوفة
    العملية لم تستغرق 5 دقائق ، ولكنك استخدمت علمك في حل مشكلتك، إذا فعلت هذا مرة في حياتك فأنت – في نظري – مبرمج من الدرجة الأولى في لغتك.

    وهذا يدعو إلى نوع من التواضع ، فلا تقل أبدأ أنني قد ختمت العلم ، أو وصلت لدرجة الاحتراف أو التي لا يلحقني أحد بها ، فدائما في مجالك البرمجي أو الهندسي عليك أن تطور نفسك وتحدثها، وألا تعتبر غيرك أنهم دونك.

  • نظرة سريعة على فيجوال ستوديو 2011 النسخة التجريبية

    عرض سريع للجديد في الفيجوال ستوديو 2011 ، اعذرونا على التقصير بسبب الكهرباء