14 December 2011
29 November 2011
Calendra lives on as Cognitum
Calendra Directory manager was a pretty good platform for rapidly developing web applications based on directories, databases, provisioning and workflow. As such it was a great tool for building Identity a Access management related applications.
Calendra was acquired by BMC Software, but never found its place in the portfolio of the company, and development slowed down.
This year ownership of Calendra was transferred to ITConcepts. Cognitum is the new name for the product. This month a new version of the product, Cognitum 7.7 is released. In addition to some bug fixes it aligns Cognitum with current standards: Java 6, JDBC 4, Tomcat 7 and Windows 7.
The roadmap for the product again looks ambitious now. The next version of the product is expected to merge some Calendra 4 features back into the main branch (Basket functionality, Studio Wizards, History actions...).
here's an overview of Cognitum's architecture:
18 November 2011
Devoxx redux
Stephan Janssens: There will be a Devoxx France event in Paris, 18-20/4. 75% french / 25% english.
Mark Reinhold: Oracle thinks a two year release cycle is optimal. So we can expect Java 8 mid 2013.
Let me think: that puts java 9 mid 2015
Mark Reinhold: We're planning reified generics and unified primitives for Java 9.
Mark Reinhold: Swing is a Sun development. Oracle will concentrate on JavaFX. Do not expect many new initiatives from Oracle for Swing.
Well, I can name some other Sun developments
@Jax-RS 2 talk: JAX-RS will be in the Java EE7 web profile.
Matt Railble: great video in presentation on Play, HTML5, Jade and CoffeeScript.
Shaun Smith: For JPA 2.1 EclipseLink is doing work on
- multitenancy: separte datasets per group of users
- domain model extensions: storing generic attributes (name/value pairs)
Joshua Bloch: Who cares about the Java VM, it's the languages that count.
Greg Luck: JSR347 (Datagrid) will be based on JSR107 (caching)
Greg Luck: We talked with oracle to Apache license the TCK (Technology Compatibility Kit). Oracle legal wants to avoid implementations claiming 70% compatible and people testing compatibility of someone else's implementation. We are working with Oracle on a new license for the TCK.
16 November 2011
Create a test case in Intellij IDEA
Position yourself on the name of the class you want to create a test for and press [ALT] + [ENTER].
IntelliJ will let you select your test framework (JUnit 3/4, TestNG) and you can select all methods in the original class you want to generate skeletons for (pity they forgot a select all button).
12 November 2011
EDF convicted for hacking greenpeace
Electricité de France is the second player on the Belgian energy market, selling under the Luminus brand name.
Looking at Electricité de France's website shows you a green company. They claim to have a carbon emission that's three times lower than their average competitor. This is not surprising: EDF is the world's biggest producer of nuclear energy.
Flamanville 3 nuclear reactor (under construction) |
Alain Quiros was sentenced as well for a separate case of hacking a french anti doping agency for Floyd Landis. After winning the Tour de France in 2006, he was stripped from his victory when it was discovered he had been using doping in the 17th stage which he won after an epic solo escape.
9 November 2011
SABAM wants 3% of ISP subscriptions
After getting money out of children creches, computer hard disk, taxi's, company phone waiting tunes and the like, Belgium's author rights association SABAM is now attacking ISP's. They want their fair share of the pie, and ask for 3.4% of your ISP subscription, because it provides access to coyprighted work.
SABAM says this does not mean that the sites that distribute coyrighted material (e.g. YouTube) do not have to pay for the copyright anymore (double pay!).
SABAM does not want to be seen as the bad guy, and expresses the hope ISP's will not charge end users for the money they ask.
28 October 2011
Patent war II
Earlier we reported on different types of patent law suits between Microsoft and Motorola.
Here's a global overview of lawsuits in the mobile world from Design Language News, a fine site specializing in visualizing data.
25 October 2011
Light field camera
The eye and conventional camera's capture the colour and intensity of light. They need to focus to get a sharp image for a certain distance.
This allows you to reprocess and refocus the light information afterwards.
Storing this extra information takes up about 200 times the space of a classical picture. So the camera's have to sacrifice resolution to keep picture storage size within limits.
Lytro will bring a consumer light field camera to the market next year. An 8GB version costs $400 and stores 350 pictures.
You can refocus some pictures in a demo at their site.
2 October 2011
EDAM: Easy Development And Maintenance
Design patterns make code more complex and harder to write.
Strike the right balance between easy work now (development) and later (maintenance).
25 September 2011
JPA labs – high level instructions (edit)
Lab 3 Exercise 2 Task 1
Adjusting the table and column names
- Create the com.acme.entities.AuctionUser entitiy
- Follow the same procedure as in Lab 1 Exercise 3 Task 3, steps 1-6
- Add the attributes shown in the Student Guide page 2-9, Figure 2-4
- Press ALT+INSERT to add a default constructor and a constructor accepting all attributes except the auctionUserId
- Add an annotation to save the entity to the table A_USER
- Add an annotation to save the auctionUserId attribute to the id column
- Add an annotation to save the displayName attribute to the name column.
- Set the column length to 50.
- Modify the main method created in Lab 1 to save an AuctionUser entity
- At the beginning of the method create auctionUser JaneDoe with email address jane@doe.com
- After the statement to persist the item, add a similar statement to persist the user
- Choose Run -> Run Main Project
- Follow the same procedure as in Lab 1 Exercise 3 Task 3, step 9 to run the project and verify the table was created as intended and JaneDoe was inserted.
Lab 4 Exercise 2 Task 2
Working with the entity manager
- In the Item entitiy
- Press ALT+INSERT to generate a constructor that takes all attributes except the id as an argument
- Press ALT+INSERT to generate a default constructor
- Create the ItemDao class in the (new) com.acme.daos package
- Add a static EntityManagerFactory attribute
- Initialize the attribute with an EntityManagerFactory for your persistence unit
- Implement the method
private EntityManager getEntityManager()
The method should return an EntityManager created from the EntityManagerFactory attribute - Implement the method
public Item save(Item item)
- The method should call the getEntityManager method
- The method should persist the item within a transaction
- Look at the main method for inspiration
- return the item
- Add a static EntityManagerFactory attribute
- Create a unit test to test the save() method.
- Right-click the Project node and choose New –> Other.
- Select JUnit from the list of Categories and JUnit Test from the list of File Types, then click Next
- Type ItemTest for the class name
- Select Test Packages as the location
- Type com.acme.daos for the package name
- Click Finish.
- Select JUnit 4.x if prompted for the JUnit version:
- Add an import for static assertXXX JUnit utility methods:
import static org.junit.Assert.*;
- Add a static ItemDao attribute. Initialise it in the @BeforeClass annotated method.
- Create a test method called save() to test the save() method on the ItemDao
- Annotate the method with @Test
- In the test method
- Create a new Item and set all attributes except the id
- Save the Item using the ItemDao
- Use the assertFalse method to test the Item id is not null
- Right click ItemTest.java and choose Run File If you see a green bar with 100% in it, the test passed. If you see a red bar, the test failed.
assertFalse("id should not be null", item.getId()==null);
- In the ItemDao class, implement the following method:
public Item findByPrimaryKey(Long id)
- Create an annotated test method called find in the ItemTest class to test the findByPrimaryKey method. In this method:
- Create a new Item and set all attributes except the id
- Save the Item using the ItemDao
- Pass the primary key of the saved item to findByPrimaryKey to retrieve the Item from the database
- Use the assertEquals method to test that the key of the returned Item has the same key.
- Run the test and correct errors until it succeeds.
- Create a method in the ItemDao class.
public void deleteByPrimaryKey(Long id)
- Get an entity manager
- Start a transaction
- Look up the Item using the getReference method on the entity manager
- Delete the item using the remove method on the entity manager
- Commit the transaction
- Create an annotated test method called find in the ItemTest class to test the deleteByPrimaryKey method. in this method:
- Create a new Item and set all attributes except the id
- Save the Item using the ItemDao
- Pass the primary key of the saved item to deleteByPrimaryKey to delete the Item from the database
- Pass the primary key of the saved item to findByPrimaryKey to retrieve the Item from the database
- Use the AssertNull method to verify that the item is not found.
Lab 5 Exercise 2 Task 1
Creating a unidirectional One-to-One relationship between two entities
- Create the com.acme.entities.Auction entitiy with these attributes:
private Long auctionId; private BigDecimal startAmount; private BigDecimal increment; private String status; private Date openTime; private Date closeTime; private Item item;
- Map the Date attributes to TIMESTAMP columns using the @Temporal annotation
- Establish a OneToOne relation with Item
- Press ALT+INSERT to generate getters and setters, a default constructor and a constructor accepting all attributes except the auctionId
- Create the com.acme.daos.AuctionDao class
- Copy the static EntityManagerFactory attribute from ItemDao
- implement the same methods as in ItemDao, but this time for the Auction entity
- Create a unit test to test the save() method.
- Right-click the Project node and choose New –> Other.
- Select JUnit from the list of Categories and JUnit Test from the list of File Types, then click Next
- Type AuctionTest for the class name
- Select Test Packages as the location
- Type com.acme.daos for the package name
- Click Finish.
- Add an import for static assertXXX JUnit utility methods:
import static org.junit.Assert.*;
- Add an attribute
static AuctionDao auctionDao;
- Initialise it in the @BeforeClass annotated method.
- Create a test method called save() to test the save() method on the ItemDao
- you may modify the method to pass the attributes in the constructor instead of using the setters
- Right click ItemTest.java and choose Run File. Run the test and correct errors until it succeeds.
@Test public void save(){ Auction auction = new Auction(); auction.setOpenTime(new Date()); GregorianCalendar cal = new GregorianCalendar(); cal.roll(Calendar.MONTH, true); auction.setCloseTime(cal.getTime()); auction.setStartAmount(new BigDecimal("100.00")); auction.setIncrement(new BigDecimal("10.00")); auction.setStatus(Status.OPEN) auction = auctionDao.save(auction); assertTrue("id is greater than zero", auction.getAuctionId() > 0); }
Lab 5 Exercise 3 Task 1
Creating a bidirectional One-to-Many/Many-to-One relationship
- Add a bidirectional One-to-Many/Many-to-One relationship between Auction (1) and Bid (many)
- Add an annotated bids attribute to the Auction entity
- Set cascade mode to ALL
- Initialize the attribute to an empty list of bids
- Add an auction attribute to the Bid entity
- Press ALT+INSERT to generate auction getter/setter methods
- Add an annotation for the relationship
- Press ALT+INSERT to generate a constructor that takes all attributes except the id as arguments
- Press ALT+INSERT to generate a default constructor
- Implement these methods in the Auction entity
public void addBid(Bid bid) public int getBidCount()
- Add an annotated bids attribute to the Auction entity
- Implement a saveBids() methods in the AuctionTest class
- Create an auction
- Add 3 new bids with amounts of 150, 175 and 225
- Save the auction
- Assert that the saved auction got an ID
- Assert that the new auction has 3 bids
- Run the test until it passes.
Lab 6 Exercise 2 Task 1
Persisting an Entity with a superclass
- Create an entity called com.acme.entities BookItem.
- Make the BookItem entity a subclass of Item.
- The attributes of the entity are described in module 2 of the Student Guide.
- In the main method add the creation of a BookItem and save it to the database.
- Run the main method
- Examine which changes were made to the database tables
Lab 7 Exercise 2 Task 1
Persisting an Entity with an enum Field
- Create the Status enum.
- Right click on the com.acme.entities package and choose New>Java class
- Type Status for the Class Name.
- Choose enum for the type
- Click OK
- Right click on the com.acme.entities package and choose New>Java class
- Add these values to the enum: OPEN, CLOSED, CANCELLED
- Refactor the type of Auction.status and change it to Status
- Change getter and setter methods
- Change the call to setStatus in AuctionTest.java
- Run the AuctionTest and correct errors until it succeeds
- Check the database definition of Auction.status and check the inserted data. What has changed?
- Add an Enumerated annotation to the status field and set enumeration type to STRING
- Run the AuctionTest and correct errors until it succeeds
- Check the database definition of Auction.status and check the inserted data. What has changed?
Lab 7 Exercise 3 Task 1
Persisting an Entity with a List field
- Add a Set of String keywords to the Item entity and initialize it to an empty Set.
- Annotate it as an ElementCollection
- Implement these methods:
public void addKeyword(String keyword) public List<String> getKeywords()
- Add an annotated test method saveKeywords() to ItemTest. You can use the test methods for bids in Auction as a source of inspiration.
- Run the AuctionTest and correct errors until it succeeds.
- Describe the database table where the keywords are saved.
Lab 8 Exercise 2
Performing a query with the Java Persistence API QL
- Add a dynamicJpqlQuery() test to the ItemTest class. In the method
- Perform this JPQL query (within a transaction)
- What does this query do?
- Create 3 Items using ItemDao.save(Item i), using different values for all atributes.
- Save them to the database
- Perform a JPQL query to retrieve them
- Assert you retrieved 3 results
- perform a JPQL query to retrieve only items in stock
- Assert you retrieved the correct number of results
- Optional: Add a testPaging() test method that creates 25 Items and retrieves them in groups of maximum 10. Verify that it runs correctly.
DELETE FROM Item i
Lab 8 Exercise 3
Performing a query with SQL
- Copy the dynamicJpqlQuery() test in the ItemTest class to nativeSqlQuery()
- In the method replace all queries with native queries
Lab 8 Exercise 4
- Add a constructor to the Item class that accepts all attributes
- Type ALT+INSERT into the item class
- Choose Constructor…
- Check all attributes except the ID
- Click Generate
- Add a default constructor to the Item class
- Type ALT+INSERT into the item class
- Choose Constructor…
- Click Generate
- Copy the CriteriaTest.java file from the labs08 directory to the com.acme.entities package in the test directory
- Examine the code
- Run the code
Lab 9 Exercise 2 Task 1
Creating and running a named query
- Define a named query called ClearAuctions using an annotiation on the Auction entity that deletes all auctions
- Define a named query called FindByStatusAuctions using an annotiation on the Auction entity. To define multiple named queries use @NamedQueries:
@NamedQueries( { @NamedQuery(name="xxx",query="XXXX"), @NamedQuery(name="yyy",query="YYY") }
- The query should select all auctions with a certain status
- Set the status in the query as a named parameter
- Add an annotated test method called testNamedQuery() to the AuctionTest clas.
- Execute the ClearAuctions query (you can find inspiration in the tests in the previous chapter)
- Do not use the Dao, but create an EntityManager
- Perform the delete operation within a transaction
- Execute the FindByStatusAuctions query to look for all closed auctions
- Assert no entries are found
- Run the test and correct errors until it succeeds
- Modify the testNamedQuery() test to insert three auctions and add them to the auction table
- Add a convenience constructor with common attributes and a default constructor to the entity
- The start date of the first auction should be between those of the second and the third item(we will use this in the next exercise)
- Only two auctions should be in open
- Save them using the Dao
- Assert one entry is found
- Run the test and correct errors until it succeeds
Lab 9 Exercise 2 Task 2
Creating multiple named queries
- Write a new NamedQuery FindAllAuctions that finds all auctions.
- Copy the testNamedQuery() test to a new test and call it testOrderedQuery()
- Replace the last query in the copied test method (FindByStatusAuctions) with the FindAllAuctions Query and store the results in a List
- Assert that the first auction starts after the second.
- Run the test and correct errors until it succeeds
- Write a new NamedQuery called FindAllOrderByOpenTimeAuctions that sorts by ascending openTime.
- Add the query at the end of testOrderedQuery.
- Assert that the first auction starts before the second.
Lab 10 Exercise 2
Performing a Query With Multiple Criteria
- Define a named query called clearItems that deletes all items. Use an annotation on the Item entity
- Add an annotated test method called incompleteItems() to the ItemTest class.
- In the incompleteItems method
- Call the clearItems named query
- Create 3 items.
- An Item with a description
- An Item with an image
- An Item with an image and a description
- Build a criteria query that selects all items that have a description OR an image that is NULL
Hint: use CriteriaBuilder.isNull() - Execute the query
- Assert 2 entries are found
- Run the test and correct errors until it succeeds
Lab 10 Exercise 3 (extra)
Performing a query with a named parameter
- Copy the incompleteItems() test method and call the copy namedParameter()
- Replace the query with a Criteria query that selects all items with a given description
- The description should be received as a parameter called “desc”
- Execute the query for each description in your items
- Assert that you get exactly one result each time
- Run the test and correct errors until it succeeds
Lab 13 Exercise 2 Task 1
Creating a Composite Key
- Create the BookPk class in the com.acme.enitities package
- Add the @Embeddable annotation and the Serializable interface to theclass declaration.
@Embeddable public class BookPk implements Serializable{
- Add the following fields:
private String title; private int edition;
- Right-click an empty line and choose Insert Code.
- Choose Getter and Setter.
- Select all fields and click Generate.
- Right-click an empty line and choose equals() and hashCode().
- Select all fields in the list.
- Click Generate.
- Create the TextBook entity class in the the com.acme.enitities package
- Add an EmbeddedId of type BookPk
- Add attributes
private List<String> authors; private int yearPublished;
- Extra: Annotate the authors attribute as an ElementCollection
- In the main method add the creation of a BookItem and save it to the database
- Run the main method
- Examine which changes were made to the database tables
Lab 13 Extra: Exercise 3 Task 1
Using validation
This lab supposes the validator reference implementation has been downloaded to $Home/pkg
- In the projects window right click the libraries folder and select Add Library
- Click Create...
- Enter Library Name: Validation
- Click OK
- Click Add JAR/Folder...
- Select $HOME/pkg/hibernate-validator/hibernate-validator*.jar
- * depends on the version of validator
- Click Add JAR/Folder...
- Select $HOME/pkg/hibernate-validator/lib/required/validator-api-1.0.0.GA.jar
- Click OK
- Click Add Library
- In the Item entity annotate the image with a validation that
- prints the message "Only JPG images are accepted"
- only accept values matching this pattern
- In the ItemTest class add a test method test Validation that
- saves an Item with a null image
- saves an item with an image string ending in .jpg
- saves an item with an image string ending in .gif
- surround the last save line with a try block
- catch a ConstraintViolationException
- add an empty catch block
- in the try block add as a last line
- Run the test and correct errors until it succeeds
".*\\.jpg"
fail("picture.gif should fail validation");
19 September 2011
JPA entity state transitions and EntityManager methods
- only the most common EntityManager methods/transitions are mentioned
- void return types have been omitted
- refresh() is also loading from the database
18 September 2011
Java logging toolkit levels mapping
A comparison of the logging levels (or methods) in different logging toolkits. I omitted the ALL and NONE levels.
java.util logging | log4j/slf4j |
FINEST | TRACE |
FINE | DEBUG |
INFO | INFO |
WARNING | WARN |
SEVERE | ERROR |
13 September 2011
What did you do on 9/11?
I was teaching a Solaris security course that day, with some NATO people in the class.
I remember meeting my colleague Guido in the corridor saying "World War III just started".
I told the class the news and went on with the course.
Next morning, Raoul, manager of Sun Education Belgium, had a minute of silence for everybody.
One of the British officers told another NATO attendee he should not be wearing a US Army T-shirt, because he was exposing himself as a target.
8 September 2011
Reasons to be
Summer, Buddy Holly, the working folly
Good golly Miss Molly and boats
Hammersmith Palais, the Bolshoi Ballet
Jump back in the alley and nanny goats
18-wheeler Scammels, Domenecker camels
All other mammals plus equal votes
Seeing Piccadilly, Fanny Smith and Willy
Being rather silly, and porridge oats
A bit of grin and bear it, a bit of come and share it
You're welcome, we can spare it - yellow socks
Too short to be haughty, too nutty to be naughty
Going on 40 - no electric shocks
The juice of the carrot, the smile of the parrot
A little drop of claret - anything that rocks
Elvis and Scotty, days when I ain't spotty,
Sitting on the potty - curing smallpox
Health service glasses
Gigolos and brasses
round or skinny bottoms
Take your mum to Paris
lighting up the chalice
Wee Willy Harris
Bantu Stephen Biko, listening to Rico
Harpo, Groucho, Chico
Cheddar cheese and pickle, the Vincent motorsickle
Slap and tickle
Woody Allen, Dali, Dimitri and Pasquale
balabalabala and Volare
Something nice to study, phoning up a buddy
Being in my nuddy
Saying hokey-dokey, Sing Along With Smokey
Coming out of chokey
John Coltrane's soprano, Adi Celentano
Bonar Colleano
Reasons to be cheerful, part 3 - Ian Dury
15 July 2011
NetBeans, Hibernate and JPA2
When you create a new persistence unit in a standalone NetBeans project, it only proposes Hibernate with JPA1.
This is because NetBeans bundles an old Hibernate release.
To work with Hibernate/JPA2, download a recent Hibernate (>= 3.5) and SLF4J (same version as the one used in your hibernate download).
Add a new persistence library with these jars from the hibernate installation directory:
- hibernate3.jar
- jars from lib/jpa folder
- jars from lib/required folder
- an SLF4J implementation library from the SLF4J download, e.g. slf4j-jdk14-1.6.1.jar
- if you are using ehcache there is no need to download SLF4J separately. It bundles slf4j-jdk14-1.6.1.jar.
7 July 2011
Mapping the Unified Process to CMMI
The (Rational) Unified Process (RUP or UP) is an iterative software development process. It was originally developed by the creators of UML at Rational Rose (now IBM).
CMMI (Capability Maturity Model and Integration) is a model that identifies the characteristics for a good software process within an organisation and defines metrics to be used to measure and improve the maturity of this process. CMMI is developed and governed by the SEI at Carnegie Mellon University. CMMI identifies 5 maturity levels:
- Initial
- Managed (reactive process)
- Defined (proactive process)
- Quantitatively managed (measured & controlled)
- Optimizing
CMMI Category | Process Area | Maturity level | UP support | UP remarks | |
Project Management | PP | Project Planning | 2 | High | only software aspects no data management |
PMC | Project Monitoring and Control | 2 | High | no data management | |
SAM | Supplier Agreement Management | 2 | Low | ||
IPM | Integrated Project Management | 3 | Medium | weak integration of plans and managing dependencies between them | |
RSKM | Risk Management | 3 | High | should add risk parameters | |
QPM | Qunatitiative Project Management | 4 | Low | no process decomposition no statistical analysis | |
Engineering | REQM | Requirements Management | 2 | High | |
RD | Requirements Development | 3 | High | should add allocating component requirements | |
TS | Technical Solution | 3 | High | no alternative solutions no reuse/build/buy analysis | |
PI | Product Integration | 3 | High | ||
VER | Verification | 3 | High | should add recording mechanism for reviews | |
VAL | Validation | 3 | High | ||
Support | CM | Configuration Management | 2 | High | |
PPQA | Process and Product Quality Assurance | 2 | High | ||
MA | Measurement and Analysis | 2 | High | should add quantitative metrics and analysis | |
DAR | Decision Analysis and Resolution | 3 | Low | ||
CAR | Causal Analysis and Resolution | 5 | Low | support for actions on defects and evaluation | |
Process Management | OPF | Organizational Process Focus | 3 | Low | basic support |
OPD | Organisational Process Defintion | 3 | Medium | basic support | |
OT | Organizational Training | 3 | Low | ||
OPP | Oprganisational Process Performance | 4 | Low | ||
OPM | Organizational Performance Management | 5 | Low |
4 July 2011
Wikileaks sues credit card companies
We talked earlier about payment clearing houses blocking payments to Wikileaks.
Wikileaks and their ISP are now suing Visa and MasterCard in Denmark for this action.
19 June 2011
Java EE applications, practice 4-2, step 2.g
- Retrieve the "customerIdentity" request parameter
- Use the identity to look up the customer in the model and save it to the "customer" attribute
- Use the identity to look up the customer shares in the model and save them to the "shares" attribute
- If there is an exception, save its message to the "message" attribute
16 June 2011
16 May 2011
14 May 2011
PROTECT IP: new US website blocking bill
The PROTECT IP act, a new US law proposal, will greatly extend last year's COICA internet censorship proposal:
- PROTECT IP is targeted at infringement of rights, so it is targeted at distribution of copyrighted material and counterfeited articles.
- As such there does not seem to be a problem with that, but it remains to be seen how easily this can be stretched. It might be sufficient to find one non compliant item on a site to take action against the entire site. In the past single clips have caused actions against the entire YouTube site.
- PROTECT IP will no longer try to seize domain names, instead it will target intermediate, servicing sites.
- This makes it easier to target sites outside the US.
- Plaintiffs can by simple court order, take direct against revenue sources for these sites (payment clearing and advertisers).
- The site does not have to be notified to be able to defend itself.
- The site is notified when action is taken against them starts, if they have an address in the US.
- There is a procedure to fight the order afterwards.
- If plaintiff completes a procedure at the Department Of Justice that declares that a site is infringing rights, it can also order the site to be removed from search engine results and ISP hosting.
- This is a tactic that is copied from the Great Chinese Firewall.
- PROTECT IP encourages intermediate sites to do self censorship. If Google or Visa stop doing business with a site because they think it is not kosher, they are protected by law
- We have seen such actions by payment providers against WikiLeaks, without any legal order to do so.
- Arbitrary business boycotts will now be legal.
11 May 2011
US CERT recommends disabling WebGL
HTML 5 is sometimes seen as a flash killer, because of the new <canvas> tag. <canvas> can be used to draw graphics via scripting (usually JavaScript).
Firefox 4 and Chrome 9 support 3D graphics in <canvas> through the WebGL API. WebGL is developed by the non-profit Khronos consortium, basically consisting of everybody but Microsoft.
WebGL accesses your hardware driver, giving you hardware acceleration, but also exposing you to a set of vulnerabilities. US CERT now recommends disabling the feature.
To disable WebGL in Firefox, change the preferences:
- navigating to the special about:config URL.
- promise to be careful on the warning page
- type webgl in the filter bar
- toggle the webgl:disabled setting to true
6 May 2011
Sun Grid Engine @ Oracle
Sun Grid Engine used to be available as an Open Source product.
With the purchase of Sun by Oracle, the product will be called Oracle Grid Engine.
Future Oracle Grid Engine versions will no longer be open source.The current version of Oracle Grid Engine is 6.2 update 7.
The Open Source version at the time of the transition (6.2 update 5) was moved to SourceForge and re-branded to Open Grid Scheduler. There is limited activity and progress on the open source project.
Univa provides commercial support for the open source product at $100 yearly per core. Univa also sells a product with closed source extensions as Univa Grid Engine version 8.
Oracle recently reversed its policy of commercialising Sun open source projects for some products that successfully forked:
- Oracle stopped the commercial version of OpenOffice (but AFAIK the ODF 1.2 plugin for MS Office is still not free)
- Oracle proposed to moved control of Hudson to the Eclipse foundation, after the fork of Jenkins
6 April 2011
Google App Engine: JPA or Objectify?
In practice, the biggest difference after abandoning JDO/JPA is that you will stop screaming loudly at your computer, annoying your coworkers.
25 March 2011
IPv4 addresses more expensive than .com domains
Microsoft has bought more than half a million IPv4 addresses from the bankrupt Nortel Networks for 7 million dollar. At $11 per address, this is more expensive than a .com domain name. (although one can argue that it is not more expensive than a good .com domain name).
IPv4 free address space is depleted since February.
22 March 2011
Most teams aren't teams at all but merely collections of individual relations with the boss. Each individual vying with the other for power, prestige and position
Conway's lawThe system being produced will tend to have a structure that mirrors the structure of the group that is producing it. One should take advantage of this fact and then deliberatly design the group structure so as to achieve the desired system structure.
18 March 2011
Belgian ticket shop Olympic Games 2012 down
The sale started last tuesday night, but could not service the load. It was taken off line and restarted the next morning with doubled capacity. After the relaunch it still had problems and produced all kinds of errors in the sales process.
The site is now taken offline for more than a month to correct the problems.
Suseia does not want to disclose the name of the company that built the shop.
According to a tweet by JF Hovinne, a freelancer and working for Vox Teneo, the site was built with Drupal.
28 February 2011
Maven 2.1 site command trouble
The maven site command allows you to generate project documentation, as explained in an earlier post for maven 2.0.
Running mvn:site with Maven version 2.1, I had some problems however:
- site plugin version error
SiteToolException: ArtifactNotFoundException: The skin does not exist: Un able to determine the release version
Apparently the skin plugin does not install automatically with a version, so force the issue, from the command line:$ svn checkout http://svn.apache.org/repos/asf/maven/skins/trunk/
$ cd trunk
$ mvn install -DupdateReleaseInfo=true - doxia ArrayIndexOutOfBoundsException
[WARNING] Deprecated API called - not org.apache.maven.doxia.sink.Sink
This error is caused by some maven/module version mismatches.
instance and no SinkFactory available. Please update this plugin.
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] 1
[INFO] ------------------------------------------------------------------------
[DEBUG] Trace
java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.maven.doxia.module.xhtml.XhtmlSink.tableCell(XhtmlSink.java:791)
To solve this second issue, add a <pluginManagement> element under the build element to set compatible versions. <pluginManagement> has a <plugins> child element. Do not confuse this with the <plugins> child of the <buid> element.
<project> ... <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>2.1.1</version> <dependencies> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </plugin> </plugins> </pluginManagement> ... </build> ... </project>
This modification takes care of the exception, and your documentation generation will succeed. The [WARNING]s above, however, will remain.
23 February 2011
Networking bookmarks (updated)
- TCP/IP Illustrated Vol I (The protocols) / W Richard Stevens
- STD's (Internet Protocal Standards)
- IPv6 adoption and IPv4 depletion
- DNS root servers
- NTP
17 February 2011
9 February 2011
6 January 2011
SearchBlox is free now
SearchBlox is an easy to use search server based on Apache Lucene.
It comes as Java web application which you just deploy in your web container.
Then you configure your search definitions through the web forms in the web application.
You can integrate with the search engine using a REST based API.
We have successfully integrated it in customer web sites without any hassle.
The good news is that from now on SearchBlox is free, as in free beer. It is still closed source however.