Algorithm Design, 2003\n\nThis is not an academic study, this is a real industry project :-). In the project I attempted to optimize runtime performance of scan algorithms used in a well-known anti-virus software. The basic scan technique involves a massive amount of search for a large set of virus fingerprints (regular expressions) against gigabytes of data on computers. One type of virus feature is defined by fingerprints at specific offsets from other fingerprints. Many of those fingerprints are also conditional to certain runtime conditions, like function calls / conditional branch instructions to certain address. For the ease of maintenance, all these features are organized in the order of viruses they can identify, which, when used to search on data, can be very inefficient, frequently causing revisit to the same piece of data, invalidating locality of reference, and resulting bottleneck of I/O transfer. The proposed algorithm pre-compiles all fingerprints, reorganizing them according to the runtime conditions and offsets, so that at runtime, an once-through search algorithm can be used.
Algorithm Design, 2003\n\nDeveloped for the same reason as an other algorithm //[[A Multiple Feature Checking Algorithm]]//. The described algorithm is extremely simple and the time complexity is the same as KMP for single pattern matching. The algorithm can be easily adopted for the Boyer–Moore algorithm.
Technical Initiative, 2006\n\nThis is a tech proposal I have written for quite a while. The article concerns the C++ implementation of the Aspect Oriented Programming paradigm (AOP). I believe this initiative design is more succinct and maintainable than existing implementations, in particular Aspect C++. The reason I put off making this article publicly available is the worry about mistakes I might make in it, as I am not a real expert on AOP but an amateur (with quite much confidence in C++ language). Anyway after some further amendment, I decided it should go here. Key features include type safety based on C++ templates, introducing new formal parameters to function calls, and partial aspect specialization.
Algorithm Design, 2002\n\nThe algorithm is roughly based on a data compression algorithm. The notion is to compress upcoming data by using the information of existing/previous backup data. The same algorithm has been successfully used in online software upgrade, where the client program only need to download a compressed package pre-produced for its current version, this dramatically reduced the time to wait for downloading even in a low bandwidth network.
~PhD Transfer Report, Imperial College, 2006\n\nRequired by Department, all ~PhD students have to go through a transfer exam in the half way of their studies. A transfer report is to be presented in the exam to show the progress of your research, outcomes you have achieved, and the plan for future work. In my transfer report, descriptive ILP has been extensively discussed, several systems presented. Largely for runtime performance reasons, I proposed using a new descriptive ILP system, called WeakILP, with the ~AdaBoost machine learning algorithm as a new predictive learning methods. ~WeakILP is named after its expected low performance in predictive accuracy if used as a standalone predictive learning system. The new combining method was found to perform very well in some preliminary experiments. However, soon after the transfer exam, I have redesigned ~WeakILP by using a more concise algorithm, allowing users to define the language bias using context-free grammar. The new method has been presented in the ILP '06 conference, and the name of ~WeakILP has been taken over for this new method. Simon Colton, my ~PhD supervisor has contributed a lot time doing proof reading, discussing the content, and giving many useful suggestions.
Here might be some programs I wrote in spare time. They may or may not be related to my study.\n\n[[Firefox Search Engines]]\n\nSome code used for this wiki\n\n[[Google Analytics]]\n\n[[Disable Cache]]\n\n[[Disable Editing ViaHTTP]]
[[Home]]\n
/***\n|''Name:''|Disable Cache|\n|''Description:''|To disable browser cache for this page|\n|''Version:''|1.0.0|\n|''Date:''|8 Feb 2007|\n|''Author:''|Ning Jiang[img[@|wiki/images/defaultaccount.png]]|\n***/\n\n//{{{\nfunction disable_browser_cache(){\n //locate the head element\n var head=document.getElementsByTagName("head")[0];\n \n //disable cache to ensure users always load new pages.\n var metaPragma=document.createElement("meta");\n metaPragma.httpEquiv="PRAGMA";\n metaPragma.content="NO-CACHE";\n var metaCacheControl=document.createElement("meta");\n metaCacheControl.httpEquiv="CACHE-CONTROL";\n metaCacheControl.content="NO-CACHE";\n head.appendChild(metaPragma);\n head.appendChild(metaCacheControl);\n}\n\ndisable_browser_cache();\n//}}}\n\n
/***\n|''Name:''|Disable Editing Via HTTP|\n|''Description:''|This piece of code prevents the display of editing facilities when the page is opened through the HTTP/HTTPS protocols. This makes the page look as a normal web pages, and avoids the popup dialogue to appear when you leave the page after accidentally changed some tiddler.|\n|''Version:''|1.0.0|\n|''Date:''|24 March 2006|\n|''Author:''|Ning Jiang [img[@|wiki/images/defaultaccount.png]]|\n***/\n\n\n//{{{\n//to backup a reference to the original toolbar handler.\nconfig.macros.toolbar.preHandler=config.macros.toolbar.handler;\n\n//if the page is viewed through the http(s) protocol, disable editing features.\nif(document.location.protocol.indexOf("http")!=-1){\n //define a new toolbar handler\n config.macros.toolbar.handler= function (place,macroName,params,wikifier,paramString,tiddler) {\n //remove +editTiddler from parameter list\n var newParams=new Array();\n for(var i=0; i<params.length; i++)\n if(params[i].indexOf("editTiddler")==-1)\n newParams[newParams.length]=params[i];\n\n paramString=paramString.replace(/[+\s-]?editTiddler/gm, "");\n\n //call the original handler\n return config.macros.toolbar.preHandler(place, macroName, newParams, wikifier, paramString, tiddler);\n }\n}\n\n//}}}
Firefox has customisable search engines, where you can easily add/create search engines for your favourite websites. Following are two search engines I am using. If you want more, try [[this|https://addons.mozilla.org/search-engines.php]] or you can create your own by following the [[guide|http://developer.mozilla.org/en/docs/Creating_OpenSearch_plugins_for_Firefox]].\n\n[img[wiki/firefox-search-engines/citeseer.png]]//~CiteSeer Publications Research Index// <html>{ <a href="#" onclick="if(window.sidebar)if(window.sidebar.addSearchEngine)window.sidebar.addSearchEngine('http://www.doc.ic.ac.uk/~nj2/wiki/firefox-search-engines/citeseer.src', 'http://www.doc.ic.ac.uk/~nj2/wiki/firefox-search-engines/citeseer.png', 'CiteSeer', 'General');return false;">install</a> }</html>\n\n[img[wiki/firefox-search-engines/collins.png]]//Search Collins Corpus// <html>{ <a href="#" onclick="if(window.sidebar)if(window.sidebar.addSearchEngine)window.sidebar.addSearchEngine('http://www.doc.ic.ac.uk/~nj2/wiki/firefox-search-engines/collins.src', 'http://www.doc.ic.ac.uk/~nj2/wiki/firefox-search-engines/collins.png', 'Collins Corpus', 'General');return false;">install</a> }</html>
/***\n|''Name:''|Google Analytics|\n|''Description:''|To enable Google Analytics to work with me|\n|''Version:''|1.0.0|\n|''Date:''|8 Feb 2007|\n|''Author:''|Ning Jiang[img[@|wiki/images/defaultaccount.png]]|\n***/\n\n//{{{\n\n\nfunction load_google_analytics(){\n var head=document.getElementsByTagName("head")[0];\n var script=document.createElement("script"); \n script.type="text/javascript";\n script.src="http://www.google-analytics.com/urchin.js";\n head.appendChild(script);\n}\n\n\nfunction initialise_google_analytics(){\n if(typeof(urchinTracker)=="function"){\n _uacct="UA-1318569-1";//replace the id with your own given by Google Analytics\n urchinTracker();\n }else\n window.setTimeout(initialise_google_analytics, 1000);\n}\n\n\nload_google_analytics();\n//To initialise we have to wait until the browser has finished loading the library.\n//This is a bug in IE\nwindow.setTimeout(initialise_google_analytics, 1000);\n\n//}}}\n\n
Adding A small number\nLaplace's Law of Succession (wrong in theory but practical)\n\nFrom [[Bayes' Theorem|http://www25.brinkster.com/ranmath/bayes01.htm]]\n<<<\nIn older books on probability you may find mention of "Laplace's Law of Succession." It is derived from the continuous case of Bayes'formula and states\n\n If an event has occurred m times and has failed to occur n times in m + n trials, the probability that it should occur on the next trial is (m + 1)/(m + n + 2). \n\nThere are two things wrong with Laplace's Law of Succession. First, it makes too strong a statement in the face of meager data, and second, it injects a bias toward a probability of 1/2 into the result. Remember that Bayes' formula merely tells us the probability of a cause or of a causative probability. If we want to infer a consequent probability from these causes by caclulating a weighted average and the antecedent probabilities are somewhat in doubt we should either perform a sensitivity analysis as we did with the Roman coin or calculate a confidence interval. Laplace's formula assumes an initial distribution uniform from 0 to 1. Since this distribution has a mean of 1/2, it implicitly assumes an initial probability of 1/2.\n\nIf we have no information about possible causes and observe m successes in m + n trials, our best estimate of the causative probability is m/(m + n). That is because the observed result is more likely to come from this probability than from any other. Differentiate (m + n) Cm pm (1-p)n with respect to p, set equal to zero, and solve for p. \n<<<\n\n//m//-estimate (s+p~~a~~m)/(n+m)\n\nsophisticated programming\n\n
I am a final year ~PhD student at Department of Computing, Imperial College London. I am doing research on data mining, or more precisely on inductive logic programming (ILP), under the supervision of Simon Colton and Stephen Muggleton.\n\nMy current research project is WeakILP, a new ILP system inspired by descriptive ILP and boosting algorithms. For more information, see [[Projects]]. You can also find my [[Publications]] and other [[Technical Articles]] on this site. \n\nA latest update to my research on boosting and ILP is summarised in my latest talk { [[slides|wiki/publications/boostilp.pdf]] }\n\nPrior to my ~PhD studies, I had been a senior software engineer with a provable track record of combining my research interest with the need of industry. With two years research experience on information retrieval during my Master's degree and five years working experience at leading software companies, I had developed extensive knowledge on both research and programming and been highly skilled in software design and algorithm design. \n\n[[Combined Reasoning Group|http://www.doc.ic.ac.uk/crg/]]\n[[Department of Computing|http://www.doc.ic.ac.uk]]\n[[Imperial College|http://www.ic.ac.uk]]\n
[[Home]]\n[[Research]]\n[[Projects]]\n@@[[Publications]]@@\n@@[[Technical Articles]]@@\n[[Code]]\n\n[img[XML|wiki/images/feed-icon16x16.png]][[Subscribe|index.xml]]\n\n//Highlighted sections have more information//\n[img[@|wiki/images/defaultaccount.png]]
Contact:\n\nEmail is my preferred method\n[<img[Departmental Account|wiki/images/docaccount.png]] \n\nAlternatively somebody will put you through if\n\nyou call from college on __48287__\nor __+44 (0)20 7584 8287__ from outside\n\nYou can find me at __Room 407, Huxley Building, South Kensington Campus__. Here is [[the map|http://www.imperial.ac.uk/images/mappdfs/sk-map.pdf]] \n\n\n
The [[WeakILP]] program is another //learning from interpretation// ILP system implemented during my ~PhD studies. The purpose of this new system is to prove some new ideas my supervisor and I think might improve the performance of normal ILP systems. Our innovations include:\n\n#A context-free grammar to define language bias. Not only is the new grammar more convenient and expressive, but it allows for further improvement based on instantiation counting.\n#Descriptive methods instead of heuristic-based predictive methods. Normal ILP uses a heuristic to search a much larger set of clauses, which is a source of overfitting. In our new method, we exhaustively generate all clauses defined by a tighter language bias. The aim is to make better use of a smaller set of clauses, such that the result can be easily generalised to unseen data.\n#Counting ground instantiations of a clause for predictive tasks. Compared to the more conventional //truth-value// based technique, this new approach performs much better on all of the relational datasets we have tested. We are investigating if it is possible to use this simple approach to improve existing ILP methods.\n#Majority vote by boosting. Instead of using the conjunction of multiple clauses as hypotheses, we combine selected clauses by using boosting. The advantage of this method is that the predictive accuracy is improved on many datasets while the learning result retains understandability. The computational performance is also better than pure ILP method, as boosting is a simple, quick algorithm.\n\nExperimental studies are being conducted to investigate the performance of WeakILP on real-word datasets. So far, the experiments we have done include:\n\n#Bioinformatics:\n##Protein secondary structure prediction\n##DSSTox\n##Carcinogenesis\n##KDD Cup 2001 Task 2\n##Mutagenesis\n#Engineering:\n##Finite mesh design\n#Artificial problems\n##Student-loan\n##Moral-reasoner\n\nFor now, I am investigating a new method to improve WeakILP by using //adaptive language bias//. Adaptive language bias uses a statistical model to optimise its search for accurate clauses (in terms of predictive accuracy or interestingness). Different from heuristics used in normal ILP systems, which are using a heuristic function to guide the best-first search, adaptive language bias learns a statistical model and uses it to predict the most accurate clause globally in the specified language. Another difference is the fact that this method is not working directly on the lattice of clauses as dose normal ILP.
For other not published reports and technical articles, click [[here|Technical Articles]]\n\n__Inductive Logic Programming__\n\n''Ning Jiang and Simon Colton'' { [[link|Boosting Descriptive ILP for Predictive Learning in Bioinformatics]] }{ [[pdf|wiki/publications/jiang07boosting.pdf]] }\n//Boosting Descriptive ILP for Predictive Learning in Bioinformatics//\nTo appear in Lecture Notes in Artificial Intelligence, 2007\n\n''Ning Jiang and Simon Colton'' { [[link|Boosting Descriptive ILP for Predictive Learning]] }{ [[pdf|wiki/publications/jiang06boosting.pdf]] }{ [[poster|wiki/publications/ilp06poster.pdf]] }{ [[slides|wiki/publications/ilp06slides.pdf]] }\n//Boosting Descriptive ILP for Predictive Learning//\nIn 16th International Conference on Inductive Logic Programming (Short Papers), ILP '06, pages 110~112, 2006 \n\n\n__Bayesian Model Selection__\n\n''Ning Jiang and Zhongzhi Shi'' { [[link|Bayesian Posterior Model Selection for Text Clustering]] }{ [[pdf|wiki/publications/jiang02bayesian.pdf]] }\n//Bayesian Posterior Model Selection for Text Clustering// (in Chinese)\nJournal of Computer Research and Development, 2002, 39(5): 580~587\n\n''Ning Jiang, Xiujun Gong, and Zhongzhi Shi'' { [[link|Text Clustering in High-dimension Feature Space]] }{ [[pdf|wiki/publications/jiang02clustering.pdf]] }\n//Text Clustering in High-dimension Feature Space// (in Chinese)\nComputer Engineering and Applications, 2002, 38(5): 63~67\n\n''Ning Jiang'' { [[link|Text Clustering in High-dimension Feature Space]] }{ [[pdf|wiki/publications/jiang01thesis.pdf]] }\n//Hierarchical Bayesian Clustering and its Application to Text Mining// (in Chinese)\nMaster thesis, NO.9911, University of Science and Technology of China, 2001\n\n\n__Incremental Syntax Parsing__\n\n''Ning Jiang and Zhongzhi Shi'' { [[link|Incremental Syntax Analysis on the Language-based Editor]] }{ [[pdf|wiki/publications/jiang01syntax.pdf]] }\n//Incremental Syntax Analysis on the Language-based Editor// (in Chinese)\nComputer Science, 2001, 28(12): 102~106\n\n
\nHere is a summary of my research areas.\n| !Areas | !Subareas | !Methods |\n| Text Mining |Text Classification |Bayesian Networks, SOM |\n|~|Text Clustering |Bayesian Model Selection, EM Algorithm, Mixture Model, Hierarchical Clustering|\n|~|Feature Filtering |Mutual Information, Information Entropy |\n| Data Mining |Descriptive Learning |Inductive Logic Programming (WeakILP, HR, Claudien, WARMR) |\n|~|Predictive Learning |Inductive Logic Programming, Boosting, SVM (Boosted WeakILP, Progol, Foil), Adaptive Language Bias|\n|~|Computational Bioinformatics (Predictions of protein structure, toxicity, mutagenesis and annotations) |~|\n| Parsing |Incremental Syntax Parsing |Incremental LALR |\n\nI am also interested in decentralised peer-to-peer systems and ad-hoc networks, as I believe they can form the next generation of infrastructure for Internet and telecommunication. I have designed (in 2001) a peer-to-peer file sharing system, which optimises its storage by content of files other than the meaningless hash code. The system uses a statistical model to encourage attendants to contribute to their own communities and to avoid abuse. However due to the amount of work to complete it, it is still largely a scratch.
Ning Jiang
http://www.doc.ic.ac.uk/~nj2/
/*{{{*/\n* html .tiddler {\n height: 1%;\n}\n\nbody {\n font-size: .80em;\n font-family: 'trebuchet ms',arial,sans-serif;\n margin: 0;\n padding: 0;\n}\n\nh1,h2,h3,h4,h5 {\n font-weight: bold;\n text-decoration: none;\n padding-left: 0.4em;\n}\n\nh1 {font-size: 1.35em;}\nh2 {font-size: 1.25em;}\nh3 {font-size: 1.1em;}\nh4 {font-size: 1em;}\nh5 {font-size: .9em;}\n\nhr {\n height: 1px;\n}\n\na{\n text-decoration: none;\n}\n\ndt {font-weight: bold;}\n\nol { list-style-type: decimal }\nol ol { list-style-type: lower-alpha }\nol ol ol { list-style-type: lower-roman }\nol ol ol ol { list-style-type: decimal }\nol ol ol ol ol { list-style-type: lower-alpha }\nol ol ol ol ol ol { list-style-type: lower-roman }\nol ol ol ol ol ol ol { list-style-type: decimal }\n\n.txtOptionInput {\n width: 11em;\n}\n\n#contentWrapper .chkOptionInput {\n border: 0;\n}\n\n.externalLink {\n text-decoration: underline;\n}\n\n.indent {margin-left:3em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.tiddlyLinkExisting {\n font-weight: bold;\n}\n\n.tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler a bold */\na.tiddlyLinkNonExisting.shadow {\n font-weight: bold;\n}\n\n#mainMenu .tiddlyLinkExisting, \n#mainMenu .tiddlyLinkNonExisting,\n#sidebarTabs .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n#sidebarTabs .tiddlyLinkExisting {\n font-weight: bold;\n font-style: normal;\n}\n\n.header {\n position: relative;\n}\n\n.header a:hover {\n background: transparent;\n}\n\n.headerShadow {\n position: relative;\n padding: 4.5em 0em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: 4.5em 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n\n.siteTitle {\n font-size: 3em;\n}\n\n.siteSubtitle {\n font-size: 1.2em;\n}\n\n#mainMenu {\n position: absolute;\n left: 0;\n width: 10em;\n text-align: right;\n line-height: 1.6em;\n padding: 1.5em 0.5em 0.5em 0.5em;\n font-size: 1.1em;\n}\n\n#sidebar {\n position: absolute;\n right: 3px;\n width: 16em;\n font-size: .9em;\n}\n\n#sidebarOptions {\n padding-top: 0.3em;\n}\n\n#sidebarOptions a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarOptions input {\n margin: 0.4em 0.5em;\n}\n\n#sidebarOptions .sliderPanel {\n margin-left: 1em;\n padding: 0.5em;\n font-size: .85em;\n}\n\n#sidebarOptions .sliderPanel a {\n font-weight: bold;\n display: inline;\n padding: 0;\n}\n\n#sidebarOptions .sliderPanel input {\n margin: 0 0 .3em 0;\n}\n\n#sidebarTabs .tabContents {\n width: 15em;\n overflow: hidden;\n}\n\n.wizard {\n padding: 0.1em 0em 0em 2em;\n}\n\n.wizard h1 {\n font-size: 2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.4em 0em 0.2em 0em;\n}\n\n.wizard h2 {\n font-size: 1.2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.2em 0em 0.2em 0em;\n}\n\n.wizardStep {\n padding: 1em 1em 1em 1em;\n}\n\n.wizard .button {\n margin: 0.5em 0em 0em 0em;\n font-size: 1.2em;\n}\n\n#messageArea {\nposition:absolute; top:0; right:0; margin: 0.5em; padding: 0.5em;\n}\n\n*[id='messageArea'] {\nposition:fixed !important; z-index:99;}\n\n.messageToolbar {\ndisplay: block;\ntext-align: right;\n}\n\n#messageArea a{\n text-decoration: underline;\n}\n\n.popup {\n font-size: .9em;\n padding: 0.2em;\n list-style: none;\n margin: 0;\n}\n\n.popup hr {\n display: block;\n height: 1px;\n width: auto;\n padding: 0;\n margin: 0.2em 0em;\n}\n\n.listBreak {\n font-size: 1px;\n line-height: 1px;\n}\n\n.listBreak div {\n margin: 2px 0;\n}\n\n.popup li.disabled {\n padding: 0.2em;\n}\n\n.popup li a{\n display: block;\n padding: 0.2em;\n}\n\n.tabset {\n padding: 1em 0em 0em 0.5em;\n}\n\n.tab {\n margin: 0em 0em 0em 0.25em;\n padding: 2px;\n}\n\n.tabContents {\n padding: 0.5em;\n}\n\n.tabContents ul, .tabContents ol {\n margin: 0;\n padding: 0;\n}\n\n.txtMainTab .tabContents li {\n list-style: none;\n}\n\n.tabContents li.listLink {\n margin-left: .75em;\n}\n\n#displayArea {\n margin: 1em 17em 0em 14em;\n}\n\n\n.toolbar {\n text-align: right;\n font-size: .9em;\n visibility: hidden;\n}\n\n.selected .toolbar {\n visibility: visible;\n}\n\n.tiddler {\n padding: 1em 1em 0em 1em;\n}\n\n.missing .viewer,.missing .title {\n font-style: italic;\n}\n\n.title {\n font-size: 1.6em;\n font-weight: bold;\n}\n\n.missing .subtitle {\n display: none;\n}\n\n.subtitle {\n font-size: 1.1em;\n}\n\n.tiddler .button {\n padding: 0.2em 0.4em;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: both;\n}\n\n.footer {\n font-size: .9em;\n}\n\n.footer li {\ndisplay: inline;\n}\n\n* html .viewer pre {\n width: 99%;\n padding: 0 0 1em 0;\n}\n\n.viewer {\n line-height: 1.4em;\n padding-top: 0.5em;\n}\n\n.viewer .button {\n margin: 0em 0.25em;\n padding: 0em 0.25em;\n}\n\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul, .viewer ol{\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer table {\n border-collapse: collapse;\n margin: 0.8em 1.0em;\n}\n\n.viewer th, .viewer td, .viewer tr,.viewer caption{\n padding: 3px;\n}\n\n.viewer table.listView {\n font-size: 0.85em;\n margin: 0.8em 1.0em;\n}\n\n.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {\n padding: 0px 3px 0px 3px;\n}\n\n.viewer pre {\n padding: 0.5em;\n margin-left: 0.5em;\n font-size: 1.2em;\n line-height: 1.4em;\n overflow: auto;\n}\n\n.viewer code {\n font-size: 1.2em;\n line-height: 1.4em;\n}\n\n.editor {\n//font-size: 1.1em;\n}\n\n.editor input, .editor textarea {\n display: block;\n width: 100%;\n font: inherit;\n}\n\n.editorFooter {\n padding: 0.25em 0em;\n font-size: .9em;\n}\n\n.editorFooter .button {\npadding-top: 0px; padding-bottom: 0px;}\n\n.fieldsetFix {border: 0;\npadding: 0;\nmargin: 1px 0px 1px 0px;\n}\n\n.sparkline {\n line-height: 1em;\n}\n\n.sparktick {\n outline: 0;\n}\n\n.zoomer {\n font-size: 1.1em;\n position: absolute;\n padding: 1em;\n}\n\n.cascade {\n font-size: 1.1em;\n position: absolute;\n overflow: hidden;\n}\n/*}}}*/
For published academic papers, click [[here|Publications]]\nAll articles below are written by myself, if not otherwise stated.\n\n//A Type Safe Aspect Oriented Extension to the C++ Language// { --pdf-- } <<slider ",h78w4c" [[A Type Safe Aspect Oriented Extension to the C++ Language (Slider)]] "more" " What's in this article?">>\n\n//Boosting Descriptive ILP for Predictive Learning (Transfer Report)// { [[pdf|wiki/articles/jiang06transfer.pdf]] } <<slider "0h85b" [[Boosting Descriptive ILP for Predictive Learning (Transfer Report) (Slider)]] "more" " What's in this article?">>\n\n//A Multiple Feature Checking Algorithm// {--slides--} <<slider "783c" [[A Multiple Feature Checking Algorithm (Slider)]] "more" " What's in this article?">>\n\n//A Multiple Pattern Matching Algorithm Based on KMP// { --slides-- } <<slider "6ajv" [[A Multiple Pattern Matching Algorithm Based on KMP (Slider)]] "more" " What's in this article?">>\n\n//An Efficient Differential Compression Algorithm// { [[slides|wiki/articles/jiang07compression.pdf]] } <<slider "8otn" [[An Efficient Differential Compression Algorithm (Slider)]] "more" " What's in this article?">>\n\n//[[Handling the Division by Zero in Statistical Programming]]//\n\nMore slides about software design and programming skills are coming...\n\n