Thursday, July 29, 2010

My desk

Drinking Alcohol Regularly Cuts Risk of Arthritis, Study Finds

http://www.businessweek.com/news/2010-07-27/drinking-alcohol-regularly-cuts-risk-of-arthritis-study-finds.html

By Iona Craig

July 28 (Bloomberg) -- Regular alcohol consumption provided protection against rheumatoid arthritis and its painful effects, U.K. researchers found in the first study to show the link in humans.

Non-drinkers were four times more likely to develop rheumatoid arthritis than people who drank alcohol on more than 10 days a month, according to the research published online today by the U.K. journal Rheumatology. Arthritis patients who drank regularly had less severe symptoms than non-drinkers, the study found.

There is no known cause or cure for rheumatoid arthritis, known as RA, which affects more than 500,000 people in the U.K., according to the National Institute for Health and Clinical Excellence. The disease occurs when the immune system attacks the joints, causing pain and swelling and potentially leading to severe disability and early death. Alcohol blunts the activity of the immune system, and more research is needed to determine how that process works, the researchers said.

“We know that alcohol reduces immune activity at least to some extent, and suspect that this is the main reason that alcohol consumption is associated with a reduction in severity of RA,” said James Maxwell, a rheumatologist at the Rotherham Foundation NHS Trust and author of the study, in an e-mailed statement. "Alcohol may also have a mild pain-killing effect."

Researchers compared 873 rheumatoid arthritis patients from the Royal Hallamshire Hospital in Sheffield, England, to 1,004 people without the illness. The participants answered a questionnaire, had X-rays and blood tests taken and had their joints examined. Those taking part in the study were asked how often they drank alcohol in the month before their inclusion in the study.

Less Damage

“X-rays showed there was less damage to joints, blood tests showed lower levels of inflammation and there was less joint pain, swelling and disability” among drinkers, Maxwell said.

His report cited previous research using ethanol and mice which pointed to testosterone as a potential link to the inflammation-fighting effects, as levels of the hormone rose in line with increased ethanol consumption. Ethanol is the intoxicating component of alcoholic beverages.

"The effects on the immune system may be influenced by testosterone, but we didn’t investigate that specifically in our patients, and we found similar effects in both men and women," Maxwell said.

Today’s findings supported Scandinavian research published in June 2008 showing that alcohol consumption reduced the risk of rheumatoid arthritis by 40 to 50 percent. Maxwell suggested a further study should be done with a larger group, recording alcohol intake over a prolonged period before any recommendations could be made to doctors or patients about alcohol consumption.

“This would also allow the possibility of investigating whether certain types of drink -- wine, beer or spirits -- would be more or less beneficial,” Maxwell said in an e-mail.

--Editors: Kristen Hallam, Phil Serafino

To contact the reporter on this story: Iona Craig in London at icraig2@bloomberg.net

Thursday, July 15, 2010

How to gain root on SmartQ V5 Android 2.1 (perverted method)

Basically this is a hybrid of two methods:

We need to perform 3 steps:
1. Get Android system partition image
2. Edit image to enable root access
3. Put the image back

WARNING: Don't try it at home unless you know what you are doing - you can brick your device!

Step 1: Get Android system partion image

Long story short: you need to have Linux installed or able to boot Linux from the card in order to capture Android system partition. It is partition #6 for SmartQ V5 and V7. Boot your Linux on the device and go to card:

cd /media/disk
sudo dd if=/dev/ndda of=andr06 bs=512 count=312576 skip=2971968

/dev/ndda - our nand flash drive
andr06 - image file name to save to
512 - block size in bytes
312576 - the size of the partition in 512 byte blocks (160Mb android partition)
2971968 - block offset of the partition (it is partition #6 for SmartQ V5 and V7)

You need to verify the values above with fdisk -l -u /dev/ndda (it will show the size of the partitions 1K block by default, just multiple 6th partition x2 to get count value).

Step 2: Edit image to enable root access

Take out your flash card and copy andr06 as andr06n to some 3rd-party Linux box.
Now we need to do root-enabling magic (for example in Ubuntu):

sudo -s
mkdir /mnt/android
mount /home/user/smartq/andr06n -t auto -o loop /mnt/android

Here goes the fun part downlowd Q5 Root Enabler and unpack it to /home/user

cat /mnt/android/system/bin/sh > /mnt/android/system/bin/su
chmod 4755 /mnt/android/system/bin/su
mv /mnt/android/system/xbin/su /mnt/android/system/xbin/osu
cp /home/user/smartq/res/raw/nsu /mnt/android/system/xbin/su
chown root.root /mnt/android/system/xbin/su
chmod 6755 /mnt/android/system/xbin/su

# Now we can unmount our android partition.
umount /mnt/android

What we did basically is to copy shell as a su command and giv it set owner's id bit, so we will become root when running this shell (named "su"). We had old "su" in xbin, that does not allow the access, so we renamed it and put a special binary from Q5 Root Enabler and fixed it to set owner's id and gid bits.

Step 3: Put the image back

This step is dangerous. Keep your original image on card, so you can put it back, if your edit one is not working. Put the andr06n to the flsh card and write image back:

cd /media/disk
sudo dd of=/dev/ndda if=andr06n bs=512 count=312576 seek=2971968

Familiar parameters from the Step 1 above:
/dev/ndda - our nand flash drive
andr06n - image file name to load from
512 - block size in bytes
312576 - the size of the partition in 512 byte blocks (160Mb android partition)
2971968 - block offset of the partition (it is partition #6 for SmartQ V5 and V7)
Note if and of switched places(naturally) and to write at offset we specified "seek"


Now you can boot up Android and do "su" at the terminal.
You should get the "#" prompt indicating that you are root.

So, why so much pervertion?


It is fun & wanted to enable USB-OTG in SmartQ V5 android to connect keyboard (and I did not want to install SDK and setup adb connection to V5 which has issues with it as well):

Thursday, July 8, 2010

PHP 5 with Tomcat 6 as FastCGI (Part 2)

In my previous article I had described how to run PHP5 as a FastCGI CGI script on Tomcat6 using Mac OS X as a sample. Actually bundled with Tomcat6 org.apache.catalina.servlets.CGIServlet is not FastCGI, but CGI servlet and PHP5 was set up to run in interactive mode. Today will be the real deal describing how to run PHP5 as a FastCGI with Tomcat6 using Ubuntu Server as a sample.

We will use the FastCGI servlet by Julien Rialland called jFastCGI and great thanks to Chu Yeow for his article Nginx, PHP and a PHP FastCGI daemon init script and Kurt Zankl for the init script.

First we need to setup the jFastCGI servlet. As described in the reference add it to your web application:

<servlet>
<servlet-name>FastCGI</servlet-name>
<servlet-class>net.jr.fastcgi.FastCGIServlet</servlet-class>
<init-param>
<param-name>server-address</param-name>
<param-value>127.0.0.1:6666</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FastCGI</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>


This is pretty obvious. What is not obvious is that our old trick with context.xml will not work on default Tomcat6 setup in Ubuntu. As it uses security manager. The servlet would not be able to connect to FastCGI manager and the easy way out is to add a policy to /etc/tomcat6/policy.d/03catalina.policy

grant codeBase "file:${catalina.base}/webapps/test/-" {
permission java.security.AllPermission;
};

Where test is the name of our application. The other and more universal way would be to put jFastCGI-2.0.jar to Tomcat6's classpath & grant required priviledges. You can figure it out easily from the mentioned above policy file :)

Now the fun part: we want to launch out FastCGI manager on start-up so it shoudl survive reboots, so we need an init script. You can find it below - tweak the init script a little, put it in /etc/init.d/php-fastcgi,
sudo chmod +x /etc/init.d/php-fastcgi
, run
sudo update-rc.d php-fastcgi defaults
and place the configuration for the script in /etc/default/php-fastcgi, and you’re done. You now have a PHP5 FastCGI init script that spawns and kills your PHP5 FastCGI processes.

The init script: /etc/init.d/php-fastcgi

#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description: Start and stop php-cgi in external FASTCGI mode
### END INIT INFO

# Author: Kurt Zankl <[EMAIL PROTECTED]>

# Do NOT "set -e"

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="php-cgi in external FASTCGI mode"
NAME=php-fastcgi
DAEMON=/usr/bin/php-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
PHP_CONFIG_FILE=/etc/php5/cgi/php.ini

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# If the daemon is not enabled, give the user a warning and then exit,
# unless we are stopping the daemon
if [ "$START" != "yes" -a "$1" != "stop" ]; then
log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes"
exit 0
fi

# Process configuration
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT -c $PHP_CONFIG_FILE"

do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
--background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- \
$DAEMON_ARGS \
|| return 2
}

do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac

Config file for init script (the init script looks for this): /etc/default/php-fastcgi

START=yes

# Which user runs PHP? (default: www-data)

EXEC_AS_USER=tomcat6

# Host and TCP port for FASTCGI-Listener (default: 127.0.0.1:6666)

FCGI_HOST=127.0.0.1
FCGI_PORT=6666

# Environment variables, which are processed by PHP

PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000

Friday, July 2, 2010

Stalin Song




© zhgun

PHP 5 with Tomcat 6 as FastCGI (Mac OS X)

Let's launch php5 FactCGI with the Tomcat 6 CGI interface.


QuickStart


Let's assume you have fastcgi php installed.

For Max OS X (you need to have MacPorts)


sudo port install fcgi

sudo port install php5 +fastcgi


For simplicity I'm using the following wrapper on my OS X:


#!/bin/sh

#

export REDIRECT_STATUS="200"

/opt/local/bin/php-cgi -d allow_url_include=On -a $*


Now we will create a web application:


webapps/php/WEB-INFI/web.xml


<?xml version="1.0" encoding="ISO-8859-1"?>

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>


<init-param>

<param-name>debug</param-name>

<param-value>6</param-value>

</init-param>


<init-param>

<param-name>executable</param-name>

<param-value>/usr/bin/php-cgi</param-value>

</init-param>


<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value></param-value>

</init-param>

<load-on-startup>5</load-on-startup>

</servlet>


<!-- The mapping for the CGI Gateway servlet -->

<servlet-mapping>

<servlet-name>cgi</servlet-name>

<url-pattern>*.php</url-pattern>

</servlet-mapping>


<welcome-file-list>

<welcome-file>index.php</welcome-file>

</welcome-file-list>

</web-app>


webapps/php/WEB-INFI/context.xml


<?xml version="1.0" encoding="UTF-8"?>

<Context antiResourceLocking="false" privileged="true" />


webapps/php/index.php


<? phpinfo(); ?>


Now some bits of explanations:


We had configured our php5 cgi in web.xml as described in Apache Tomcat 6.0 - CGI How To. But one bit of information that is missing is the context setup: org.apache.catalina.servlets.CGIServlet is a privileged servlet, so you need to put privileged="true" into your context.xml


Some online tips & tutorials say to uncomment CGI configuration in the global ${catalina.base}/conf/web.xml, but if you do that all your non-privileged applications will fail to start. Also we don't want to enable CGI for all deployed applications really.


The wrapper I'm using is pretty basic - it runs interactively. You will definitely need more advanced one :) Current PHP 5.3.2 FastCGI requires environment variable REDIRECT_STATUS to be set due to security reasons. You can specify "-d cgi.force_redirect=Off" in your wrapper to disable this requirement.


So, the long awaited result: