Thursday, March 28, 2013

中国房市泡沫化

中国的房价很明显已经泡沫化。数据(见图)显示,北京房价是当地人民平均年收入的30倍。相比之下,纽约才8倍。房价收入比靠前的国家基本都是腐败落后,贫富分化严重的国家(除了罗马)。任志强说中国的房价是由市场决定。这个没错。但是这个所谓市场是富人和官商勾结的市场,不是平民百姓的市场。



Wednesday, March 27, 2013

HDI Development in Korea

Korea has experienced dramatic changed in the last three decades, specifically in economic development. Although the rate of its economic growth is similar to China, its improvement in education and health clearly outpaces those of China (see figure 1).


Tuesday, March 26, 2013

日本材料技术的世界领先地位

材料学的水平极大程度决定一个国家的最高新科技的水平。好的装甲需要好材料,导弹的外壳需要好材料,飞机发动机叶片需要更优异的材料,最高精尖的军用雷达半导体元器件也需要更好的材料。
而 在材料方面,日本已经甩开了第二名美国极大的身位,剩下的俄罗斯中国之类已经远远不在一个档次,这里以人类的最高精尖的三种材料技术——制作洲际弹道导弹 喷管和壳体以及飞机骨架的高强度碳纤维材料;制作最高性能主动相控阵军用雷达的宽禁带半导体收发组件材料;制作最新式涡轮发动机涡轮叶片的高性能单晶叶 片。
三种顶级科技说明日本远远领先于其他地球国家的最顶级科技。
1,首先是最新式的涡轮发动机叶片的五代单晶材料。
因为涡轮叶片工作环境极为恶劣,并且要在极度高温高压下保持数万转的高转速,所以对于高温高压下的抗蠕变性能的要求是非常高的。这个目前科技最好的解决方法就是让晶体约束朝一个方向伸展,使其材料相比于常规材料来说无晶界,这可以大大提升高温高压下的强度和抗蠕变性能。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
目前人类科技的单晶材料共有五代。
我 们可以发现,越到后面一代,已经没有美国和英国的影子了,老毛子那更是不知道甩到猴年马月去了。如果说四代单晶还有法国作为西方的希望苦苦支撑的话,那么 第五代单晶就是东瀛的独舞——人类最顶级的单晶材料,就是日本的第五代单晶TMS-162/192,日本是目前世界上唯一一个能制造第五代单晶材料的国 家。
有些人可能不知道这意味着什么,我们贴出美国F-22和F-35使用的F119/135发动机的涡轮叶片材料CMSX-10三代高性能单晶作为对比。
我们可以看到,三代单晶的典型代表CMSX-10的抗蠕变性能如下:1100度,137Mpa,220小时。这是西方的顶级水平了。
日本的第五代TMS-162呢?同样条件,寿命高达959小时,接近1000小时寿命,相比于美国材料寿命足足达到4倍有余。
事实上,在这个伟大的技术革新面前,传统的材料学和发动机技术的欧洲顶尖水平公司RR已经选择了屈服。英国罗罗大批进口日本的单晶材料用于制造自己的Trent系列发动机。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
2,再看碳纤维材料。
众所周知,碳纤维因为质量轻巧,强度极高而被视为理想的导弹,特别是最顶尖的洲际弹道导弹材料。包括美国侏儒以及三叉戟D5还有法国M51的新式洲际弹道导弹都用碳-碳和碳-树脂复合材料用于制造洲际导弹的壳体和喷管。在这项技术上日本同样领先于世界水平。
碳纤维分为两种——高强度和高拉伸模量
上面的是日本东丽公司的碳纤维材料,下面是美国大力神公司的
其中IM7被用作制造三叉戟D5的壳体。
而东丽的T1000强度高达7060mpa,拉伸模量在高强度碳纤维中也很高(达到了284Gpa),这些都超过了美国的IM9的美国最高水平。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
碳纤维目前勉强处于同一水平线的只有美日(虽然美国相对较差),其他国家与这两个国家相比都不值一提。
我们来看看俄国人到达了一个怎么样的水平吧
纤 维复合材料特别是碳纤维有机复合材料,在现代飞机上获得了广泛应用。与西方比较俄罗斯这种材料,研究及应用时间稍晚一些,上世纪70年代才着手研究。当时 前苏联国家石墨结构材料研究所、全苏聚合物纤维研究所,以及今日的全俄航空材料研究院,生产出拉伸强度2500~3000MPa、拉伸模量250GPa的 高强度碳纤维,以及模量400~600GPa的高模量碳纤维。后来又研究出4000~5000MPa的中模量碳纤维。总体上看俄罗斯的碳纤维产品,性能水 平不如美日水平高。从高强度纤维产品来看,俄罗斯的YKH、BMH比目前通用的,T300大约低1000Mpa。俄罗斯高模量纤维400~600GPa, 与日本M40J、M60J相近。在中模碳纤维方面与美国的,T800H及T1000G有一定差距,在模量相同的条件之下,后者的强度高出 500~1000MPa。
俄国人最强的水准也不过5000mpa封顶,和美日完全不是一个档次,这还是毛子的实验室水平。
业 内专家告诉记者,目前,全世界碳纤维生产厂家中日本的东丽、东邦和三菱3家公司,代表着目前世界上最先进水平。我国碳纤维的质量、技术和生产规模与 国外差距很大,其中高性能碳纤维技术更是被西方国家垄断和封锁。我国虽然经过多年研究和试生产,但至今尚未掌握高性能碳纤维的核心技术。从技术研发到产业
化难度更大,因此碳纤维要真正实现国产化需要一个漫长的过程。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
可以看到,中国的T800级别的碳纤维也只能在实验室里生产。
而日本的远远强于T800的T1000碳纤维已经走入了市场大量制造了。
事实上,T1000只是东丽80年代的制造水平。可见美日在碳纤维领域领先其他国家20年以上。
3,再看看雷达。
大 家知道,主动相控阵雷达的最关键技术就在于一个个T/R收发组件。事实上,AESA雷达就是数千个收发组件单元组建成一台整的雷达。而T/R组件就是由少 则一个,多则4个MMIC半导体晶片材料封装而成。这个芯片是将雷达的电磁波收发组件集成起来的一个微型电路,既负责电磁波的发出,也负责接收。而这个芯 片就是在整个半导体晶元上蚀刻出电路来的。所以,这个半导体晶圆的晶体生长是整个AESA雷达最关键的技术部分。
这就是F-35的诺斯罗普.格鲁曼公司的APG81雷达的MMIC芯片,APG81雷达由数千个一模一样的这样的MMIC芯片组成。这个芯片是以GaAs为基体蚀刻构筑的。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
但是事实上,GaAs材料因为其禁带过窄,其击穿电压过低,其发射功率是上不去的。所以,迫切需要新一代宽禁带的半导体材料。而这个材料目前已经找到了,就是GaN材料。
而GaN材料的晶体生长是非常困难的,目前也是东瀛率先攻克了GaN薄膜的大规模制造工艺。
1994 年日本日亚化工突破了GaN材料成核生长的关键技术,不久P型GaN采用退火技术得以实现,随后GaNled研制成功。近几年,通过外延技术的提 升,GaNLED的内量子效率大大提升,结合粗化、倒装、PSS衬底等提高光输出效率的技术,GaN基LED已广泛应用于全彩显示、交通信号灯、汽车灯 具、液晶背光、室内照明和路灯照明等领域,半导体照明已经日臻成熟,走进千家万户。
目前,绝大部分GaN基 LED均采用价格相对低廉的蓝宝石为衬底材料制备。然而,蓝宝石衬底与GaN材料有高达17%的晶格失配度,如此大的晶格失配造成了很高的位错密度,导致 GaNLED中的非辐射复合中心增多,限制了其内量子效率的进一步提升。SiC衬底与GaN材料的晶格适配度只有3%,远小于蓝宝石衬底与GaN材料间的 晶格适配度,因此在SiC衬底上外延生长的GaN材料的位错密度会更少,晶体质量会更高,同时SiC的热导率(4.2W/cm.K)远大于蓝宝石,有利于 器件在大电流下工作。
但是SiC衬底的制备难度较高,外延生长GaN的成核也具有一定难度。因此,SiC衬底上 制备GaNLED的技术仅限于以美国CREE为代表的少数掌握SiC衬底囗制备技术的公司手中。目前,美国Cree公司生产的GaNLED封装成白光后, 流明效率已经超过200lm/W,远远超过其他同行厂家。
美国由于无法大规模制造SiC基体的GaN材料,所以求助于日本。可以预见,下一代美国的雷达的材料都将是Made in Japan。
[ 转自铁血社区 http://bbs.tiexue.net/ ]
日前LED上游大厂美国Cree表示,该公司已与三菱化学签订独家授权合约。根据双方协议,三菱化学将可制造、贩卖独立的氮化镓(GaN)基板,并有权签订类似专利范围的再授权协议(similarly-scoped sublicenses)。
据了解,三菱化学光电事业部门总经理Yasuji Kobashi在声明中指出,上述授权合约可望帮助该公司在光电产品领域中拓展氮化镓基板业务。
事 实上,美国F-22的雷 达用日本技术从来就不是什么秘密。早在90年代初,也是日本率先攻克GaAs晶圆的生长工艺,逼着美国购买日亚化工的GaAs晶圆技术用以制造F-22的 APG77雷达。正是日本日亚化工向美国的半导体材料制造的技术许可和转让,美国才得以在90年代后半期发力,利用军用雷达的AESA革命甩开其他国家。

美国富人控制舆论

美国富人控制舆论,核心是压制平民的独立思维.有六种兵器.

1)让政治辩论变得丑陋.金钱+语言游戏=摧毁所有独立思维的平台.让你厌倦,绝望和怀疑自己 的思维.

2)提供注意力寄托.竞技体育,娱乐圈提供注意力的避难场所,也促进政治厌倦.

3)政治正确性的控制.如反犹太,社会主义和不爱国等帽子.

4)平 常积累媒体credibility,关键时候用来造假愚众。用"市场决定论"回应对媒体的质疑.

5)留余地.关键问题上放一点讨论空间,非关键问题上全面 放开,作为民主自由的证据.

6)大力宣传极少数平民变富翁的故事,让99%的人对American dream保持希望.

Saturday, March 16, 2013

Raspberry Pi + Ardunio

In a few weeks I will acquire a Raspberry Pi kit and Ardunio UNO kit for my own embedded system exploration. Will report back when I get them.

Here is a list of materials needed for this project:

1. Raspherry Pi model B: to serve as the master brain in the system. The Pi has an ARM microprocessor and standard IOs, much as a regular computer. It also comes with a Linux distribution (Raspbian), and support programming with Python (my favorite programming platform).

2. Ardunio UNO R3: to serve as a slave brain in the system. The Pi is a full fledge OS, but not perfect to perform real time work, such as, accurate timing. Ardunio has a microcontroller on it (ATmega328), which is capable of real time work. The on-the-chip ADC can be used to sense the physical world (through sensor add-ons).

3. Some basic electronics components such as: resistors, transistors, capacitors, jumper wires and so on.

4. Some interesting sensors will be great. I am thinking as least a temperature sensor, an accelerometer, a camera or a photo cell. 

5. I also need a way to control motors, if I decide to build some robotics or automation stuff. A motor controller and some stepper motors will be necessary.

6. For home automation application, I might also need a relay board with a bunch of 120VAC relays controllable with the digital IO from the Pi. The advantage of doing it with the Pi, instead of the ardunio is that one can control the Pi and hence the relays remotely on the web.

7. Neither the Pi or Arduino has built-in DAC. If I want to build a real-time function generator (probably better off with Arduino since it's a real-time system), a DAC is needed.

8. Of course, I definitely need a multi-meter on my bench to measure voltage and stuff.

Embedded System

An embedded system stands for a microprocessor embedded in a device to control its functions. It's very similar to a computer, in that input data can be processed and output. The major difference is, unlike a computer, an embedded system does not have a human sitting in front of a monitor and keyboard to tell it what to do. An embedded system is likely located inside a microwave, or a robotic machinery, to perform certain, but routine tasks. There are usually a few buttons to operate an embedded system, such as "start", "stop", for example. But other than that, it's mostly an autonomous machine running on its own schedule and going through a same set of instructions repeatedly.

One scheme of running an embedded system is to use service scheduling. Once the power button is on, an initialization routine will load a list of service to be executed based on a pre-determined schedule. Such list is something like this:

1. Clean the floor, every 1 hours, starting 5 mins from now
2. Clean the toilet, every 2 hours, starting 10 mins from now
3. Clean the window, every 3 hours, starting now
...

Basically, the schedule contains information of when to do what and how often.

Once the list is loaded, upon hitting the "start" button, the embedded system will start running this permanent loop:

while (1)
{
      if "someone presses 'stop'"
             goto end;
      run_the_list();
}

end:
      exit();

The permanent loop will make sure the machine will ignore everything else happening in the world, faithfully focuses on the tasks scheduled on the service list, until someone presses the "stop" button, or it runs out of power.




Saturday, March 9, 2013

Marijuana vs Tobacco

Written by Noam Chomsky

Ask ourselves a simple question: how come marijuana is illegal, but tobacco legal? It can't be because of the health impact, because that's exactly the other way around. There has never been a fatality from marijuana use among 60 million reported users in the United States, whereas tobacco kills hundreds of thousands of people every year. My strong suspicion, that I don't know how to prove it, is that marijuana is a weed, you can grow it in your backyard, so there's nobody who would make any money off it if it were legal. Tobacco requires extensive capital inputs and technology, and it can be monopolized, so there are people who can make a ton of money off it. I don't really see any other difference between the two of them, frankly-except that tobacco is far more lethal and far more addictive.

Friday, March 8, 2013

More update on ion column design

In the last week or so, I carried out some more systematic study on electrostatic lens design. The overall goal of designing a lens is to meet the following criteria:

- achieve minimum spherical and chromatic aberration coefficients
- have the ability to focus with practical high voltage power supplies
- minimize the probability of micro-discharging between neighboring elements
- has to be manufacturable
- accommodate other physical restrictions, as such field of view, delfection, and etc.

The first step is optimizing the lens geometry for minimal aberrations. Basic geometrical factors include the thickness and bore size of each element, and the gaps between elements. To study the effect of one geometrical factor, one needs to systematically vary that factor, then compute the axial potential field distribution from it. Aberration coefficients can then be evaluated from the axial field. Python is a very convenient tool here for "glueing" multiple smaller modelling programs together. For each geometrical factor, I wrote a .py script to automate the parameter variation, and the extraction of the aberration coefficients.

Once a french ion optics researcher gave a talk at Zeiss, on the FIB that he designed. He stressed that it is simply impossible to design a FIB that can do everything, meaning that achieving the best resolution, and at the same time being a material hogging machine. I was not quite sure what he meant at the time. With more hands-on experience on column design, it becomes more obvious to me that some lenses have to be optimized for low current probes, while others have to be tweaked for larger current probes. Often times the two types of optimizations contradict each other, pushing one to an extreme will inadvertently compromise the other. As a result, at the beginning of a column design, one have to set out and ask, what is the end application of the column? Is it for high resolution imaging which usually uses a small probe size and probe current? Or for high-throughput material modification that would require a higher probe current?

I charged to design a condenser lens, which will magnify a source into a cross-over, and an objective lens that demagnify the the cross-over into a probe. The initial assessment of the column built out of the combination of the two lenses is promising, in terms of resolution performance.

Wednesday, March 6, 2013

Essential Navigation in Vim

This article is written by SathiyaMoorthy.

This article is part of the ongoing Vi / Vim Tips and Tricks series. Navigation is a vital part of text editing. To be very productive, you should be aware of all possible navigation shortcuts in your editor. In this article, let us review the following 8 Vi / Vim navigation options.
  1. Line navigation
  2. Screen navigation
  3. Word navigation
  4. Special navigation
  5. Paragraph navigation
  6. Search navigation
  7. Code navigation
  8. Navigation from command line

1. Vim Line Navigation

Following are the four navigation that can be done line by line.
  • k – navigate upwards
  • j – navigate downwards
  • l – navigate right side
  • h – navigate left side

By using the repeat factor in VIM we can do this operation for N times. For example, when you want to
go down by 10 lines, then type “10j”.

Within a line if you want to navigate to different position, you have 4 other options.
  • 0 – go to the starting of the current line.
  • ^ – go to the first non blank character of the line.
  • $ – go to the end of the current line.
  • g_ – go to the last non blank character of the line.

2. Vim Screen Navigation

Following are the three navigation which can be done in relation to text shown in the screen.
  • H – Go to the first line of current screen.
  • M – Go to the middle line of current screen.
  • L – Go to the last line of current screen.
  • ctrl+f – Jump forward one full screen.
  • ctrl+b – Jump backwards one full screen
  • ctrl+d – Jump forward (down) a half screen
  • ctrl+u – Jump back (up) one half screen

3. Vim Special Navigation

You may want to do some special navigation inside a file, which are:
  • N% – Go to the Nth percentage line of the file.
  • NG – Go to the Nth line of the file.
  • G – Go to the end of the file.
  • `” – Go to the position where you were in NORMAL MODE while last closing the file.
  • `^ – Go to the position where you were in INSERT MODE while last closing the file.
  • g – Go to the beginning of the file.

4. Vim Word Navigation

You may want to do several navigation in relation to the words, such as:
  • e – go to the end of the current word.
  • E – go to the end of the current WORD.
  • b – go to the previous (before) word.
  • B – go to the previous (before) WORD.
  • w – go to the next word.
  • W – go to the next WORD.

WORD – WORD consists of a sequence of non-blank characters, separated with white space.
word – word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word
  • 192.168.1.1 – single WORD
  • 192.168.1.1 – seven words.

5. Vim Paragraph Navigation

  • { – Go to the beginning of the current paragraph. By pressing { again and again move to the previous paragraph beginnings.
  • } – Go to the end of the current paragraph. By pressing } again and again move to the next paragraph end, and again.

6. Vim Search Navigation

  • /i – Search for a pattern which will you take you to the next occurrence of it.
  • ?i – Search for a pattern which will you take you to the previous occurrence of it.
  • * - Go to the next occurrence of the current word under the cursor.
  • # - Go to the previous occurrence of the current word under the cursor.

7. Vim Code Navigation

% – Go to the matching braces, or parenthesis inside code.

8. Vim Navigation from Command Line

Vim +N filename: Go to the Nth line of the file after opening it.
vim +10 /etc/passwd

Vim +/pattern filename: Go to the particular pattern’s line inside the file, first occurrence from first. In the following example, it will open the README file and jump to the first occurrence of the word “install”.
vim +/install README

Vim +?patten filename: Go to the particular pattern’s line inside the file, first occurrence from last. In the following example, it will open the README file and jump to the last occurrence of the word “bug”.
vim +?bug README

Importing Python Modules

Importing Python Modules

January 07, 1999 | Updated February 02, 2001 | Fredrik Lundh

Introduction #

The import and from-import statements are a constant cause of serious confusion for newcomers to Python. Luckily, once you’ve figured out what they really do, you’ll never have problems with them again.
This note tries to sort out some of the more common issues related to import and from-import and everything.

There are Many Ways to Import a Module #

Python provides at least three different ways to import modules. You can use the import statement, the from statement, or the builtin __import__ function. (There are more contrived ways to do this too, but that’s outside the scope for this small note.)
Anyway, here’s how these statements and functions work:
  • import X imports the module X, and creates a reference to that module in the current namespace. Or in other words, after you’ve run this statement, you can use X.name to refer to things defined in module X.
  • from X import * imports the module X, and creates references in the current namespace to all public objects defined by that module (that is, everything that doesn’t have a name starting with “_”). Or in other words, after you’ve run this statement, you can simply use a plain name to refer to things defined in module X. But X itself is not defined, so X.name doesn’t work. And if name was already defined, it is replaced by the new version. And if name in X is changed to point to some other object, your module won’t notice.
  • from X import a, b, c imports the module X, and creates references in the current namespace to the given objects. Or in other words, you can now use a and b and c in your program.
  • Finally, X = __import__(‘X’) works like import X, with the difference that you 1) pass the module name as a string, and 2) explicitly assign it to a variable in your current namespace.

Which Way Should I Use? #

Short answer: always use import.
As usual, there are a number of exceptions to this rule:
  • The Module Documentation Tells You To Use from-import. The most common example in this category is Tkinter, which is carefully designed to add only the widget classes and related constants to your current namespace. Using import Tkinter only makes your program harder to read; something that is generally a bad idea.
  • You’re Importing a Package Component. When you need a certain submodule from a package, it’s often much more convenient to write from io.drivers import zip than import io.drivers.zip, since the former lets you refer to the module simply as zip instead of its full name. In this case, the from-import statement acts pretty much like a plain import, and there’s not much risk for confusion.
  • You Don’t Know the Module Name Before Execution. In this case, use __import__(module) where module is a Python string. Also see the next item.
  • You Know Exactly What You’re Doing. If you think you do, just go ahead and use from-import. But think twice before you ask for help ;-)

What Does Python Do to Import a Module? #

When Python imports a module, it first checks the module registry (sys.modules) to see if the module is already imported. If that’s the case, Python uses the existing module object as is.
Otherwise, Python does something like this:
  1. Create a new, empty module object (this is essentially a dictionary)
  2. Insert that module object in the sys.modules dictionary
  3. Load the module code object (if necessary, compile the module first)
  4. Execute the module code object in the new module’s namespace. All variables assigned by the code will be available via the module object.
This means that it’s fairly cheap to import an already imported module; Python just has to look the module name up in a dictionary.

Tuesday, March 5, 2013

Common standard modules in Python

os – functions for various operating system operations

os.path – functions for manipulating directory/folder path names

sys – functions for system-specific programs and services

time – functions for program timing and returning the current time/date in various formats

filecmp – functions for comparing files and directories

tempfile – functions for automatic creation and deletion of temporary files

glob – functions for matching wildcard-type file expressions (e.g., "*.txt")

shutil – functions for high-level file operations (e.g., copying, moving files)

struct – functions for storing numeric data as compact, binary strings

gzip, bz2, zipfile, tarfile – functions for writing to and reading from
various compressed file formats

pickle – functions for converting any Python object to a string that can be written to or subsequently read from a file

hashlib – functions for cryptography / encrypting strings

socket – functions for low-level networking

popen2 – functions for running other programs and capturing their output

urllib – functions for grabbing data from internet servers

ftplib, telnetlib – functions for interfacing with other computers through ftp
and telnet protocols

audioop, imageop – functions for manipulating raw audio and image data (e.g.,
cropping, resizing, etc.)

Saturday, March 2, 2013

A few ways to check hacker attacks on Linux machines

Professional hackers probably will not leave obvious fingerprints. But there still benefits to check if your Linux server is under attack from malicious hackers. Here are a few ways to check.

1. /var/log/auth.log file. This log file logs all the log in information in and out of the system, including system processes, and users log in.

grep 'Failed password' /var/log/auth.log: this command checks if someone is trying to brute force a login via password enumeration;

grep 'Accepted password' /var/log/auth.log: this command checks if anyone managed to log into the system without your knowledge.

2. lastlog command. This command, extracts information from the auth.log file and display them to the terminal. It also shows system processes as well. So if you are only interested as human login, we can use the following command line to filter out system processes:

lastlog | sed '/Never/d' | less


Friday, March 1, 2013

Useful log files in Linux

=> /var/log/messages : General log messages
=> /var/log/boot : System boot log
=> /var/log/debug : Debugging log messages
=> /var/log/auth.log : User login and authentication logs
=> /var/log/daemon.log : Running services such as squid, ntpd and others log message to this file
=> /var/log/dmesg : Linux kernel ring buffer log
=> /var/log/dpkg.log : All binary package log includes package installation and other information
=> /var/log/faillog : User failed login log file
=> /var/log/kern.log : Kernel log file
=> /var/log/lpr.log : Printer log file
=> /var/log/mail.* : All mail server message log files
=> /var/log/mysql.* : MySQL server log file
=> /var/log/user.log : All userlevel logs
=> /var/log/xorg.0.log : X.org log file
=> /var/log/apache2/* : Apache web server log files directory
=> /var/log/lighttpd/* : Lighttpd web server log files directory
=> /var/log/fsck/* : fsck command log
=> /var/log/apport.log : Application crash report / log file

Recent Progress in Ion Optics Column Design

Recently, through mostly self-learning and vivid discussion with Dr. Ray Hill, I've made quite some progress in understanding the technique and work flow in designing an electrostatic-lens-based, ion optics column for charged particle apparatus.

First, I've managed to learn how to model an electrostatic lens, and to calculate its axial potential distribution with First Order Finite Element Method (FO-FEM). Knowing the potential, one can easily calculate the lens' paraxial optical properties, such as focal length, focus voltage, third-order spherical aberration and first order chromatic aberration.

A typical column design starts with designing the most critical elements in the column - the lenses. Two lenses are usually employed in an ion optics column. Lens design involves optimizing the geometry of the lens, such as bore sizes, electrode thickness and gap sizes between neighbouring electrodes to minimize spherical and chromatic aberration coefficients, within the physical boundaries set by practical limits, such as focus voltage, breakdown stability and etc. I've been able to model the objective lens and understand the effects of each geometrical factor on the optical properties of the lens.

After lenses are designed, they can be put together to form a column. In a column, one cares about one thing: for a given probe current, what is the minimum probe size that can be achieved. This calculation can be done using the so-called "d50" method, with which the probe size can be calculated from a series of parameters: beam energy, energy spread, spherical and chromatic aberration, probe current, source brightness and angular source intensity. I've developed several python-based programs to iteratively compute the Probe Size vs Probe Current curve of a given ion column.