مدیریت اسلامی ( تعهد یا تخصص )
( 153)
امام علی (ع)در نامه خود به برخی از استاندارانش می فرمود: قلمهای خودرانازک بتراشیدو سطرها را به هم نزدیک کنید و زیادی کلمات را حذف کنید و در آوردن معانی صرفه جویی کنید و از زیاده روی بپرهیزید که اموال مسلمین تاب و تحمل زیاده روی را ندارد .( سایت احادیث از امام علی « ع » )
از شهید چمران پرسیدند ؛ تعهد بهتر است یا تخصص؟
گفت : می گویند تقوا از تخصص لازمتر است، آن را می پذیرم، اما می گویم آن کس که تخصص ندارد و کاری را می پذیرد بی تقواست.
با توجه به آنچه تاکنون آموخته وشنیده شده است ، « مدیریت اسلامی » بر چند پایه واصول استوار است....
.... براین اساس تصمیم گرفته شده مطالبی را که حجة الاسلام قرائتی تحت عنوان « 300 نکته در مدیریت اسلامی » تنظیم وتألیف نموده اند جهت استفاده هرچه بهتر بزرگواران به ترتیب در این وبلاگ درج نمایم. امید است مورد استفاده قرار گیرد. کریم عاملی
کیفیت کار
لِنَبْلُوَهُمْ أَیهُمْ أَحْسَنُ عَمَلاً (کهف، 7)
ما انسانها را میآزماییم تا مشخص شود، که کدامشان بهتر و نیکوتر عمل میکنند.
153.آنچه که باید در سازمان، در مورد عملکرد افراد، معیار و اصل باشد، کیفیت و بازدهی کار آنهاست، نه مقدار و کمّیت آن.
ادامه مطلب
درگیر شدن با سایتهای دیگر که چرا مطالب ما را کپی کردهاید نهایتا بجز فرسایش عصبی حاصل دیگری را به همراه ندارد.اساسا زمانیکه مطلبی را به صورت باز در اینترنت انتشار میدهید، قید کپی شدن یا نشدن آنرا باید زد. اما ...میتوان همین سایتها را تبدیل به تبلیغ کنندههای رایگان کار خود نمود که در ادامه نحوه انجام آن را در یک برنامه ASP.NET MVC بررسی خواهیم کرد:
الف) نیاز است ارائه تصاویر تحت کنترل برنامه باشند.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
using System.IO; using System.Net.Mime; using System.Web.Mvc; namespace MvcWatermark.Controllers { public class HomeController : Controller { const int ADay = 86400; public ActionResult Index() { return View(); } [OutputCache(VaryByParam = "fileName" , Duration = ADay)] public ActionResult Image( string fileName) { fileName = Path.GetFileName(fileName); // تمیز سازی امنیتی است var rootPath = Server.MapPath( "~/App_Data/Images" ); var path = Path.Combine(rootPath, fileName); if (!System.IO.File.Exists(path)) { var notFoundImage = "notFound.png" ; path = Path.Combine(rootPath, notFoundImage); return File(path, MediaTypeNames.Image.Gif, notFoundImage); } return File(path, MediaTypeNames.Image.Gif, fileName); } } } |
در اینجا یک کنترلر را مشاهده میکنید که در اکشن متد Image آن، نام یک فایل دریافت شده و سپس این نام در پوشه App_Data/Images جستجو گردیده و نهایتا در مرورگر کاربر Flush میشود. از آنجائیکه الزامی ندارد fileName، واقعا یک fileName صحیح باشد، نیاز است توسط متد استاندارد Path.GetFileName این نام دریافتی اندکی تمیز شده و سپس مورد استفاده قرار گیرد. همچنین جهت کاهش بار سرور، از یک OutputCache به مدت یک روز نیز استفاده گردیده است.
نحوه استفاده از این اکشن متد نیز به نحو زیر است:
1
|
|
ب) آیا فراخوان تصویر ما را مستقیما در سایت خودش قرار داده است؟
1
2
3
4
5
6
7
8
9
|
private bool isEmbeddedIntoAnotherDomain { get { return this .HttpContext.Request.UrlReferrer != null && ! this .HttpContext.Request.Url.Host.Equals( this .HttpContext.Request.UrlReferrer.Host, StringComparison.InvariantCultureIgnoreCase); } } |
در ادامه توسط خاصیت سفارشی isEmbeddedIntoAnotherDomain درخواهیم یافت که درخواست رسیده، از دومین جاری صادر شده است یا خیر. اینکار توسط بررسی UrlReferrer ارسال شده توسط مرورگر صورت میگیرد. اگر Host این UrlReferrer با Host درخواست جاری یکی بود، یعنی تصویر از سایت خودمان فراخوانی شدهاست.
ج) افزودن خودکار Watermark در صورت کپی شدن در سایتی دیگر
1
2
3
4
5
6
|
private byte [] addWaterMark( string filePath, string text) { var image = new WebImage(filePath); image.AddTextWatermark(text); return image.GetBytes(); } |
کلاسی در فضای نام System.Web.Helpers وجود دارد به نام WebImage که کار افزودن Watermark را بسیار ساده کرده است. نمونهای از نحوه استفاده از آن را در متد فوق ملاحظه میکنید. اما ... پس از امتحان تصاویر مختلف ممکن است گاها با خطای زیر مواجه شویم:
1
|
A Graphics object cannot be created from an image that has an indexed pixel format. |
مشکل از اینجا است که تصاویر با فرمت ذیل برای انجام کار Watermark پشتیبانی نمیشوند:
1
2
3
4
5
6
7
|
PixelFormatUndefined PixelFormatDontCare PixelFormat1bppIndexed PixelFormat4bppIndexed PixelFormat8bppIndexed PixelFormat16bppGrayScale PixelFormat16bppARGB1555 |
اما میتوان تصویر دریافتی را ابتدا تبدیل به BMP کرد و سپس Watermark دار نمود:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private byte [] addWaterMark( string filePath, string text) { using (var img = System.Drawing.Image.FromFile(filePath)) { using (var memStream = new MemoryStream()) { using (var bitmap = new Bitmap(img)) //avoid gdi+ errors { bitmap.Save(memStream, ImageFormat.Png); var webImage = new WebImage(memStream); webImage.AddTextWatermark(text, verticalAlign: "Top" , horizontalAlign: "Left" , fontColor: "Brown" ); return webImage.GetBytes(); } } } } |
در اینجا نمونه اصلاح شده متد addWaterMark فوق را بر اساس کار با تصاویر bmp و سپس تبدیل آنها به png، ملاحظه میکنید. به این ترتیب دیگر به خطای یاد شده بر نخواهیم خورد. در ادامه، قسمت آخر کار، اعمال این مراحل به اکشن متد Image است:
1
2
3
4
5
6
7
|
if (isEmbeddedIntoAnotherDomain) { var text = Url.Action(actionName: "Index" , controllerName: "Home" , routeValues: null , protocol: "http" ); var content = addWaterMark(path, text); return File(content, MediaTypeNames.Image.Gif, fileName); } return File(path, MediaTypeNames.Image.Gif, fileName |
بعد از مدت ها بلاخره فرصتی پیش اومد تا مجددا مقاله ای بنویسم. این بار قصد دارم با مقاله ای در خصوص CSS اما خارج از دنیای طراحی و ساخت آیتم های مختلف در خدمت شما باشم.
شاید تا به حال کمتر نام Combinator ها را در CSS شنیده باشید، اما مطمئنا به وفور از برخی از آن ها استفاده کرده اید. در واقع همانطور که از نام Combinator بر می آید، تنها یک ترکیب کننده است، ترکیب کننده ی چند گزینشگر ساده مثل Tag Selector و یا Class Selector که به عنوان تعیین کننده ی ارتباط بین دو آن ها ایفای نقش می کند. به طور کلی Combinator ها به چهار گروه مختلف تقسیم می شوند که در ادامه به بررسی هر کدام خواهیم پرداخت.
Descendant Selector
از این نوع گزینشگر یکی از پر کاربرد ترین نوع گزینشگر هایی است که بدون شک از آن استفاده کرده اید، کد html زیر را در نظر بگیرید:
1
2
3
4
5
6
7
8
9
|
< ul > < li >Item 1 li > < li > < ol > < li >Sub-item A li > < li >Sub-item B li >
ol >
li >
ul > |
و فرض کنید استایل زیر را به li ها نسبت داده ایم:
1
2
3
4
|
ul li { background-color : Red; } |
همانطور که واضح است کلیه ی li ها به رنگ قرمز در می آیند. این نوع گزینشگر تمام عناصر مورد نظر را در هر عمقی، صرف نظر از عنصر والد آن ها تحت تاثیر قرار می دهد، به همین دلیل به آن Descendant (نوادگان) گفته می شود. در واقع در اینجا ترکیبی از دو Tag Selector را داریم که حد واسط آن ها کاراکتر Space قرار گرفته است. درسته! Space در اینجا یک Combinator محسوب می شود.
حال فرض کنید بخواهیم تنها li های درون ul را انتخاب کنیم، بدیهی است که با Descendant Selector چنین کاری ممکن نیست، به این منظور لازم است از Child Selector استفاده کنیم.
Child Selector
Child Selector یا گزینشگر فرزندی امکان انتخاب فرزندان یک عنصر را در اختیار قرار می دهد، توجه داشته باشید که عناصر فرزند عناصری هستند که مستقیما داخل یک عنصر قرار دارند یا به عبارتی در عمق اول نسبت به عنصر والد خود قرار دارند. در مثال بالا Item 1 فرزند ul محسوب می شود، در حالی که Sub-item A، descendant عنصر ul به حساب می آید. با این تفاسیر برای انتخاب فرزندان از علامت > به عنوان Combinator استفاده می کنیم:
1
2
3
4
|
ul > li { background-color : Red; } |
Adjacent Sibling Selector
این نوع selector که شاید کاربردی کمتر از دو نوع قبل داشته باشد، برای انتخاب عنصر sibling (برادر) یک عنصر کاربرد دارد. در واقع sibling به دو عنصری گفته می شود که دارای parent های یکسان باشند و adjacent به معنی عنصری است که دقیقا بعدا از عنصر مورد نظر به عنوان sibling ظاهر می شود. برای درک بهتر مثال زیر را مشاهده بفرمایید:
1
2
3
|
< h2 >Heading h2 > < p >The selector above matches this paragraph. p > < p >The selector above does not match this paragraph. p > |
1
2
3
4
|
h 2 + p { background-color : Red; } |
دو تگ p به عنوان sibling های عنصر h2 شناخته می شوند، اما رنگ قرمز تنها به تگ p اول نسبت داده خواهد شد، به دلیل اینکه مستقیما پس از h2 قرار گرفته و به عبارتی adjacent محسوب می شود.
General Sibling Selector
این selector بر خلاف نوع قبل کلیه ی sibling های قرار گرفته پس از عنصر مورد نظر را تحت پوشش قرار می دهد و به همین دلیل از آن به عنوان General یاد می شود. Combinator مورد استفاده در این گزینشگر علامت ~ می باشد:
1
2
3
4
|
h 2 ~ p { background-color : Red; } |
با توضیحات داده شده در قسمت قبل فکر نمی کنم نیاز به بیان جزئیات بیشتری باشد، تنها نکته ی قابل ذکر این است که 3 selector ای که پیش تر توضیح داده شد از گزینشگر های موجود در CSS 2.1 بودند در حالی که این گزینشگر در نسخه ی سوم به CSS اضافه شد.
برای استفاده از این ابزار ابتدا آن را از اینجا دانلود کنید: PIE
یکی از فایل های موجود در بسته ی دانلود شده، فایلیست به نام PIE.htc که عمل رندر دستورات css3 را برای اینترنت اکسپلورر انجام می دهد. البته قابل ذکر است که تنها برخی از خصوصیاتی که کاربرد بیشتری دارند توسط pie پشتیبانی می شوند، نه همه خصوصیات css3. خصوصیات پشتیبانی شده به صورت زیر می باشند:
حال استفاده از برخی از خصوصیات را در قالب یک مثال ساده بیان می کنم. فرض کنید خصوصیات زیر را به یک div نسبت داده ایم:
1
2
3
4
5
6
7
8
|
.elm { border : 1px solid #000 ; border-radius: 10px ; width : 200px ; height : 200px ; background-color : #fff ; } |
برای رندر کردن خصوصیت border-radius در ie تنها کافیست خط زیر را به خصوصیات بالا اضافه کنید:
1
2
3
4
5
|
.elm { ... behavior: url ( "PIE.htc" ); } |
1
2
3
4
5
|
.elm { ... box-shadow: 10px 10px 5px #acacac ; } |
1
2
3
4
5
|
.elm { ... -pie- background : url ( "up.png" ) no-repeat center center , linear-gradient( #eee , #ccc ); } |
1
2
|
box-shadow: 10px 10px 0 rgba( 118 , 246 , 211 , 0.4 ); -pie- background : rgba( 118 , 246 , 211 , 0.4 ) url ( "up.png" ) no-repeat center center ; |
1
2
3
4
5
|
.test { background : url ( "up.png" ) no-repeat left top ; border : 1px solid #000 ; } |
1
2
3
4
5
6
7
|
.test { background : url ( "up.png" ) no-repeat left top ; border : 1px solid #000 ; -pie-png-fix: true; behavior: url ( "PIE.htc" ); } |
سرویس وب جیمیل به شما این امکان را میدهد تا ایمیلهای خود را همراه با امضای شخصی خود ارسال کنید. این امضا که در زیر متن ایمیل بهنمایش در میآید میتواند شماره تماس یا نام شما، نشانی و تلفن شرکت شما یا هرگونه اطلاع دیگر باشد.
ایمیلهای دارای امضا از اعتبار بیشتری برخوردارند و استفاده از امضا در ایمیل یک کار حرفهای بهشمار میرود. متاسفانه بسیاری از کاربران که در سرویس وب از ایمیلهای اختصاصی استفاده میکنند در نرمافزار تلفن همراه به این امضاها اهمیت نمیدهند و در بیشتر موارد ایمیلهای خود را با امضایی همچون Sent from my phone ارسال میکنند. این عبارت، متن پیشفرض امضا در نرمافزار مدیریت ایمیل تلفنهای همراه است و شما میتوانید براحتی آن را به عبارت دلخواه خود تغییر داده یا از امضای سرویس وب در تلفن همراه نیز استفاده کنید.
چنانچه قصد دارید همین حالا در امضای شخصی خود در تلفن همراه مجهز به سیستمعامل اندروید بازنگری کنید، به روش زیر عمل کنید:
1 ـ نرمافزار Gmail را از فهرست برنامهها اجرا کنید. (قابلیت مذکور در نسخههای مختلف نرمافزار جیمیل از جمله نسخه 5 قابل استفاده است)
2 ـ از بالاسمت چپ روی آیکون منو فشار داده و گزینه Settings را انتخاب کنید.
3 ـ در پنجره باز شده روی کاربری موردنظر که قصد دارید امضای آن را تغییر دهید، فشار دهید.
4 ـ اکنون روی گزینه Signature فشار داده و اطلاعاتی را که قصد دارید زیر تمام ایمیلهای ارسالی از طرف شما اضافه شود، وارد کنید. برای وارد کردن عبارت دلخواه در چند خط میتوانید از کلید Enter کمک بگیرید.