Category Archives: Software

Dropped it

Today I dropped two of my professional accounts, that spam me nearly very day.

I can mostly confirm the German Wikipedia entry on Researchgate – a lot of unwanted emails, articles that are wrongly assigned, spider generated user accounts and a rather stupid scoring system.

Do we really need such a thing, any permanent online monitoring of performance scores?

Bildschirmfoto 2015-09-29 um 09.14.19

And, well, there is a rather similar experience at LinkedIn. I just don’t need it, whenever you are searching for me, you will find me.

Bildschirmfoto 2015-09-29 um 09.18.31

 

I see a lot of potential for scientific communication in these online platforms, but at the moment there is much noise and little signal.

 

CC-BY-NC Science Surf , accessed 24.08.2026

Die uneinheitlichen Sterbehilfe Regelungen der 17 deutschen Ärztekammern

Für einen Vortrag zur Sterbehilfe habe ich eine Grafik bei Urban Wiesing zur Situation in den einzelnen Bundesländern gefunden habe, die unvollständig ist bzw nur ungefähr die Situation 2014 wieder gibt.

wiesing

Deshalb kommt hier die Korrektur mit vier Zeilen R – die libraries sp, RColorBrewer und raster müssen dazu installiert sein.

deu<-getData('GADM', country='DEU', level=1)
deu@data["IDCOL"] <- c(1,1,1,2,2,2,2,2,2,3,2,1,1,2,1,2)
clrs <- colorRampPalette(c('green','red','yellow'))
deu@data["IDCOL"] clrs spplot(deu, "IDCOL", col.regions=clrs(16), colorkey=F, main ='Umfrage 2014 taz.de/!5047649', scales=list(x=list(at=NULL),y=list(at=NULL)), par.settings = list( axis.line = list(col='transparent') ) )

Jeweils rot ist nun ein Bundesland gezeichnet, in dem ärztliche Sterbehilfe verboten ist, grün wo die ärztliche Sterbehilfe erlaubt ist, gelb mit uneinheitlicher Regelung (Daten aus einer TAZ Umfrage im letzten Jahr).

Rplot01 Continue reading Die uneinheitlichen Sterbehilfe Regelungen der 17 deutschen Ärztekammern

 

CC-BY-NC Science Surf , accessed 24.08.2026

Leaflet.js – layer order, layer address and links

Leaflet is great for mapping in epidemiology with quick results of just cut & pasting a few lines. Problems do start, however, whenever running a more advanced project. It’s a pain, as plugins overwrite functions and basic css layouts. Or layers do not allow clickable links (as propation is being prohibited). Or geojson data that are rejected for whatever reason.
A showcase project, that had been planned for 2 days, took more than 1 week as the documentation is frequently unclear, incomplete and often hard to understand without any (jsfiddle) example. Numerous Google searches helped, as well as peaking into the sourcecode, while also other stack overflow posters have been very helpful. Continue reading Leaflet.js – layer order, layer address and links

 

CC-BY-NC Science Surf , accessed 24.08.2026

Moonshot

At Linkedin there is an interesting discussion about “personalized medicine” (I need quotation marks here as I always thought that good medicine is personalized). One commenter says

I believe precision medicine is a term to be use in grants, to indicate personalized medicine based on genetic information. Incomplete and imprecise. But funding agencies and bureaucrats need to see these words. I hear on the grapevine the US American President’s use of it is the start of this rather imprecise term. http://www.nih.gov/precisionmedicine/

referring to a short essay published in the New York Times already in January.

But for most common diseases, hundreds of genetic risk variants with small effects have been identified, and it is hard to develop a clear picture of who is really at risk for what. This was actually one of the major and unexpected findings of the Human Genome Project […] A second unexpected finding of the Human Genome Project was the problem of "missing heritability." While the statistics suggest that there is a genetic explanation for common conditions and diseases running in families or populations, it turns out that the information on genetic variants doesn't explain that increased risk.

Maybe the familiar risk can be explained by rare variants, (inherited!) epigenetic DNA modifications or just shared early environment and it’s just not in the genes – making the whole approach of personalized medicine a well-meant but meaningless enterprise. Until now, I didn’t even consider side effects. But as the NYT article goes on, there might be some

The push toward precision medicine could also lead to unintended consequences based on how humans respond to perceptions of risk. There is evidence that if people believe they are less at risk for a given disease, they feel excessively protected and their behavior gets worse, putting them at increased risk. Likewise, those who feel they are at greater risk, even if the increased risk is small, might become fatalistic, making their behavior worse as well. Then there are the worriers, who might embark on a course of excessive tests and biopsies "just in case." In a medical system already marked by the overuse of diagnostic tests and procedures, this could lead to even more wasteful spending.

Maybe earlier genetic research has been always accompanied by some ELSI research program, all the ethical, legal and social implications. Now this is all left to a NY articles and the 700 comments under it.

 

CC-BY-NC Science Surf , accessed 24.08.2026

Science Spam

As a scientist you are spammed by lab vendors, congress chairmen and journal editors. Here is a selection of the spam that I received during the last 24 hours, all “journal” titles that I have never heard before.

 


Journal of Clinical and Experimental Otolaryngology (Seoul, Korea)

Bildschirmfoto 2015-04-19 um 09.17.00

  Continue reading Science Spam

 

CC-BY-NC Science Surf , accessed 24.08.2026

Von vertikaler und horizontaler Wissenschaft

Zur Krise der Wissenschaften kann man vieles sagen. Dabei wird das eher selten gemacht, denn eigenartigerweise ist Wissenschaft nur wenig selbst reflexiv. Warum mit immer mehr Wissen und immer mehr Bildung, die eigentliche Wissenschaft – Aufstellen von Hypothesen, Überprüfen von Sachverhalt und logischen Folgerungen – in den letzten Jahren immer weiter abgetreten ist? Continue reading Von vertikaler und horizontaler Wissenschaft

 

CC-BY-NC Science Surf , accessed 24.08.2026

Faxenbuch

Byung-Chul Han

Mag sein, aber von der Struktur unterscheidet sich diese Gesellschaft nicht vom Feudalismus des Mittelalters. Wir befinden uns in einer Leibeigenschaft. Die digitalen Feudalherren wie Facebook geben uns Land, sagen: Beackert es, ihr bekommt es kostenlos. Und wir beackern es wie verrückt, dieses Land. Am Ende kommen die Lehnsherren und holen die Ernte.

 

CC-BY-NC Science Surf , accessed 24.08.2026

Why not setting up your own server log analysis?

I have been relying for 20 years on analog for reading my webserver logs. But maybe … this is a bit outdated, while some newer systems as awstats, google analytics or piwik are too overloaded for me. My more recent approach with plugins like statpress or slimstat considerably degraded my system performance. So why not setting up an own database as this can be done in 30 minutes?
First, get sqliteadmin.php as we need to build a small database “log.sqlite3”. Create a new table by pasting

CREATE TABLE 'visit' ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 'page' TEXT, 'dt' DATETIME DEFAULT CURRENT_TIMESTAMP, 'ip' TEXT, 'name' TEXT);

in the SQL window of sqliteadmin.php and include the following code in the header of all your pages

class MyDB extends SQLite3 { function __construct() { $this->open("log.sqlite3"); } }
$db = new MyDB();
$logpage="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$logip = $_SERVER['REMOTE_ADDR'];
$logip = substr($logip, 0, strrpos($logip, ".")) . ".xxx";
isset($_SERVER['PHP_AUTH_USER'])? $logname = $_SERVER['PHP_AUTH_USER'] : $logname = $_SERVER['REMOTE_USER'];
$sql='INSERT INTO visit (page,ip,name) VALUES ("'.$logpage.'","'.$logip.'","'.$logname.'");';
$db->query($sql);
$db->close();

That’s all we need to record. Maybe you want also a statistics page? Here is it, showing all recorded traffic (and in brackets what is going on today).

<pre>Logfile Analysis
<?php
class MyDB extends SQLite3 { function __construct() { $this->open("log.sqlite3"); } }
$db = new MyDB();
$sql = "SELECT page, count(page) AS c FROM visit 
WHERE round(julianday('now') - julianday(dt)) >=0
GROUP BY page ORDER BY c DESC;";
$ret = $db->query($sql);
while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
  $pagearray[ $row["page"] ] =  $row["c"];
}
$sql = "SELECT page, count(page) AS c FROM visit 
WHERE round(julianday('now') - julianday(dt)) =0
GROUP BY page ORDER BY c DESC;";
$ret = $db->query($sql);
while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
  $pagetoday[ $row["page"] ] = $row["c"];
}
foreach ($pagearray as $key => $page) {
  echo  $page>5 ? "<div class=big>" . $page . "(". $pagetoday[$key] . ")" . "</div>" . $key . "<br>" : FALSE;
}
?>

Looks like we used only 32 lines of code, yea, yea.

 

CC-BY-NC Science Surf , accessed 24.08.2026

Rstudio, knitr (Rmarkdown2) and bash

I couldn’t find any example online how to revise my R code getting the exif data from pictures

fn <- c("/usr/local/bin/exiftool /Users/wjst/Desktop/white.tif")
info <- system(fn,inter=TRUE,wait=TRUE)

when moving now to knitr. So here is what worked for me as a replacement including the parsing
of exiftool output.

```{r, engine='bash', echo=FALSE}
/usr/local/bin/exiftool /Users/wjst/Desktop/white.tif >/Users/wjst/Desktop/white.txt
```
```{r Exif, echo=FALSE}
fn <- '/Users/wjst/Desktop/white.txt'
info <- paste(readLines(fn))
info <- strsplit(info,"[:]{1}[ ]{1}")
info <- matrix(data=unlist(info), ncol = 2, byrow = TRUE)
info <- gsub("(^[[:space:]]+|[[:space:]]+$)", "", info)
```
*Exif*
`r kable(info)`

 

CC-BY-NC Science Surf , accessed 24.08.2026