czwartek, 13 grudnia 2012

Spring examples #2 - Testing Controller using Spring MVC with session scope

Sometimes there is need to store user session data in a session object. There are two choices for that. We can add session scope to a specific object or to whole controller. For testing purposes it is easier (however, not better) to choose the second option. Let us add some annotations to controller:
@Controller
@Scope("session")
public class MyController {

 @Autowired
 SomeSingletonFromContext singleton;

 SessionObject sessionObject = new SessionObject();

 @RequestMaping("/my.htm")
 public void myRequest(HttpServletRequest, HttpServletResponse) {
  ServletOutputStream out = response.getOutputStream();
  response.setContentType("application/json");
  response.setHeader("Cache-Control", "no-cache");
  out.print("Hello Session User");
 }
}
In the tricky part we will enable session for testing. The context configuartion below is our "access point" for controller testing class. Note the 'import' tag pointing to default servlet configuration.



  
      
          
              
                  
              
          
      
  

  


In the servlet-context we need to scan for controller:



Finally we have to set up our test:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
 "file:path/to/test-context-as-above.xml"})
public class MyControllerTest {
 
    private MockHttpServletRequest request;
    private MockHttpServletResponse response;
    
    @Autowired
    private MyController myController;
 
    @Before
    public void setUp() {
     request = new MockHttpServletRequest();
        response = new MockHttpServletResponse();        
    }

    @Test
    public void testSubmit() throws Exception {

     request.setMethod("POST");
        request.setRequestURI("/my.htm");
        request.addParameter("param", "value");
        
        @SuppressWarnings("unused")
        final ModelAndView mavBack = new AnnotationMethodHandlerAdapter()
            .handle(request, response, controller);
        
        assertEquals(response.getContentType(), "application/json");

    }
}
That's all.

środa, 25 lipca 2012

Ohloh code

When I heard that Google Code Search is going to be closed i started to look for it's alternative. I used it on a routine basis - looking for spring solutions, gwt tricks or some xml hibernate configurations.

The best alternative was koders.com, but it was lacking some features - for example searching in xml language(!).

Now, the Koders project is merging with Ohloh in the form of code.ohloh.net. The Ohloh code is great. I can look for gwt examples, spring xml configuration files or hibernate tricks. The left panel is perfect. The code preview is optimal for me. A look of the tool is clean and nice.

poniedziałek, 23 lipca 2012

Installing latest R version under Ubuntu

Ubuntu does not come with the recent R version. Below is the solution. Mind that you can choose different cran mirror. I use wroclaw/poland cran mirror to do this. My Ubuntu version is 11.10 -> oneiric. Keep in mind that. For 12.04 you should use -> precise
sudo apt-get install python-software-properties
sudo add-apt-repository "http://r.meteo.uni.wroc.pl/bin/linux/ubuntu oneiric/"
sudo apt-get update
You will get: W: GPG error: http://r.meteo.uni.wroc.pl oneiric/ Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 51716619E084DAB9
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9
sudo apt-get install r-base-dev 
And we are done.

wtorek, 17 lipca 2012

Spring examples #1 - beginning with spring


I decided to prepare for Spring certification. Therefore, in the series of 'Spring examples' posts I will introduce and clean up the most important Spring concepts.

The source code for this post is available at:
git clone git@bitbucket.org:marpiech/iseqspringcore.git

Prerequisities:
- eclipse: download 'Eclipse IDE for Java EE Developers' from http://www.eclipse.org/downloads/
- maven: download it from http://maven.apache.org/download.html or by sudo apt-get install maven2 
- m2eclipse: in eclipse Help -> Marketplace -> Maven integration for Eclipse -> install
- SpringSource Tool Suite: in eclipse Help -> Marketplace -> STS -> install

First, we have to create directory structure. bash
mkdir iseqspringcore
cd iseqspringcore
mkdir -p src/{test,main}/{java,resources}
Next, we need to set up maven.
nano pom.xml
and paste:


 4.0.0

 com.intelliseq
 spring-tutorial
 1.0

 Spring Tutorial Part 1
Now, we have to prepare eclipse project. bash
mvn install
mvn eclipse:eclipse

Let's switch to eclipse.
File -> Import -> General -> Existing Projects into workspace
RightClick on Project -> Configure -> Convert to maven project

Add maven repository to pom.xml

 
       central
       Maven Repository Switchboard
       default
       http://repo1.maven.org/maven2
       
         false
       
   

RightClick on Project -> Maven -> Add Dependency -> org.springframework, spring-context
Have a look at pom.xml and in project at Maven Dependencies set of libraries.

In src/main/java create package com.intelliseq.springexamples.core Create application-context.xml in the com.intelliseq.springexamples package. There are two two types of bean instantiation through setters: classic one and modern one (see below).


 
  
  
 

 

 
  
 
Let's create Person class in the com.intelliseq.springexamples.core package.
package com.intelliseq.springexamples.core;

public class Person {
 
 private String firstName;
 private String familyName;
 
 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }

 public void setFamilyName(String familyName) {
  this.familyName = familyName;
 }

 @Override
 public String toString() {
  return firstName + " " + familyName;
 }
}
And finally let's create application runner class SpringApp in the com.intelliseq.springexamples.core package. The SpringApp class uses application-context through ClassPathXmlApplicationContext class.
package com.intelliseq.springexamples.core;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringApp {

 public static void main (String[] args) {
  ApplicationContext context =
       new ClassPathXmlApplicationContext(new String[] {"com/intelliseq/springexamples/application-context.xml"});
  Person person = (Person) context.getBean("person");
  System.out.println(person);
  Person modernPerson = (Person) context.getBean("person-modern");
  System.out.println(modernPerson);
 }
 
}
Run Spring App and voila.

środa, 13 czerwca 2012

Getting linked exons BED from UCSC tables

Today I needed bigBed file for visualization of transcript positions in a browser which is bigBed and bigWig based. I have found a discussion where Katrina Learned from UCSC Genome Bioinformatics Group posted very usefull script. I am not going to reinvent the wheel.
nano genePredToBed
and paste this
#!/usr/bin/awk -f

#
# Convert genePred file to a bed file (on stdout)
#
BEGIN {
     FS="\t";
     OFS="\t";
}
{
     name=$1
     chrom=$2
     strand=$3
     start=$4
     end=$5
     cdsStart=$6
     cdsEnd=$7
     blkCnt=$8

     delete starts
     split($9, starts, ",");
     delete ends
     split($10, ends, ",");
     blkStarts=""
     blkSizes=""
     for (i = 1; i <= blkCnt; i++) {
         blkSizes = blkSizes (ends[i]-starts[i]) ",";
         blkStarts = blkStarts (starts[i]-start) ",";
     }

     print chrom, start, end, name, 1000, strand, cdsStart, cdsEnd, 0, 
blkCnt, blkSizes, blkStarts
}
We are almost ready to make our bed file:
chmod +x genePredToBed
wget http://hgdownload.cse.ucsc.edu/goldenPath/mm9/database/knownGene.txt.gz
gzip -d knownGene.txt.gz
cat knownGene.txt | ./genePredToBed > known.bed
Now we can use Jim Kent's bedToBigBed and we are done.

Getting GTF from UCSC with proper gene_id

While downloading GTF file (knownGenes or ensemblGenes) from UCSC Table browser an output has one serious issue. Transcript_id = gene_id. And in fact there is no gene_id. Below simple solution is presented for this problem (mm9 genome):

#prerequisities mysql
wget http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/genePredToGtf
chmod +x genePredToGtf
sudo ln -s ./genePredToGtf genePredToGtf
mysql --user=genome --host=genome-mysql.cse.ucsc.edu -A -N -e "select * from ensGene;" mm9 | cut -f2- | genePredToGtf file stdin ensGene.gtf

wtorek, 1 maja 2012

Converting between .gff, .gtf and .bed formats

Various NGS analysis tools require various input formats. It is sometimes tricky to make free software working.
Recently, all required tools for converting between .gff, .gtf and .bed formats were incorporated into Tubingen Rätsch Lab Galaxy instance

http://galaxy.tuebingen.mpg.de/

czwartek, 26 kwietnia 2012

R tips

If you are looking for R tips for beginners and advanced users there is nothing better than this:
http://pj.freefaculty.org/R/Rtips.html

or in .pdf version:
http://pj.freefaculty.org/R/Rtips.pdf

Topics include:
- exchange data between R and other programs (Excel, etc)
- create variable names on the fly
- return multiple values from a function
- scatterplot: smooth a line connecting points
- test for Normality
- multiple analysis of variance
- character encoding
- R environment in side scripts

and many more. Enjoy.

poniedziałek, 12 marca 2012

[solved] git updating directory error

Today, my collaborator in a project replaced webapp/gwt/ directory with dynamic link to war/gwt directory

In .gitignore we had only this statement:
...
webapp/gwt/* 
...

During the pull origin somebranch i got this error:
git error: Updating the following directories would lose untracked files in it:
{{yourdir}}

Solution:
rm -rf {{yourdir}}
git pull origin {{somebranch}}
and add to .gitignore the conflicting dynamic link.

Google wasn't very helpfull this time. I hope this tip will help someone in the future...

poniedziałek, 5 marca 2012

[solved] libexpat.la missing

Today I got this error:

libtool: link: cannot find the library "libexpat.la" or unhandled argument libexpat.la ubuntu

To solve this issue run in apache source directory

cd srclib/apr-util/xml/expat
./configure
# OR ./configure --prefix=/{{YOURDIR}}/apache/source/httpd-2.2.22/srclib/apr-util/xml/expat/
sudo make install
# OR make install

Remember to clean up your previous apache install after make install failed

cd {{YOURDIR}}/apache/
ls -la
rm -r bin
rm -r build
rm -r include
rm -r lib

czwartek, 23 lutego 2012

10 papers that every bioinformatician should read

This list of top 10 papers in bioinformatics does not only consist of purely bioinformatic papers, but shows how gentle and simple bioinformatics can and should be:

1. Dudley JT, Butte AJ (2009) A Quick Guide for Developing Effective Bioinformatics Programming Skills. PLoS Computational Biology 5(12)
Link
"Consequently it is no surprise that many successful bioinformatics apps are written by biologists who lack formal computer science training, as they undoubtedly put scientific utility ahead of architectural elegance and completeness."

2. Kim TK, Hemberg M, Gray JM, Costa AM, Bear DM, Wu J, Harmin DA, Laptewicz M, Barbara-Haley K, Kuersten S, Markenscoff-Papadimitriou E, Kuhl D, Bito H, Worley PF, Kreiman G, Greenberg ME (2010) Widespread transcription at neuronal activity-regulated enhancers. Nature 465(7295)
Link
Simple and brilliant use of ChIP-seq and RNA-seq techniques.

3. Goecks J, Nekrutenko A, Taylor J, and The Galaxy Team (2010) Galaxy: a comprehensive approach for supporting accessible, reproducible, and transparent computational research in the life sciences. Genome Biology 11(8)
Link
Bioinformatics for the masses.

4. Ameur A, Zaghlool A, Halvardson J, Wetterbom A, Gyllensten U, Cavelier L, Feuk L (2011) Total RNA sequencing reveals nascent transcription and widespread co-transcriptional splicing in the human brain. Nature Structural & Molecular Biology 18
Link
Great example of getting additional features from RNA-seq data.

5. Smedley D, Haider S, Ballester B, Holland R, London D, Thorisson G, Kasprzyk A (2009) BioMart – biological queries made easy. BMC Genomics 10
Link
Data mart for biologists.

6. Krzywinski M, Schein J, Birol I, Jones S, Marra M (2008) Circos - an information aesthetic for comparative genomics. Genome Informatics conference
Link
Beauty of data visualization.

7. Majewski J, Ott J (2004) Distribution and characterization of regulatory elements in the human genome. Genome Research 12
Link
One of the first successful attempts to analyze genomic features at genome scale.

8. Kent WJ, Zweig AS,  Barber G, Hinrichs AS, Karolchik D (2009) BigWig and BigBed: enabling browsing of large distributed datasets. Bioinformatics 26(17)
Link
Standard formats for storing NGS-data. Fast, simple.


The list will continue...

piątek, 20 stycznia 2012

Run process as another user in init.d script

start-stop-daemon --start --quiet --chuid $USER:$GROUP --exec $SCRIPT

Installing Cassandra on Ubuntu server

# enable add-apt-repository
sudo apt-get install python-software-properties
# add repository for java
sudo add-apt-repository ppa:ferramroberto/java
# update
sudo apt-get update
# install Sun (I hate Oracle) java
sudo apt-get install sun-java6-jdk sun-java6-plugin
# create directory for installation
sudo mkdir /opt/cassandra
# add cassandra user [set password]
sudo adduser cassandra
# change owner of istallation directory
sudo chown cassandra:cassandra /opt/cassandra/
# switch to cassandra user
su -l cassandra
# go to installation directory
cd /opt/cassandra
# download latest version (check address on cassandra.apache.org)
wget http://www.apache.net.pl//cassandra/1.0.7/apache-cassandra-1.0.7-bin.tar.gz
# untar
tar xvzf apache-cassandra-1.0.7-bin.tar.gz
# back to admin account, create cassandra var directory
logout
sudo mkdir /var/lib/cassandra/
sudo chown cassandra:cassandra /var/lib/cassandra/
sudo mkdir /var/log/cassandra/
sudo chown cassandra:cassandra /var/log/cassandra/
# switch again to cassandra user
su -l cassandra
mkdir /var/lib/cassandra/data
mkdir /var/lib/cassandra/commitlog
mkdir /var/lib/cassandra/saved_caches
Add to /etc/init.d/cassandra
start-stop-daemon --start --quiet --chuid cassandra:cassandra --exec /opt/cassandra/apache-cassandra-1.0.7/bin/cassandra