یاداشت های کوتاه یک برنامه نویس

طبقه بندی موضوعی

۵ مطلب در خرداد ۱۳۹۵ ثبت شده است

۲۲
خرداد

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

  • اولا باید در نظر داشته باشید که بر طبق امضای این متد باید آرگمان ها از نوع  InputStream  و OutputStream  باشند:
CopyUtils.copy(InputStream input ,OutputStream output);
  • دوما باید به سلسله مراتب کلاس های ارث برده از in/outputStream توجه کنید. در حالی که کلاس FileInputStream کلاس InputStream رو گسترش داده و در ضمن BufferedInputStream کلاس FilterInputStream گسترش میده و کلاس FilterInputStream کلاس InputStream گسترش میده پس :
FileInputStream instanceof InputStream  = true
BufferedInputStream instanceof InputStream  = true

و با توجه به تفاوت هایی که در پیاده سازی متد های read() و write() در کلاس های bufferedInputStream و FileInputStream وجود داره اگر یک نمونه از کلاس bufferedInputStream رو به عنوان آرگومان ورودی به متد Copy بدهیم فایل مقصد از فایل منبع کوچک تر خواهد شد. پس در این حالت بهتره از FileInputStream استفاده کنیم. 

  • * RayanFar
۲۲
خرداد

سوالات متداول در مورد  nifty gui و JME 3 .

1- چطور اندازه عرض و ارتفاع یک عنصر (Element) را در nifty تغییر دهیم؟

 اول باید به عنصر مورد نظر دسترسی داشته باشیم :

Element image = nifty.getCurrentScreen().findElementById("ImageTagId");

بعد از متد های زیر برای تغییر عرض و ارتفاع عنصر مذکور استفاده می کنیم :

image.setConstraintWidth(new SizeValue("size in % or px"));
image.setConstriantHeight(new SizeValue("size in % or px"));

و در آخر لازمه که عناصر زیر مجموعه ی عنصر والد رو layout کنیم و با اجرای این متد تغییرات قابل مشاهده خواهند بود...

image.getParent().layoutElements(); 

2- چطور تصاویر تگ image رو به صورت داینامیک تغییر دهیم؟

اول باید یک نمونه از NiftyImage داشته باشیم (حواستون باشه این رشته به یک تصویر در assets.jar اشاره میکند نه به آدرس فایل بر روی هارد دیسک مگر اینکه یک داریرکتوری رو به assetManager اضافه کرده باشیم ) پس :

NiftyImage img = nifty.createImage("Interface/Gui/image.jpg", false);

وباید به تگ image دسترسی داشته باشیم:

Element imageEle = nifty.getCurrentScreen().findElementById("ImageTagId");

بعد میتونیم با این روش تصویر مورد نظرمون رو نمایش بدهیم:

imageEle.getRenderer(ImageRenderer.class).setImage(img);

3- چطور متن یک تگ text به صورت داینامیک و پویا تغییر دهیم؟

برای تغییر متن لازمه که اول به تگ text دسترسی داشته باشیم.

Element textEle = nifty.getCurrentScreen().findElementById("txtID");

بعد با روش زیر متن رو تغییر میدهیم:

textEle.getRenderer(TextRenderer.class).setText("hello world!");

4- چطور یک دایرکتوری را در حین اجرا به assets بازی ای که با JME3 توسعه داده شده است اضافه کنیم؟

باید با متد  registerLocator دایرکتوری مورد نظر رو به assetManager اضافه کنیم. (به FileLocator.class توجه کنید)

path="C:\users\someOne\dir\";
app.getAssetManager().registerLocator(path, FileLocator.class);

و هر وقت لازم بود میتونید با اسم فایل و AssetManager به فایل مورد نظر دسترسی داشته باشید

(این لیست بعدا تکمیل میشه ......)

  • * RayanFar
۰۷
خرداد

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

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

تا 15 خرداد باید تجربه کاربری و سناریو ی مرحله ی اول تموم بشه بازم خیلی دیره ....

گرافیست داره خیلی طولش میده شاید باید یه گرافیست دیگه هم پیدا کنم..... کجایید پس شما چند نفری که ادعای همکاری کردید؟

سناریو نویسمون از 21 می تا حالا یک خط ننوشته ...

طراح کاراکتر چند روزه لوگو و عنوان رو داره طولش میده با این که وظیفه های خیلی مهمتری بر عهده داره  ...

باگ های اعصاب خرد کن نیفتی هم که داره سرم رو به درد میاره.......

آقای برادر ممکنه تو تامین مالی پروژه به مشکل بخوره ......

سرور و برنامه سرویس دهنده نیاز به یه جاوا کار داره و به سختی در دسترس خواهد بود شاید برم سراغ php کار که فراوان در دسترسه.

یک جفت برنامه نویس و گرافیست خفن تو آستین دارم ... کافیه یکم دیگه حرصم بدهند تا جایگزین کنم با این که بهشون اعتماد ندارم ....

اگر برنامه ریزی که کردم به مشکل بخوره حتما با آقای ایکس مشورت خواهم کرد هر چند زیاد به نفعم نخواهد بود....

باید مسئول استادیو ایگرگ رو برای ضبط صدا ملاقات کنم و چند گوینده ارزان هم پیدا کنم....

 

  • * RayanFar
۰۳
خرداد

بیشتر وقت ها فراموش میکنم الان 2016 است و خیلی وقته نسخه 8 جاوا منتشر شده .

امکانات جدید جاوا 8 واقعا دوست داشتنی و جالبه ، چیزایی مثل لامبدا (Lambda ) خیلی مفید هستند کار هایی رو سریعتر و دلنشین تر میکنند. 

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

بازم جایه شکرش باقیه که سازگاری رو به عقب جاوا با من مشکل نداره وگرنه اول جوونی باید از دور خارج میشدم و میرفتم بین اسقاطیا .... یک جاوا نویسی که دوست نداره جاوا 1.6 رو رها کنه یکی که متولد 97 ولی دوست داره زمان به عقب برگرده به سال های 1980 و 1990 با یک کامپیوتر خفن و یک خط فرمان حرف گوش کن .......

قبلا فکر میکردم هر چیزی تاریخ مصرف داره حتی خاطرات خوب و بد ! اما حالا تو یه محدوده ی زمانی گیر کردم  انگار گذشته ای که قبل از به دنیا اومدنم گذشته برای من لذت بخشه و باید تجربه اش کنم انگار خیلی دیر به دنیا اومدم و ..... .نکنه نیاز به یه روان کاو  دارم چون اصلا عادی نیست حتما باید برسیش کنم.

چند خط کد تا فراموش نکنم حلقه فور جدید کار آمدتر و کوتاه تر از قبلیه و .......

System.out.println(Arrays.toString(variableName));
for (String next : variableName) {
System.out.println(next);
}

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

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

و کیفیت 4k برای یک صفحه نمایش 15 اینچی؟ نمیدونم هدف سازنده ی این مدل چی بوده چی بوده میخواستند از فضای تبلیغاتی موجود سوء استفاده کنند و پول بیشتری در بیارند؟  این کیفیت حداقل مانیتوری 17 تا 22 اینچی نیاز داره! اینقدر که منو ها تو برنامه های غیر محلی مثل بلندر و نت بینز ریز شده باید یا ابزار maginifier فعال کنم و مثل پدر بزرگ ها از ذره بین استفاده کنیم و یا دقت تصویر را روی دو برابر Hd تنظیم کنیم.

باطری ای که ادعا کرده اند 6 ساعت دروغ محض است یک ساعت و پنجاه دقیقه بیشتر دوام نمی آورد ........

اصلا من کامپیوتر رومیزی دوست داشتنی خودم را میخواهم......

  • * RayanFar
۰۱
خرداد

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

خب مشکل اینه که متد تقسیم رشته درست کار نمیکنه مثلا کد زیر :

        File pluginSDir = new File(pathToPluginDir);
        File[] list = pluginsDir.listFiles();

        for (int i = 0; i < list.length; i++) {

            if (list[i].isFile() && !list[i].isHidden()) {
                String name = list[i].getName();
                String extension = name.split(".")[1];

                System.out.println(" file in plug dir => [" + list[i].getName() + "] ( " + extension + " )");
            }

        }

چرا ؟!

چون تازه گی ها یه قانونی کشف کردم که میگه چیز های بسیار پیش پا افتاده بعضی وقتا میتونند بسیار مهلک باشند. 

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

به عنوان یک پیش نهاد برای اینکه از این جور مشکلات پیش نیاد بهتره مستندات کیت توسعه جاوا رو به آی دی عی اضافه کنیم . تا بدونیم پارامتر های ورودی و نوع خروجی یک متد چه چیزی باید باشه.

  • * RayanFar