بایگانی برچسب: ویژه

مشکلات و راهکارهای کپی رایت در ایران

کپی رایت در ایران، مشکلات و راه‌کارها چه هستند؟

ارسال شده در: عمومی

یک هفته در سال، به کپی رایت اختصاص داده شده است. در ایران ما حتی یک عبارت درست و درمان برایش نداریم. حق نشر و یا امتیاز نشر اگر ترجمه کنیم هم که می‌دانید عربی‌ست. احتمالا همین که مانند «پیامک» و یا «کش لقمه» نیازی به یافتن عبارتی مناسب برای این موضوع احساس نشده است، نشانه‌ی وضعیت خراب آن در کشور ماست. در ادامه نگاهی کوتاه به کپی رایت در نرم‌افزارها و رسانه‌های دیجیتال خواهیم داشت.

مخاطبین این نوشتار

این نوشته را برای ایرانیان مقیم میهن نوشته‌ام. و نه برای ایرانیان و غیر ایرانیان خارج نشین. برای کسانی که نام کشورشان در DropDownهای وب‌سایت‌ها و نرم‌افزارها کمتر دیده می‌شود. مردمی که طعم استفاده از اینترنت آزاد را هنوز نچشیده‌اند. کسانی که فرار از IP ایرانی برایشان نان سر میز صبحانه‌ست.

وضعیت کنونی

همان‌طور که در پیش درآمد گفتم ما حتی در زبانمان عبارتی برای کپی رایت نداریم (اگر اشتباه می‌کنم من را تصحیح کنید). فیلم‌ها و سریال‌های داخلی و خارجی رایت می‌شوند و همه جا هستند. البته الآن کمی این مشکل رنگ باخته است. مشکل اصلی در صنعت نرم‌افزار است که عملا کسی پولی برای نرم‌افزار نمی‌دهد مگر رایت آن. کار ما از کپی‌های کافی‌نتی سر خیابان گذشته، ما محصولاتی مثل King، Lord و مثل این‌ها داریم که قانونا فتوشاپ Original می‌زنند که البته قفل هم دارد که رایتش نکنند. خلاصه اینکه به نظر می‌رسد «در کشورمان کسی کپی رایت را نمی‌شناسد که بخواهد آن را رعایت کند.»

نگاه ایده‌آل

فروش فیلم‌ها و سریال‌ها کنار خیابان «واقعا» غیر قانونی شود. نرم‌افزار قیمت‌های واقعی خود را پیدا کنند و خرید گواهینامه (Licence) برای عامی‌ترین مردم هم موضوعی عادی تلقی شود. دانشجوها و نویسندگان به حقوق نوشتاری دیگران احترام بگذارند و نوشته‌های یکدیگر را کپی و یا استفاده‌ی غیر مجاز نکنند. وقتی درب حیاط خانه‌ای باز است داخل آن را کسی نگاه نکند و حق همسایه‌ی خود را رعایت کند.

دلایل نقض کپی رایت در ایران

خلاصه اگر بخواهید، بزرگترین دلیلی که در این باب می‌توان نام برد، بهره‌ی کافی نبردن از رعایت کپی رایت است. به طور مثال، اگر بروید پول نازنین را بدهید برای خرید یک سریال آیا مطمئن هستید که کیفیت لازم را دارد؟ ما نسبت به مبلغی که پرداخت می‌کنیم برای خرید یک لباس به همان اندازه انتظار کیفیت را داریم. این دقیقا در مورد نرم‌افزار و رسانه‌های دیجیتال صدق می‌کند، این در حالی‌ست که در کشورمان معیار مناسبی برای انتخاب نرم‌افزار یا فیلم خوب نداریم. جای خاصی مثل IMDB نداریم که ملت به فیلم‌ها و سریال‌ها امتیاز بدهند. یا حتی جایی برای نرم‌افزارها. مورد دیگر درباره‌ی تمام نرم‌افزار‌های خارجی‌ست. تقریبا تمامی آن‌ها یا حداقل معروف‌هایشان از دادن خدمات به ایرانی‌ها (یعنی ما!) اجتناب می‌کنند. پس چرا من باید حدود ۳ میلیون تومان برای Photoshop پرداخت کنم؟ یک نکته‌ی اساسی دیگر همین قیمت است. مثلا Photoshop را می‌توان به قیمت ۹۹۹ دلار خریداری کرد. برای کسی که علاقه‌مند به دنیای طراحی و تمام کارهای گرافیکی‌ست این مبلغ زیادی برای تست نیست. من اگر یک جوان در امریکا بودن از مهلت ۳۰ روزه‌ی تست رایگان استفاده می‌کردم و اگر خوشم آمد و دیدم توانمندی‌های لازم را دارم آن را می‌خریدم، خوب اگر بعد از یک سال به نتیجه رسیدم که این کار به درد من نمی‌خورد خیلی راحت آن را کنار می‌گذارم. درست است که در آنجا هم ۱۰۰۰ دلار پول زیادی‌ست. اما اگر اینجا هم کسی در کاری مثلا یک میلیون تومان ضرر کند که مشکل بزرگی نیست. نکته این‌جاست که به دلیل اختلاف ارزش پول، و هزاران دست‌انداز دیگر نرم‌افزارهایی که به دست ما می‌رسند قیمت‌هایی چند برابر دارند.

پیشنهادهای کوتاه مدت

از سریال‌های داخلی شروع کنیم. یکی دو قسمت اصلش را بخریم. ببینیم اگر خوشمان نیامد دیگر نخریم. همین. کار سختی نیست. از یک چیز کوچک شروع کنیم، کم کم همه جا را تسخیر خواهیم کرد. مثلا اگر پسر خاله‌تان به شما گفت که «شوخی کردم…!» را دیده‌ای؟ به جای اینکه بگویید: «آره، خیلی خفن بود!» بگویید: «آره، اتفاقا دیروز DVD اصلش رو از سوپری اصغر آقا خریدم، خیلی خفن بود» حتما شما جمله‌های بهتری پیدا خواهید کرد.

پیشنهادهای بلند مدت

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

در نهایت…

بیایید یک قدم مثبت هم خودمان که از دیگران انتظار رعایت کپی رایت داریم برداریم. کمی بیشتر برای کارمان احترام قائل باشیم. منِ برنامه‌نویس اگر با جمله‌ی «اوووو، خیلی قیمت بالاست. تخفیف بده تا کارو شروع کنیم» روبرو شدم، به جای «چی بگم والا شما چقدر مد نظرتونه» بگویم «واسه این‌کار شب‌های زیادی بیدار بودم، واقعا جای تخفیف نداره» حتی اگر آن پروژه را نگیرید، کار حل است. هرچند بیشتر اوقات اگر کسی به خاطر نگرفتن تخفیف محصولی را از شما نگیرد، احتمالا اگر شما تخفیف را می‌دادید، در آینده بدترین مشتری یا کارفرمای دوران کاریتان را تجربه می‌کردید.

دیدگاه‌ها (2) 15 ژانویه, 2014

فراخوانی توابع به صورت ناهمزمان در JavaScript

ارسال شده در: جاوا اسکریپت . کدنویسی

برای شروع از یک موضوع ساده استفاده می‌کنم تا دوباره به روزهای خوب نوشتن برگردم. فراخوانی توابع به صورت ناهمزمان در JavaScript به روش های مختلف انجام میشه.

برای کاربران حرفه‌ای تر استفاده از تکنولوژی‌ها و Frameworkهای زیر رو پیشنهاد می‌کنم: + Backbone + TypeScript + AngularJS البته الزاما در این libraryها از روش‌های مشابه استفاده نشده. مثلا در backbone از event استفاده میشه.

اما در اینجا می‌خوام از یک راه خیلی ساده و بدون هیچ Libraryای استفاده کنم. این روش برای پروژه‌های کوچک و یا پروژه‌هایی که وقت سازمان دادن پروژه رو ندارین و میخواین خیلی زود و با اضافه کردن یک فایل JS به پروژه کار رو تمام کنین به درد می‌خوره.

Callback

احتمالا در jQuery از Eventهای Click و یا Change استفاده کردین. مثلا:

$(".a-link").click(callback);

در واقع ما در اینجا برای پارامتر callback یک تابع ارسال می‌کنیم که زمانی که Event کلیک لینک (a-link.) اتفاق افتاد function ما فراخونده میشه. این Pureترین و ساده‌ترین راه برای به تأخیر انداختن اجرای یک function هست.

حالا ما می‌خوایم از این روش در پروژه‌ی خودمون استفاده کنیم. پروژه‌ی ساده‌ای تعریف خواهیم کرد که در آن وقتی روی یک دکمه کلیک کنیم صفحه تغییر رنگ دهد. یک پروژه با ساختار زیر ایجاد می‌کنیم:

-- Index.html
-- js
-- -- jquery.js
-- -- scripts.js

در فایل scripts.js یک function می‌سازیم:

var changeColor = function() {
    // Body background will be `pink` hear
    $("body").css({ "background-color": "pink" });
};

حالا محتوای فایل index.html به شکل زیر خواهد بود.

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Blogwave: Color Changer;</title>
</head>
<body>
    <button id="color-changer"></button>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="js/scripts.js"></script>
</body>
</html>

حالا به scripts.js کد زیر رو اضافه می‌کنیم:

$(document).ready(function() {
    $("#color-changer").click(changeColor);
});

تا اینجا وقتی کاربر روی دکمه کلیک کرد رنگ زمینه‌ی Body صورتی میشه. اما فرض می‌کنیم که کاربر قبلا به ما گفته بوده که از رنگ زرد خوشش میاد و این اطلاعات در سرور ذخیره شده. پس یک function می‌نویسیم که از سرور اطلاعات رنگ مورد علاقه‌ی کاربر رو واسمون پیدا کنه.

var getFavoriteColor = function() {
    $.ajax({
        type: "POST",
        url: "/api/GetFavoriteColor",
        contentType: "application/json"
    }).done(function (color) {
        return color;
    })
};

می‌دونیم که کد بالا هیچ وقت هیچ رنگی رو بر نمی‌گردونه. چون زمانی تابع done اجرا میشه که فراخوانی تابع getFavoriteColor به پایان رسیده. پس ما اینجا یک پارامتر ورودی به نام callback خواهیم گرفت:

var getFavoriteColor = function(callback) {
    $.ajax({
        type: "POST",
        url: "/api/GetFavoriteColor",
        contentType: "application/json"
    }).done(function (color) {
        if (callback) {
            callback(color);
        }
    })
};

در اینجا ما چک کردیم که اگه callback تعریف شده باشه ما پارامتر color رو واسش ارسال می‌کنیم و اون رو فراخوانی می‌کنیم. حالا کد قبل رو اینطور ویرایش می‌کنیم:

var changeColor = function() {
    // Body background will be `pink` hear
    $("body").css({ "background-color": "pink" });

    // ‌Body background will be user defined color hear
    getFavoriteColor(function(color) {
        $("body").css({ "background-color": color });
    });
};

ما یک تابع به عنوان پارامتر به تابع getFavoriteColor ارسال کردیم که خودش یک پارامتر به نام color میگیره. حالا هر چقدر هم که ajax کارش طول بکشه برای ما مهم نیست، بلافاصله بعد از دریافت رنگ جدید getFavoriteColor رنگ رو پاس میده به تابعی که ما ساختیم و اون هم رنگ پس‌زمینه رو تغییر میده.

:)