text:
GRANDVIEW TWP.-Rees Farra's 139-year-old final resting place isn't in the most accessible area of Grandview Township. Located on a wooded knoll about 100 yards above Cisler Ridge Road, the 1874 marker stands alone on 80 acres of farmland owned by Glenn Forni, who keeps watch over his ancestor's grave.
"I hope to eventually clear a trail from the road to the site, and maybe replace the old stone with a newer one," he said Thursday, noting the area around the gravesite, now overgrown with trees and vines, was probably an open field at one time.
Neighbor Richard Cisler, now in his mid-60s, has known about the grave from his younger days.
Article Photos
SAM SHAWVER The Marietta Times
Grandview Township resident Glenn Forni stands by the marker of his ancestor, Rees Farra, whose 1874 grave is located on Forni's 80-acre farm along Cisler Ridge Road.
"My grandfather had a farm adjacent to that property where he used to raise cattle," he said. "Every once in a while we would walk through to check on cows that may have wandered there. That's where I saw the grave. It's the only one up there and I always wondered why."
Glenn's mother, Bonnie Forni, who is Rees Farra's great-great niece, said the grave's location has also been a mystery to her. She noted at the time of Farra's death the property belonged to Richard Webber, whose wife was Farra's niece.
Rees was born in 1792 in Pennsylvania, the second of seven children born to Samuel Farra and Esther "Hester" Rees Farra in Philadelphia, Pa., she said.
Fact Box
Lone grave in Grandview:
Rees Farra was born in Pennsylvania around 1792 and died in 1874. He is buried in a lone grave atop a hill along Cisler Ridge Road in Grandview Township.
He is a great-great uncle of Grandview Township resident Bonnie Forni, whose son Glenn Forni now owns the farm on which Rees Farra is buried.
Source: Bonnie Forni.
The family later moved to Belmont County, Ohio, where Rees married Rachel Broomhall and raised four children, according to information provided to Bonnie by Farra family members now living in Millwood, W.Va.
Rachel died in 1866 and is buried in Belmont County. Sometime over the next eight years her husband came to Washington County.
"I've looked, but haven't found that Rees owned any land in Washington County, and I've always wondered why he was buried all alone on property that belonged to his niece's husband," Bonnie said, adding that there are other Farra family members buried in the nearby Salem Hall Cemetery.
She noted at the time of his death there were also two other Farras, William and Samuel, who owned properties adjacent to the Webber farm where Rees was interred.
Samuel Farra is listed as a brother of Rees, and was Bonnie's great-great grandfather.
She figures Rees was most likely a farmer in Belmont County, but she has so far been unable to verify his occupation.
Bonnie said one of Rees Farra's children, Milton Farra, became a physician in Indiana and delivered his own grandchild, Tiera, who became known as Tiera "Farrow" due to an inadvertent misspelling of the last name by a sign painter. The Farrow name continues to be used by that branch of the family today.
Tiera eventually became an attorney and made her mark in history by becoming the first female lawyer in Kansas City, Mo. She traveled widely and lived to the age of 90, according to the Farra family's research documents. Tiera also published a book entitled "Lawyer in Petticoats" about her experiences as a legal counselor.
Cisler noted another mystery surrounding Rees Farra's gravesite.
"About 10 or 15 years ago someone would clear the area and place flowers on the grave around every Memorial Day," he said. "I never did know who it was."
Bonnie said she had no idea who might have kept the gravesite maintained during that time.
"But I would love to find out," she said.


text:
Lillian Hedquist, 95, of New Rockford, N.D., died Saturday, July 20, 2013 at Lutheran Home of the Good Shepherd, New Rockford.
Her funeral service will be held Wednesday, July 24 at 2 p.m. at Lutheran Home of the Good Shepherd Chapel, New Rockford. Visitation will be held Tuesday from 1 p.m. until 6 p.m. with a prayer service held at 6 p.m., and continuing Wednesday from 9 a.m. until Noon all at Evans Funeral Home, New Rockford. Burial will be in Prairie Home Cemetery, New Rockford.
Evans Funeral Home, New Rockford, is in charge of arrangements.
Location, ST | website.com

subset: commoncrawl


text:
The Perfect Marriage: Oracle Business Rules & Coherence In-Memory Data Grid. High Scalable Business Rules with Extreme Low Latency
By Ricardo Ferreira-Oracle on Aug 16, 2013
The idea of separating business rules from the application logic is by far an old concept. But in the last ten years, what we have seem is that dozen of platforms and technologies has been created to allow this separation of concerns. One of those technologies is BRMS, acronym of Business Rules Management System. The basic idea of one BRMS is to be a repository of rules, governing those rules in such way that they can be created, updated, tested and controlled by an external interface. Part of the BRMS responsibility it is also provide an API (more than one when possible) that allows external applications to interact with the BRMS, allowing those applications to send data over the network, and that data can trigger the execution of zero, one or multiples rules in the BRMS repository. This rule execution occurs outside of those external applications, minimizing their process memory footprint and generating much less CPU overhead since the execution processing of the rules happens in a separated server/cluster. This architecture approach is very powerful, allowing:
- Rules can be managed (created, updated) outside of the application code
- Rules can be reused across different applications, no matter their technology
- Less CPU overhead and smaller memory footprint in the applications
- More control over rules, auditing of changes and enterprise log history
- Integration with other IT artifacts like dictionaries, processes, services
With this context in place, we are all agree that the usage of one BRMS is a mandatory approach on every IT architecture due its power, if it were not for the fact that BRMS technologies introduces a lot of overhead in the overall transaction latency. In the middle of the external application that invokes the BRMS to execute rules and the BRMS platform itself, there is the network channel. This means that we must deal with network I/O and their technical implications (serialization, instability, buffering bytes approach) when we send/receive data to/from the BRMS. No matter if the BRMS provides an SOAP API, an REST API or any other TCP/IP based API, the overall transaction latency is compromised by the network overhead.
Another huge problem of BRMS platforms is scalability. When the BRMS platform is first introduced to an architecture, it handles an acceptable number of TPS (Transactions Per Second), which nowadays varies from 1K TPS to 5K TPS. But when other applications starts using the same BRMS platform, or the number of transactions just naturally grows, you can face scenarios when your BRMS platform must deal with 20K TPS or even 100K TPS. What happens when a huge numbers of objects are allocated in the heap space of the Java based server? The memory footprint starts to reach its maximum size and the garbage collector starts to run to reclaim the unused memory and/or redesign the layout space. No matter what job the garbage collector has to do, it will use the entire processing power to runs its job as soon as possible, since the amount of garbage to handle will be huge. This is true for the almost BRMS platforms of the market, no matter if its from one vendor or another. If the BRMS platform are Java based, when those servers JVM reach more than 16 GB of space in average, they starts to face a huge performance problem due garbage collection.
Differently from other architecture designs in which the load is distributed across a cluster, BRMS platforms must handle the entire processing in a single server due a general concept of BRMS platforms known as execution agenda and working memory. All the facts (the data sent as input) are maintained in this agenda in a single server, making the BRMS platform a pinned service, in which they do their job in a singleton fashion. In this situation, when you need to scale, you can introduce series of equally servers, below a corporate load-balancer that instead of distribute load, it divides entire transaction volumes across those servers. Because each server below the load-balancer handle the entire volume by itself, those servers limit concurrency by the number of processors available in their mainboard. If you need more compute power, due lack of concurrency, you are forced to buy a much higher server. Those servers are huge, expensive and costs a lot of money since they need to be big enough in terms of processors to handle thousands of executions simultaneously and completely alone. Not a very smart approach when you considering to handle millions of TPS.
With this situation in mind, it is necessary to design an architecture that would allow business rules execution be distributed across different servers. To achieve this behavior, it is necessary to use another software component that could share data (business entities, fact types, data transfer objects) across different processes, running in the same or different hardware boxes. And more important than that, a software component that would allow transaction latency to be short enough, reducing a lot of milliseconds introduced by network overhead. In other words, this software component must bring data to the unique hardware layer that really doesn't implies in I/O overhead, which is memory.
Recently, in order to deal with this problem and provide for a customer an scalable plus high performance way to use Oracle Business Rules, I designed an solution that solves both problems in a once, without losing the power of separation of concerns provided by BRMS platforms. In-Memory Data Grid technologies like Oracle Coherence has the power of handling massive amounts of data (MB, GB or even TB) completely in-memory. Moreover, this kind of technology has been written from scratch to distribute data across a number of servers, so scalability is never a problem here. When you integrate BRMS with In-Memory Data Grid technologies, you can do both of the two worlds: scalability plus high performance and also extreme low latency. And when I say extreme low latency I mean, sub-milliseconds of latency. Something around less than 650 μs in my tests.
This article will show how to integrate Oracle Business Rules with Oracle Coherence. The steps showed here can be reproduced for a huge number of scenarios, making your investment on Oracle Fusion Middleware (Cloud Application Foundation and/or SOA Suite stack) even more attractive.
The Business Scenario: Automatic Promotions for Bank Customers
Before we move to the implementation details of this article, we need to understand the business scenario used as didactic. We are about to simulate an automatic decision system that create promotions for banking customers based on their profiles. The idea here is let the BRMS platform decide which promotions to offer based on customer profiles that applications send it. This automatic promotion system should allow applications like internet banking sites, mobile applications or kiosk terminals, to present promotions (up-selling/cross-selling) to its final customers.
Building the Solution Domain Model
Let's start the development of the example. The first thing to do is the creation of the domain model, which means that we need to design and implement the business entities that will drive the client-side application execution, as such the business rules. The automatic promotion system will be composed of three entities: promotions, products and customers. A promotion it is something that the bank would offer to the customer, with contextual information about the business value of one or more products, derived from the customer profile. Here is the implementation of the promotion entity:
package com.acme.architecture.multichannel.domain; import com.tangosol.io.pof.annotation.Portable; import com.tangosol.io.pof.annotation.PortableProperty; @Portable public class Promotion { @PortableProperty(0) private String id; @PortableProperty(1) private String description; public Promotion() {} public Promotion(String id, String description) { setId(id); setDescription(description); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
A product is something that the customer hire from the bank. Some kind of service or item that make the customer account more valuable to the bank and more attractive to the customer since it is a differentiator. Here is the implementation of the product entity:
package com.acme.architecture.multichannel.domain; import com.tangosol.io.pof.annotation.Portable; import com.tangosol.io.pof.annotation.PortableProperty; @Portable public class Product { @PortableProperty(0) private int id; @PortableProperty(1) private String name; public Product() {} public Product(int id, String name) { setId(id); setName(name); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
And finally, we need to design the customer entity. The customer entity will be the representation of the person or company that hires one or more products from the bank. Here is the implementation of the customer entity:
package com.acme.architecture.multichannel.domain; import com.tangosol.io.pof.annotation.Portable; import com.tangosol.io.pof.annotation.PortableProperty; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; @Portable public class Customer { @PortableProperty(0) private String ssn; @PortableProperty(1) private String firstName; @PortableProperty(2) private String lastName; @PortableProperty(3) private Date birthDate; @PortableProperty(4) private String account; @PortableProperty(5) private String agency; @PortableProperty(6) private double balance; @PortableProperty(7) private char custType; @PortableProperty(8) private Set<Product> products; @PortableProperty(9) private List<Promotion> promotions; public Customer() {} public Customer(String ssn, String firstName, String lastName, Date birthDate, String account, String agency, double balance, char custType, Set<Product> products) { setSsn(ssn); setFirstName(firstName); setLastName(lastName); setBirthDate(birthDate); setAccount(account); setAgency(agency); setBalance(balance); setCustType(custType); setProducts(products); } public void addPromotion(String id, String description) { getPromotions().add(new Promotion(id, description)); } public String getSsn() { return ssn; } public void setSsn(String ssn) { this.ssn = ssn; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getAgency() { return agency; } public void setAgency(String agency) { this.agency = agency; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public char getCustType() { return custType; } public void setCustType(char custType) { this.custType = custType; } public Set<Product> getProducts() { return products; } public void setProducts(Set<Product> products) { this.products = products; } public List<Promotion> getPromotions() { if (promotions == null) { promotions = new ArrayList<Promotion>(); } return promotions; } public void setPromotions(List<Promotion> promotions) { this.promotions = promotions; } }
As you can see in the code, the customer entity has a relationship with the two other entities. Build this code and package those three entities into a JAR file. We can now move to the second part of the implementation which is the creation of one SOA project that includes an business rules dictionary.
Creating the Business Rules Dictionary
Business rules in the Oracle Business Rules product are defined in an artifact called dictionary. In order to create an dictionary, you must use the Oracle JDeveloper IDE plus the SOA extension for JDeveloper. I will assume here that you are familiar with those tools, so I will not enter in too much detail about them. In JDeveloper, create a new SOA project, and after that create a business rules dictionary. With the dictionary in place, you must configure the dictionary to consider our domain model as fact types.
Now you can write down some business rules. Using the JDeveloper business rules editor, define the following rules as shown in the picture below.
For testing purposes, the variable "MinimumBalanceForCreditCard" it is just a global variable of type java.lang.Double that contains a constant value. Finally, you are required to expose those business rules through an decision function. As you probably already know, decision functions are constructions that make easier external applications to interact with Oracle Business Rules, minimizing the developers effort to deal with the Oracle Business Rules API, besides providing a very nice contract-based access point. Create one decision point that receives an customer as input, and returns the same customer as output. Don't forget to associate the ruleset with the decision function.
Integrating Oracle Business Rules and Coherence through Interceptors
Now here came the most exciting part of the article: the integration between Oracle Business Rules and Oracle Coherence In-Memory Data Grid. Starting from 12.1.2 version of Coherence, Oracle announced an new API called Live Events. This new API allows applications to listen/consume events from Coherence, no matter what type of event it is being generated. You can learn more about Coherence Live Events in this Youtube presentation.
Using both Coherence and Oracle Business Rules main libraries, implement the following event interceptor at your favorite Java development environment:
package com.oracle.coherence.events; import com.tangosol.net.events.EventInterceptor; import com.tangosol.net.events.annotation.Interceptor; import com.tangosol.net.events.partition.cache.EntryEvent; import com.tangosol.util.BinaryEntry; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import oracle.rules.sdk2.decisionpoint.DecisionPoint; import oracle.rules.sdk2.decisionpoint.DecisionPointBuilder; import oracle.rules.sdk2.decisionpoint.DecisionPointDictionaryFinder; import oracle.rules.sdk2.decisionpoint.DecisionPointInstance; import oracle.rules.sdk2.dictionary.RuleDictionary; import oracle.rules.sdk2.exception.SDKException; /** * @author firstname.lastname@example.com */ @Interceptor public class FSRulesInterceptor implements EventInterceptor<EntryEvent> { private List<EntryEvent.Type> types; private String dictionaryLocation; private String decisionFunctionName; private boolean dictionaryAutoUpdate; private long dictionaryTimestamp; private void parseEntryEventTypes(String entryEventTypes) { types = new ArrayList<EntryEvent.Type>(); String[] listTypes = entryEventTypes.split(COMMA); for (String type : listTypes) { types.add(EntryEvent.Type.valueOf(type.trim())); } } private RuleDictionary loadRuleDictionary() throws FileNotFoundException, SDKException, IOException { File dictionaryFile = new File(dictionaryLocation); dictionaryTimestamp = dictionaryFile.lastModified(); RuleDictionary ruleDictionary = RuleDictionary.readDictionary( new FileReader(dictionaryFile), new DecisionPointDictionaryFinder(null)); return ruleDictionary; } private DecisionPoint createDecisionPoint() { DecisionPoint decisionPoint = null; try { decisionPoint = new DecisionPointBuilder() .with(loadRuleDictionary()) .with(decisionFunctionName).build(); } catch (Exception ex) { throw new RuntimeException("Unable to create the DecisionPoint", ex); } return decisionPoint; } private void updateDecisionPointIfNecessary() { File dictionaryFile = new File(dictionaryLocation); if (dictionaryFile.lastModified() != dictionaryTimestamp) { decisionPoint.release(); decisionPoint = createDecisionPoint(); } } private boolean eventTypeIsAllowed(EntryEvent.Type entryEventType) { return types.contains(entryEventType); } public FSRulesInterceptor(String entryEventTypes, String dictionaryLocation, String decisionFunctionName) { parseEntryEventTypes(entryEventTypes); this.dictionaryLocation = dictionaryLocation; this.decisionFunctionName = decisionFunctionName; decisionPoint = createDecisionPoint(); } public FSRulesInterceptor(String entryEventTypes, String dictionaryLocation, String decisionFunctionName, boolean dictionaryAutoUpdate) { this(entryEventTypes, dictionaryLocation, decisionFunctionName); this.dictionaryAutoUpdate = dictionaryAutoUpdate; } public void onEvent(EntryEvent entryEvent) { BinaryEntry binaryEntry = null; Iterator<BinaryEntry> iter = null; Set<BinaryEntry> entrySet = null; DecisionPointInstance dPointInst = null; List<Object> inputs, outputs = null; try { if (eventTypeIsAllowed(entryEvent.getType())) { if (dictionaryAutoUpdate) { updateDecisionPointIfNecessary(); } inputs = new ArrayList<Object>(); entrySet = entryEvent.getEntrySet(); for (BinaryEntry binaryEntryInput : entrySet) { inputs.add(binaryEntryInput.getValue()); } dPointInst = decisionPoint.getInstance(); dPointInst.setInputs(inputs); outputs = dPointInst.invoke(); if (entryEvent.getType() == EntryEvent.Type.INSERTING || entryEvent.getType() == EntryEvent.Type.UPDATING) { if (outputs != null && !outputs.isEmpty()) { iter = entrySet.iterator(); for (Object output : outputs) { if (iter.hasNext()) { binaryEntry = iter.next(); binaryEntry.setValue(output); } } } } } } catch (Exception ex) { ex.printStackTrace(); } } private static final String COMMA = ","; private static DecisionPoint decisionPoint; }
If you are familiar with the Oracle Business Rules Java API, you won't find any difficult to understand this code. What it does is simply create an DecisionPoint object during the constructor phase and put this object into a static variable, which allow this object to be shared across the entire JVM. Remember that the JVM in this context is a Coherence node, so what I am saying is that each Coherence node will hold an instance of one DecisionPoint. On the onEvent() method, there is the algorithm that checks which type of event the implementation should intercept, and also checks if the DecisionPoint instance should be updated. This last check is done based on the timestamp of the dictionary file.
After creating an DecisionPointInstance, the intercepted entries became the input variables for the business rules execution. The interceptor triggers the rules engine through the invoke() method, and after that it replaces the original intercepted entries with the result that came back from the business rules agenda. But only if one of the following events had happened: INSERTING or UPDATING. This check is necessary for two reasons. First, those are the only event types that occurs in the same thread of the cache transaction. Second, other event types like INSERTED or UPDATED happens in another thread, which means that they are triggered asynchronously by Coherence.
Setting Up an Coherence Distributed Cache with the Business Rules Interceptor
Now we can start the configuration of the Coherence cache. Since we are using POF as the serialization strategy, we need to assembly an POF configuration file. Starting from the 12.1.2 version of Coherence, there is a new tool called pof-config-gen that introspects JAR files searching for annotated classes with @Portable. Create a POF configuration file that should contain the following content:
<?xml version='1.0'?> <pof-config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://xmlns.oracle.com/coherence/coherence-pof-config' xsi:schemaLocation='http://xmlns.oracle.com/coherence/coherence-pof-config coherence-pof-config.xsd'> <user-type-list> <include>coherence-pof-config.xml</include> <user-type> <type-id>1001</type-id> <class-name>com.acme.architecture.multichannel.domain.Promotion</class-name> </user-type> <user-type> <type-id>1002</type-id> <class-name>com.acme.architecture.multichannel.domain.Product</class-name> </user-type> <user-type> <type-id>1003</type-id> <class-name>com.acme.architecture.multichannel.domain.Customer</class-name> </user-type> </user-type-list> </pof-config>
And as expected, we also need to create an Coherence cache configuration file. Create one file called coherence-cache-config.xml and fill it with the following contents:
<?xml version="1.0"?> <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd"> <defaults> <serializer>pof</serializer> </defaults> <caching-scheme-mapping> <cache-mapping> <cache-name>customers</cache-name> <scheme-name>customersScheme</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <distributed-scheme> <scheme-name>customersScheme</scheme-name> <service-name>DistribService</service-name> <backing-map-scheme> <local-scheme /> </backing-map-scheme> <autostart>true</autostart> <interceptors> <interceptor> <name>rulesInterceptor</name> <instance> <class-name>com.oracle.coherence.events.FSRulesInterceptor</class-name> <init-params> <init-param> <param-type>java.lang.String</param-type> <param-value>INSERTING, UPDATING</param-value> </init-param> <init-param> <param-type>java.lang.String</param-type> <param-value>C:\\multiChannelArchitecture.rules</param-value> </init-param> <init-param> <param-type>java.lang.String</param-type> <param-value>BankingDecisionFunction</param-value> </init-param> <init-param> <param-type>java.lang.Boolean</param-type> <param-value>true</param-value> </init-param> </init-params> </instance> </interceptor> </interceptors> <async-backup>true</async-backup> </distributed-scheme> <proxy-scheme> <scheme-name>customersProxy</scheme-name> <service-name>ProxyService</service-name> <acceptor-config> <tcp-acceptor> <local-address> <address>cloud.app.foundation</address> <port>5555</port> </local-address> </tcp-acceptor> </acceptor-config> <autostart>true</autostart> </proxy-scheme> </caching-schemes></cache-config>
This cache configuration file is very straightforward. There is only three important things to consider here. First, we are using the new interceptor section to declare our interceptor and pass constructor arguments for it. Second, we used another feature from Coherence 12.1.2 version, which is the asynchronous backup feature. Using this feature dramatically reduces the latency of one single transaction, since backups are written after (in another thread) that the primary entry has been written. Not necessarily a pre-condition for the interceptor stuff works, but in the context of BRMS, should be a great idea. Third, we also defined a proxy-scheme that expose an TCP/IP endpoint, so we can use the Coherence*Extend feature later in this article, to allow a C++ application to access the same cache.
Testing the Scenario
Now that we have all the configuration in place, we can start the tests. Start an Coherence node JVM with the configuration file from the previous section. When you start the Coherence, a DecisionPoint object pointing to the business rules dictionary will be created in-memory. Implement a Java program to test the behavior of the implementation as the listing below:
package com.acme.architecture.multichannel.test; import com.acme.architecture.multichannel.domain.Customer; import com.tangosol.net.CacheFactory; import com.tangosol.net.NamedCache; import java.util.Date; public class Application { public static void main(String[] args) { NamedCache customers = CacheFactory.getCache("customers"); // Simulating a simple customer of type 'Person'... // Should trigger the rule 'Basic Products for First Customers' // Expected number of promotions: 02 String ssn = "12345"; Customer personCust = new Customer(ssn, "Ricardo", "Ferreira", new Date(1981, 10, 05), "245671", "3158", 98000, 'P', null); long startTime = System.currentTimeMillis(); customers.put(ssn, personCust); personCust = (Customer) customers.get(ssn); long elapsedTime = System.currentTimeMillis() - startTime; System.out.println(); System.out.println(" ---> Number of Promotions: " + personCust.getPromotions().size()); System.out.println(" ---> Elapsed Time: " + elapsedTime + " ms"); // Simulating a simple customer of type 'Company'... // Should trigger the rule 'Corporate Credit Card for Enterprise Customers' // Expected number of promotions: 01 ssn = "54321"; Customer companyCust = new Customer(ssn, "Huge", "Company", new Date(1981, 10, 05), "235437", "7856", 8900000, 'C', null); startTime = System.currentTimeMillis(); customers.put(ssn, companyCust); companyCust = (Customer) customers.get(ssn); elapsedTime = (System.currentTimeMillis() - startTime); System.out.println(" ---> Number of Promotions: " + companyCust.getPromotions().size()); System.out.println(" ---> Elapsed Time: " + elapsedTime + " ms"); System.out.println(); } }
This Java application can be executed with the storage-enabled parameter set to false. Executing this code will give you an output similar to this:
2013-08-15 23:37:53.058/1.378 Oracle Coherence 18.104.22.168.0 <Info> (thread=Main Thread, member=n/a): Loaded operational configuration from "jar:file:/C:/mw-home/coherence/lib/coherence.jar!/tangosol-coherence.xml" 2013-08-15 23:37:53.093/1.413 Oracle Coherence 22.214.171.124.0 <Info> (thread=Main Thread, member=n/a): Loaded operational overrides from "jar:file:/C:/mw-home/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml" 2013-08-15 23:37:53.093/1.413 Oracle Coherence 188.8.131.52.0 <D5> (thread=Main Thread, member=n/a): Optional configuration override "/tangosol-coherence-override.xml" is not specified 2013-08-15 23:37:53.093/1.413 Oracle Coherence 22.214.171.124.0 <D5> (thread=Main Thread, member=n/a): Optional configuration override "cache-factory-config.xml" is not specified 2013-08-15 23:37:53.093/1.413 Oracle Coherence 126.96.36.199.0 <D5> (thread=Main Thread, member=n/a): Optional configuration override "cache-factory-builder-config.xml" is not specified 2013-08-15 23:37:53.093/1.413 Oracle Coherence 126.96.36.199.0 <D5> (thread=Main Thread, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified Oracle Coherence Version 18.104.22.168.0 Build 44396 Grid Edition: Development mode Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 2013-08-15 23:37:53.380/1.700 Oracle Coherence GE 18.104.22.168.0 <Info> (thread=Main Thread, member=n/a): Loaded cache configuration from "file:/C:/poc-itau-brms/resources/coherence-cache-config.xml" 2013-08-15 23:37:55.615/3.935 Oracle Coherence GE 22.214.171.124.0 <Info> (thread=Main Thread, member=n/a): Created cache factory com.tangosol.net.ExtensibleConfigurableCacheFactory 2013-08-15 23:37:56.206/4.526 Oracle Coherence GE 22.214.171.124.0 <D4> (thread=Main Thread, member=n/a): TCMP bound to /10.0.3.15:8090 using SystemDatagramSocketProvider 2013-08-15 23:37:56.528/4.848 Oracle Coherence GE 126.96.36.199.0 <Info> (thread=Cluster, member=n/a): Failed to satisfy the variance: allowed=16, actual=54 2013-08-15 23:37:56.528/4.848 Oracle Coherence GE 188.8.131.52.0 <Info> (thread=Cluster, member=n/a): Increasing allowable variance to 20 2013-08-15 23:37:56.885/5.205 Oracle Coherence GE 188.8.131.52.0 <Info> (thread=Cluster, member=n/a): This Member(Id=2, Timestamp=2013-08-15 23:37:56.653, Address=10.0.3.15:8090, MachineId=2319, Location=site:,process:3484, Role=AcmeArchitectureApplication, Edition=Grid Edition, Mode=Development, CpuCount=3, SocketCount=3) joined cluster "cluster:0x50DB" with senior Member(Id=1, Timestamp=2013-08-15 21:16:58.769, Address=10.0.3.15:8088, MachineId=2319, Location=site:,process:3000, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=3, SocketCount=3) 2013-08-15 23:37:57.189/5.509 Oracle Coherence GE 184.108.40.206.0 <Info> (thread=Main Thread, member=n/a): Started cluster Name=cluster:0x50DB Group{Address=18.104.22.168, Port=12100, TTL=4} MasterMemberSet( ThisMember=Member(Id=2, Timestamp=2013-08-15 23:37:56.653, Address=10.0.3.15:8090, MachineId=2319, Location=site:,process:3484, Role=AcmeArchitectureApplication) OldestMember=Member(Id=1, Timestamp=2013-08-15 21:16:58.769, Address=10.0.3.15:8088, MachineId=2319, Location=site:,process:3000, Role=CoherenceServer) ActualMemberSet=MemberSet(Size=2 Member(Id=1, Timestamp=2013-08-15 21:16:58.769, Address=10.0.3.15:8088, MachineId=2319, Location=site:,process:3000, Role=CoherenceServer) Member(Id=2, Timestamp=2013-08-15 23:37:56.653, Address=10.0.3.15:8090, MachineId=2319, Location=site:,process:3484, Role=AcmeArchitectureApplication) ) MemberId|ServiceVersion|ServiceJoined|MemberState 1|12.1.2|2013-08-15 21:16:58.769|JOINED, 2|12.1.2|2013-08-15 23:37:56.653|JOINED RecycleMillis=1200000 RecycleSet=MemberSet(Size=0 ) ) TcpRing{Connections=[1]} IpMonitor{Addresses=0} 2013-08-15 23:37:57.243/5.581 Oracle Coherence GE 220.127.116.11.0 <Info> (thread=Cluster, member=2): Loaded POF configuration from "file:/C:/poc-itau-brms/resources/pof-config.xml" 2013-08-15 23:37:57.261/5.581 Oracle Coherence GE 126.96.36.199.0 <Info> (thread=Cluster, member=2): Loaded included POF configuration from "jar:file:/C:/mw-home/coherence/lib/coherence.jar!/coherence-pof-config.xml" 2013-08-15 23:37:57.386/5.706 Oracle Coherence GE 188.8.131.52.0 <D5> (thread=Invocation:Management, member=2): Service Management joined the cluster with senior service member 1 2013-08-15 23:37:57.494/5.814 Oracle Coherence GE 22.214.171.124.0 <Info> (thread=Main Thread, member=2): Loaded Reporter configuration from "jar:file:/C:/mw-home/coherence/lib/coherence.jar!/reports/report-group.xml" 2013-08-15 23:37:58.012/6.332 Oracle Coherence GE 220.127.116.11.0 <D5> (thread=DistributedCache:DistribService, member=2): Service DistribService joined the cluster with senior service member 1 ---> Number of Promotions: 2 ---> Elapsed Time: 53 ms ---> Number of Promotions: 1 ---> Elapsed Time: 0 ms 2013-08-15 23:37:58.137/6.457 Oracle Coherence GE 188.8.131.52.0 <D4> (thread=ShutdownHook, member=2): ShutdownHook: stopping cluster node
As you can see in the output, the number of promotions showed reveals that the business rules were really executed, since during the instantiation of the customer object promotions weren't provided. The output also tells us another important thing: transaction latency. For the first cache entry we got 53 ms as overall latency, quite short if you consider what happened behind the scenes. But the second cache entry is even much more faster, with 0 ms of latency. This means that the actual time necessary to execute the entire transaction was something below of one millisecond, giving us an real sub-millisecond latency scenario, measured in microseconds.
High Scalable Business Rules
It is not so obvious when you understand this implementation for first time, but another important aspect of this design is scalability. Since the cache type that we used was the distributed one, also known as partitioned, the overall cache entries are equally distributed among all Coherence nodes available. If we use only one node, of course that this one node will handle the entire dataset by itself. But if we use four nodes, each node will handle 25% of the dataset. This means that if we insert one million customer objects in the cache, each node will handle only 250K customers.
This type of data storage offers a huge benefit for Oracle Business Rules, which is the truly data load distribution. Remember that I said before that each Coherence node will hold one DecisionPoint instance? Since each node handle only a percentage of the entire dataset, its reasonable to think that each node will fire rules only for the data that it manages. This happens this way because Coherence interceptors are executed in the JVM that the data lives, not in the entire data grid since it is not a distributed processing. For instance, if the customer "A" is primarily stored in the "JVM 1", and this customer "A" has its fields updated by one client application, business rules will be fired and executed only in the "JVM 1". The other JVMs will not execute any business rules. This means that CPU overhead can be balanced across the cluster of servers, allowing the In-Memory Data Grid scale up horizontally, using the overall compute power of different servers available in the cluster.
API Transparency and Multiple Programming Language Support
Once the Oracle Business Rules is encapsulated in Coherence through an interceptor, there is another great advantage of this design: API transparency. Developers don't need to write custom code to interact with Oracle Business Rules. In fact, they don't ever need to know that business rules are being executed when objects are written in Coherence. Since all happens behind the scenes, this approach free developers from extra complexity, allowing them to work only in a data-oriented fashion which is very productive and less error prone.
And because Oracle Coherence offers you not only a Java API to interact with the In-Memory Data Grid, but also a C++, .NET and an REST API, you can leverage several types of clients and applications to trigger business rules executions. In fact, I have created a very small C++ application using Microsoft Visual Studio to test this behavior. The application code below inserts 1K customers into the In-Memory Data Grid, with an average transaction latency of ~5 ms, using a VM with 3 vCores and 10 GB of RAM.
#include "stdafx.h" #include <windows.h> #include <cstring> #include <iostream> #include "Customer.hpp" #include "coherence/lang.ns" #include "coherence/net/CacheFactory.hpp" #include "coherence/net/NamedCache.hpp" using namespace coherence::lang; using coherence::net::NamedCache; using coherence::net::CacheFactory; int NUMBER_OF_ENTRIES = 1000; __int64 currentTimeMillis() { static const __int64 magic = 116444736000000000; SYSTEMTIME st; GetSystemTime(&st); FILETIME ft; SystemTimeToFileTime(&st,&ft); __int64 t; memcpy(&t,&ft,sizeof t); return (t - magic)/10000; } int _tmain(int argc, _TCHAR* argv[]) { Customer customer; std::string _customerKey; String::View customerKey; __int64 startTime = 0, endTime = 0; __int64 elapsedTime = 0; NamedCache::Handle customer = CacheFactory::getCache("customers"); startTime = currentTimeMillis(); for (int i = 0; i < NUMBER_OF_ENTRIES; i++) { std::ostringstream stream; stream << "customer-" << (i + 1); _customerKey = stream.str(); customerKey = String::create(_customerKey); std::string firstName = _customerKey; std::string agency = "3158"; std::string account = "457899"; char custType = 'P'; double balance = 98000; Customer customer(customerKey, firstName, agency, account, custType, balance); Managed<Customer>::View customerWrapper = Managed<Customer>::create(customer); customers->put(customerKey, customerWrapper); Managed<Customer>::View result = cast<Managed<Customer>::View> (customers->get(customerKey)); } endTime = currentTimeMillis(); elapsedTime = endTime - startTime; std::cout << std::endl; std::cout << " Elapsed Time..................: " << elapsedTime << " ms" << std::endl; std::cout << std::endl; CacheFactory::shutdown(); getchar(); return 0; }
An Alternative Version of the Interceptor for MDS Scenarios
The interceptor created in this article uses the Oracle Business Rules Java API to read the dictionary directly from the file system. This approach suggests two things: first, that the repository of the dictionary will be the file system. Second, that the authoring and management of the dictionary will be done through JDeveloper. This can lead into some lost of the BRMS power since business users won't feel comfortable authoring their rules in a technological environment such as JDeveloper. Administrators won't have the power of see who changed what since virtually any person can open the file in JDeveloper and change its contents.
A better way to manage this is storing the dictionary in a MDS repository, which is part of the Oracle SOA Suite platform. Storing the dictionary in the MDS repository allows business users to interact with business rules through the SOA composer, a very nice web tool, more simpler and easy-2-use than JDeveloper. Administrators can also track down changes, since everything in the MDS are audited, transaction based and securely controlled, since you have to first log in the console to get access to the composer.
I have implemented another version of the interceptor, making full use of the power of Oracle SOA Suite and MDS repositories. The implementation of MDSRulesInterceptor.java is being tested for over a month and is performing quite well, just like the FSRulesInterceptor.java implementation. In the future, I will post here this implementation, but for now just keep in mind the powerful things that can be done with Oracle Business Rules and Coherence In-Memory Data Grid. Oracle Fusion Middleware really rocks isn't?


text:
15-Minute Recipes That Are Good for Your Skin
These mouth-watering dishes are part of a healthy skin diet. Even better: You can make 'em in 15 minutes flat
As for curry powder, it contains curcumin, which has been found to kill and stop the growth of melanoma in skin cancer cells.
SEE NEXT PAGE: Recipe: Curried Deviled Eggs
Older comments
by EricaF123 Tuesday, January 1, 2013 at 06:35AM Report as inappropriate
Loved that Curried Deviled Eggs a lot.....gonna try this out in today's dinner.
by Varun Thursday, October 18, 2012 at 04:41AM Report as inappropriate
Love it
by yadijane Monday, September 24, 2012 at 06:47PM Report as inappropriate
Red peppercorns on strawberries? Interesting lol... I don't know about the chocolate covered olives though!!!
by Signalflare66 Monday, April 23, 2012 at 12:32AM Report as inappropriate
That chocolate covered strawberry looks SO SO GOOOD!
by MissXu Thursday, April 19, 2012 at 08:55AM Report as inappropriate
by AngelRayn73 Tuesday, March 27, 2012 at 07:19PM Report as inappropriate
Everything looks super delicious! Especially the halibut! I love fish, so this would be a great recipe.
by Brandi27 Friday, March 23, 2012 at 08:09AM Report as inappropriate
I really like the Cumin Deviled Eggs recipe and the Dark Chocolate covered items sound terrific! I'm not entirely sure about the chocolate covered olives though! I really don't like fish so I do rely on a high grade omega 3 supplement with as much DHA as EPA.
by powerwoman033 Monday, March 19, 2012 at 11:01PM Report as inappropriate
interesting article.
by lazorc Sunday, March 18, 2012 at 07:15PM Report as inappropriate
Strawberries? Yum
by ayegee Sunday, March 18, 2012 at 03:25PM Report as inappropriate
to top


text:
NEW: For a prettier blog interface, see the Wordpress version!
Headlines for Tuesday:
- Crafting day at the Gorey (139 words)
- Help getting on my feet = priceless (185 words)
- Gwah (208 words)
|@1600 GH: Pick up new key
|Pack books
|Send transcript to DKG
|Prepare for trip
|Do paperwork for off-campus work permit
|Deposit check
|Get boxes
|Send paperwork for off-campus work permit
|Pack clothes for trip
|Scotiabank: withdraw USD
|Ask Spadina Towers for sample contract
|School: drop off paperwork, ask for letter of employment
BOX 1: Books
- The Book of Myself
- Dealing with Darwin
- Small Giants
- Inside the Tornado
- Nature via Nurture
- Sharing Expertise
- Notebook
- Gift book
- La Vie en Rose
- The Beauty Book
- How to win friends and influence people
- The alchemist
- Getting things done
- Love is the killer app
- The tipping point
- The likeability factor
- A queen for all seasons
- ideaspotting
- The how of wow
- The seven strategies of master presenters
- A whole new mind
- 101 ways to captivate a business audience
- Small gods
- Unlocking the clubhouse
- Selling it
Box 2
- In Style
- In Style
- The Visual Display of Quantitative Information
- EF Lens Work III
- Beyond bullet points
- Take back your life
- 48 laws of power
- The artist's way
- The rivers north of the future
- Mindfulness in the marketplace
- Broadway fake book
- How to walk in high heels
- The $50 dinner party
- A passion for life
- Five good minutes
- Open innovation
- Super review statistics
- 3 CAS notebooks
- 1 rightsleeve notebook
- Love is the killer app
- First moleskine
- Toronto pocket street atlas
- Guestbook
- Totally cool journals, notebooks and diaries
Box 3: Letters
1. Crafting day at the Gorey: 18:36
Last Saturday was crafting day at The Gorey, where Quinn, Jed and Leigh live. I created three pieces: a 3-strand faux rose pearl bracelet with a magnetic clasp, a pair of chandelier earrings with diodes, and a necklace with bells and seed beads to match the Ifugao belt that I had turned into earmuffs. I'll post pictures after I get back from New York and finish move number one.
I like crafting. I can create exactly what I want instead of combing stores until I find someone who's quirky in just the same way as I am... =)
Crafting with friends is even more fun! Quinn taught Alex and Eric how to knit, and we spent a lazy Saturday afternoon just chatting over our respective hobbies. Good stuff.
Random Emacs symbol: ediff-merge-files-with-ancestor - Command: Merge two files with ancestor.
2. Help getting on my feet = priceless: 18:45
Last Sunday, I showed Wayne Young the apartment I'm planning to rent. He'll sign the contract as my guarantor, so he should get to see what I'm renting. He's a lot more experienced than I am at evaluating places, The place had his approval, which made me feel a lot better. His daughter also approved of it, as the closet made a good hiding place. I owe him *big time* for helping me begin the process of settling into Canada. I don't know how I could do it without his help!
After I showed him the place, he taught me how to make tonkatsu. While we were making tonkatsu, I introduced his daughter to Cute Overload. (Cute overload!) Then we played Brain Age on the Nintendo DS, which was tons of fun and which made me want to write my own version for my Vaio. (I should be able to get something like that going...)
It was a wonderfully relaxing Sunday evening. I'm so glad to share my life with people like them. =)
Random Emacs symbol: mm-pipe-part - Function: Pipe HANDLE to a process.
3. Gwah: 18:55
I occasionally forget to drink enough water, particularly when a lot of things are happening at the same time. Sometimes I need help remembering, and sometimes I need help dealing with what happens when I don't remember...
Simon and I chatted after I got back from having dinner with a Microsoft evangelist. I couldn't talk for long, though. I needed to nap. I meant to nap for twenty minutes. I woke up two hours later with a bad case of cramps, eyes too dry to keep open, and a serious inclination to stay under the covers and sleep. I texted Simon about my worries that I'd be often sick alone in the new apartment, and he called to insist on coming over and taking care of me.
I don't know whether it was the thermal pack he heated up, the glass of water he always kept full, or the hugs and the smiles he gave me, but I felt much less miserable. I'm glad he got to do a little bit of work, too. He left when my roommate came in so that he wouldn't disturb her, but it was nice getting pampered. =)
Random Emacs symbol: message-insert-signature - Command: Insert a signature. See documentation for variable `message-signature'.
- E-mail to Mark Chignell
- E-mail to Mark Chignell
- Reply to Simon Rowland - sent today
- Reply to Roger Yang - sent today
- Reply to Simon Rowland, hilaryny - sent today
- Reply to Mark Chignell - sent yesterday
- Reply to Kelly Lyons - sent today
- Reply to Mirasol Mariano - sent yesterday
- Reply to Kevin McIntosh - sent yesterday
I'd love to hear about any questions, comments, suggestions or links that you might have. Your comments will not be posted on this website immediately, but will be e-mailed to me first. You can use this form to get in touch with me, or e-mail me at [email protected] .


text:
Can someone pay the fee for me?
Yes. You may have a relative, friend or even a school or program sponsor pay the fee for you. If you are paying from overseas and you do not have access to the payment methods described in this website, you may find it easier to have someone in the United States pay the fee for you. If someone else fills out the form for you, be sure you give them a copy of your Form I-20/DS-2019 or the information from the form. Whoever fills out the form will need your personal information exactly as it appears on this document.
How can the fee be paid?
1. The fee can be paid by mail using Form I-901 together with a check or money order drawn on a U.S. bank and payable in U.S. dollars
2. The fee can be paid electronically by completing Form I-901 through the Internet and using a credit card.
How can someone else pay the fee for me?
By Mail:
If you want to have someone in the U.S. pay the fee on your behalf, send them either a copy of your completed Form I-901 or provide them with the information needed to complete the Form I-901 for you.
The person who pays your fee must attach the copy of your Form I-901 to the payment they submit. The Form I-901 and payment cannot be accepted if mailed separately. If a copy of your Form I-901 is not attached to the payment, we will be unable to determine for whom the fee was paid, and your payment will be returned to you based on the address provided.
Over the Internet:
You may also have someone pay your fee on-line. The person who pays the fee for you may complete the Form I-901 on-line and pay by credit card or check according to the instructions on this Web site. Be sure you provide the correct personal and school or exchange visitor program information to the person who completes the Form I-901 for you.
When Can I Get My Visa and/or Enter the U.S.?
The SEVIS fee must be paid and fully processed before the applicant arrives at the consulate for the visa interview.
A receipt will be sent by mail to the address that you indicate with your payment. Further, for those that pay the SEVIS fee on-line, a payment confirmation can be printed out immediately after the payment is made, and used as a receipt until the mailed receipt is received.
For more detailed information on the fee payment process, go to the SEVP website.


text:
Holocaust Denial on Trial, Trial Judgment: Electronic Edition, by Charles GrayTable of Contents
|<< The Defendants' case
|< Introduction
Irving's response
5.101Irving argued that there is what he describes as another "chain of documents" which impels one to the conclusion that Hitler was intent upon protecting the Berlin Jews.
5.102In regard to his claim in Goebbels that Hitler was neither consulted nor informed about the expulsion of Jews from Berlin, Irving accepted on the basis of the evidence now available that the initiative for the expulsions came from Hitler. He denies having suppressed any relevant material of which he was aware at the time. Irving discounted the Wisliceny report with its reference to an order by Hitler for the biological annihilation of the Jews because it was made in 1946 when Wisliceny was facing the gallows. In any case Irving dismissed the report as speculative and made by a man "at janitorial level". Irving did not accept that in this context "vernichtung" connotes extermination. He denied having applied double standards in his reliance on Wisliceny, adopting those parts which suited his case and discarding the rest.
5.103In support of his argument that Hitler was protective towards the Jews, Irving pointed to an entry in Himmler's telephone log for 17 November 1941, which he said imports that Himmler has had his knuckles rapped by Hitler for wanting to get rid of the Jews in the General Government. He also relied, as a "tiny dent" in the public perception that the Jews were transported in cattle trucks in atrocious conditions, on messages which indicate that the trains taking Jews from Berlin to the East were amply provisioned and that Jews were permitted to take with them the tools of their trade. Irving claimed that this is inconsistent with the existence of a policy of systematic extermination.
5.104In relation to the entry in Himmler's log for 30 November 1941 (quoted in in the introduction to this section) which included the phrase "Judentransport aus Berlin - keine liquidierung", Irving accepted that he has no direct evidence that Himmler was "summoned" to see Hitler or that he was "obliged" to issue the order. But he pointed out that Himmler had spent that morning working at Hitler's headquarters and suggested that the probability is that Himmler would have spoken on the telephone to Hitler before the two of them met for lunch at 2.30pm. Irving argued that the likelihood of such a conversation having taken place before Himmler spoke to Heydrich of the telephone, together with the fact that Himmler was at Hitler's headquarters when the call was made, suggest that it was Hitler who originated the order that the Jews were not to be liquidated. He agreed that there is no evidence that Himmler and Hitler met before the call was made to Heydrich at 1.30pm on 30 November 1941. However, he suggested that the reasonable inference "with very strong evidence" is that they spoke on the phone before that time. He maintained this position despite the entry on his own website accepting that his original theory that Himmler had discussed the matter with Hitler before phoning Heydrich had been wrong. Evans replied that there is no evidence that Himmler spoke to Hitler that morning. There were several bunkers at Hitler's headquarters and there was no reason for Himmler to communicate either face to face or by telephone with Hitler before they met for lunch.
5.105Another reason advanced by Irving to justify his contention that the instruction Keine Liquidierung emanated from Hitler is that it was Himmler who telephoned Heydrich and not vice versa. This is not apparent from Himmler's note of the call. But Irving pointed to another instruction issued by Himmler to Heydrich made from Hitler's headquarters months afterwards on 24 April 1942 that there was to be no annihilation of gypsies. Irving inferred that that instruction emanated from Hitler and argued that the same inference is to drawn in relation to the instruction on 30 November 1941. Evans's response was that there is no reason whatever to suppose that there was any connection between Hitler and either of these instructions issued by Himmler.
5.106In relation to the entry in Himmler's log for 1 December 1941, Irving said that he misread Himmler's spidery Sutterlin handwriting: he thought he had written Judentransporte in the plural. It was, he said, a "silly misreading". He firmly denied any deliberate manipulation. He denied that he was lying when he claimed to have made an innocent slip. He was, however, constrained to admit that in a letter to Dr Kabermann written in 1974 he had correctly transcribed the word in the singular. On reflection he claimed that his original explanation that he though the note referred to transports in the plural was a slip of the memory. He explained that he believes he understood transport to mean transportation in the generic sense. He pointed out that no definite article comes before the noun (which Evans says is rare in the case of Himmler's notes). He argued that dictionary definitions of the meaning of that word bear him out but he was unable to produce a contemporaneous (ie 1930s) dictionary which gave the meaning "transportation". He rejected the claim made by Evans that this explanation is equally unconvincing, not least because it omits to take account of the words aus Berlin.
5.107Despite his eventual acceptance that the conversation between Himmler and Heydrich on 30 November related to a single trainload of Jews, Irving continued to suggest in his cross-examination of Evans that the instruction Keine Liquidierung had a wider significance and applied to all European Jews. He relied on a message sent on 1 December 1941 to the local SS commander in Riga, named Jeckeln, summoning him to a meeting with Himmler in Berlin on 4 December. Irving pointed out that this summons had followed rapidly upon a request made from Riga to Berlin by the murderous Jeckeln for ten military pistols for Sonderactionen (special measures). Irving interpreted Himmler's appointments diary for 4 December 1941 as showing that he gave Jeckeln a rap over the knuckles.
5.108Irving relied also on the contents of a telegram sent on the same day to Jeckeln by Himmler, which reads:Irving described this as an incredibly important message because it shows that at headquarters the shooting of the Jews was disapproved. He further asserted that the absence of any reference to Hitler in the message indicates that Hitler had nothing to do with the promulgation of guidelines as to circumstances in which European Jews were to be killed. Irving claims that the consequence of this sequence of events was that the shooting of German Jews stopped for many months. Evans accepted the killing of German Jews was halted for some months after December 1941 but pointed out that the surviving Jews in the ghetto in Riga were murdered on 8 December presumably with the concurrence of Himmler. The massacre of non-German Jews in the Ostland continued unabated.
"The Jews being outplaced to Ostland are to be dealt with only in accordance with the guidelines laid down by myself or the Reichssicherheitshauptamt on my orders. I would punish arbitrary and disobedient acts".
5.109Irving argued that the inference to be drawn from the communications referred to at paragraphs 5.107-8 indicate that there were in existence at the time guidelines which prohibited the killing of European Jews and that the shooting of the Berlin Jews in Riga was a transgression of those guidelines.
5.110In reference to Himmler's telephone log for 1 December 1941 Irving testified that he innocently misread "haben" for "Juden" because the two words appear similar in the Gothic manuscript. He said that Himmler's handwriting at this point is very indistinct. He did not spot that there was no full stop after Verwaltungsfuhrer SS. It was a reasonable mistake to make and certainly not a deliberate misreading. In any event Irving dismissed this entry in the log as totally immaterial. The failure to correct the 1991 edition of Hitler's War was an oversight. Evans disagreed that the misreading of the note was an innocent mistake. He argued that no historian who was not biased could read the words as saying anything other than haben zu bleiben.
|<< The Defendants' case
|< Introduction


text:
Share Photo
This dog named Sofia checks out all the activities going on around her stroller while waiting for the walk to start at the Escondido Humane Society's 14th annual Paws in the Park event on Sunday at Kit Carson Park. The annual family-friendly event included contests, entertainment, shopping, food and games with proceeds to benefit animals at the Escondido Humane Society.
— Don Boomer


text:
HuffPo - James Heffernan: Getting bombed at Dartmouth
Spring is the season for mayhem. While Boston has been rocked by two actual bombs, Dartmouth College -- 135 miles northwest, in Hanover, New Hampshire -- has been reeling from the impact of rhetorical bombs.
To improve the chance of seeing your comment posted here or published in the New Hampshire Union Leader:
- Identify yourself. Accounts using fake or incomplete names are suspended regardless of the quality of posts.
- Say something new, stay on topic, keep it short.
- Links to outside URLs are discouraged, if used they should be on topic.
- Avoid comments in bad taste, write well, avoid using all capital letters
- Don't cite facts about individuals or businesses without providing a means to verify the claim
- If you see an objectionable comment please click the "Report Abuse" button and be sure to tell us why.
Note: Comments are the opinion of the respective poster and not of the publisher.Be the first to comment.
Post a comment
You must sign in before you can post comments. If you are experiencing issues with your account please e-mail firstname.lastname@example.com.


text:
With internet privacy being invaded more and more by governmental agencies, advertising programs and statistical systems (not to mention ISPs gone bad), personal privacy would seem to be a lost cause. But all is not lost! Thanks to some great free software you can make your online presence private once again.
Tor: The onion router
An onion router is the most effective way to be anonymous on the internet; it allows you to:
- protect your location (that is, your IP address) from websites;
- mask the destination of packets you send;
- mask the origin of packets from sites and other nodes;
- protects the packet's contents via encryption;
It works by "routing" your traffic through various nodes like the layers of an onion. Each node has no idea where the packet came from; also, nobody (except the exit node) actually knows where your traffic will end up. The exit nodes change constantly, which means that you might appear to be from Spain one minute, and from France the next. This makes requests to sites, for all general purposes, untraceable.
Each Tor client also has the option of becoming a node or exit node in the network; since traffic from all (except the exit nodes) is encrypted, donating some of your bandwidth to become a node will actually increase your security: even if somebody logs all of your traffic, they will be unable to determine if the logged traffic is yours or if it's just being routed through your system. This way, deciphering data is as hard as taking the eggs out after you baked the cake!
Thanks to Tor's encryption, routing and constant path switching, Tor is an asset to any surfer. Tor baffles tracking software, crackers and traffic loggers, not to mention being a pretty cheap way to get some extra security over Wi-Fi or on public PCs.
On top of all that, Tor also provides a feature called "hidden services" that allows you to run a webserver and get a Tor address (eg:
http://6sxoyfb3h2nvok2d.onion/ leads to the Tor "hidden wiki", you'll need a version of Tor installed and running in order to view that link) for other uses.
A Tor
*.onion URL, for all extensive purposes, cannot be traced back to the host machine. (You'd need to ensure that the server is secured, error pages don't give out your IP, etc.) This makes Tor hidden services a perfect tool for government change groups in countries like China.
Installing Tor
There are two methods of getting Tor easily. The first, and easiest, method of connecting to the anonymous Tor network is with the prepackaged TorPark (a Tor and Firefox combination). TorPark is also great on a flashdisk while traveling.
The second method, which also allows you to run a Tor node as well as a client, is the official Tor distribution, which is available for most any OS and comes with a nice installer for Windows.
Both of these methods use entirely free software; TorPark's launcher is released under the GPL, Firefox is MPL/LGPL/GPL tri-license and Tor itself is free software under the 3-clause BSD license. I'll walk though the installation via of both of these methods below.
TorPark is by far the easiest way to get up and running with Tor. TorPark comes pre-assembled in a zip file. Just download the zip, extract it to a folder and run. TorPark doesn't require any pre-configuration, the handy launcher configures Tor and launches a bundled copy of Firefox with some handy privacy extensions pre-installed.
There are some downsides to TorPark though. Firstly, it only enables Tor on the bundled Firefox. Second, it only runs on Windows (although the author seems willing to develop a version for Mac).
TorPark's real power shines though when it is used on a USB flashdrive. You can take TorPark to a public library or traveling and not have to worry about privacy; plus, you can take your favorites and extensions with you.
The official installer
Installing Tor with the official installer takes around five minutes and requires only moderate technical knowledge. First, you'll need to download the installer from the Tor website (for this article I used the "Windows development" branch 0.1.1.19-rc). The Tor installer configures Tor, Vidalia and Proxify automatically.
The Tor installer is designed to be simple to use. Just answer a few questions, and Volia! Tor's installed. There is no need to change the default settings unless you know what you are doing, or just want to tinker around with Tor. After the wizard is complete launch Tor.
The next step is to go into the browser of your choice and to change the connect settings and set up your proxy to point to Proxify, in most cases that's
127.0.0.1 and
port 8118. Firefox users can download the FoxyProxy extension which sets up Tor with Firefox automatically.
Tor's UI also makes it easy to set up your own Tor node. Just right-click on the Onion icon in the system tray, select "Configure" and click the "Server" tab. You can also view traffic reports by clicking "Bandwidth Graph" in the system tray menu.
I hope this meager article has opened your eyes to a new level of privacy on the web. But don't stop here! There are many other ways to protect yourself with free software too, many of which you'll find in the Free Software Magazine Archives (chances are whatever you're looking for is in there, somewhere...) And also be sure to check out resources like FreshMeat and SourceForge.
Now that your internet surfing is private again, it's time to work on those pesky neighbors...
Surely a nice article
Hi Robin,
This is a really an interesting one.I am yet to give a try for
Tor.Though,it provides privacy for genuine public,it could
become a stealth for hackers..terrorists networks..
Death,Destiny & History do not respect personalities..
Very nice piece of useful tool!
TOR is a nice little proggie and a nice invention indeed. Hope that the connection speed becomes faster in future though.
Best wishes
Google Earth & Google Pack
Concerning Terrorists/hackers
Bad guys don't need tor. They already use other people's computers to browse anonymously or through other illegal means; they don't have to worry about breaking the law and thus they already have great ways of getting around surveliance. Tor is needed by the people who value privacy and don't want to break the law, if you don't mind breaking the law there are a lot of other options for anonymous browsing. Thanks for the great article Robin!
Nice .. If It Worked
Just downloaded and installed the latest (all 3 components). Plus the plug-in for Firefox.
Didn't work. Or rather, it completely blocked my Internet access (even Google) whenever it was enabled.
That's security, I guess. But not exactly what I intended.
So good. So very good.
The biggest problem I've had is that running the server slows my old computer down too much. I wish I could run it (and help everyone out) when doing other things, but new computer first. Second biggest problem is google coming up in foreign languages (thanks google)(found that google.com/ncr solves this).
FAQ page is exhaustive, can't imagine any known problems are not solved there. I'm surprised previous poster found it didn't work and could not make it work, as it seems friendly and simple to me.


text:
WASHINGTON (November 14, 2012)—Barry Cadden, the owner and director of the specialty pharmacy tied to a deadly meningitis outbreak, declined to testify Wednesday before a congressional committee that's investigating the matter.
Cadden, co-founder of the New England Compound Center, told lawmakers he would use his Fifth Amendment right to not answer questions in order to avoid self-incrimination.
After repeated questions by House lawmakers, Cadden told the House Energy and Commerce Committee: "Under advice of counsel, I respectfully decline to answer under basis of my constitutional rights and privileges, including the Fifth Amendment."
Lawmakers continued to ask Cadden questions about the contamination that has sickened nearly 440 people and caused 32 deaths.


text:
ASPEN, Colo. (AP) — Aspen city council members are considering a 14 mph speed limit in a residential area of the Colorado mountain town in attempt to get the attention of drivers and have them slow down.
Residents say few drivers are obeying the current 25 mph speed limit and are ignoring other efforts to protect people.
The Aspen Times (http://tinyurl.com/9wlktaz ) reports Mayor Mick Ireland suggested an 18 mph limit because the number is out of the ordinary for a speed limit. After further discussion, council members decided to drop the proposed limit down to 14 mph.
Information from: The Aspen Times, http://www.aspentimes.com/
Comments are currently unavailable on this article
Location, ST | website.com


text:
Women's Under Armour Swagtastic Tee Shirt
Show your swagger with the Under Armour Swagtastic Women's Tee Shirt. Designed with style and performance in mind, this bold tee lets everyone know that you are truly swagtastic.
This tee is designed with a relaxed, loose fit to give you the comfort and freedom of movement that you need and is made with Under Armour charged cotton to wick away sweat so you stay dry. The front is printed with the word "SWAGTASTIC" in vivid hues for a pop of fun and style. Rock this tee to the gym or to class for a trendy look that is sure to get you noticed.


text:
Candice Glover, an R&B dynamo from St. Helena Island, S.C., was crowned the Season 12 winner of "American Idol" Thursday night.
Glover, 23, who consistently blew away the judges and fans with dramatic power ballads and impressive vocal gymnastics, defeated Kree Harrison, a 22-year-old country singing specialist from Woodville, Texas.
She became the show's first female champion since Jordin Sparks in Season 6, and now assumes the mantle previously carried by the likes of Kelly Clarkson, Carrie Underwood and Fantasia.
Glover's victory was a testament to her resilience. This season was the third time she had tried out for the popular talent show.
"Three years, persistence, determination and a lot of talent. You deserve it," said host Ryan Seacrest.
Glover broke down in tears as she was mobbed by her fellow contestants. She then finished off her triumphant run by sobbing her way through her coronation song -- and first single -- "I Am Beautiful" as streamers and confetti rained down in the Nokia Theater.
In addition, she had one more "wow" moment earlier in the show when she combined with former "Idol" contestant and Oscar winner Jennifer Hudson on a rousing, soul-stirring rendition of Natalie Cole's "Inseparable."
Thursday's finale also was a send-off for Randy Jackson, the show's lone remaining original judge. He announced last week that he's leaving "Idol" to focus on other business projects.
Jackson was feted with a clips package of highlights through the years and then bid farewell.
"I love all you fans. I love everybody that walked on this show," Jackson said. "Hopefully, I touched their lives a little bit. They certainly touched mine."
He may not be the only judge making his exit. On the tail end of a season that saw an alarming drop in the ratings for "Idol," persistent rumors have it that the show will make a clean sweep of the panel, which also includes Mariah Carey, Nicki Minaj and Keith Urban.
Both Carey and Urban performed during the finale. Carey, decked out a snug, sparkly silver and white gown, delivered a cursory medley of her greatest hits. She may have left something to be desired as a judge, but there's no denying that Carey's a vocal powerhouse who has inspired a long parade of "Idol" contestants in this and past seasons.
Another highlight was the appearance of Aretha Franklin via remote video. The Queen of Soul performed a medley of her standards with the Top 5 "Idol" finishers, all females, of course.
Other artists helping to fill out the jam-packed two-hour finale included The Band Perry, Psy, Frankie Valli, Emeli Sande, Adam Lambert, Jessie J, Travis Barker, Blink 182, and Pitbull, with former "Idol" judge Jennifer Lopez.


text:
Bumgardner, USC Upstate generating a lot of buzz
Published: Thursday, February 14, 2013 at 10:36 p.m.
Last Modified: Thursday, February 14, 2013 at 10:36 p.m.
Expectations for the USC Upstate baseball team are higher than they've been since the Spartans joined the Atlantic Sun Conference five years ago.
Season opener
Niagra at USC Upstate, 4 p.m.
1 Eric Samples; So INF; Wade Hampton High
2 Tyler Lesch; Jr. OF; St. Cloud Fla. (Seminole State CC)
3 Anthony Vacca; So. OF; Fonthill, Ontario
5 Daniel Seeba; Jr. INF; Bowie, Md.
6 Robbie Morris; Fr. C; Irmo High
7 Jordan Stampler; Sr. INF; Davie, Fla., (Brevard CC)
8 Brandon Patterson; Sr. C; Polk City, Fla. (State College of Florida)
9 Luke Weber; Jr. C; Spartanburg High
10 Tyler Miller; Sr. OF; Fort Mill High
12 Chris Knauff; Sr. P; Marietta, Ga.
14 Josh Howard; Fr. RHP; Stuart, Fla.
15 L.J. Newman; So. P/C; Wren High
16 Brian Thompson; So. INF; Cherry Hill, N.J.
19 Brody Greer; Jr. INF; Belton-Honea Path High
23 Paul Jeanot; Jr. LHP; Titusville, Fla. (Seminole State CC)
24 Brandon Lee; Sr. P/C; Palatka, Fla. (Daytona State)
26 Chris Cox; Sr. LHP; Simpsonville (Spartanburg Methodist)
29 Reid Noah; JR. RHP; Lakeland, Fla.
32 Chad Sobotka; So. P; Sarasota, Fla.
34 Austin Goss; Fr. RHP; Port Orange, Fla.
36 David Roseboom; Jr. LHP; Pattersonville, N.Y.
37 Trey Richardson; Sr. C/IF; Lakeland, Fla.
38 Gaither Bumgardner; Sr. OF/IF/P; Great Falls High
44 Ben Augenstein; Sr. P; Sebastian, Fla. (Hillsborough CC)
February – today Niagara, 4 p.m.; 16 Kentucky, 4 p.m.; 17 Georgetown, 1 p.m.; 20 Presbyterian, 4 p.m.; 22 George Washington, 4 p.m.; 23 George Washington, 1 p.m.; 24 George Washington, 1 p.m.; 26 at Davidson, 4 p.m.; 27 at Furman, 4 p.m.
March – 1 Marshall, 4 p.m.; 2 Dayton, 1 p.m.; 3 Marshall, 1 p.m.; 6 at Gardner-Webb, 5 p.m.; 8 Akron, 4 p.m.; 9 Akron, 1 p.m.; 10 Akron, 1 p.m.; 12 at South Carolina, 7 p.m.; 15 ETSU, 6 p.m.; 16 ETSU, 2 p.m., 17 ETSU, 1 p.m.; 20 UNC Asheville, 6 p.m.; 22 at Jacksonville, 7 p.m.; 23 at Jacksonville, 2 p.m.; 24 at Jacksonville, 1 p.m.; 27 Wofford, 6 p.m.; 28 Northern Kentucky, 6 p.m.; 29 Northern Kentucky, 6 p.m.; 30 Northern Kentucky, 1 p.m.
April – 2 at Presbyterian, 3 p.m.; 3 UNC Charlotte, 6 p.m.; 5 at Lipscomb, 6 p.m.; 6 at Lipscomb, 2 p.m.; 7 at Lipscomb, 1 p.m.; 9 Davidson, 6 p.m.; 10 Charleston Southern, 6 p.m.; 12 Stetson, 6 p.m.; 13 Stetson, 2 p.m.; 14 Stetson, 1 p.m.; 16 at UNC Asheville (TBA); 17 at Wofford, 6 p.m.; 19 at Florida Gulf Coast, 6:30 p.m.; 20 at Florida Gulf Coast, 2 p.m.; 21 at Florida Gulf Coast, 1 p.m.; 23 vs. Furman at Fluor Field in Greenville, 6 p.m.; 24 Gardner-Webb, 6 p.m.; 26 Mercer, 6 p.m.; 27 Mercer, 2 p.m.; 28 Mercer, 1 p.m.
May – 8 at Charleston Southern, 3 p.m.; 10 at Kennesaw State, 6 p.m.; 11 at Kennesaw State, 2 p.m.; 12 at Kennesaw State, 1 p.m.; 14 at Clemson, 6:30 p.m.; 16 North Florida, 6 p.m.; 17 North Florida, 6 p.m.; 18 North Florida, 1 p.m.,
Atlantic Sun Conference tournament: May 22-25 in DeLand, Fla.
And, for a change, so is the respect from around the league.
The Spartans, who open at 4 p.m. today at home against Niagara and then play host at 4 p.m. Saturday to No. 12 Kentucky, were picked in the preseason polls to challenge favorites Florida Gulf Coast and Mercer. Last season, USC Upstate was predicted to end up at the bottom of the 12-team conference but finished second.
"This is the first time in a while that we've got a core group of guys returning who have had some success," said USC Upstate's Matt Fincher, who was named 2012 Atlantic Sun Conference coach of the year. "We have as much reason to be optimistic about this season as any other since I've been the head coach here (16 years). … Confidence is a big thing. I hope there will be some carryover effect. But we all know that each team is different. This team is going to have to find its identity."
The Spartans (33-20, 16-10 last season) have the league's reigning player of the year, senior center fielder Gaither Bumgardner, who batted a hefty .376 in 2012 after .371 in 2011. He is the preseason player of the year for 2013.
"I'm honored. That was special," Bumgardner said. "It makes me want to go out and earn it. I'm looking forward to doing that. … I just want to prove myself, like we all do. We've got an experience group and we're working hard. I feel like we have a really good shot to make a run at the Atlantic Sun title, for sure."
Bumgardner, will stay in center after moving around from different positions during his career, but is also expected to bounce back from arm injuries and help on the mound. He made nine starts as a pitcher during his sophomore season but threw just one inning last year.
"I'm real happy for Gaither. He certainly deserves it," Fincher said. "He's multi-talented. He's played a lot of positions for us because he can do just about anything. We're hopeful that he's going to be able to pitch as well. He's an outstanding player."
USC Upstate has five other returning starters in the lineup. Junior catcher Luke Weber from Spartanburg High School batted .302 last season with nine doubles and a pair of home runs. The Spartans also have senior Trey Richardson (.265) at first, senior Jordan Stampler (.274) at third, junior Brody Greer (.224) as a defensive whiz at short and senior Tyler Miller (.279) in right field.
Senior Brandon Lee (7-4, 3.84) is the opening-day starter and projected to pitch on Friday nights when the Spartans get to conference play on the weekends. Junior left-hander David Roseboom (7-3, 3.40) will be next, followed by senior Ben Augenstein (4-1, 3.49 in six starts).
Newcomer Paul Jeanot, a transfer from Seminole State Community College in Florida, is also pushing for an important role on the staff. He could be a key as a swing player, starting and relieving. The Spartans did lose David Palladino, a former 13th-round pick by the Los Angeles Dodgers, who transferred to Howard College, a junior college in Texas.
All-conference closer Chad Sobotka, only a sophomore, had 12 saves last season while going 3-0 with a 1.72 ERA. He allowed only 21 hits in 31 innings, striking out 34.
"In my opinion," Fincher said, "he's the best closer in the conference."
Among the other newcomers making the biggest impressions are junior college transfer Daniel Seeba, who will start at second base; Tyler Lesch, a speedster who will play left field and could bat second in the order; and A.J. Mackey, another junior college guy who pitches and plays infield.
"I'd say we're average to above averages — sometimes way above average — in every area," Fincher said. "That right there might be out strength. I wouldn't say that we have a weakness. We match up pretty well everywhere."
Reader comments posted to this article may be published in our print edition. All rights reserved. This copyrighted material may not be re-published without permission. Links are encouraged.


text:
University Writing Center
Welcome to Regent's University Writing Center. The Writing Center's services and resources are available to all Regent students (on-campus and online), faculty, and staff. Located in the Library Suite 102, the Writing Center provides a place where even the most experienced writers can improve their skills through collaboration with a coach who is familiar with the challenges of academic writing. Coaching is available in-person, over the phone, and via Blackboard Collaborate.
How the Process Works
- The Writing Center offers one-on-one assistance to any Regent University student, faculty, or staff member working on a Regent-related writing task. Our coaches follow a tutoring model that offers individualized guidance by applying principles of effective writing rather than focusing purely on "fixing" a paper. In addition, coaches help writers evaluate the sources of problems they encounter by reading segments of the work together, thus eliciting the writer's ideas and suggesting solutions accordingly.
- Coaching is available in 45-minute sessions for scheduled appointments.
- "Walk-In" sessions (10-15 min) are also welcome but are contingent upon coach availability; to ensure accessibility, scheduled appointments are recommended, particularly during peak seasons. Online students may call the Writing Center for "walk-in" sessions.
- Students are allowed one appointment per day and up to three appointments a week. This limit includes both scheduled appointments and walk-in sessions.
Writing Center Hours:
Monday: 10 am – 8 pm (EST)
Tuesday: 10 am – 9 pm (EST)
Wednesday: 10 am – 9 pm (EST)
Thursday: 10 am – 9 pm (EST)
Friday: 10 am – 6 pm (EST)
Saturday: 10 am – 6 pm (EST)
Sunday: CLOSED
Contact Information:
Email: email@example.com
Phone: 757.352.4925


text:
SAN JOSE -- Sharks general manager Doug Wilson always leaves the door open for personnel moves. But Tuesday, as the NHL continued to prepare for its lockout-shortened season, he didn't sound like someone ready to tap into the free-agent market.
First, Wilson said, he needed to know more about the health and fitness of his players.
"A lot is dictated by where your own guys are at," he said, "and we can't know that until we see them and test them."
That won't happen before the opening of camp, now projected for Sunday. And this year, with a 48-game season expected to begin Jan. 19, there's less time than usual for newcomers to become familiar with the Sharks' approach to the game and terminology used by the coaches.
"We brought in 10 players a year ago," he said. "I wouldn't want to be bringing 10 players into a short and compressed season."
After making their earliest playoff exit in franchise history last April, the Sharks added only two players from outside the organization -- defenseman Brad Stuart and forward Adam Burrish.
While that five-game loss to the St. Louis Blues may have suggested greater turnover would follow, Wilson said the limited changes should benefit San Jose under present circumstances.
"You've got to integrate players in to get off to a good start," Wilson said. "I think the strength of our situation is everybody kind of knows each other."
No personnel moves can occur until both owners and players ratify the tentative agreement reached early Sunday morning. The NHL governors are expected to do that Wednesday in New York, but player voting could extend until Saturday.
The Sharks' main concern at this point would appear to be depth on the blue line. Brent Burns is skating but reportedly still is recovering from groin surgery last spring. Jason Demers and Justin Braun both returned from stints in Europe with what are believed to be minor wrist injuries.
If those injuries aren't healed by opening day, the Sharks are likely to look to their Worcester development team for replacements rather than turn to the journeymen veterans available as role players such as Mark Eaton, Chris Campoli or even former Shark Jim Vandermeer. Matt Irwin and Matt Tennyson are likely to be the first prospects brought into camp. Beyond the chance to reward prospects, it also gives Wilson more flexibility as any ailing players get ready to return.
"You don't want to bring somebody in and then you're leapfrogging your own guys who are coming back right at that time," Wilson said. "The next thing you know, you've used cap space that you didn't need to use and you're jumping over guys that have worked (hard) to get that opportunity."
Katie Moore was diagnosed with a rare form of the disease in April, two months after her husband was acquired by the Sharks. Moore did not play in San Jose's final two playoff games against St. Louis for what was only noted as personal reasons. He later released a statement explaining his absence.
Tuesday, the Sharks organization said in a statement that their thoughts and prayers are with Moore and his extended family.
"The courage that she showed during her illness is an inspiration to everyone who knew her," the team said.
Moore, 32, had six assists in 23 games with the Sharks as a checking center and is currently an unrestricted free agent.
Robinson, who has nine Stanley Cup rings in his collection, said Montreal coach Scotty Bowman told him it might help to hit someone on his first shift and he nailed Bobby Nevin of the Minnesota North Stars.
"Poor Bobby Nevin," Robinson recalled. "He wouldn't hurt a fly."
Robinson also was an assistant coach in New Jersey 18 years ago when the NHL last lost almost half a season to a lockout. The Devils then went on to win the 1995 Stanley Cup.
"I hope history repeats itself," he said.
For more on the Sharks, visit blogs.mercurynews.com/sharks. Follow David Pollak on Twitter@PollakOnSharks.
Sunday's game
Cal (x-x, x-x Pac-12) at Stanford (x-x, x-x), 1 p.m., ESPN2


text:
STOCKTON -- A lane closure scheduled for tonight on Interstate 5 has been canceled, according to Judith Buethe, a spokeswoman for the city-funded roadwork project.
One lane on southbound I-5 between the Downing Avenue onramp and one-quarter of a mile past the French Camp Road onramp was slated to be closed from 8 tonight until 6 a.m. Thursday.
But the closure has been canceled. There was no reason given.
The interchange from I-5 to French Camp Road is being reworked to accommodate expected increase in traffic. The section of highway in question had been closed from Tuesday night to Wednesday.
Location, ST | website.com