Tuesday, June 30, 2009

Milepost GCC machine learning

Developing code for embedded programs just got a little more easy. When you develop embed software most likely you will have to face things like performance and how much power the device will consume. Tuning such code can be very very complicated. You will have to study the device and your code. Developing a first beta of a embedded program which is not consuming to much power and is performing in a good fashion can take up to months.

Now IBM Research and Milepost Consortium have developed a new GCC open source machine learning compiler. The compiler will optimize your code and make shorter and better performing code so you can shorten your development cycle.

Besides having your compiler learn from your own devices and tricks you can also use the ctuning.org website to collaborate and upload code. This way you will get automatically input on how to improve your code.

If you are a developer on such code,….. or looking into the latest DARPA challenge you might want to give this a go.

Monday, June 15, 2009

Mapreduce Lectures


If you want to learn more about mapreduce and Hadoop as I do currently it can be good to follow some classes. However, I am currently not studying at any university so this will make it somewhat harder to follow some lectures. The great thing about the internet is that you can almost find anything you want. So one of the things I just learned is the University of California Berkeley is having a YouTube channel
where they post lectures.

Meaning that even if you do not study at UCBerkely you can follow lectures. You can just watch the lecture as a student only then online. When you like to know more about MapReduce and follow some classes you can watch the video’s of “CS 61A The Structure and Interpretation of Computer Programs”. This is given by Brian Harvey.

CS 61A is more than only MapReduce so if you are interested in the entire course please go to the channel mentioned above. If you are only interested in MapReduce you can watch the below 2 video’s.





Wednesday, June 10, 2009

Oracle Database Cloud Backup

When you are looking into the architecture of a new database system a lot of things are to be considered. Besides the applications that will be using the database you will have to think about hardware, networking, storage, failover systems, backup and recovery, etc etc etc.

Traditional backup is done in many cases on tape, when disks and storage appliances came into play and became cheaper backups started to be done on disk arrays. Network attached storage is currently a commonly used way to store backups, in most cases combined with tape storage to move backups to another location. Some companies use mirror filers to store backups on other locations and/or standby in case a failover should become active.

All options are still very useful and in some situations still the best however now we have a new and very good option, and it is still a very affordable solution. Oracle is providing a solution to store your backups in the cloud, in cooperation with Amazon it is now possible to use RMAN to backup your database into the storage cloud of Amazon. As part of the cloud computing solutions Amazon provides the also provide Amazon S3 (Amazon Simple Storage Solution).

Instead of using a tape to backup your database or a storage filer Oracle is providing you the option to backup your database into the cloud and on a Amazon server. Even do this is already possible for some time many companies have not yet started to use this because due to a couple of wrong assumptions. Common, and wrong) assumptions are that it is costly, insecure, slow, only applicable if you run your database in a Amazon datacenter, not applicable for the current setup used. However, all of those assumptions are, as already stated, incorrect.

They way the cloud backup module is created is that you can use it as if you were doing a backup on your own storage filer, you will be able to use the same scripts, tools and techniques as you are always used to however now your target system is the Amazon cloud. Also a restore can be done in the same way and it is definitely faster than a restore from tape. Meaning the assumption “not applicable for the current setup used” is in most cases not correct. DBA’s will still have the same options as they would have in cases that you use your own storage filer.


One of the other assumptions “only applicable if you run your database in a Amazon datacenter”, also not true. Even do you might possible gain some speed when you run it in the same Amazon datacenter it is not true. It is however possible to run your database at the Amazon Elastic Compute Cloud.

Costly, well especially during the current financial situation you will have to face this question. What is this costing me? Well currently this is costing you 3 dollar cents a month per GB. Now it becomes time to make a quick calculation for yourself, or your customer. For example, what are the costs of a new Netapp filer + what is it roughly costing me on cooling, rackspace, power consumption + what are the costs for moving my backup to a other location. Also take into account that if you want your own storage you will most likely need someone who can administer your storage filer. Also those costs need to be taken into account. Now reconsider the 3 dollar cents per GB from Amazon. Another thing to consider is that if you want your own storage you will most likely want to be prepared for data growth. You will buy that extra shelf of disks so you can store your data and backups. When you consider using Amazon S3 you will only pay for the storage used instead of also paying for all those empty disks in your filer. This can be very interesting for customers who have a changing demand for the amount of storage.

Slow, depending on some things. What is the current way of backup? Is it tape backup, then you will gain a lot of speed. If you try to benchmark it against a backup to your own filer in your own datacenter it will be somewhat slower as your data will be traveling over the public internet. However, even do bandwidth can be a problem there are some things notable in the Oracle Secure Backup Cloud Module has some things to speed things up considerably.

For example, Oracle Secure Backup will identify unused blocks in your database and will not incorporate them in the backup. In almost every database there is more space allocated than used. In a normal backup this will become part of the backup, now those blocks will be left out so they will not consume any bandwidth and time when you send your backup to the cloud. A second thing is that you have the option to leave out undo data which is already committed to the database. When you have a database with a high volume transactions your undo tablespace will be loaded with undo data which will never be used again because it is already committed by the users. You have the option to leave this out while preserving the undo data of transactions that are in process during the backup. This can also save a lot of data in the backup and save you a lot of data traffic.

And standard is the use of the 11G Fast Compressed Backup feature which normally will require the license for Oracle Advanced Compression and is standard with the cloud backup module. Resulting in a 50% compression in most cases.

Security, this is one of the parts you will have to convince your board of directors (or the one of the customer). This can become a hard battle. In most cases people tend to state that if it is not running on their own server it is not secure. If it is on a public storage location everyone can read your data. Also in this case they are wrong. To start with, all the data transmitted between the system running the database and the storage cloud is encrypted using a key pair which is currently seen as one of the best ways to encrypt data streams. This makes it virtually impossible to read the data while it is transmitted. Besides the security while transmitting the data there is also the option to encrypt your backup before you transmit it. Meaning that the real content of the backup is also encrypted. Even if someone gains unauthorized access and hacks into the already very secure Amazon storage cloud he is still unable to read the data because the backup itself is encrypted. When you like to look more into the ways of encryption you will be able to find some documents on all the security options and algorithms that can be used on the Oracle website.

In conclusion, Amazon E3 is a great, fast and secure way to backup a oracle database. It is cheaper than most other options and even do you will have to convince your customer to make use of it is a something that should be considered when thinking about backup. In some cases their might be a very good reason why you do not want to have your backup stored a Amazon E3 however in most cases it is worth a serious look.

Saturday, June 06, 2009

Twitter for small business


Ralph Wilson has posted a new video on his website where he is having a talk with Avinash Kaushik. They are discussing how to use Twitter as a small business and how it can help you start your business.

Problem for startups is getting in touch with the right people and groups to promote your product and keep your 'followers' informed. You do not have a huge marketing budget so all solutions to promote your product or service are very welcome. Twitter is one of them, not only small companies are using it also large companies are using twitter and you can make use of the same facility.

With twitter you can very simply start promoting and try to start a viral marketing campain. If you do it in the correct way you send out a message and it will be re-tweeded from person to person via twitter. With a very small action you might be able to get your company at the peoples attention. Besides looking at the video which is below you might also want to look at the smallbiztrends.com website.



In the video Avinash Kaushik is talking about tweet-rank.de, I have been looking into it and I have to say I do not really see the benifits of this service. I have been playing arround a bit however it is less than I expected. However, if you feel you want to give it a try, just visit the website and make sure you start following @tweet_rank via twitter because this is needed before you can use it. They use it to do some measuring.


Monday, June 01, 2009

Web Trend Map 4 2009

Here you can find as a reference the web trends 4 map for 2009. This map is made by informationarchitects.jp and more information can be found at their website. However, the map can also be found here.. and it is real fun to have a look at it and you might even stumble upon some unknown stations.

Sunday, May 31, 2009

Python dictionary variables

A dictionary variable in Python is not that much different as a normal dictionary as you might have on your bookshelf. So first have a quick glimpse into the definition of a dictionary, accoording to wikipedia a dictionary is:

"A dictionary is a book or collection of words in a specific language, often listed alphabetically, with definitions, etymologies, pronunciations, and other information; or a book of words in one language with their equivalents in another, also known as a lexicon."

And this is somewhat the same as a dictionary variable we know in Python, it is a list with keys and a set of values. The keys are the index like the integer indices in a "normal" Python list variable. For example I want to make a dictionary containing all the employees per department like in the example below where you use the department name (dep0, dep1,.. in this case) as the key and the names of the people as the value. As you can see we first define the dictionary with a set of curly brackets. After that we define the key dep0 and the values attached to the key...than we take dep1.... dep2....

>>> empPerDep = {}
>>> empPerDep["dep0"]= "John","Carl","Vick"
>>> empPerDep["dep1"]= "Mark","Carl","Tom"
>>> empPerDep["dep2"]= "Tom","Bob","Jack"

Now we would like to do something with it so we can simply enter empPerDep to see what is in the dictionary however in a common situation most likely you will not want to print the entire dictionary.

>>> empPerDep
{'dep1': ('Mark', 'Carl', 'Tom'), 'dep0': ('John', 'Carl', 'Vick'), 'dep2': ('Tom', 'Bob', 'Jack')}

More likely you want to show something based upon a key like all the people in department zero. Which can be done with a statement like the one below:

>>> empPerDep["dep0"]
('John', 'Carl', 'Vick')

And in a case like this you will almost certainly want to go even more deeper and define which part of it you want to show, for example you want to show only the employee Carl, this can be done with a statement like the one below:

>>> empPerDep["dep0"][1]
'Carl'

This is all very usefull when you know what is where and you live in a very organized and structured world where everything is very predictable. However in normal world you will not be coding something is such a hardcoded way that if you want to print the name 'Carl' that you can hardcode empPerDep["dep0"][1] . You will have to make sure carl is in the dictionary and you have to find out where he is. We take a new example and use a phonebook application this time.

>>> empPhoneBook = {}
>>> empPhoneBook[12345]="Colin Aitken"
>>> empPhoneBook[12346]="Natalia A. Bochkina"
>>> empPhoneBook[12347]="Michael J Prentice"
>>> empPhoneBook[12348]="Sotirios Sabanis"
>>> empPhoneBook[12349]="Chris M Theobald"
>>> empPhoneBook[12350]="Bruce J Worton"

Now lets say we have to create a application around it, one of the things people will like to know is how many people in this university phonebook system are listed? You will be happy to see that also the len() function in Python will work on a dictionary.

>>> len(empPhoneBook)
6

now lets say you want an option where you will be able to check who has been assigned a certain number. What you can do is a empPhoneBook[76435] where 76435 is the number you want to have more details about. This is a valid option and will work as long as 76435 is a key in your dictionary. If it is not your code will generate a very nasty error.

>>> empPhoneBook[76435]
Traceback (most recent call last):
File "", line 1, in
KeyError: 76435
>>>

A better way to do this is to check before you try to retrieve. You can check if a key is in the dictionary by using the in option. This will give you a boolean back on which you can decide to try and retrieve the value.

>>> 12348 in empPhoneBook
True
>>> 76435 in empPhoneBook
False
>>>

Even do this is very useful you also want to do something like this the other way around. This is especially for a phonebook where you would like to search by name however the unique identifier is the phonenumber. So now we would like to know for example if "Colin Aitken" is in the dictionary so we do the following:

>>> "Colin Aitken" in empPhoneBook
False

Surprisingly this is giving a false, this is because it is looking into the keys not into the values. So if we want to check if the name is in the values we have to use empPhoneBook.values() instead of empPhoneBook which will only take the keys in account.

>>> "Colin Aitken" in empPhoneBook.values()
True

You will have to play around it little with dictionaries in Python to start loving them however when you do you will never give up that love to dictionaries again.

Saturday, May 30, 2009

Google culture

Eric Schmidt, the CEO of Google is interviewed by Steve Pearlstein for the Washington Post Website. They discuss subjects like "Googzilla" and the Google culture and how this influences the way Google employees and managers work. Within Google it is sometimes seen that managers work for employees and not employees working for the manager. Because of the highly driven workforce they simply need managers to plan, take care of budgets and be some sort of firewall for internal politics while the employees can spend all the time on developing new systems and maintaing existing systems. A great way of working in my opinion which could very well be mixed with the new way of working you see on a rollout in for example the Netherlands at Microsoft and Capgemini for example.




Microsoft BING scares me

BING is the name of the new search engine from Microsoft. However, even do mainstream media is referring to it as the new search engine on the block and the attempt of Microsoft to battle Google, it is not a search engine. Even Microsoft itself is stating that it is not a search engine.

Microsoft BING is a descission engine. When you enter a search criteria in Google it will return you the answer based upon a pagerank from ALL the public sources on the internet. When you enter a search criteria in BING it will return you the answers from all the sources that Microsoft thinks are valid.

In the video on decisionengine.com they state for example that on medical searches they will use the best information sources so that you never will get a opinion from lets say a 13 year old on the subject. Even do it sounds great at first you might want to think that over, "best information sources".... who decides what the best information sources are? In this case it is Microsoft and personlay I would like to have myself to be in controle. It means that Microsoft is controling what will end up in the searchresults where google is just giving math the controle of order it is diaplying it and the enduser (me) the option to decide what is valid in my opinion or not.

An other example what scares me, you can search for products, restaurants and such. On products you can even get a BING discount. I would not be supprised if Microsoft will get a fee for products sold via BING. Now the question is, what if would like to sell a product online and make it searchable via BING (like my results are visible Google) and I do not want to pay microsoft a fee. Will my product come up in a search, will it be at the bottom or will it handeld the same way as a product where Microsoft will make money?

Descision engine sounds great, however, I will stick to a search engine and be the judge myself what is valid or not. I do not want a corporation like Microsoft making the judgment on what I can read and can't read. Even do it sounds great at first it is limited and Microsoft is hoping it will be the new way to make "online money" becauase Microsoft is loosing lots and lots of money with its online services as can be seen in the chart below which I found at businessinsider.com. Where Yahoo, Google and such make lots of money Microsoft can't get it started. With BING I fear they missed it again.




Friday, May 29, 2009

Google Live Concurrent Editing

Google announced a new product on the google IO conference named Google Wave. Google wave will be a new collaboration and communication system which enables user to start collaborating an new ways online. Working on documents with a group of people, editing stuff and communicating all in one platform. All I have seen until now looks very promising and as soon as I receive my account details from Google I will inform you about how it is working and what my first experiences are.

There are however some things in wave that might sound even more prommising. Even before the GO-LIFE of wave there are already API's available. This is not so strange because wave will be opensource and it will be using a open protocol which is developerd specialy for wave.

On waveprotocol.com you can find all the information you need about the new wave protocol from Google.

A second thing is the technolgy used which is quite prommising, Live Concurrent Editing is one of them and is explained by David Wang in the video below who is one of the developers of Google wave. Not only this technology is very usefull for google wave, you can use it for various situations where you will be able to use this approuche to solve problems where you have more than a single user working on the same data. It would be great to do some things with it in the future whenever a oppertunity comes along. I can advise everyone to have a look at the video below and take some time to look at other presentations about google wave.



twitter account

Today I created a twitter account. I have been reading about twitter and hearing stories of people on the subject however never created a account. Someone I know has started to use twitter recently and because of this I wanted to give it a go. Looking into the way twitter works it looks like a blog only for very small messages.

it is not my intention to "twitter" everything like, getting coffee for the colleagues, getting lunch or things like that. It will be more like, working on ..... and stuff like that. Also new blogposts I have posted or working on will be twitterd. So if you follow my blog and do have a twitter account just add my twitter stream to it.

In the beginning I will be using twitter very often because it is new you will most likely however see that it will become less after some time and the messages might start to have more 'body'. Because I have installed twitter on my iPhone I will also be able to react and twitter on the go. I am really interested to see how this will go. For the couple of hours I am using twitter now I already learned that it can be very well used to expand you social network and it is a lot of fun.

here is a link to my twitter page.

Hope to see all of you on twitter.com


Monday, May 25, 2009

Oracle EBS R12 Error: Stale Data

When navigating within the HTML screens of Oracle E-Business Suite Release 12 you can come across the below error message about Stale Data. The message is really clear however I do get some questions about it every now and then. The problem is most likely that you have been using the back (or forward) button of your browser. The way the HTML code (Actually the JSP code) is setup is making it so that it can not handle this in some cases. You can try to get out of this by clicking more back and forward buttons however this will not make the page work as before. Best things to do is just close the page and return back to it from you forms session. If you are not coming from a forms sessions the best way is logout and login again to the system. This is until Oracle will solve this " Bug"


Error: Stale Data

The requested page contains stale data. This error could have been caused through the use of the browser's navigation buttons (the browser Back button, for example).

To proceed, please select the Close Window link at the top of the application page to return

Monday, May 18, 2009

Python, nesting tuples

As already discussed in a previous post you can use a tuple in Python. A tuple is in basic a list which content can not be changed. A tuple can have elements of all kind of variable types. This includes an other tuple. What this means is that a list can have a list as one of the list items, or a tuple because we handling tuples in this post.

this sounds useful however you have to keep track of what is nested and where it is nested. in the example below you can see how a tuple is nested in an other tuple. First we create a tuple named sometuple and after that we create a second tuple which as first element will have the tuple sometuple as a element.

sometuple = ("value0","value1","value2","value3","value4")
someothertuple = (sometuple,"value5","value6")

Now if we do a print of "someothertuple" like in the example below we get all the elements. which will be in this case:

print someothertuple[:]
(('value0', 'value1', 'value2', 'value3', 'value4'), 'value5', 'value6')

As we know that the first element of the tuple is a tuple we can get only the first element and get a other result:

print someothertuple[0]
('value0', 'value1', 'value2', 'value3', 'value4')


now if we want the second element of the tuple which himself is a element of a tuple we can do this as followed:

print someothertuple[0][1]
value1

As you can see this can become quite confusing when you start nesting a lot of tuples in tuples so in most cases this is not a good idea. However there are some situations where it can be used. Think about creating a static table which holds basic information about a chess board and what fields are black and which are white. You can calculate this also but you can also use nested tuples. You can also use it for example to create a layout for a playfield for a game... where can a player stand and where not. You have to remember that a tuple can NOT be updated so you can not use it to keep track of where a player is or how chess pieces are arranged. However for basic layout of your grid it can be used.


Thursday, May 14, 2009

Oracle R12, Min-max planning report

As discussed in the previous post I discussed a little the min max planning of a item per subinventory in Oracle e-Business suite Release 12. You can set for a item the minimum and maximum stock level. Fast running items will have a bigger stock in most cases than items that you sell every now and then. Setting the correct minimum and maximum stock levels for a item can be a very challenging task. For large organizations it can involve datamining and some higher math, however I will not go into this in this post.

To make use of the minimum and maximum stock level settings defined for a subinventory within Oracle Inventory you can make use of the Min-max planning report. To start this report, or schedule it you have to go to you concurrent requests screen and start a new single request. The name of the concurrent request is "Min-max planning report". There are numerous parameters which can be set for this concurrent request.

Planning Level:
planning level states if you want to run the report on organization level which will include all the subinventories of the organization or on a specific subinventory. If you pick the last you will have to define the subinventory.

Item selection:
Here you can state the selection of the items you want to include in the report. You can pick all the items that have a current stock level below the minimum stock level, include only the items which have currently more stock than the max stock level or include all items.

Category set:
You have to set a category set, by default it will be set for inventory item however a other item category for the items to be included on the min-max planning report can be chosen.

Item Category:
Item category families and categories can be set to even more finely grain the selection of items you can set to be included in the final report.

Items from (to):
A range of items can be set if you want a defined set of items. You can use this option to run the report only for a single item. In this case you define the same item number in the from and to field.

Planners:
The same as can be done for items in the item from and item to fields can be done for the planners. You can run the report for a specific planner of group of planners.

Buyers:
the same as can be done for items and planners can be done for buyers. You can run the report for a specific buyer or set of buyers. This can be very useful when you (as a buyer) want to run the report for the items you are responsible for.

Sort By:
Sort by will influence the order of the items on the report. It can be set to Item, Category, Buyer or Planner.

Demand cutoff date:
The report includes demand on or before this date. If you do not check Net Demand this calculation is for display purposes only. You can also set the offset for this date.

Supply cutoff date:
The calculation for the includes open supply orders on or before this date.

Restock:
Here you can state if you want to do a restock automatically based upon the outcome of the report. When you set it to yes the system will create requisitions. If you run the report on organization level it will also run make jobs for the items where you have stated it is a make item.

For Repetitive Items:
"If you are using the Organization Planning Level, choose one of the following For Repetitive Item options: Create Requisitions for items under minimum quantity, Create Discrete Jobs for items under minimum quantity or run the Report Only without creating jobs or requisitions"

Default Delivery To:
Default Delivery To enables you to set a default deliver to location. This is only used when you use the restock = yes option.

Net Unreserved Orders, Reserved Orders, WIP Demand:
If set to yes the reserved, unreserved orders and the WIP demand will be subtracted from the total available stock on the given date so you will get a good indication what the stock will be on this given date and what the demand for restock will be on this date.

Include PO Supply, Move Order Supply, WIP supply, Interface:
If set to yes the calculation will take in account the quantity which will be delivered for this date based upon purchase orders, move orders, WIP jobs and non-nettable subinventories.

Lot Control:
here you will be able to state if items which are under lot control should be included in the report.

Display Format:
Here you will be able to set the way the report is displayed and what it will contain.

Display Item Description:
Include the item description in the report or not.




Wednesday, May 13, 2009

Python, using a list variable

In this post I will be discussing the use of lists in Python. In a previous post I already discussed the use of a tuple, where a tuple is fixed a list is dynamic. When you define a tuple the content is set for the rest of the program, when you use a list instead you can change the content.

First start with defining a list variable and placing some data in the list, in this case it will be dutch names. As you can see in the example below we define a list almost the same as a tuple, the difference is the sort of brackets.

As can seen in the example above the variable type in Python can be checked with the type command. In this case we do a type(thelist) and we get a . Now if we want some things out of the list, for example we like to print the entire list we can do a print and the name of the list. However, in most cases you only want a part of the list displayed and not all the content of the list.

The same as we could do with a tuple is what we can do with a list in Python. See the example below:

As you can see you can do a listname[x] where listname is the name of your list variable and x is the number of the element in the list. Now in this case we use positive numbers because we will move in a positive direction. It might be that you do not want this so you can also use negative numbers like in the example below.

As you have been reading the blogpost on using a tuple in Python you might already expected it, you can also get parts of more than one element from a list. this is done via for example a [0:3] extension after the name of the list. This will slice your list and provide you the results.

However, there are more ways on slicing your list, like for example you can use negative numbers or only a endpoint or startpoint for the slice you want from the list.

When you play around with those options you will quickly learn how to get your data out of a list just the way you want it and just the way you need it. That is for the data that is in the list, as already stated you can modify the content of the list. You can for example add data to the list. In python we use for this basically 3 commands. append, insert and extend with all their own characteristics.

listname.append()
append will add a given element to the end of the list so if we do a thelist.append("kees") this will be added at the end of the list. Remember, you can append also add a list variable to a list, this will not result in all the single elements of the list you append to be incorporated into the target list variable. It will add the given list variable to the list. If you want the single elements of a list to be added to a list and become elements of the target list variable you have to use the .extend() function for lists. A mistake quickly made, however only made once after you have been debugging for some time.

listname.insert(x,x)
insert also will add a new element to the list however with the insert command you can define the location of the new element where append will always add it at the end. for example we can do a thelist.insert(2,"piet") will make sure that the new element piet will be at location 2 in the list. You can easily think of some situations where this can come in handy.

listname.extend([])
The extend command will add a list to a list, in basic it will concatenate two lists into one which can be very handy in some situations where you build separate lists and finally have to combine the results. Think about parallel processing for example where in the end you will have to combine results to provide a complete overview. As shown in the example you can extend it with a list you build on the fly or a predefined list and just add the list variable as a extension on the list.

Even do it is important that you can remove elements from a list it is also important that you can remove items from a list. For this we have the list.remove command which enables you to remove a element from a list, you can see this in the example below:

The tricky part of removing a element from a list in Python is that if you try to remove a element which is not in the list it will give you a clean message, it will crash. So if you are writing some code it is a good thing to check first if the element is (still) in the list. This can be done by using a "in" command. for example if you want to be sure that element a is in the list you do a "a" in list
where list is the name of your list and a the value to be removed. This will return a boolean value upon which you can decide to execute the remove or not.

Monday, May 11, 2009

Oracle EBS R12 sourcing rules

When you are deploying a Oracle E-Business Suite instance in a major enterprise, or a company with many different locations you most likely will have to spend some time on sourcing. In cases a company has only 1 or 2 warehouses you will have a simple task. items are purchased from a supplier and shipped to one of the warehouses. However in most cases life is not as simple as that, when you are dealing with a large enterprise which is running operations in several countries or when you for example are working deploying at a company with a lot of locations in a single country you will have to think about how goods are purchased and distributed inside the company.

For a test I was asked to look into the following scenario which I tested on Oracle E-Business Suite Release 12 instance running the Vision demo environment. A company has multiple organizations defined in Oracle (for this example we use the Netherlands and Germany). In The Netherlands there are several regional warehouses defined in Oracle and in Germany (which is a separate organization in the instance) also a warehouse is defined. Only one warehouse is purchasing the item from a supplier.

Some warehouses are sourcing the goods from the warehouse which is sourcing from the supplier and others are sourcing again from them or from a sub-inventory in Germany. In this example we have only setup a single item to be handled like this. to setup the sourcing of a item per subinventory in Oracle E-Business suite your first query the item of the specified organization in the Item Master under the Oracle Inventory responsibility. When you have queried the item you go to "Tools" and "Item Subinventories".

In the above screenshot you can see that there are min-max quantities set, this however is not mandatory. For the purpose of the inventories always having enough stock available I set them so that min-max planning in Oracle e-Business suite will make sure that enough stock will be at every location.

However, the main interest of this test was setting the sourcing rules, as can seen in the below screenshot their is setup a way of distributing the item and making some subinventories source it from a other inventory or subinventory or a supplier site.

As can been seen subinventory "WH Amsterd" is sourcing from the supplier, this means that if the stock is dropping below the minimum min-max quantity it will purchase new goods from the supplier. Subinventories "WH Rotterd" and "WH Eindeho" will source it from the amsterdam warehouse. The warehouses "WH Meppel" and "WH Utrecht" will source from "WH Groning" which in his turn will get the goods from a different organization. As can seen the sourcing rules for "WH Groning" are set to source the goods from organization E1(which is Germany) and inventory (not subinventory) S1.

When you setup this in a correct way you can organize a entire sourcing model per item which can be very beneficial for your organization. However, if you want to do this correct and benefit from it you will have to plan it very carefully.