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

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

۳۱ مطلب با موضوع «java» ثبت شده است

۱۰
خرداد

برای لود کردن کتابخانه های بومی (natvie) از فایل jar کافیه فایل های dll یا so رو در یک پکیج مثل سورس جاوا کپی کنید و  از این کلاس استفاده کنید:

/*
 * Class NativeUtils is published under the The MIT License:
 *
 * Copyright (c) 2012 Adam Heinrich <adam@adamh.cz>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
package cz.adamh.utils;

import java.io.*;
 
/**
 * A simple library class which helps with loading dynamic libraries stored in the
 * JAR archive. These libraries usualy contain implementation of some methods in
 * native code (using JNI - Java Native Interface).
 * 
 * @see http://adamheinrich.com/blog/2012/how-to-load-native-jni-library-from-jar
 * @see https://github.com/adamheinrich/native-utils
 *
 */
public class NativeUtils {
 
    /**
     * Private constructor - this class will never be instanced
     */
    private NativeUtils() {
    }
 
  • * RayanFar
۱۸
ارديبهشت

در مثال های مستندات JmonkeyEngine در بخش ( Hello Picking) در مورد انتخاب یک geometry با موس چیز هایی گفته شده .....

اما کامل نیست و در یک مورد نیاز واقعی برای من کارایی نداشت، بیشتر اوقات هر مدل از بیشتر از یک geometry تشکیل شده است (مثلا مدل من از چند قسمت دست ،سر ، مو ، لباس ، بدن ، پا ، پوتین و غیره تشکیل شده که هر کدام یک geo در نظر گرفته میشود).و همچنین لازم بود به controller آن دسترسی داشته باشم که فقط والد تمام این ها این کنترلر را داشت نه فرزندان .

پس باید به spatial دسترسی پیدا می کردم  که والد تمام اجزای بدن مدل بود، برای اینکار geo ها را به سمت بالا در سلسله مراتب پدر فرزندی مرور میکنیم تا به یک برابری برسیم .(من برای هر چیز یک داده ی کلید مقدار ثبت میکنم مثلا id و npc را به مدل سربازهایی که توسط کامپیوتر کنترل میشوند نسبت می دهم تا بتوانم در یک حلقه بررسی کنم مورد انتخابی یک مدل از نوع npc است یا نه ؟بعد یک متد از کنترلر را اجرا میکنم تا رفتار مناسب داشته باشد ....)

  • * RayanFar
۲۸
فروردين

نام کتاب : jMonkeyEngine 3.0 Cookbook - Rickard Eden.pdf

نویسنده: Rickard Edén

ناشر :Packt Publishing Ltd

زبان : eng

حجم : دو و نیم مگ - 615 صفحه

لینک دانلود

پ ن : وقتی امکانی برای خرید آسان وجود نداره مجبورم از راه غیر اخلاقی بدست بیارمش. پس دانلود کنید ، پرینت بگیرید و لذت ببرید. 

شاید این کتاب (jMonkeyEngine 3.0 Beginner's Guide.pdf) رو هم دوست داشته باشید بخونید.

  • * RayanFar
۲۷
فروردين

با استفاده از عملگر باقی مانده ی تقسیم (%):

همون طور که در ریاضیات عددی زوج است که باقی مانده ی تقسیم اش بر دو ، صفر باشد. پس به عنوان یک روش با استفاده از % زوج بودن عددی را تعیین میکنیم:

boolean is_even = (n % 2 == 0);

تعیین زوج و فرد با استفاده از عملیات بیتی و عملگر بیتی &:

برای این کار ما به آخرین رقم از مقدار باینری عدد نیاز داریم که با and کردن آن با یک به دست می آید. به این صورت:

number & 1

اگر حاصل یک باشد، عدد فرد است و اگر صفر باشد، عدد زوج است.

برای مثال :

1-پنج فرد است پس: 

0000 0101 & 0000 0001 = 0000 0001

2- و شش زوج است:

0000 0110 & 0000 0001 = 0000 0000

و نمونه کد جاوا :

if( (number&1) == 0){
      system.out.println("even");
   }else{
        system.out.println("odd");
      }

در زیر کاپوت :

همان طور که میدانید عملگر منطقی and (&) دو مقدار دودویی با طول مساوی دریافت کرده و بر روی هر جفت بیت متناظر، عملیات عطف منطقی را انجام می‌دهد. نتیجه وقتی ۱ می‌شود که اولین بیت و دومین بیت هر دو با هم ۱ باشند، در غیر این صورت صفر خواهد بود.

جدول زیر را در نظر بگیرید:

20 21 22 23 24 25 26 27 28 29
1 2 4 8 16 32 64 128 256 512

دو به توان هر عدد صحیح غیر منفی و صفر ، همیشه زوج خواهد بود. (نمی دونم صفر مثبته یا منفی؟)

کمترین ارزش را سمت راست ترین رقم خواهد داشت. و مقدار آن در صورت صحیح بودن یک خواهد بود.

عدد یک در مبنای دو برابر با یک است و به سمت چپ تمامی ارقام صفر خواهند بود و این هیچ تاثیری بر ارزش عدد ندارد. (00000001) .

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

به عبارتی دیگر عطف منطقی با عدد یک، باعث میشود تمام ارقام عدد مورد آزمایش به غیر از آخرین رقم صفر شود و اگر رقم آخر یک باشد نتیجه یک می شود و فرد بودن عدد مورد آزمایش را نتیجه میدهد.

  • * RayanFar
۱۵
فروردين

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

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

در روش اول اگر به صورت درصد عدد 10 را به عنوان طول مثلا یک تصویر تعیین کنیم در رزولوشن پایه (من از 1152*2048 به عنوان روزلوشن پایه استفاده میکنم) این مقدار 204.8 پیکسل خواهد بود. و در پایین ترین رزولوشن (1024*1280) طول تصویر 128 پیکسل خواهد بود. این به تنهایی مشکلی ایجاد نمیکند ولی وقتی مقدار عرض را هم وارد و در چند رزولوشن دیگر هم تست کنیم مشکل نمایان میشود

  • * RayanFar
۰۲
بهمن

من عاشق جاوا هستم

چون کار ها رو خیلی راحت کرده مثلا این تصویر رو ببینید:

برای یک کاری لازمش داشتم ، حوصله اش را نداشتم که وقت بگذارم و در ابزاری مثل فتوشاپ یا گیمپ یه همچین چیزی رو با دقت یک پیکسل رسم کنم.

فکرش رو کنید باید از خطوط راهنما استفاده میکردم و یک تصویر 1000 در 50 پیکسلی که در صفحه نمایش من با توجه به رزولوشن ، 370 واحد از خط کش فتوشاپ بود ، به بیست قسمت مساوی تقسیم کنم بعد از 100 تا منهای 100 درجه بندی کنم چقدر وقت میبرد.

میانبر زدم

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

package paint;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

/**
 *
 * @author yn
 */
public class paint{

    static BufferedImage buffImage = null;
    static Graphics2D g2;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        init();
        draw_line();

        write();

    }

    public static void init() {
        buffImage = new BufferedImage(1000, 50, BufferedImage.TYPE_INT_ARGB);
        g2 = buffImage.createGraphics();
    }

    public static void draw_line() {
        g2.setStroke(new BasicStroke(2));
        g2.setColor(Color.green);
        g2.drawLine(0, 25, 1000, 25);

        int c = 100;
        for (int i = 0; i <= 1000; i += 50) {
            g2.drawLine(i, 30, i, 20);

            if (i == 0) {
                g2.drawString(c + "", i + 2, 15);
            } else if (i == 1000) {
                g2.drawString(c + "", i - 25, 15);
            } else {
                g2.drawString(c + "", i - 5, 15);
            }

            c -= 10;
        }
    }


    public static void write() {
        try {
            File outputfile = new File("saved.png");
            ImageIO.write(buffImage, "png", outputfile);

        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

  • * RayanFar
۲۵
دی

وقتی که از nfity-gui به دلایلی دل سرد شدم به lemur فکر میکردم.

اما خب فونتی که برای نیفتی و جی ام ئی درست کار میکرد در lemur خوب نشون نمیداد و پایین تر می افتاد پس لازم بود در مورد کارایی برنامه ای که نوشتم تجدید نظر کنم و دوباره برم سراغ مستندات bitmapFonts ... 

اصلاحش کردم

هیچ راهی وجود نداشت که با قبلی ادامه بدم و در lemur هم دسترسی به خصوصیات متن مثل فاصله از بالا وجود نداشت و موقعیت متن بر طبق لایه تعیین میشد. لازم بود فونت ساز رو اصلاح کنم که در هر سه ابزار به خوبی نمایش داده شود (lemur - nifty- jme gui node) و این کار رو کردم.

لینک نسخه ی اصلاح شده برای lemur 

  • * RayanFar
۲۳
دی

nfity gui یک ابزار بدرد نخور است.

خستم کرده لامصب ...

اصلا حرف آدمی زاد حالیش نیست هر گوشه اش یک ایراد داره....

مثلا یک نمونه اش کیفیت بسیار بسیار پایین رندر تصاویر برای image Icon ها در hud است.

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

هیچ راهی برای ادامه وجود ندارد ، به همین دلیل لازم  است در hud از گزینه ی دیگری استفاده کنم.

https://github.com/jMonkeyEngine-Contributions/Lemur

  • * RayanFar
۱۸
تیر

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

برای کد زدن میتونیم از این زبان ها استفاده کنیم :

  • C
  • C++
  • C#
  • F#
  • Java
  • JavaScript
  • Python3
  • Bash
  • Clojure
  • Dart

آدرس وبسایت : www.codingame.com

  • * RayanFar
۲۲
خرداد

وقتی سعی داشتم با ابزار کپی کتاب خونه 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