۱۳۸۹/۰۱/۱۱

YVD


يك GUI مختصر و مفيد براي كتابخانه سورس باز "دريافت فايل از يوتيوب" درست كردم كه از آدرس زير قابل دريافت است:



دريافت ، 115 KB
پيشنياز براي اجرا: دات نت فريم ورك سه و نيم (اگر از ويندوز 7 استفاده مي‌كنيد، به صورت پيش فرض نصب است).


به روز رساني

  • نگارش 0.2 جهت سازگاري با الگوي جديد يوتيوب، دريافت
  • نگارش 0.3 به همراه اضافه شدن پيش نمايش، سعي مجدد و ... ، دريافت
  • نگارش 0.4 جهت سازگاري با الگوي جديد ... ، دريافت

۱۳۸۹/۰۱/۰۱

دريافت فايل از يوتيوب


سلام

سال نو مبارك! به اميد سالي بهتر از پارسال!

اين روزها با هزينه‌‌اي معادل هزينه‌ي تهيه‌ي يك هاست اشتراكي ساليانه براي بالاگذاري يك سايت معمولي در 5 سال قبل، مي‌توان يك VPS تهيه كرد و به اين صورت قفل و كليد يك نيمچه سرور را (با 200 و خرده‌اي مگ رم، 30 گيگ فضا، سرعت CPU نزديك به 700 MHz و ويندوز سرور 2003 يا 2008) در اختيار شما قرار مي‌دهند (البته به قول معروف هر چقدر پول بدهيد همانقدر هم سخت افزار در اختيار شما قرار مي‌دهند) بجاي صرفا يك دايركتوري مجازي محدود با 100 مگ فضاي هاست كه هر احدي در آن هاست اشتراكي مي‌تواند سر مبارك را اندكي چرخانده و تمام زندگي شما را مرور كند و غيره!
استفاده‌ي مفيدي هم كه اين VPS براي من داشته، ترنس لود كردن يك سري فايل است (با توجه به سرعت‌هاي نجومي دريافت فايل اين سرورها). براي مثال دريافت فايل از يوتيوب و انتقال به يك هاست ديگر براي دريافت ساده‌تر خودم و يا ديگران.
براي نمونه سايت dotnet-tv.com را در نظر بگيريد. تعدادي از ويديوهاي اين سايت در يوتيوب هاست شده و از اين دست زياد هستند. خيلي‌ها براي فرار از مشكلات كمبود پهناي باند از يوتيوب استفاده مي‌كنند. يوتيوب هم كه از اين طرف بسته است. خوب، من الان مي‌خواهم ويديوي مربوط به ASP.Net MVC آن را مشاهده كنم، چكار بايد كرد؟!
يك برنامه‌ي ساده‌ي كنسول را تهيه كرده‌ام كه اين كار را براي VPS‌ داران تسهيل مي‌كند.
- دريافت فايل از يوتيوب
- آپلود خودكار آن به رپيدشير


يك نمونه خروجي آن: (فايل‌هاي يوتيوب سايت ذكر شده كه به رپيدشير منتقل شده)
دريافت

در سورس اين برنامه موارد زير پياده سازي شده است:
- يافتن لينك‌هاي يوتيوب سايت dotnet-tv.com با استفاده از regular expressions
- يافتن لينك دانلود مستقيم اين فايل‌ها از سايت يوتيوب كه شامل استفاده از regular expressions براي استخراج قسمت‌هاي مفيد از صفحات و همچنين استفاده از امكانات Json دات نت فريم ورك سه و نيم براي parse قسمت‌هاي استخراج شده است.
- ايجاد يك thread pool سفارشي كه هر بار 7 لينك مستقيم را به صورت همزمان از يوتيوب دريافت مي‌كند. (thread pool پيش فرض دات نت تمام تردها را به يكباره شروع مي‌كند كه براي اينكار مفيد نيست. به همين جهت از اين thread pool سفارشي شده استفاده شد)
پيش فرض فايلي كه از سايت يوتيوب دريافت مي‌شود MP4 با كيفيت بالا است كه با fmt=18 در فايل Youtube.cs مشخص شده. فرمت‌هاي ديگر را مي‌توانيد از اين فايل ايده بگيريد.
- آپلود فايل دريافتي از يوتيوب به يك اكانت رايگان كالكتور در رپيدشير. (ماخذ اين مورد در سايت code projects)
مشخصات اين اكانت رايگان كالكتور در فايل app.config بايد ذكر شود.

اين سورس مي‌تونه ايده‌ي ابتدايي بسياري از كارهاي مشابه باشد. براي مثال ايجاد يك وب سرويس، يك وب سايت، يك سرويس ايميلي و غيره.



پ.ن.
كار انجام شده فعاليت وارز محسوب نمي‌شود زيرا مجوز ويديوهاي سايت يوتيوب اين امكان توزيع (و بسياري موارد ديگر) را به شما مي‌دهد.

۱۳۸۸/۱۲/۲۷

سه مطلب كوتاه


مشكل فايرفاكس با سايت‌هاي msdn و codeplex
هر از چند گاهي در بلاگ‌هاي msdn و يا سايت codeplex با خطاي زير از طرف سايت مواجه مي‌شوم:

Bad Request - Request Too Long
HTTP Error 400. The size of the request headers is too long.

اگر با اين مشكل مواجه شديد، تمامي كوكي‌هاي مربوط به سايت‌هاي مذكور را يافته و حذف كنيد.
به نظر باگي در فايرفاكس در اين زمينه سبب مي‌شود كه كوكي‌هاي تمام زير سايت‌هاي فوق با هم تركيب شده و رشته‌ا‌ي بسيار طولاني بجاي كوكي اصلي آن زير سايت به هاست ارسال شود.
كه البته عكس العمل سايت‌هاي مايكروسافت از ديدگاه امنيتي هم جالب توجه است (براي برنامه نويس‌هاي وب).


IE8 و ارائه‌ي fakepath بجاي آدرس فايل
كنترل استاندارد آپلود فايل در مرورگرهاي جديد، ديگر آدرس محلي فايل را حتي در اختيار اسكريپت‌هاي سمت كاربر نيز قرار نمي‌دهند. فايرفاكس مدت زيادي است كه اين مورد را پياده سازي كرده. اما IE بجاي اينكه يك رشته‌ي خالي را بازگشت دهد مسير c:\fakepath را ارائه خواهد داد (fakepath جزو استاندارد html 5 است). اگر احيانا با اين مورد برخورد داشتيد، با استفاده از تنظيم زير مي‌توان مانند سابق مسير كامل را نيز دريافت كرد:

Internet Explorer -> Tools -> Internet Option -> Security -> Custom ->
find the "Include local directory path when uploading files to a server"
-> click on "Enable"

اهميت اين مورد هم براي من اين است كه IE، يعني همان مرورگر كاري در اكثر شركت‌ها (و اين مورد فوق را به سادگي از طريق گروپ پاليسي مي‌توان به تمام كامپيوترها اعمال كرد).

علت تايم آوت و باز نشدن يك سري از سايت‌ها در ايران
مدت زيادي اين سؤال براي من وجود داشت كه وجه مشترك سايت‌هايي مانند dotnetkicks.com ، summerofnhibernate.com ، lessthandot.com و امثال آن چيست كه از اين طرف باز نمي‌شوند؟
اگر به آدرس‌هاي فوق كه به سايت domaintools.com ختم مي‌شوند، مراجعه كنيد و سپس برگه‌ي Server Stats آن‌ها را ملاحظه نمائيد، همگي توسط Godaddy.com Inc هاست مي‌شوند. اين شركت غيرمحترم، IP هاي ايراني را بسته است (مطلب جديدي هم نيست).

۱۳۸۸/۱۲/۱۴

خلاصه‌اي كاربردي در مورد Observable collection


Observable collection در WPF را مي‌توان نوعي ليست جنريك ويژه تعريف كرد كه زمانيكه به كنترلي بايند شد، كنترل را از تغييرات خودش آگاه مي‌كند. براي مثال اگر آيتمي به اين ليست اضافه شد بلافاصله آن آيتم را در كنترل مقيد به آن نيز خواهيد ديد، به همين ترتيب در مورد ويرايش و يا حذف يك آيتم، بدون نياز به كوچكترين تماسي با كنترل مورد نظر. براي مثال اگر مقدار يك خاصيت را تغيير داديد، بلافاصله بدون اينكه به كنترل مقيد به آن اعلام كنيم كه لطفا اين مورد ويژه را براي من تغيير بده، شاهد نتيجه‌ي نهايي خواهيم بود.



اما استفاده‌ي پيشرفته از اين ليست جنريك ويژه به همينجا ختم نشده و حين اضافه كردن كمي پيچيدگي به برنامه مشكلات عديده‌اي بروز مي‌كنند كه آن‌ها را جهت دسترسي ساده‌ي بعدي در زير ليست مي‌كنم:

الف) اصلا Observable collection چيست؟ چكار مي‌كند؟
List vs ObservableCollection vs INotifyPropertyChanged in Silverlight

ب) نمي‌توانم از اين مجموعه‌ي اشياي خودآگاه سازنده در يك ترد استفاده كنم. مشكل كجاست؟
اين روزها نمي‌توان يك برنامه‌ي دسكتاپ خوب را بدون استفاده از تردها متصور شد. اما به محض سعي در به روز رساني اين ليست جنريك در يك ترد ديگر (ترد ديگر منظور هر تردي بجز ترد اصلي برنامه است كه كار مديريت رابط كاربر را به عهده دارد) خطاي زير ظاهر مي‌شود:
This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread

راه حل:
Adding to an ObservableCollection from a background thread

ج) يكي از خاصيت‌هاي يك شيء اين ليست جنريك ويژه را تغيير داده‌ام. اما هيچ تغييري در كنترل بايند شده به آن مشاهده نمي‌كنم. مشكل در كجاست؟
راه حل: پياده سازي اينترفيس INotifyPropertyChanged را فراموش كرده‌ايد:
Data Binding in WPF with the Monostate Pattern

د) خوب، اين كه خيلي دردسر دارد! راه ساده‌تري براي تعريف اين موارد نيست؟!
هوشمندانه‌ترين روشي كه براي حل اين مساله تابحال ديده‌ام:
An easier way to manage INotifyPropertyChanged

ه) زمانيكه اين يك ليست جنريك خودآگاه سازنده را به يك مثلا listview بايند مي‌كنم، ديگر نمي‌توانم با استفاده از متد clear items آن كنترل، نسبت به خالي كردن نماي ظاهري آن اقدام كنم. چكار بايد كرد؟
خطاي مشاهده شده:
Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead

راه حل:
همان Observable collection اصلي را تخليه كنيد، UI به صورت خودكار به روز خواهد شد.

و) اضافه كردن رنجي از اطلاعات به آن به صورتي يكباره ممكن است كند باشد. چه بايد كرد؟
راه حل:
AddRange for ObservableCollection in Silverlight 3


۱۳۸۸/۱۲/۱۰

ارتقاء از WinForms به WPF


اگر مدت‌ها كارتان برنامه نويسي WinForms بوده و اكنون احساس كرده‌ايد كه ديگر WinForms آنچنان توسعه و بسط نخواهد يافت و اكنون WPF تبديل به انتخاب اصلي شركت‌هاي بزرگ شده است و همچنين از پرسه زدن در فوروم‌هاي وارز جهت يافتن فلان كامپوننت خاص براي زيباسازي ظاهر برنامه‌هاي خود خسته شده‌ايد و نياز به معادل بهتري كه اساسا در جهت حذف اين بازار سياه تهيه شده است، احساس مي‌كنيد، بهترين گزينه‌ي موجود WPF خواهد بود كه با كمي دقت، مي‌توان پروژه‌هاي آن‌را تبديل به پروژه‌هاي وب نيز نمود. مطلب 54 صفحه‌اي ذيل، خلاصه‌ي كاربردي سريعي را جهت ارتقاء برنامه نويس‌هاي WinForms به WPF ارائه مي‌دهد:



ماخذ: +