2008/06/25

‫یک ایده برای تست متون فارسی کامپیوتری در مورد حروف یونیکد غیر فارسی مثل «ي» و «ك»

یک صفحه وب ساده بنویسم که کاربر به آن مراجعه کرده و یک متن فارسی را در آن تایپ کند.صفحه وب هم کاراکترهای ی و کاف آن را بررسی کرده و بگوید که آیا متن وارد شده فارسی کامل (یونیکد) است یا اینکه به دلیل استفاده از سیستم عامل و کیبرد غیر یونیکد مشکل دارد. این صفحه ساده و کم خرج می‌تواند کمک خوبی جهت پیشرفت فارسی استاندارد در وب دانست. حتی می‌توان این سرویس را به صورت ایمیلی یا تویتری یا حتی یاهو مسنجری هم استفاده کرد! البته قبل از نوشتن این صفحه باید مطلع بشوم که آیا چنین چیزی از قبل در اینترنت وجود دارد یا نه؟




2008/06/24

‫SQL Recursive Queries به راحتي آب خوردن

مدت‌ها بود كه كار يكي از گزارشاتم لنگ يك كوئري ريكرسيو (اس كيو ال) بود و من از ترس پيچيدگي زيادش جرات نداشتم بهش نزديك بشم. ولي فشار مشتري منو مجبور كرد كه اين كار رو بكنم. موثق‌ترين منبع در اينترنت براي انجام اين كار مقاله‌اي در ام اس دي ان به نام Recursive Queries Using Common Table Expressions در اين آدرس. اين مقاله با كمك مفهوم common table expression سعي دارد يك كوئري ريكرسيو بنويسد. مقاله خيلي خوب است ولي نياز من خيلي ساده‌تر از اين بود. من فقط مي‌خواستم از يك جدول كه يك ساختار درختي را در خود نگه مي‌داشت و شامل يك كليد به خودش بود اطلاعات ساده‌اي مثل بالاترين parent را استخراج كنم. خوشبختانه يكي از همكاران بنده قبلا روي چنين موضوعي كار كرده و يك Stored Procedure براي اين كار نوشته بود. من هم با كمك اين sp يك User Defined Function نوشتم كه مشابه توابع ريكرسيو معمولي در كدهاي سي‌شارپ و غيره عمل مي‌كرد. در واقع اصل قضيه اين بود كه مقاله اشاره شده در بالا سعي مي‌كند در داخل خود كوئري منطق ريكرسيو بودن را بگنجاند و اگر از SQL User Defined Function‌ها استفاده شود راه حل فوق العاده ساده مي‌شود. در ادامه تابع
ريكرسيو ما را ببينيد:

CREATE FUNCTION [dbo].[GetParentID](@Id bigint)RETURNS bigintASBEGIN--تابعي براي پيدا کردن گروه مادر يک گروه دارايي--recursive query idea by Ghane--http://faraconesh.net:8080/browse/IRISL-386--usage: select id, dbo.GetParentID(id) as 'GetParentID',Parent_id_fk,* from Asset_AssetGroup
declare @parentId bigint Select @parentId = Parent_id_fk From Asset_AssetGroup Where ID = @Id
If (@parentId Is Null) RETURN @Id else RETURN dbo.GetParentID(@parentId)
--following RETURN never be ranRETURN -1END