Mit meinem neuen Laptop habe ich auch ein neues Betriebssystem bekommen. Mein alter hatte Windows XP 32 Bit und der neue nun Windows 7 64 Bit. Nach der Installation von Visual Studio meldet sich der Debugger andauernd, dass ich nichts mehr editieren kann, das ging doch früher? Ebenso gibt es Probleme bei der Verwendung meines Connectionstrings zur MySql DB. Fehlermeldung nach dem Start des Programms: Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben. Und das obwohl ich meinen Connector und auch einen MySql Server installiert habe.
Lösung:
Unter Projekt auf Eigenschaften gehen. Hier nun im Kompilieren Dialog den Button Erweiterte Kompilierungsoptionen ... klicken. Nun kann man als Ziel CPU x86 auswählen und wieder froh werden, denn plötzlich funktioniert wieder alles.
Mittwoch, 25. September 2013
Mittwoch, 4. September 2013
DOS - Kopieren von allen Dateien aus Unterordnern in ein anderes Verzeichnis
Wenn mann viele Bilder in Unterordnern verteilt hat und die alle mal in nur einem Verzeichnis 'versammeln' möchte, kann man mit Windows und Drag and Drop ziemlich beschäftigt sein.
Unter Linux ist es kein Problem über XTerm und co die Files herumzuschieben und zu kopieren. Unter Windows braucht man dann mal das DOS Fenster (Start -> Ausführen -> cmd).
Meine DOS Erfahrungen liegen fast 20 Jahre zurück.
Deshalb hat Google mir mal wieder geholfen, da ich nur eine englische Antwort gefunden habe, und damit ich sie wiederfinde hier nochmal in meinem Blog auf deutsch.
Also der DOS Befehl zum kopieren aller Dateien aus den Unterordnern eines Verzeichnisses:
als Beispiel mal hier aus dem Verzeichnis c:\split in das Verzeichnis c:\Neuer Ordner
cd /d "c:\split"
for /r %d in (*) do copy "%d" "c:\Neuer Ordner"
Unter Linux ist es kein Problem über XTerm und co die Files herumzuschieben und zu kopieren. Unter Windows braucht man dann mal das DOS Fenster (Start -> Ausführen -> cmd).
Meine DOS Erfahrungen liegen fast 20 Jahre zurück.
Deshalb hat Google mir mal wieder geholfen, da ich nur eine englische Antwort gefunden habe, und damit ich sie wiederfinde hier nochmal in meinem Blog auf deutsch.
Also der DOS Befehl zum kopieren aller Dateien aus den Unterordnern eines Verzeichnisses:
als Beispiel mal hier aus dem Verzeichnis c:\split in das Verzeichnis c:\Neuer Ordner
cd /d "c:\split"
for /r %d in (*) do copy "%d" "c:\Neuer Ordner"
Freitag, 30. August 2013
How to post in WordPress Blog out of my app
Is there a way i can create and publish a blogpost in my wordpressblog out of my app? I need examples/tutorials. I ve read about the API but didn't get the clue how to implement this in my android app. Does this work only on wordpress.com hosted sites or can i use my own?
I have pasted some code from https://code.google.com/p/wordpress-java/source/browse/src/net/bican/wordpress/example/Main.java
import java.net.MalformedURLException;
import java.util.List;
import redstone.xmlrpc.XmlRpcFault;
import net.bican.wordpress.Page;
import net.bican.wordpress.PageDefinition;
import net.bican.wordpress.Wordpress;
/**
*
* Example implementation
*
* Run this as java net.bican.wordpress.example.Main <username>
* <password> <xmlrpc-url> for your blog.
*
* @author Can Bican
*
*/
public class wordpressHelper {
/**
* @param args
* @throws MalformedURLException
* @throws XmlRpcFault
*/
@SuppressWarnings("nls")
public static void main(String[] args) throws MalformedURLException,
XmlRpcFault {
String username = args[0];
String password = args[1];
String xmlRpcUrl = args[2];
Wordpress wp = new Wordpress(username, password, xmlRpcUrl);
List<Page> recentPosts = wp.getRecentPosts(10);
System.out.println("Here are the ten recent posts:");
for (Page page : recentPosts) {
System.out.println(page.getPostid() + ":" + page.getTitle());
}
List<PageDefinition> pages = wp.getPageList();
System.out.println("Here are the pages:");
for (PageDefinition pageDefinition : pages) {
System.out.println(pageDefinition.getPage_title());
}
System.out.println("Posting a test (draft) page from a previous page...");
Page recentPost = wp.getRecentPosts(1).get(0);
recentPost.setTitle("Test Page");
recentPost.setDescription("Test description");
String result = wp.newPost(recentPost, false);
System.out.println("new post page id: " + result);
System.out.println("\nThat's all for now.");
}
}
I also put in the jwordpress-0.5.1.jar and added that in the classpath.
I get the swirling red line underneath redstone import redstone.xmlrpc.XmlRpcFault;
-> The import cannot be resolved...
2nd july 2013: I managed to get rid of the import problem... I downloadedhttp://sourceforge.net/projects/xmlrpc/files/%28New%29%20Redstone/1.1.1/ an extracted the zip file Then added all files in a new package into src. The import works right now but next Problem is that the javax.servlet cannot be resolved...
Samstag, 29. Juni 2013
ToogleButtons im AlertDialog
Für mein Golfapp Projekt (siehe meine Golfseite ) musste ein AlertDialog her. Es hat ganz schön lang gedauert, eh ich das so hinbekommen habe, wie ich es mir vorstellte:
Nach dem Klick auf einen Button im 'Main' Layout soll sich ein Dialog öffnen, in dem Texteingaben möglich sind und auch angeklickt werden kann, wo der Drive gelandet ist. Dis habe ich mit Togglebuttons realisieren wollen.
Problematisch war, dass immer nur ein Button 'An' sein sollte. Die Lösung hat mich ganz schön Zeit gekostet:). Schließlich fand ich heraus, dass ich für jeden der Buttons ein OnCheckedChangeListener brauche.
Hier der Code des Alertdialogaufrufes zur Eingabe der Abschlagslänge -Richtung und der Einlochdistanz:
public void pDrvPutClick(View v){
final Button b = (Button) v;
LayoutInflater inflater = getLayoutInflater();
View dstView = inflater.inflate(R.layout.dlg_drvput, null);
AlertDialog.Builder builder = new AlertDialog.Builder(context) ;
builder.setView(dstView);
final EditText edit_ddst = (EditText) dstView.findViewById(R.id.drvDst);
final EditText edit_pdst = (EditText) dstView.findViewById(R.id.putDst);
final ToggleButton rb1 = (ToggleButton) dstView.findViewById(R.id.rb_hit);
final ToggleButton rb2 = (ToggleButton) dstView.findViewById(R.id.rb_left);
final ToggleButton rb3 = (ToggleButton) dstView.findViewById(R.id.rb_right);
final ToggleButton rb4 = (ToggleButton) dstView.findViewById(R.id.rb_miss);
//Klickhandling OnCheckedChangeListener fuer jeden Button
rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb2.setChecked(false);
rb3.setChecked(false);
rb4.setChecked(false);
}
}
});
rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb1.setChecked(false);
rb3.setChecked(false);
rb4.setChecked(false);
}
}
});
rb3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb1.setChecked(false);
rb2.setChecked(false);
rb4.setChecked(false);
}
}
});
rb4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb1.setChecked(false);
rb3.setChecked(false);
rb2.setChecked(false);
}
}
});
builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int whichButton){
String ddst;
ddst = edit_ddst.getText().toString();
if (ddst=="") {
ddst="Drive";
}else {
if (rb1.isChecked()){
ddst="H"+ddst;
}
if (rb2.isChecked()){
ddst="L"+ddst;
}
if (rb3.isChecked()){
ddst="R"+ddst;
}
if (rb4.isChecked()){
ddst="M"+ddst;
}
}
String pdst;
pdst = edit_pdst.getText().toString();
if (pdst=="") {
pdst="PutDst";
}
b.setText(ddst+"\n"+pdst);
// do something
// lbl_platz = (TextView) findViewById(R.id.lbl_courseName);
// lbl_platz.setText(value);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int whichButton){
// do nothing
}
});
builder.show();
}
Nach dem Klick auf einen Button im 'Main' Layout soll sich ein Dialog öffnen, in dem Texteingaben möglich sind und auch angeklickt werden kann, wo der Drive gelandet ist. Dis habe ich mit Togglebuttons realisieren wollen.
Problematisch war, dass immer nur ein Button 'An' sein sollte. Die Lösung hat mich ganz schön Zeit gekostet:). Schließlich fand ich heraus, dass ich für jeden der Buttons ein OnCheckedChangeListener brauche.
Hier der Code des Alertdialogaufrufes zur Eingabe der Abschlagslänge -Richtung und der Einlochdistanz:
public void pDrvPutClick(View v){
final Button b = (Button) v;
LayoutInflater inflater = getLayoutInflater();
View dstView = inflater.inflate(R.layout.dlg_drvput, null);
AlertDialog.Builder builder = new AlertDialog.Builder(context) ;
builder.setView(dstView);
final EditText edit_ddst = (EditText) dstView.findViewById(R.id.drvDst);
final EditText edit_pdst = (EditText) dstView.findViewById(R.id.putDst);
final ToggleButton rb1 = (ToggleButton) dstView.findViewById(R.id.rb_hit);
final ToggleButton rb2 = (ToggleButton) dstView.findViewById(R.id.rb_left);
final ToggleButton rb3 = (ToggleButton) dstView.findViewById(R.id.rb_right);
final ToggleButton rb4 = (ToggleButton) dstView.findViewById(R.id.rb_miss);
//Klickhandling OnCheckedChangeListener fuer jeden Button
rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb2.setChecked(false);
rb3.setChecked(false);
rb4.setChecked(false);
}
}
});
rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb1.setChecked(false);
rb3.setChecked(false);
rb4.setChecked(false);
}
}
});
rb3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb1.setChecked(false);
rb2.setChecked(false);
rb4.setChecked(false);
}
}
});
rb4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
rb1.setChecked(false);
rb3.setChecked(false);
rb2.setChecked(false);
}
}
});
builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int whichButton){
String ddst;
ddst = edit_ddst.getText().toString();
if (ddst=="") {
ddst="Drive";
}else {
if (rb1.isChecked()){
ddst="H"+ddst;
}
if (rb2.isChecked()){
ddst="L"+ddst;
}
if (rb3.isChecked()){
ddst="R"+ddst;
}
if (rb4.isChecked()){
ddst="M"+ddst;
}
}
String pdst;
pdst = edit_pdst.getText().toString();
if (pdst=="") {
pdst="PutDst";
}
b.setText(ddst+"\n"+pdst);
// do something
// lbl_platz = (TextView) findViewById(R.id.lbl_courseName);
// lbl_platz.setText(value);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int whichButton){
// do nothing
}
});
builder.show();
}
Samstag, 8. Juni 2013
Gegen den Rundfunkbeitrag, Video von der Anti GEZ Demo für ein demokratischeres Rundfunksystem vom 26.05.2012
Labels:
2013,
26.05.2013,
Demo,
Demonstration,
Dresden,
gegen den rundfunkbeitrag,
genug gezahlt,
GEZ,
GEZ nein danke,
Protest,
Protestmarsch,
Rundfunkbeitrag,
Rundfunkgebühr,
video
Sonntag, 26. Mai 2013
Demonstration: "Für ein demokratischeres Rundfunksystem"
Unser Dresdner Beitrag
-
"Für ein demokratischeres Rundfunksystem"
im Rahmen des Bundesweiten Protesttages
Organisiert und geplant von Dresdner Bürgern
-
Treff ist 14.00 Uhr am Postplatz,
Aufzug über Wilsdruffer Straße bis Kulturpalast,
am Kulturpalast vorbei durch das Georgentor zum
Goldenen Reiter, wo die Abschlusskundgebung stattfindet.
Ende ca. 16.00 Uhr.
-
Unsere Petition kann noch bis 9.07.2013 gezeichnet werden.
https:// www.openpetition.de/ petition/online/ fuer-ein-demokratischeres-r undfunksystem
-
Aufruf zur Protestveranstaltung gern weiter leiten, teilen und vor allem auch TEILNEHMEN ist wichtig
https://www.facebook.com/events/645220248825606
-
"Für ein demokratischeres Rundfunksystem"
im Rahmen des Bundesweiten Protesttages
Organisiert und geplant von Dresdner Bürgern
-
Treff ist 14.00 Uhr am Postplatz,
Aufzug über Wilsdruffer Straße bis Kulturpalast,
am Kulturpalast vorbei durch das Georgentor zum
Goldenen Reiter, wo die Abschlusskundgebung stattfindet.
Ende ca. 16.00 Uhr.
-
Unsere Petition kann noch bis 9.07.2013 gezeichnet werden.
https://
-
Aufruf zur Protestveranstaltung gern weiter leiten, teilen und vor allem auch TEILNEHMEN ist wichtig
https://www.facebook.com/events/645220248825606
Sonntag, 14. April 2013
QNAP - Cronjob Script zum killen eines Prozesses
Da mir auf dem QNAP immer wieder der php Prozess die Prozessorlast und den load hochschraubt und ich noch nicht dahintergekommen bin, was den Prozess startet, habe ich nach einem Ausweg gesucht.
Ziel:
Erstellung eines Cronjobs, der alle X Minuten prüft ob der php Prozess läuft.
Die vorinstallierte top Version lässt leider keine Optionen zu:
top: invalid option -- n
BusyBox v1.01 (2013.02.28-18:30+0000) multi-call binary
Usage: top [-d <seconds>]
top provides an view of processor activity in real time.
This utility reads the status for all processes in /proc each <seconds>
and shows the status for however many processes will fit on the screen.
This utility will not show processes that are started after program startup,
but it will show the EXIT status for and PIDs that exit while it is running.
Ziel:
Erstellung eines Cronjobs, der alle X Minuten prüft ob der php Prozess läuft.
Die vorinstallierte top Version lässt leider keine Optionen zu:
top: invalid option -- n
BusyBox v1.01 (2013.02.28-18:30+0000) multi-call binary
Usage: top [-d <seconds>]
top provides an view of processor activity in real time.
This utility reads the status for all processes in /proc each <seconds>
and shows the status for however many processes will fit on the screen.
This utility will not show processes that are started after program startup,
but it will show the EXIT status for and PIDs that exit while it is running.
Deshalb wird per ipkg install ein neues top installiert:
ipkg install atop
Nun erstelle ich unter /share/ ein neues Verzeichnis scripts
mkdir /share/scripts
cd /share/scripts/
Hier soll nun das Script rein. Also erstelle ich die Datei killphp.sh:
vi killphp.sh
Und fülle sie mit folgenden Zeilen:
#!/bin/sh
d=`date`
pid=`atop -p 1 1 | grep php | cut -f1 -d" "`
txt=`atop -pc 1 1 | grep php`
if [ "x$pid" = "x" ]; then
echo $d " - Kein php Prozess gefunden" >> /share/scripts/killphp.log
else
echo $d " - php Prozess " $pid " gekillt" >> /share/scripts/killphp.log
echo $txt >> /share/scripts/killphp.log
kill $pid
fi
Hier wird der aktuelle Datum/Zeit Stempel in d gespeichert. pid ist die ProzessId von php. txt gibt den Pfad von php zurück. Wenn nun kein php Prozess gefunden wird, schreibt er dies in das Logfile killphp.log. Wird der php Prozess gefunden, so wird die ProzessId und das php gekillt worden ist ins Logfile geschrieben. Ausserdem kommt der Pfad des Prozesses dazu und natuerlich wird der Prozess noch gekillt.
Jetzt noch die Logdatei erstellen.
touch killphp.log
Nun muss noch die Berechtigung der Dateien eingestellt werden.
chmod 777 killphp.sh
chmod 666 killphp.log
Jetzt wird das ganze noch in die crontab eingetragen, so dass es alle 5 Minuten ausgeführt wird.
crontab -e
Hier diese Zeile einfügen:
*/5 * * * * /share/scripts/killphp.sh
Nun sollte sich die Datei killphp.log alle 5 Minuten um eine Zeile erweitern, und wenn der Prozess php anspringt, dieser wieder gekillt werden. Für den Fall, dass php benötigt wird müsste die Zeile in der crontab auskommentiert werden:
# */5 * * * * /share/scripts/killphp.sh
Abonnieren
Posts (Atom)
