RSS Feed

Review of movie Project Almanac (2015)


I like science fiction movie, especially related to time travelling. Watched Project Almanac (2015), and there are quite a lot of interesting points.

[WARNING! CONTAINS SPOILERS]

Firstly, unlike Back to the Future (1985), time travellers going back will not meet the time travellers selves, this can be seen when the protagonist and the friends solve Quinn’s chemistry problem. Secondly, unlike Time Traveler’s Wife (2009), travelling to the past can change the future; yet in Time Traveler’s Wife the timeline is fixed, there is only one, single, timeline.

So, Project Almanac has a different time travelling concept. Let me list down the features:

  1. When the time travellers going to the past, they will change the future/present. And they can meet past self, which was not happened in the past of the time travellers. (like Back to the Future)
  2. When the time travellers going to the past again, they will not meet the time travellers selves. (unlike Back to the Future)
  3. But, if a time traveller goes to the past “again”, he will see other time travellers, but not meeting the time traveller self. (As in the case of David tries to change the conversation with Jessie.)
  4. After the time travellers make the changes at the past, when they are going back to the present, they have no memory for what is happened for the time from the back to present, yet there is “another self” doing something in between the past and present. And when they are coming back to the present, they are replacing this “another self”. (This can be seen after David makes the changes for the conversation with Jessie, and going back to his present.)

Interestingly, at the end of the movie, there are two identical cameras. This makes me immediately asked the first question, why? Because I never thought that David and the friends are using his father’s camera to record all the events. Therefore, the movie using the footage method is different from Cloverfield (2008), which is only one camera view. But, the footage at the end which shows that David and Christina found the two cameras must not be the same footage for all the time travelling events.

Okay. Now let me explain the movie in my own way so that it makes more sense, because there are somethings which do not really make sense. Firstly, let me name the David in the movie at the beginning until disappearing as David2. David2 discovered that himself appears in his 7-year-old birthday party. Let me name this “himself” as the David1. It is impossible that David1 and David2 are identical, just like the case past Quinn seeing present Quinn. David1 brings the key chain and wears the same cloth as David2 at going to the past at the end. And let me name David2’s past David at the end as David3. Hence, there are three Davids.

So, David1 go to David2’s time, to “fix something”. But it is impossible that David1 did the same thing as David2, else David2 will find the two cameras as David3. That means, David1 “fix[ed] something”, but different from David2, that is why no camera left. Consequently, David2 can find the time machine. Then, because of the time machine, David2 supposes have gone through everything similar to David1, that is why they dressed same and brought the key chain. But at the end, David2 destroyed the time machine, and left the camera to David3.

David3 at the end has a conversation with Jessie and he knows what Jessie wants to say. The only reason is that David3 already watched the video in the camera passed by David2.

So, this is an open ending. Whether David3 is going to do the same time travelling as David2 and left the camera to David4? I believe David3 will have a very different experience from David2 and David1, because he has the video that shows failure from David2. David2 failed because David1 doesn’t really “fix something”, unless David1 is purposely fixing the problem in order to produce David2. Then this will be more interesting.

Hence, the possible sequence is {1, 2, 3, …} or {1, 2, 1, 2, …}. Just enjoy the movie with your own imagination.

Arch Linux in MacBook Air

Posted on

This is not a new stuff. You can get some tutorials from Internet. And it is very interesting when I did this, because I learnt new things. The following procedures are based on what I remembered. So, it may not be 100% accurate, since I am a forgetful person. 😅

What I did was reading the Arch Linux Wiki page. Then, followed the instructions as much as possible, and do some trials and errors. Remember to backup everything necessary. And try this at your own risk.

MacBook Air preparation

Before installing, firstly do the partition using Mac OS X itself. The tool can be found in /Applications/Utilities/Disk Utility.app. Then select the drive, not partition, at the left-hand panel. Next, click the “Partition” tab at the right. Make sure that you have enough disk space for the Arch Linux installation including the disk space for /home. In my case, I created three partitions at the end of the drive. One for root, one for swap, and one for /home. These three partitions are formatted in FAT32.

Since MacBook Air uses EFI to boot, and I am new to UEFI boot, so I installed rEFIt (Mac disk image). After installing rEFIt, reboot the MacBook then will show the options like this. That means, you have successfully installed rEFIt.

Arch Linux installation

Firstly, make sure you know how to install Arch Linux. Then, prepare a live USB for Arch Linux installation. Insert the USB to MacBook, then reboot, and hold the Alt/Option key. Then you will be shown a screen to choose booting into rEFIt or Arch Linux UEFI.

Choose Arch Linux UEFI and boot into Arch Linux for installation. Firstly, format the 3 partitions created in Mac OS X to what you want. In my case, I formatted /dev/sda3 and /dev/sda5 to ext4, and /dev/sda4 to swap. Next, we need to edit the partition type of the formatted partitions. This is done by using cgdisk instead of cfdisk, because MacBook is using GPT partition table. At the same time, you can see which partition is the EFI system partition. In my case, it is /dev/sda1, and it is FAT32 format. Hence, I mounted /dev/sda3 to /mnt, /dev/sda5 to /mnt/home, and /dev/sda1 to /mnt/boot.

Get the internet connection using netctl. Then proceed pacstrap as usual, arch-chroot and do some configurations.

Then, the GRUB installation took me some time. I used GRUB instead of gummiboot, because I know nothing about gummiboot yet. Follow the Wiki instruction, and please note that $esp refers to the mount point of the EFI system partition. In my case, it is /boot (after arch-chroot). After installation of GRUB, then generate the GRUB configuration file.

After installation, I found that there are /boot/EFI/Apple/, /boot/EFI/grub/ and some other files in /boot mount point.

Reboot.

If success, no need to hold the Alt/Option key, rEFIt will prompt you to choose to boot into Mac OS X or GRUB. Boot into Arch Linux through GRUB to check whether you succeed or not.

Post-installation

After installing Arch Linux, do the configurations, add users, install packages, install desktop environments, X11, setup the audio, install NetworkManager, etc.

There are three more things I concerned: i) graphics card, ii) touchpad, and iii) keyboard.

I installed Nouveau driver for the graphics card instead of NVIDIA. As the graphics card is GeForce 320M, it is under the N50 family (refers here). Therefore, I tried to install nvidia-340xx and nvidia-340xx-libgl. But the X11 does not work. At the end, I use Nouveau driver.

Next, the Synaptics input driver works fine in MacBook Air. But there is a little unexpected behaviour. Clicking (not tapping) the bottom-right cordern of the touchpad does not produce a right-click, but still a left-click. But in Mac OS X, clicking at bottom-left and bottom-right are different. Furthermore, some configurations have been done, such as two fingers tap and three fingers tap.

Finally, the keyboard is also configured based on the Wiki. I configured the Fn key and also swapped the Alt/Option key with the Command key. So that it works more like usual keyboard layout.

So, the demo video above first shows the rEFIt, then boot into Arch Linux using GRUB. As I have installed many desktop environments, I chose GNOME and launched the session.

Way of web development

Posted on

Personal Web Server(?) age

When I was doing web development, that time was mostly static pages, with no CSS, a little JavaScript. The only interaction was CGI form. Then I learnt VBScript for ASP and Microsoft Access and used Personal Web Server.

Designing page layout was like hell, everything was using table. The font style was hard coded. So, the HTML source is too messy.

LAMP age

Then, from Personal Web Server, the web server was upgraded to IIS. Next was XAMPP on Windows, using all open source solutions: Apache, MySQL, and PHP. That was a great solution. Unlike ASP, PHP has more functions, more libraries, supports object oriented, syntax similar to C and C++.

JavaScript was not frequently used (in my case), until the usage of XMLHttpRequest (XHR) and AJAX, dynamic content became more attractive. The usage of CSS makes the HTML source much cleaner. JavaScript frameworks became popular for web application development. Some of the frameworks provide better user interface and animation effects. I used MooTools, jQuery and jQuery UI. In my opinion, jQuery is the best because of the element selection syntax is based on CSS selection. It is a great solution to enhance the built-in JavaScript.

To build the web applications, there are web application frameworks too: Ruby on Rails, django (Python), CakePHP (inspired by Ruby on Rails), etc. I personally prefer CodeIgniter. These frameworks are using MVC architecture, including ASP.NET MVC. Instead of static pages, URI routing is used. The developers need not to repeat the source code for similar pages, but using template engine and URI routing, developers only need to focus on the MVC design. Moreover, the web frameworks have their own APIs, the developers should learn how to use these APIs. So does the database, by using the framework APIs, it is possible to change the database from MySQL to PostgreSQL with a little modification.

With the CSS3 and HTML5, web application development becomes much easier. They become more interactive with JavaScript, more elegant with CSS effects.

Other than the frameworks, content management systems such as Joomla!, Drupal, and WordPress were very popular. They allow users to manage their own websites by focusing on the contents only. The developers are usually working on modules to provide more functions to the system, and the web designers will design the themes.

MEAN age

And now, the new trend is the MEAN stack instead of LAMP: MongoDB, Express.js, AngularJS, and Node.js. This solution is seriously different from LAMP. Node.js is not only a web server, but also a server-side JavaScript runtime environment. Unlike client-side JavaScript, JavaScript language is used at the server-side, and it can use the modules which can be installed by using npm (JavaScript package manager). As a result, both client and server sides are using JavaScript.

On the other hand, Express.js is the MVC web application framework. The URI routing and displaying the contents to the users is handled by Express.js. It can use different kinds of template engine where Jade is the default template engine.

AngularJS is a web application framework, which is different from jQuery or JavaScript modules from npm. AngularJS provides MVC architecture to the client-side, so that the view (HTML and CSS) are separated from the controller and model. The greatest feature is the data binding which will make real-time changes to the view. Using jQuery, we need to use EventListener such as onChange(), onKeyDown(), etc. But AngularJS magically omits this phase (demo).

NoSQL is the new trend because of big data. MongoDB is the document-oriented database, which is classified as NoSQL. Relational database management system (RDBMS) such as MySQL organises the data in the table form. As a result, sometimes the design of the database structure is very rigid and causes further changes of the web application becomes difficult. MongoDB does not require table structure, each collection (just like a table in MySQL) has various objects (just like rows of a table in MySQL). Each object is a JSON-like object, specifically BSON (Binary JSON).

Epilogue

Web development is like an ocean. There are various opportunities using web technology, such as WebGL for 3D computer graphics on the web. There are also alternative web servers: Nginx and Apache Tomcat (for JSP); alternative server scripting languages: Perl, Python, Ruby; stylesheet languages: Sass and LESS. It is also possible to develop new wonderful plugins for the web browsers to perform unusual tasks.

Some command-line applications uses web user interface (Web UI) instead of GUI, eg uTorrent Server (for Linux), httrack, Syncthing, etc. This is because HTML is more common than GUI widget toolkits. GUI widget toolkis such as Windows Forms, Qt, GTK+, etc requires runtime libraries. Web UI requires only a modern web browser.

WebKit is a very interesting thing. It is ported to Qt and GTK+, so that Qt and GTK+ can embed the web view in the native applications. Furthermore, Android has WebView class that uses WebKit too, to embed the web view in the native Android applications.

As the trend of big data and IoT, server-client is everything. Linux can be lightweight and focusing on running servers only, including all the logic, running on a single-board computer like Raspberry Pi or C.H.I.P, without any graphical user interface; Web UI allows administrators to manage the Linux server; the devices can connect to the Linux server and perform their tasks systematically.

My memory editor: Med

Posted on

Introduction

There was a wonderful memory editor in Windows, that was Game Master. But it was not a freeware. And there is a freeware memory editor, it is ArtMoney. But it is also for Windows only. In Linux, there is only one memory editor, scanmem with GameConqueror as the GUI. However, there are some limitations from scanmem and GameConqueror. Thus, that is why I decided to create another one which can fit my needs. Therefore, I recently spent some time to develop this memory editor, namely Med.

This project was actually started because of Android hacking. I wanted to hack the Android game memory. I firstly wrote a program called “hed” (hex editor), which is purely in C language, to edit any binary file from ADB shell. The command-line works well. Then, I was thinking about to create “med” (memory editor) using C++, to edit any process from ADB shell. But it fails to work. However, during the development, it works well on the desktop computer, that is, x86 and x86-64 Linux.

Previously I was using GameConqueror. But I recently found that there are some limitations such as save/open file failed to work with the recent compiled version from the Git repository. Besides that, the memory editing does not work either. And, I also forked the project in the GitHub in order to add in a function, that is to “shift” all memory addresses. But at the end, it is not very useful either.

Med

Med is a result from my years of programming experience. It involves

  • C language as it deals with memory directly
  • C++ as I am using the C++ STL container, strings, and exceptional handling
    • I use strings heavily based on what I learnt from UNIX philosophy (as text is important), Tcl philosophy (“Everything is a string”), and OpenGL (as a state machine)
  • GTK+ (version 3) for the GUI
  • Multi-threading using GLib
  • Linux, as this memory editor only works on Linux and relies on procfs
  • JSON, save and open file as JSON file format. JSONPP library is used to work with C++

Though GTK+ is written in C, it is object-oriented. I do not choose Qt because of my fervent towards C language. And I admit that writing a program using C++ is faster and easier than C. The GUI design is actually using Glade.

Status

Med is still under development. If you want to use, just download and compile it. It is available here.

Memory editor editing memory in PCSX2

Memory editor editing memory in PCSX2

Gaming on Linux

Posted on

Recently, I admit that Chromium is faster and smoother than Firefox. And now, for me, Firefox is my primary bookmark manager, reference manger with Zotero, and best ever download manager; yet Chromium is my primary web browser.

This is just like Windows is no more an Operating System for me, but a game console. I have no choice to admit this because playing games on Linux, is still far behind from Windows. The main reason is the developers usually target on Windows instead of Linux. However, it is truly worth for me to optimise the functionality of a computer by running Linux and sacrificing the gaming potentiality of Windows.

Native, Emulators, and Steam

There are several methods to play games on Linux. Steam is one of the methods, but it is not my favourite. Other than that, there are native games in Linux, one of my favourite is Cave Story. Another solution is using emulators, such as DOXBox, VBA-M, MAME, etc. However, not all emulators work perfectly, especially PS2 emulators.

WINE

WINE (WINE Is Not Emulator) is my another favourite. It allows to run Windows applications including some games. Yet, it does not work perfectly, not all games work. I have successfully used it to play KOEI Sangokushi (Romance of the Three Kingdoms) 12 and The Sims 4. WINE works fine with these games. However, some 3D games such as Assassin’s Creed II and Dead or Alive 5 Last Round do not work for me. Moreover, latest version of WINE does not guarantee better compatibility of all games. Some games work better with a certain version of WINE; some games requires certain patched version of WINE.

Virtualisation

So, the native Windows is still an attractive solution for playing games. Therefore, virtualisation is the possible solution. (LXC and Docker do not work, because they are containers.)

VirtualBox

VirtualBox is my favourite hypervisor because it is very easy to use. VirtualBox allows Direct3D yet it is under experimental. It has to be installed through the Guest Addition ISO image. However, I found that the Direct3D driver installed is wined3d.dll. As a result, the 3D rendering produces the same problem as in using WINE for certain games. As a conclusion, using VirtualBox to play 3D games does not work as expected.

QEMU/KVM

Since VirtualBox does not work with 3D games, I recently tried QEMU with KVM. Because I read some articles (this and this) regarding QEMU/KVM, it can virtualise the 3D graphics card. However, this requires 2 graphics cards: one for the host machine, another for guest machine. And this method uses VFIO, which is very troublesome.

Furthermore, there is a Virgil 3D project which targets to produce virtual 3D GPU. I studied a little, yet I didn’t try to compile it, because it seems like very troublesome. As a conclusion, QEMU/KVM does not work either.

VMware Player

So, the final solution I tried recently was VMware Player, which is free for non-commercial use. Installation of the VMware Player version 7 requires GCC 5.1.0 in Arch Linux. In this case, I have to install GCC 5.1.0 and compile the modules, then downgrade to GCC 4.9.2 again.

VMware Player is very similar to VirtualBox, but the VM management less useful than VirtualBox. Besides that, some VM configurations have to be done manually using text editor.

After some configurations and testing, I found that it works as the best among the virtualisation software. It is better than VirtualBox.

VMware Player 3D configuration

To enable VMware 3D graphics for Direct3D, firstly we have to make sure our host machine (Linux) allows “direct rendering” by entering the following command,

glxinfo | grep direct

Then, to make sure it works,

glxgears

Next, install WMware Player, then download and install VMware Tools for the guest OS. This can be done when running the Windows in the VM, by clicking “Virtual Machine” > “Install VMware Tools…”. Alternatively, we can download all VMware Tools for all the supported OSes from Player Preferences menu item. After finish downloading, we can run the setup in the Windows just like VirtualBox. The installation of VMware Tools allows seamless integration of the host and the guest like VirtualBox: such as resizing the window will resize the Windows resolution directly, and also the seamless mouse integration.

After installation, make sure 3D acceleration is enabled. This can be done from VMX file or from the Virtual Machine Settings,

mks.enable3d = "TRUE"
svga.graphicsMemoryKB = "1000000"

If 3D acceleration still does not work, then in the ~/.vmware/preferences, add

mks.gl.allowBlacklistedDrivers = "TRUE"

Next, in the ~/.vmware/preferences, add followings

pref.motionUngrab = "FALSE"
pref.motionGrab = "FALSE"

This disable auto grabbing or ungrabbing our mouse pointer when it moves into the VM window.

However, in my case, my 3D game is very sensitive to the mouse movement. Thus, I have to disable the drivers installed by the VMware Tools. This can be done through Device Manager in Windows. After disabling the drivers, my mouse cannot click anything in VM. I have to use keyboard to restart the Windows.

 

Finally, I think I can enjoy more games in Linux now, though playing the games virtually in Windows.

Desktop Environment and Window Manager


As using Arch Linux, the advantage is I can choose any Desktop Environment or any Window Manager. Recently, I have tried several Desktop Environments and Window Managers which are officially supported in Arch Linux. After trying, I learnt the differences and similarities among these Desktop Environments and Window Managers.

Desktop Environment

My primary Desktop Environment is Xfce4. Previously was GNOME 2. Since the release of GNOME 3, I chose Xfce4 as it is more conventional and there a lot of useful goodies (plugins). It is also lighter than GNOME.

LXDE is similar to Xfce4 in the sense of lightness, and it is even lighter. It uses OpenBox (a window manager). The drawback of LXDE is it has less plugins and lack of GUI configuration tool for modifying shortcut key. However, this can be solved by installing obkey.

In my opinion, GNOME3 is just an eye candy. It is nice to demonstrate the visual effects to the users. Because of the window and workspace are quite different, old conventional user like me feels uneasy to use it. Furthermore, there is no way to move the GNOME Dash (left panel). Yet, there are some ways to modify it. Extra configuration of GNOME requires GNOME Tweak Tool.

MATE and Cinnamon are just similar to GNOME2. LXQt is just similar to LXDE.

I tried KDE4 instead of KDE5. In Arch Linux, they are conflicting each other. Thus, I chose the older and smaller version. KDE is quite different from MATE, Cinnamon, and GNOME3. Because KDE uses Qt; latter uses GTK+. As a result, the designs are different. One of the most prominent characteristics I found is the file browser. Nautilus (GNOME), Nemo (Cinnamon), Caja (MATE), Thunar (Xfce4), PCManFM (LXDE), and PCManFM-Qt (LXQt) shares the bookmarks, yet Dolphin does not share with them. (But PCManFM-Qt uses Qt also.)

Enlightenment is another DE. It is quite different from others. It does not use Qt or GTK+, but uses EFL (Enlightenment Foundation Libraries). It has good visual effects. However, a critical problem I faced is the system tray. The system tray uses systray module in Enlightenment. However, the systray does not work properly and seems very buggy. Even worse, the systray is not going to be maintained by the developers. Therefore, alternative such as trayer can be used.

Window Manager

There are a lot of Window Managers as well. There are three categories: stacking, tiling, and dynamic. Stacking window manager is just like Windows, Mac OS X, or any other common Linux distro. The window can cover or on top of another window. Tiling window manager is not common. The windows are all in the same level, that means they are arranged as tile. Dynamic window manager allows user to switch between tiling or stacking or mixed. All the DEs mentioned above are consider stacking. Though we can arrange our windows as tiling in stacking window manager, the design of the window manager itself is still based on stacking.

I tried several window managers. There are some I do not like, especially tiling window managers, because they are almost similar. I tried Window Maker and IceWM, they are impressive, but not my favour.

As LXDE uses OpenBox, we can login with OpenBox without LXDE as a pure window manager. It is interesting to learn that a window manager does not necessary provide any panel (taskbar). The advantage of OpenBox is that you can choose your own panels, such as tint2 or Cairo-Dock. You can just use whatever you like, even Xfce4 panel or LXDE panel.

I tried fluxbox awhile only. It is also a stacking window. But it provides a panel. As a result, we need not to choose our own panel. A very simple ready to use window manager. OpenBox requires customization before truly using it.

The last one I would like to mention is i3. It is a dynamic window manager. A Linux lover should try it. It requires a little time to learn the tiling concept and the hotkeys. Once you know how does it work, you will like it. i3 can be switched to tab mode or tile mode. Furthermore, the windows can be changed to floating windows. Floating window is similar to stacking window, but it is always on top of the tiling window. So, the software such as Pidgin can be set to floating window. Besides that, Pidgin can hide to tray. Sorry, i3 does not have any minimize or maximize. Hide to tray icon is the only solution.

If using i3, you can switch between the window using keyboard, but not using conventional Alt+Tab. You can arrange the order of the windows using keyboard. You can also resize the tile using keyboard. One serious problem I faced is drag and drop between the window. But I believe that this problem can be solved by changing my behaviour of using the window manager. (Strongly influenced by stacking window manager.)

Components

After trying these DEs and WMs, whatever I choose, I will prefer several features. Firstly, hotkeys are important. It should allow me to customize the hotkeys. Panel is important to show the running applications, and system tray is very important to avoid using too much space for the running applications. Showing date, battery status, network connection, and volume control is very important. These show and control the computer status. Workspace (or virtual desktop or pager) is very important. Launcher is important, such as gmrun or GNOME Do. Using a launcher, we can run any application by typing the command. It is different from running a program from terminal emulator. When running a program from terminal emulator, the program is a child process of the terminal emulator. Exiting terminal emulator will also terminate the child processes.

Less important components are application menu, startup applications, terminal emulator, file browser, task manager, screensaver or screen lock, notification, and screenshot. Similar to launcher, we can launch the application from the menu. Sometimes I just cannot remember an application name, searching from the menu does help. Startup applications can always be configured, either using DE’s configuration tool, or using .xprofile. There are a lot of terminal emulators. Just install one and bind it with a hotkey, it will be very useful to open a terminal emulator anytime. Similarly, file browser is useful to manage the files: drag and drop, copy-paste, delete, open, rename, etc. Task manager, just like “ps aux” and “top”, allows us to see the CPU usage and kill any process. Screensaver or screen lock allows to protect the current screen from others to view, especially when we are away. A popup notification helps a lot to notify the users for a certain matter, e.g. low battery, reminder, email, etc. Screenshot is just useful for some sharing or project.

In my opinion, with the components and features stated above, any DE or WM will be satisfying.

RIME 中州韵输入法引擎之“五笔朙月流”


又一篇用中文写的。因为这篇反正就是关于中文输入法引擎——RIME中州韵输入法引擎——而写的。这中州韵输入法引擎是从Arch Linux的维基那里看到的。它是一种非常奇特的输入引擎。因为它可以让使用者简单地自制理想的输入法。

在Linux,有好几种中文输入法,谷歌拼音、搜狗拼音、SunPinyin等。其它非拼音输入法也有,如五笔输入法、仓颉输入法。本人虽曾经想学仓颉输入法,但因为太难记难用,最后放弃。因为有些生字不晓得如何读,拼音是没用的,所以最后就学了五笔输入法。

五笔输入法,只要懂得字形就可以输入了。因此用五笔输入比拼音来得准确。比如输入名字,用一般的拼音会出现很多选择,而这些“候选字”要一一看过,是相当的累。而若用五笔输入法,就可以把“候选字”减少到一两个罢了。但本人因为不熟悉五笔输入法,尤其在跟朋友在线对话时,拼音会是基本的思考方式,所以本人用拼音会比五笔来得快。因此,五笔和拼音两种输入法一起使用的话,对我来说就会出现因切换输入法而迟缓和多余动作的问题。因此,最理想的方式就是将两种输入法融合,不需要切换,以五笔为优先,因为五笔输入后,候选字词会比拼音来得少。能够达到这种理想输入法的,就是这个中州韵输入法引擎。

这中州韵输入法引擎,在我用的时候发现有一个字,因为台湾繁体和大陆简体有一些差别,所以中州韵输入法引擎本身的有些字用了不太一样的代码,就是“々”和“𠚤”。但中州韵输入法引擎可以用简单的方法让我解决这个问题。不仅如此,我还借此机会加入“绘文字”。因此,我就先制作了自用的五笔输入法。用这个的话,就可以轻松的输入我要的表情绘文字了😁。

但融合两种输入法,说容易也不是很容易,因为没有完善的说明书。因此本人就在百度贴吧里询问了。经过高人指点,后来就尝试融合。起初有几个问题无法解决,但勉强还是可以使用。后来根据苍颉检字法的制作,终于完成“五笔朙月流”输入法了。用这个输入法,就可以拼音加上五笔,输入人名和跟朋友对话都不成问题了。而且还可以反查五笔代码,即在不知五笔的代码是什么的情况下,还可以反查,这样的话就可以同时学习五笔输入法了。强!

这“五笔朙月”和“五笔拼音”是不同的。五笔拼音无法用拼音输入句子,而这“五笔朙月”就可以做到这点。

源码可在此处下载。

Follow

Get every new post delivered to your Inbox.

Join 161 other followers