السلام عليكم ورحمة الله وبركاته
نقدم لكم سلسلة ماذا تعرف السيو والتي سوف تكون مكونة من مجموعة من الدروس والمقالات المختارة والتي سوف نتعاون انا واخي dr.seo
على وضعها (المزيد…)
Blog
-
سلسلة ماذا تعرف عن سيو ؟
-
حتى لا تطرد من جوجل
بسم الله الرحمن الرحيم
متابعة لسلسة الدروس لاتقان تقنية السيو وكمان وعدتكم في الدرس السابق اليوم سوف نقوم بمعرفة كيف تتفادى الطرد من جوجل وقد رايت في العديد من المنتديات العربية والاجنبية ان الكثير من الناس الجدد في السيو قد عانو من هذه المشكلة وان موقعهم تم حذفه من جوجل (المزيد…)
-
الترفيك ليس كل شيء حدد هدفك
السلام عليكم ورحمة الله وبركاته لو كان لديك محل والاف الزبائن يدخلون له يوميا لاكن دون فائدة فلا احد يشتري منك او ينظر الى ما تقدمه ما الفائدة منه. هذا بالضبط ما يحدث عندما تهتم بالترفيك للموقع وجلب الزوار له دون النظر لما هو هدفك الرئيسىي للموقع هل حددته مسبقاً.
الكثير من الناس ترتكب اخطاء بجلب الزوار دون تحديد هدف للموقع لذا يجب عليك تحويل وتوجيه هذا الترفيك للهدف الذي تسعى لتحقيقه .
الان لو كان الهدف من موقعك هو جلب الارباح من الاعلانات مثل جوجل ادسنس يتوجب عليك وضعها في اماكن اكثر وضوحا لزائر او ضمن مقالاتك بشكل تظهر على انها جزء من المقال تحت يتسنى لك كسب اكبر قدر من النقرات . اما اذا كان الهدف من الموقع هو بيع منتج خاص بك اذا يجب عليك وضعه في اماكن تلفت انتباه الزائر منها اعلى الصفحة و اماكن كتابة المقالات الخاصة بك .
لاكن في ايامنا هذه قد كثرت المواقع التي تعرض منتجاتها و ينتج عن هذا ان معظم الزوار لن تقم بشراء سلعتك في اول مرة يقوم بها بزيارة موقعك. امر مهم يجب ان تاخذه بعين الاعتبار وهو ان تقوم بوضع قائمة بريدية تطلب من الزائر ان يقوم بالاشتراك بها حتى وان لم يقوم بشراء المنتج من اول مرة سوف يكون لك طريقة للاتصال معه ومتابعته .
الشيء الاهم في هذه النقطة ان تقوم باقناع الزائر بمتنجك واعطاءه الامان لاننا كما نعلم ان الزائر لن ولم يقوم بشراء اي منتج من مصدر غير موثوق به .
اذا عندما تفكر بجب الزوار قم بالاخذ بعين الاعتبار الهدف الرئيسي لموقع ومن ثم انطلق …. -
صورة تظهر حجم استهلاك التحميل لعام 2010
أترككم مع الصورة ، فهي كافية معبرة وللعم حجم التحميل زاد عن 9 زيتا بايت ، وفي الصورة توضيح للزيتابايت

-
تغطية معرض اكسبوتك Xpotech
قام فريق موقع عالم التطوير ، بتغطية معرض اكسبوتك السنوي ، الذي يقام في مركز رشاد الشوا .
حيث يقدم المعرض إعلانات الشركات التقنية ، في مجال البرمجة والتدريب ، والجديد في التكنولوجيا ،كالمعتاد لا جديد في المعرض إلا شركة واحدة وهي شركة teletalk حيث وضعت لأول مرة خدمة إضافة إعلانات جوجل والفيس بوك للعملاء ، قد تكون لنا سهلة ، ولكن للبعض صعبة .
قد ترون أن هذا ليس بجديد ولكن حسب معرض اكسبوتك ، فإنه كل عام يتم تكرار نفس الشركات ونفس العروض ، وأصبح الأمر كأنه معرض للدورات والأسعارقمنا بوضع 10 صور فقط ، والباقي في الملف اسفل الصور للتحميل
الصور حجمها كبير نسبيا
-
www.google.ps للأراضي الفلسطينية
استيقظت هذا الصباح وكالمعتاد فتحت جوجل لأبحث به وإذا بي أرى ( جوجل الأراضي الفلسطينية ) ، فركت عيناي وفتحت الموقع مرة أخرى وقمت بالبحث والتأكد من الموقع ، وفعلا جوجل الأراضي الفلسطينية.
مبارك لنا أهل فلسطين هذه الخطوة، ومنها للأعلى منها ، منها إلى بناء مجتمع جوجلنا الخاص. -
حل مشكلة IpOverUsbSvc في الويندوز فون
في أحيان كثيرة عند وصل هاتفك الويندوز فون بالويندوز، تظهر رسالة Windows Phone IP Over USB Transport(IpOverUsbSvc) service is running ، وهذا حل المشكلة ، وهو بسيط .
المشكلة خلاصتها أن الخدمة المسؤولة عن إعطاء الويندوز فون أي بي للاتصال به كأنه على
شبكة معطلة.والحل يجب تفعيل هذه الخدمة
يجب عليك الذهب إلى الخدمات الموجودة في إدارة جهاز الكمبيوتر ، وتفعيل الخدمة أو إعادة تشغيلها حسب حالتها
بالتوفيق -
صدور حزمة تطوير وندوز فون لشهر يناير
صدور حزمة تطوير وندوز فون لشهر يناير
أصدرت اليوم مايكروسوفت تحديث لحزمة تطوير وندوز فون 7 الموعودة لشهر يناير، والتي ستدعم بالدرجة الأولى خاصية النسخ واللصق والعديد من التحسينات على النظام.
البرامج الموجودة حاليا على متجر التطبيقات ستستمر بالعمل حتى رغم صدور هذا التحديث، ومن يرغب بالمطورين بتحديث برامجه فلا بأس في هذا،
مع العلم أن البرامج القديمة لا يتوجب أن ان يتم تحديثها لتدعم التحسينات أو الإضافات الجديدة كالنسخ واللصق، فهذه المزايا ستتوفر تلقائيا على نظام التشغيل على الهاتف، وبالتالي البرامج الموجودة ستدعمها ( كم أحب مايكروسوفت )،
وقد تضمنت النسخة إضافة ميزة- النسخ واللصق.
- تحسينات وإصلاحات .
- تحديث المحاكي لتظهر به الخصائص الجديدة كالنسخ واللصق مثلا.
- تحديث خرائط بنج Bing Maps
- تضمين تحديثات شهر أكتوبر في هذا الإصدار.
يمكن تحميل التحديث الجديد عبر هذا الرابط Windows Phone Developer Tools January 2011 Update
-
شاشة تقديمية (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 انه يمكنك استخدامها في مواضع عدة ، حيث ستعطي برنامجك تأثيرا جميلا، على سبيل المثال يمكن ان تستخدمها لإظهار معلومات حول برنامجك ويمكن أن تخفيها عند ضغط المستخدم عليها... وغيرها الكثير فهذا الأمر سيعتمد على احتياجات البرنامج لديك ، وأنا سأترك لك حرية التفكير والابداع