
JME is the most popular molecule structure editor on the web. We can integrate it to any web pages or Java applications. Now, we’re going to integrate JME into .Net applications via IKVM.NET .
Although JME can be obtained at no cost, it’s still a private software as it’s not open source. Any port method at source code level would not work on JME. The only way is work with JME Java byte-code.
IKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework.To be brief, IKVM.NET is a JVM for .Net. With IKVM.NET, we’re able to run Java byte-code on .Net Framework. IKVM.NET has uncomplete support for AWT and Swing.
With several simple steps listed below, you’re able to integrate JME into your VB.Net or C# applications.
Let’s have a look at how we can do it.
Under the directory of IKVM.NET executables, this command below can simply covert JME from Java byte-code into .Net IL code.
C:\ikvm-0.40.0.1\bin>ikvmc.exe -target:library JME.jar
Note IKVMC0002: output file is "JME.dll"
Add JME.dll and other IKVM.NET dependencies into your Visual Studio project as reference and then you can access JME class in C#.
JME applet = new JME();
JWindow floatingWindow = new JWindow();
floatingWindow.setSize(300, 300);
floatingWindow.setLayout(new GridLayout(1, 1));
floatingWindow.add(applet);
applet.init();
applet.start();
floatingWindow.setVisible(true);
With this code snippet you can display JME in C# applications and invoke the applet’s Java methods in C#.
Tags: .Net, Applet, C#, Chemoinformatics, JME
Current Status:
Tags: NUDDB Development Diary
什么样的商业计划书才算好的商业计划书?才能打动风险投资人的心?天使基金投资人周鸿一告诉你:十页纸的PPT足矣。
曾几何时,风险投资、VC、烧钱,这些词语充斥耳边。踏上艰苦创业路的人谁不希望能够天道酬勤,获得一笔风险投资,为自己刚刚起步的事业装上助推器?
要想受到投资人的青睐,获得投资基金,一份好的商业计划书是重要的第一步。
如何写好商业计划书?
对于最近市面上流行的写计划书的模板,还有教你如何写商业计划书的书,周先生直言不讳:“那些都是误人子弟。”如何写出一份好的商业计划书?首先切记不可长篇大论。
很多人在计划书里将营销理论、如何进行财务分析、投资回报率这些东西,洋洋洒洒写上几大篇。要不就是介绍自己企业将来的组织结构、组织形式、员工激励计划。在周先生看来,这些厚厚的大部头不会有人看。更有甚者,产品还没做出来,先说我准备在中央电视台做怎样怎样的广告,这种计划书不是很可笑嘛。
其次,千万别想着,我要写的是商业计划书,就要用很商业化的语言,周先生以亲身经验告诉我们“这种很多是没人看的”。用平实的语言说出你的第一步计划就好。
投资人的时间有限。要抓住留给你的短暂时间,写好、说好商业计划书,就需要你闭着眼睛不看这份计划书,也能准确表述其中内容,并引起对方的兴趣。“所以,对于早期融资的项目,一份好的计划书就是一个不超过十页的PPT.最重要的是要有干货。”面对热情的技术人员,周鸿掉给出这样10条秘方。
周鸿一教您打造十页完美计划书
第一,用几句话清楚说明你发现目前市场中存在一个什么空白点,或者存在一个什么问题,以及这个问题有多严重,几句话就够了。很多人写了三百张纸,抄上一些报告。投资人天天看这个,还需要你教育他吗?比如,现在网游市场里盗号严重,你有一个产品能解决这个问题,只需要一句话说清楚就可以。
第二,你有什么样的解决方案,或者什么样的产品,能够解决这个问题。你的方案或者产品是什么,提供了怎样的功能?
第三,你的产品将面对的用户群是哪些?一定要有一个用户群的划分
第四,说明你的竞争力。为什么这件事情你能做,而别人不能做?是你有更多的免费带宽,还是存储可以不要钱?这只是个比方。否则如何这件事谁都能干,为什么要投资给你?你有什么特别的核心竞争力?有什么与众不同的地方?所以,关键不在于所干事情的大小,而在于你能比别人干得好,与别人干得不一样。
第五,再论证一下这个市场有多大,你认为这个市场得未来是怎么样?
第六,说明你将如何挣钱?如果真的不知道怎么挣钱,你可以不说,可以老老实实地说,我不知道这个怎么挣钱,但是中国一亿用户会用,如果有一亿人用我觉得肯定有它的价值。想不清楚如何挣钱没有关系,投资人比你有经验,告诉他你的产品多有价值就行。
第七,再用简单的几句话告诉投资人,这个市场里有没有其他人在干,具体情况是怎样。不要说“我这个想法前无古人后无来者”这样的话,投资人一听这话就要打个问号。有其他人在做同样的事不可怕,重要的是你能不能对这个产业和行业有一个基本了解和客观认识。要说实话、干实事,可以进行一些简单的优劣分析。
第八,突出自己的亮点。只要有一点比对方亮就行。刚出来的产品肯定有很多问题,说明你的优点在哪里。
第九,倒数第二张纸做财务分析,可以简单一些。不要预算未来三年挣多少钱,没人会信。说说未来一年或者六个月需要多少钱,用这些钱干什么?
第十,最后,如果别人还愿意听下去,介绍一下自己的团队,团队成员的优秀之处,以及自己做过什么。
一个包含以上内容的计划,就是一份非常好的商业计划书了。
商业计划书就是大实话
最后,周鸿一先生总结:“做商业计划书就是说大实话。怎么想的就怎么说,用最朴素、最明了的语言,说出你的行动计划,说出第一步准备干什么。”
对于创业者,学会写商业计划书,学会以一个良好的心态建立一个合作的团队,完成第一个挑战?D?D获得风险投资,这样你的创业就有了一个很好的开始。
Recently, I wrote a post named Faster Fingerprint Search with Java & CDK . It’s fast enough, with a response time of 300 ms for a database of 100000 compounds as you can see from the chart above. If we do some simple improvement on it, it could be even faster.
As we all know, when we search for similar structures, our judgement of similarity is based on Tanimoto coefficient. If variable ‘a’ stands for the number of all TRUE bits in one fingerprint, ‘b’ stands for another, and ‘c’ stands for the number of TRUE bits they both have, we can define Tanimoto coefficient as c/(a+b-c). If we want to find some fingerprints with a minimum Tanimoto coefficient λ, we are saying c/(a+b-c) > λ. As c is the number of TRUE bits they have in common, c is absolutely not greater than a or b. Then we get b*λ<a<b/λ and a*λ<b<a/λ.
With this inequality in hand, we don’t need to iterate all the fingerprints to do a similar structure search. If we sort all the fingerprints in their number of all TRUE bits, we can significantly reduce the range of database we need to screen.
Here is the distribution of fingerprint darkness of my database of 80000 commercial compounds.
And here is the search time after new search method is applied.
Extremely fast!
Tags: CDK, Cheminformatics, Chemoinformatics, Fingerprint
Rich Apodaca wrote a great serious posts named Fast Substructure Search Using Open Source Tools providing details on substructure search with MySQL. But, however, poor binary data operation functions of MySQL limited the implementation of similar structure search which typically depends on the calculation of Tanimato coefficient. We are going to use Java & CDK to add this feature.
As default output of CDK fingerprint, java.util.BitSet with Serializable interface is perfect data format of fingerprint data storage. Java itself provides several collections such as ArrayList, LinkedList, Vector class in package java.util. To provide web access to the search engine, thread unsafe ArrayList and LinkedList have to be kicked out. How about Vector? Once all the fingerprint data is well prepared, the collection function we need to do similarity search is just iteration. No add, no delete. So, a light weight array is enough.
Most of the molecule information is stored in MySQL database, so we are going to map fingerprint to corresponding row in data table. Here is the MolDFData class, we use a long variable to store corresponding primary key in data table.
public class MolDFData implements Serializable {
private long id;
private BitSet fingerprint;
public MolDFData(long id, BitSet fingerprint) {
this.id = id;
this.fingerprint = fingerprint;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public BitSet getFingerprint() {
return fingerprint;
}
public void setFingerprint(BitSet fingerprint) {
this.fingerprint = fingerprint;
}
}
This is how we storage our fingerprints.
private MolFPData[] arrayData;
No big deal with similarity search. Just calculate the Tanimoto coefficient, if it’s bigger than minimal similarity you set, add this one into result.
public List searchTanimoto(BitSet bt, float minSimlarity) {
List resultList = new LinkedList();
int i;
for (i = 0; i < arrayData.length; i++) {
MolDFData aListData = arrayData[i];
try {
float coefficient = Tanimoto.calculate(aListData.getFingerprint(), bt);
if (coefficient > minSimlarity) {
resultList.add(new SearchResultData(aListData.getId(), coefficient));
}
} catch (CDKException e) {
}
Collections.sort(resultList);
}
return resultList;
}
Pretty ugly code? Maybe. But it really works, at a acceptable speed. Tests were done using the code blow on a macbook(Intel Core Due 1.83 GHz, 2G RAM).
long t3 = System.currentTimeMillis();
List<SearchResultData> listResult = se.searchTanimoto(bs, 0.8f);
long t4 = System.currentTimeMillis();
System.out.println("Thread: Search done in " + (t4 - t3) + " ms.");
In my database of 87364 commercial compounds, it takes 335 ms.
Tags: CDK, Cheminformatics, Chemoinformatics, Fingerprint, Java
经过一个月的努力,chemsoso的后台功能以及更加完善了。明天在进行了最后的bug修正之后将会正式发布出来,敬请期待。同时,正在筹备中的下一版的chemsoso将会提供丰富的化学信息学功能,将会在一个月内发布。
Tags: ChemSoSo