FlexBlog

دریافته‌های من از دنیای Flex و Flash

نسخه جدید whiteboard و مشکل path ها در Degrafa

خیلی وقت پیش نسخه‌ی اولیه‌ی whiteboard را برای استفاده در کلاس آنلاین با استفاده از امکانات کلاس Graphics از ActionScript نوشتم. کار نسبتاً خوبی از آب در آمده بود. امّا مشکلاتی هم داشت.

دو سه ماه پیش با Degrafa آشنا شدم و در این مدّت از امکانات آن برای طراحی skin های جدید و component هایی با ظاهر غیر Flexی ( آخه دیگه از قیافه‌ی ساده‌ی Componentهای Flex حالم به هم می‌خوره :دی) بسیار کار کردم و لذت فراوان بردم. امّا چند روز پیش به ذهنم رسید از degrafa برای ساختن سریع و کارامد یک whiteboard جدید هم می‌توان استفاده کرد. ضمن گشتی که در اینترنت زدم به این مثال رسیدم که به‌صورت کد باز عرضه شده‌ بود. با استفاده از کلاسهای آن و extend کردن آن برای رسم path به سوی یک whiteboard پیش رفتم.

برای این کار نیاز به update کردن مقدار data برای یک path (در Degrafa) داشتم. وقتی به طور معمولی مقدار یک String را (که dataی path به آن bind شده بود) تغییر می‌دادم cpu usage بسیار بالا می‌رفت. با جستجو در degrafa group به این صفحه رسیدم. البته مشکل مطرح شده در این صفحه چیز دیگری بود امّا راه حل ارائه شده مشکل من را هم حل کرد. راه حل ساده بود : مقدار dataی path را از حالت Bindable درآوردم و آن را به صورت دستی هر وقت نیاز بود set کردم امّا قبل از set کردن آن، مقدار segments را برای path به [ ] تغییر دادم.

ColourLovers

امروز یه سایت بسیار زیبا و کارا برای پیدا کردن و ساختن ایده های رنگی، palletهای رنگ و patternها پیدا کردم:

http://www.colourlovers.com

البته در مورد theme رنگی سایت Adobe Kuler رو ترجیح میدم اما در مورد patternها این سایت قوی کار کرده.

یه گشتی توی سایت زدم و از یکی از لینکهای وبلاگش به این ابزار ساده اما پرکاربرد رسیدم. با استفاده از این ابزار میشه دوتا رنگ رو با هم blend کرد.

module ها در flex

Module ها فایلهای swf ی هستند که برنامه اصلی می تواند آنها را load یا unload کند. Module ها به تنهایی قابل اجرا نیستند. Module ها این امکان را می دهند که برنامه را به بخش های مجزا تقسیم کنیم: هسته اصلی و تعدادی module که می توانند بنا به کاربرد به هسته اصلی اضافه شوند و پس از اتمام کار، حذف شوند. با استفاده از module ها دیگر لازم نیست همه ی قسمت ها در هنگام load شدن برنامه اصلی load شوند، یا لازم نیست قسمتهایی که کاربر به آنها نیاز ندارد load شوند.
مزایای برنامه های modular را می توان اینگونه بیان کرد :

  • حجم کمتر download اولیه ی فایل swf
  • در نتیجه زمان load کوتاهتر.
  • Encapsulation بهتر جنبه های مختلف برنامه

با این رویکرد، یک برنامه می تواند در زمان اجرا یک کد را load کند و نمونه ای از classی را ایجاد کند که کد آن به برنامه متصل نشده است. Module ها شبیه RSL ها (Runtime Shared Libraries) هستند اما از آنها انعطاف بیشتری دارند زیرا می توانند در زمان اجرا load و unload شوند و می توانند جدای از برنامه اصلی compile شوند.
دو سناریوی مختلف در زمینه ی استفاده از module ها وجود دارد:

  • یک برنامه ی بزرگ که کاربران در آن خط سیر های مختلفی دارند، مثلاً یک برنامه برای یک شرکت بیمه ای که خدمات مختلفی را ارائه می کند. با توجه به حجم بالای خدمات، یک کاربر که برای سفارش دادن بیمه آتش سوزی به سایت مراجعه می کند باید منتظر بماند که برنامه ی مربوط به همه ی بیمه ها load شود.
  • یک برنامه ی portal که از  portlet های مختلفی تشکیل شده است. در واقع portal مجموعه ای از خدمات است که کاربران مختلف بر حسب تقاضا، زیرمجموعه ای از این خدمات را مورد استفاده قرار می دهند. می توان در یک فایل xml که برای هر کاربر load می شود اطلاعات مربوط به module های درخواستی کاربر را دریافت کرد و در زمان اجرا آن module ها را load کرد.

با استفاده از module ها می توان این دسته از برنامه ها را کارامدتر نوشت که این کارامدی هم از جنبه ی کاربر است و هم از جنبه ی زمان برنامه نویسی ( برنامه نویس با تغییر یک جزء نیازی ندارد که کل برنامه را دوباره compile کند).

Module API
Module ها یک class factory را implement می کنند که یک interface استاندارد دارد. حاصل این class factory یک class است که یک interface را implement می کند که Shell آن را می شناسد. به وسیله ی این interface مورد توافق دوطرف (module و shell) می توان وابستگی دو طرف را کاهش داد و یک لایه ی abstract را بدون افزایش حجم فایل ایجاد کرد. شکل زیر این روابط را نشان می دهد:

ModuleManager ، ماجول های load شده را مدیریت می کند. Load کردن یک module باعث ایجاد یک سری event می شود که به load کنندگان module این امکان را می دهد که وضعیت module را مانیتور کنند.  استفاده کننده، به محض دریافت رویداد READY می توانند مطمئن باشند که module factory برای استفاده آماده است.
ModleLoader یک لایه ی نازک بر روی ModuleManager است که مانند mx.controls.SWFLoader است اما ModuleManager کنترل بیشتری روی module ها دارد.

Mashups!

امروز خواندن کتاب Creating Mashups with Adobe Flex and AIR را شروع کردم. مدتها بود که در محیط کار نیاز به فراگیری این موضوع داشتم. در واقع mashup استفاده از برنامه های آماده و تجمیع آنها در یک محیط برای استفاده ی خاص است. مفهوم mashup مفهومی گسترده است و شامل استفاده از RSS ها، API های آماده (مانند API های Google، Yahoo، Filckr و …) و همچنین استفاده از webService ها می شود. شاید بتوان فلسفه ی استفاده از مفهوم mashup را در این جمله ی Vint Cerf از google دید :

We don’t have a corner on creativity. There are creative people around the
world, hundreds of millions of them, and they are going to think of things to
do with our basic platform that we didn’t think of. So the mashup stuff is a
wonderful way of allowing people to find new ways of applying the basic
infrastructures we’re propagating.

این از لینک کتاب :

این هم لینک نویسندگان کتاب :

http://sourcebottle.net/

http://david.realeyes.com/

http://john.realeyes.com/

در کل خواندن کتابهای FriendsofED رو شدیداً توصیه می کنم. :دی

ضبط وقایع رخ داده در یک برنامه Media Server

امروز کار بر روی ضبط کلاس آنلاین را شروع کردم. امکان جالب کلاس Stream در سمت Server این است که می توان همراه با صدا و تصویر کاربران، وقایع رخ داده را نیز به صورت فراخوانی متدهای سمت client ذخیره کرد. یعنی خروجی ضبط شده‌ی یک کلاس آنلاین به صورت یک فایل flv بر روی Flash Media Server ذخیره می‌شود و کاربران می‌توانند با اتصال به server و play کردن این فایل flv همه‌ی آن چیزهایی را که در کلاس اتفاق افتاده با حجم بسیار کم و کیفیتی عیناً نظیر خود کلاس آنلاین مشاهده کنند.

برای این کار در سمت server با فراخوانی Stream.get یک نمونه از کلاس Stream ایجاد می‌کنیم (به اسم مثلاً logStream) سپس متد record را از آن اجرا می‌کنیم. (با آرگومان خالی یا record) نکته‌ی مهم این است که اگر stream باز شده را نبندیم همه‌ی اطلاعات ضبط شده از بین می‌رود. پس هنگام اتمام ضبط کردن، متد record را با آرگومان false فراخوانی می‌کنیم. در این صورت فایلی به اسم مثلاً log (آرگومان رشته‌ای Stream.get) در شاخه‌ی application/yourapp/streams/instanceName ذخیره خواهد شد و کاربران با play کردن آن قادر به مشاهده‌ی کلاس خواهند بود.

ویدئو با کانال alpha در flash

با استفاده از تکنیک “صفحه آبی” می توانیم یک فیلم را تهیه کنیم و در premier یا After Effect رنگ آبی را از ویدئو حذف کنیم و از آن خروجی flv با کانال alpha بگیریم. سپس در flash یا flex از آن استفاده کنیم. این لینک در youtube نحوه‌ی این کار را نشان می‌دهد. (البته من در premiere امتحان کردم و جواب نداد. اما با After Effect مشکل حل شد)

پ.ن: لینک یک مطلب در مورد حذف زمینه یک ویدئوی زنده با استفاده از ActionScript

راهکار جدید برای اجرای screen sharing

امروز ضمن گشت زدن در گوگل برای پیدا کردن راهی برای استفاده از فایل screenshare.dll که بر روی Flash Media Server قرار دارد به این نتیجه رسیدم که شاید بتوان از یک برنامه VNC یا Virtual Network Computing برای این کار استفاده کرد. اگر این کار عملی بشود علاوه بر screen sharing به قابلیت application sharing هم (همانطور که در Breez بود) دست یافت. باید بیشتر در این زمینه کار کرد.
لینک ویکی پدیا برای VNC
با استفاده از نرم افزار RealVNC از این سایت  می توان client و server آن را نصب کرد