Wednesday, August 24, 2011

A take on Euclideon's Unlimited Detail Technology Algorithm

For those who haven't stumble on Unlimited Detail Technology of Euclideon. See the video below



The idea behind the technology is to search for points in the data cloud.
All the points is stored in a data file indexed according to their position in the 3D space, which is unlike the polygon based data file where in x,y,z coordinated is stored in an array.

With this in mind, the indexing used would be integer.
Let's inclose a 10,000 x 10,000 x 10,000 coordinate. This would contain up to a maximum of 1,000,000,000,000 (1 trillion of atoms ).

While the point cloud data is stored in a disk in the system indexed according to the position, so retrieving a point at a certain X,Y,Z is as simple as using the xyz values as an offset of the datafile or memory address where it is stored.

The basic rendering is to trace 1 ray for each pixel on the screen.
Each pixel has a different unit vector depending on its position from the screen's center point and the camera position and orientation. A unit vector is computed for each of the pixel on the screen.

The search process is for each pixel on the screen, do an increment  for each of these vectors to their unit vector(which will give a rounded-off computed x,y,z coordinate).
This would be used to see in the data if an atom of that certain XYZ coordinate exist or not. If a point on the cloud data on that certain coordinate did exist, then that XYZ coordinate is marked for that certain pixel on the screen, else when no atom exist on that coordinate it proceeds to increment a unit vector on that certain ray until in finds one atom. (If transparency is considered, the matching atom will then be investigated to see if it is opaque or not, when opaque it stops the search, else depending on the transparency value, it searches for next atom that could haven been lying on that ray vector.



Vector getXYZatIncrement(Vector unit_vector, int increment){
  Vector v = new Vector();
  v.x = unit_vector.x * increment;
  v.y = unit_vector.y * increment;
  v.z = unit_vector.z * increment; 
  return v;
}


tracePixels(){
 for(int u = 0; u < screen.width; u++){
  for(int v = 0; v < screen.height; v++){
    Vector unit_vector = get_unit_vector(u,v);
  }
}


traceUnitVector(vector unit_vector){
 for(int i = 0; i < FAR_PRISM_MAX_ITERATION; i++)
   Vector trace_coordinate = getXYZatIncrement(unit_vector, increment)
    if(hasAtom(trace_coordinate)){
      //Get the detail of this atom at XYZ
    }
}


boolean hasAtom(Vector coordinate){
  //search in the data file
  int offset = get_offset_calculation(coordinate.x, coordinate.y, coordinate.z)
  //read value at offset in the large atom cloud data set
  //has value return true
  //else false    
}


I have layed my scientific guess on what could have be their algorithm used in Euclideon's technology. These present's a lot of drawback specifically with the dynamic interaction and animation with the 3D world. This is inherent due to the fact that the data is stored in a pre-indexed data file on a disk or in a large memory chunk. Doing such animation would require a full re-indexing of the data stored in the disk. Even with the advent of SSD and huge memory capacity on video cards, moving one atom in the atom cloud data set would require a reindexing, so as to maintain index with respect to 3D point location for each atom.


The animation drawback of Euclideon's technology could be efficiently accomplished using "Transformation Map". Transformation map is an array of points containing the transformation of points in the Point Cloud Data. Points in the Point cloud data that are present in the transformation map will be an exclusion of the search on for the ray tracing. Z buffer with respect to the screen of the Point cloud will be compared to the Z buffer of the Transformation map and paint the final image on the screen.

Transformation map is stored in the RAM or in the videoRAM which is faster to access and is not likely that are as much as the point in the overall 3D Point Cloud Data.

The overall 3D point cloud data will be stored in the Hard Disk, which the total number is enormous.

Point arrangement algorithm:
* arrange the points in such a way the location is the index as well
* make the usage of storage compressed at efficient size

Monday, June 20, 2011

Ivanceras ERP

Ivanceras ERP is an opensource implementation of modern Enterprise Resource Planning based on Adempiere, Compiere, OpenBravo, written by me ivanceras ^_^.

It uses the combination of current best breed of technologies available today, without leaving behind the support of important legacy features.

BackEnd

Ivanceras ERP core is totally rewritten, designed in mind that it will support both Rdbms based database( such as PosgtreSQL, Oracle, MySQL and HTML5)  and Non-Rdbms database ( primarily Google BigTable which is the backbone of Google App engine, Apache Hive, which built on top of Apache Hadoop/MapReduce framework, which is also based on google research papers ). The table views in Rdbms are dropped since there is no way a view could be replicated to non-Rdbms database.

Ivanceras ERP could be run on tomcat or jetty.


Client Side

The java swing client is not supported in Ivanceras ERP due to the emergence of better new alternatives such as GWT for browser-based implementation and android for the mobile platform.  ZK webui client is also not supported, since Ivanceras ERP is  designed in mind to have an offline support for the browser client which will NOT be suitable for ZK.


Source Code

The source code is available at http://code.google.com/p/ivanceras-erp/ . It is still at a very early stage.
The core Entity Manager is very well usable though, and tested on both, Postgresql and BigTable backend databases. Retrieval of record is very fast, since very basic concepts of database efficient techniques is being used, such as utilization of joins in Rdbms and using google BigTable guidelines. I reset the development history due to sensitive information when setting up a migration from local development to the google app engine servers. Source code size at the moment is 2.5MB, which could reach up 25 MB when we generate all DAO and Business objects on adempiere3.6.0 database dump.
Documentation is the source code. so this is not for the faint hearted. More or less you have to read the source code, since I have not written much javadocs. I tried my best to create a readable and intuitive Class and method names.

Demo

There is no available demo to test it yet. I still need server to run it on.
Please let me know if you want me to set-up demo to your servers.
If you want a demo for yourself, you can check out the code, then run it as a GWT web application.
Modify the configuration file(appengine/src/com/ivanceras/server/util/Configuration.java), then you will see what it looks like.

The appengine demo as well is also not yet working. Due to import process inconsistency, which I am still heavily working on.


Development
Here are some screenshot of the current state of the development. The GUI is rough since I have been working heavily still with the backend. This will get better as the development is going on.

Goals of this Project
  • This project is created to be as lightweight as possible.
  • Offline support to major browsers which supports html5 data storage.
  • Browser based seamless automated replication.
  • Modularized design, so as different implementation only contains modules pertaining to it.
    • Modules and module dependency (kernel, application dictionary, accounting.. etc) 


How can I help?
You can help me by testing the very early stage. Plenty of bugs you may encounter. Filing of bugs.
Not a coder? Are you implementing opensource ERP for your clients? Best way you could help is via donation.Donate via paypal: ivanceras[at]gmail.com.  Donation will be used for the development of this project.

Tuesday, March 8, 2011

GWT uibinder

So, GWT designer is integrated into the google plugin for eclipse which hangs-up your CPU when viewing even just the xml view of you ui binders.

Even my core i7 processors takes a lot of time to display something.
The auto-suggest feature in ui binder xml is horribly slow, better be disabled, but I can not find where the option is. so whenever you wanted to created a ui, you may have to type fast in "g:" and the first letter of you ui field, so you won't be activating the auto-suggest feature.

But beyond all these flaws, GWT still is great!.

Monday, February 28, 2011

Conecting to SMART Using 3G connection


Connecting to SMART Using 3G

  1. Turn off 3G first, this is to ensure that no application will be using the internet before you could register an unlimited
  2. Write a text message to "unli 50" then send to 211
  3. Do not turn on 3G yet, you will still have to wait a few minutes to receive the confirmation message coming from smart that you are now registered.
  4. Confirmation message received.
  5. Go to Settings > Wireless & network > Mobile networks > Network operators >  APN (Acces Point Names)
  6. In "Access Point Name" put in this following entry:
    •  Name : internet
    • APN : internet
    • Proxy : 10.102.61.46
    • Port: 8080
    • Leave the rest of the settings to default setting
    • Menu > Save
  7. To let the phone to use only 3G connection. Download and install Any Cut Android App in android app market. Any cut will just put short cut on phone info.
  8. Open Any Cut  >  New shortcut . Choose Activity  scroll to Phone Info. Phone Info will then show as a shortcut in you home screen.
  9. Open Phone Info. Set the preferred network type to :  WCDMA only that is 3G.
  10. Go back to Settings. Turn of you WiFi.
  11. Go to Mobile Network. Check Data enabled
  12. Go to APN Access Point Name "internet" should be turned on.
  13. To share your connection as a WiFi hotspot.
  14. Turn on Poratable WiFi hotspot
  15. Change you WiFi hotspot to idenitify your self. or else the default name is AndroidAP.
  16. You wireless devices can now connect to your phone as a hotspot. Indicators will show at the top screen that you are connected to 3G and the blue WiFi indicates that you are thethering a WiFi 3G connection

Sunday, January 2, 2011

We are hiring!



Be a part of a fast growing Silicon Valley style company in Cebu, where you will build fun and interesting technology and be a part of a team working with real Silicon Valley companies. We are building Internet security and privacy infrastructure as well as video-games and some professional enterprise outsourcing. Part of the your responsibility will be to work on technology projects that we are doing with our partners in California and elsewhere, and the rest will revolve around in-house research and development projects, which include the development of iPhone/iPad video games. These positions may require long hours and hard work. Your job may result in feelings of technological superiority. Serious candidates should be prepared to encounter challenging problems and unexpected opportunities.

Software Engineer
(Cebu City)

Responsibilities: 
You will be working side by side with seasoned experts in software development. You will learn how Silicon Valley engineers build great products and with time, you will be the seasoned engineer that leads development and incubates new projects.
Hour will be flexible, and dress-codes are not enforced (but you should look presentable and bathe).We run a laboratory environment where comfort and harmony are important.
Requirements:
  • Computer Science degree or equivalent
  • 5+years of experience*developing software professionally
  • Strong skills in: C (and variants such as C++ and Objectives C), Java, Javascript,Linux,XML (xml-rpc, soap, etc..), SQL (mysql,oracle, etc..), PHP
  • Some projects may require modifying major open source applications such as Firefox, so work with C and C++ on multiple platforms for Open Source is a big plus.A complete understanding of how Web (client) and enterprise (server) technologies work (Apache, Servlet engines,XML processors,RPC techniques, Database administration, etc..) You must be capable of handling Linux/Unix based machines,configuring and managing them, because you will be using them for development
  • A strong theoretical understanding of computer science. For example: You should know what O(log n) means. You should know what a graph traversal algorithm is. You should completely understand object oriented software development.
  • Experience with Software Engineering methodologies, including source code control, regression testing, bugtrack and ticketing systems, development tools such as Eclipse. Visual Studio and XCode, and the ability and willingness to documents your work.
  • A passion for programming and building great stuff. Computer Science is art, and you must be an artist.


(*Young aggressive and talented computer science graduates with less 5 years of experience are also strongly  encouraged to apply. Salary will be subject to adjustment based on experience and skill level.)

We will love more if you have:
Experience with Oracle, GWT, Javascript, Compiler technologies, Code analysis tools, Cryptography,Network security, advanced mathematics,philosophy and/ or the desire to eat a lot of pizza.

Preference are given to those who apply online!
Starting salary of 50k / month for strong candidates that meet the stated requirements, after a short training period. Commensurate with experience.

Send your resume to  hr[_at_]c-mil.com


Tuesday, November 23, 2010

Application Software Localization for the Philippines

There have been a lot of language-pack localization of ADempiere from some other country which are non-english speaking such as Mexico, Columbia, Panama, Japanese, Chinese. The good thing about localization is that users could easily understand the user interface labels and text since it is written in their own language.

Now, some may think how come there are no localization for the Philippines. The reason behind it is that if we localized an application software for the philippines, it will be just is just bad. Bad in a sense that there are no exact equivalent terms for both business and technical terms of the application to our language. How many of you prefer to use google in English rather than the localized terms. Maybe for the Tagalog speaking Filipinos on the northern region of the country prefer it as google translation is suited for tagalog, but if you are living in the southern region of the country which speaks bisaya, then I would rather choose English interface than the Filipino localization. Many of visayan people understand more English than Tagalog.

It is a good thing though since because of that we don't need Localization of Application software, so we could use a wide variety of software. Not to mention pirated software ;-). Go opensource philippines! Choose ADempiere as you ERP solution.

Monday, July 5, 2010

Adempiere ERP gmail template

Today I modified default adempiere webui theme into using the dekstop gmail theme