Liny_@NotePad

沉迷ACG中

虚拟机装RedHat时不能输入根口令。。

以前装过是正常的。。后来想想之前是装英文版 这次只装了中文,于是回到语言选项,把English(USA)也选上,

再进入根口令 依然不能输入,把English(USA)设为默认语言,这回可以了。再试了次设默认语言为中文,这次也可以 Orz 真神奇

试下动态编译。。

 前几天看到了 今天米事就来写一写, = = 期间遇到了两个问题:
用eclipse来写com.sun.tools找不到,以及运行时找不到文件(java.lang.ClassNotFoundException)。。

先贴代码:

  1. package org.yoyo.test;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.lang.reflect.Method;
  8. import java.net.MalformedURLException;
  9. import java.net.URL;
  10. import java.net.URLClassLoader;
  11. import java.util.Scanner;
  12.  
  13. import com.sun.tools.javac.Main;
  14.  
  15. /**
  16. * 动态编译测试
  17. * @author YOYO
  18. */
  19. public class RuntimeCompileTest {
  20.  
  21.         /**
  22.          * CompileMain
  23.          */
  24.         private static Main javac = new Main();
  25.  
  26.         /**
  27.          * 创建临时文件存放代码
  28.          * @param codes
  29.          * @return
  30.          */
  31.         private File createFile(String codes) {
  32.                 try {
  33.                         File file = File.createTempFile("RuntimeCompile_", ".java",
  34.                                         new File(System.getProperty("user.dir")));
  35.                         String className = getClassName(file);
  36.                         PrintWriter writer = new PrintWriter(file);
  37.                         writer.write("public class " + className + " {" + "\r\n");
  38.                         writer.write("  public static void main(String[] args) {" + "\r\n");
  39.                         writer.write(codes);
  40.                         writer.write("  }" + "\r\n");
  41.                         writer.write("}" + "\r\n");
  42.                         writer.flush();
  43.                         writer.close();
  44.  
  45.                         return file;
  46.                 } catch (IOException e) {
  47.                         e.printStackTrace();
  48.                         return null;
  49.                 }
  50.         }
  51.  
  52.         /**
  53.          * 输入代码
  54.          * @return
  55.          */
  56.         private String inputCode() {
  57.                 StringBuffer codes = new StringBuffer("");
  58.  
  59.                 System.out.println("请输入Java代码:");
  60.                 Scanner scanner = new Scanner(System.in);
  61.                 while (scanner.hasNext()) {
  62.                         codes.append(scanner.nextLine() + "\r\n");
  63.                 }
  64.                 scanner.close();
  65.  
  66.                 return new String(codes);
  67.         }
  68.  
  69.         /**
  70.          * 编译
  71.          * @param fileName
  72.          * @return
  73.          */
  74.         @SuppressWarnings("static-access")
  75.         private synchronized int compile(String fileName) {
  76.                 String[] args = new String[] {"-d", System.getProperty("user.dir"), fileName};
  77.                 return javac.compile(args);
  78.         }
  79.  
  80.         /**
  81.          * 执行
  82.          * @param file
  83.          * @return
  84.          */
  85.         @SuppressWarnings("unchecked")
  86.         private synchronized boolean run(File file) {
  87.                 new File(file.getParent(), getClassName(file) + ".class").deleteOnExit();
  88.                 try {
  89.                         URL url = new URL("file:/" + System.getProperty("user.dir") + ""
  90.                                         + File.separator);
  91.                         URLClassLoader urlClass = new URLClassLoader(new URL[] { url });
  92.                         Class clazz = urlClass.loadClass(getClassName(file));
  93.                         Method main = clazz.getMethod("main",
  94.                                         new Class[] { String[].class });
  95.                         main.invoke(null, new Object[] { new String[0] });
  96.  
  97.                         return true;
  98.                 } catch (ClassNotFoundException e) {
  99.                         e.printStackTrace();
  100.                 } catch (SecurityException e) {
  101.                         e.printStackTrace();
  102.                 } catch (NoSuchMethodException e) {
  103.                         e.printStackTrace();
  104.                 } catch (IllegalArgumentException e) {
  105.                         e.printStackTrace();
  106.                 } catch (IllegalAccessException e) {
  107.                         e.printStackTrace();
  108.                 } catch (InvocationTargetException e) {
  109.                         e.printStackTrace();
  110.                 } catch (MalformedURLException e) {
  111.                         e.printStackTrace();
  112.                 }
  113.  
  114.                 return false;
  115.         }
  116.  
  117.         /**
  118.          * 获得类名
  119.          * @param file
  120.          * @return
  121.          */
  122.         private String getClassName(File file) {
  123.                 return file.getName().substring(0,
  124.                                 file.getName().length() - ".java".length());
  125.         }
  126.  
  127.         /**
  128.          * 测试
  129.          * @return
  130.          */
  131.         public boolean newTest() {
  132.                 File file = createFile(inputCode());
  133.                 if ("".equals(file.getName()) || 0 != compile(file.getName())) {
  134.                         return false;
  135.                 }
  136.                 return run(file);
  137.         }
  138.  
  139.         /**
  140.          * @param args
  141.          */
  142.         public static void main(String[] args) {
  143.                 System.out.println("Test : " + new RuntimeCompileTest().newTest());
  144.         }
  145.  
  146. }

com.sun.tools找不到的解决方法:在项目属性-Libraries里面加上jdk下面的tools.jar包即可。

java.lang.ClassNotFoundException引起原因:我原来用的是Class.forName(...)方法,这个方法只加载ClassPath里面的类,因此找不到。。
改成上面代码中的URLClassLoader来读取就可以了。

在OGRE中使用Terragen生成的高度图。。

首先在Terragen的Landscape窗口,生成一个地形(Generate Terrain),完成后单击Export,导出成Raw 16 bits Intel Byte-Order(好像8bit也可以,没有试过)。

之后将OGRE SDK的media目录下的terrain.cfg文件复制一份,改成你想要的名字,修改里面的以下参数:

  • WorldTexture=terrain_texture.jpg
    这是纹理的贴图图片
     
  • DetailTexture=terrain_detail.jpg
    纹理的精细文件
     
  • DetailTile=3
    精细等级
     
  • Heightmap.image=terrain.png
    高度图源文件,可以是灰度图image,也可以是raw。
     
  • Heightmap.raw.size=513
    这本来是放在注释里面的,如果使用raw,则将这个size设成你地形的size。
     
  • Heightmap.raw.bpp=2
    这也是注释的内容。。如果用raw,则根据bits数,如果你生成8bits的,则bpp=1,16bits则为2。
     
  • PageSize=513
    建议和raw的size一样 - -。

改好后保存,将你需要的纹理文件和raw文件都放入media\materials\textures文件夹下。下面在OGRE中加载:

创建Terrain场景管理器

  1. mSceneMgr = mRoot->createSceneManager("TerrainSceneManager");

加载场景

  1.                 std::string terrain_cfg("test.cfg");
  2.                 mSceneMgr -> setWorldGeometry( terrain_cfg );

完成 - -。。。

笔记之U盘装不了驱动。。XD

今天终于用上U盘了 > < 我是个不乖的学生 :P
把windows/inf下的usbstor.ini属性安全项设为完全允许就OK了~

啊~久违的eclipse~~~久违的API~~~~~~~~~~~~~

MFC模拟登陆FNOJ...

可以算是第一个MFC程序吧 > <
昨天晚上用Java写了一个可以支持多个OJ的(POJ/ZOJ/FNOJ/HOJ),进度10%
(不过完全不知何时有兴致会继续 = ___= 前天还在玩网游的说……)
白天在公司米有环境,正好米什么事情,于是就来练习下MFC好了,
写了一个只能查自己代码的,运行截图如下:

试一下Yahoo Pipes。。

我想导入CSDN博客上的文。。发现它的rss只提供摘要 无比囧。。于是google搜到了这个东西,

步骤如下:

  1. Fetch Feed:输入RSS地址
  2. Loop,输入口与FetchFeed相连,根据每页link,解析,CSDN博客正文开始于blogstory的div。将内容存储到item.temp中。
  3. Rename,输入口与Loop相连,输出连到Pipes Output,将item.temp.0.content重命名为description即可(或其他名字也OK  - -,因为我要导入用……)。
  4. 右下角DEBUG即可查看效果。
  5. 测试成功后,右上角SAVE存储,有时不怎么稳定 要多存几次 = =。
  6. SAVE完成后 提示Run,即可进入该Pipes页面。此时会重新读取,速度会比较慢,有时还会出错 多刷新几次即可。

CEGUI主键盘上的回车原来是Return。。Orz

英语果然差劲Orz。。。

早上找Key,只看到NumpadEnter,找不到Enter,无意间发现Apostrophe上的tip是:Enter on main keyboard……

大喜,始终测不出来。。。后来百度之。。原来是RETURN。。

而Apostrophe乃是撇号的意思 OrzOrzOrz 不过我测了下,仿佛是按下回车旁边那个键(")按下再弹起的瞬间。。

为啥米回车会是Return???GOOGLE之。。找到《细查回车和换行》一文,节选如下:

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

话说回车的英文名是carriage return,怪不得\r会回到行首 = = 原来它就是回车,中文名字太奥义了。

Wiki百科说:回車鍵第一次由1960年在Smith Corona公司的印表機出現。當時,此鍵一般被標「Return」。為了幫助不說英語的用戶學習打字,之後出版的打字機經常被標「」符號。

~~~~~~~~~~~~TAT 可我见过的所有键盘都标的是Enter~~~~~

CEGUI setText无法显示中文。。

项目设好了中文字体,加上中文输入,输入的字符显示出来是正常的,但是直接在程序里面setText中文却显示乱码……

查了一下是字符编码的关系……CEGUI是UTF-8格式的。。必须进行转换。。我的项目使用多字节,下面是转换函数:

  1. CEGUI::String CharArrayToString(const char* pszText)
  2. {
  3.         //      ASCII -> Unicode
  4.         int nLen = strlen(pszText);
  5.         std::wstring unicode(nLen, 0);
  6.         unicode.resize(
  7.                 MultiByteToWideChar(CP_ACP, 0, pszText, static_cast<int>(nLen),
  8.                 const_cast<wchar_t*>(unicode.data()), unicode.size())
  9.         );
  10.  
  11.         //      Unicode -> UTF-8
  12.         char buff[128] = "";
  13.         WideCharToMultiByte(CP_UTF8, 0, unicode.data(), static_cast<int>(unicode.size()),
  14.                 buff, sizeof(buff), NULL, NULL);
  15.  
  16.         return CEGUI::String((CEGUI::utf8*)(buff));
  17. }

附上几个链接: