Hier die letzten Neuigkeiten aus meiner Welt :
Morgen geht es los auf den E5. Von Oberstdorf nach Meran … Hoffen wir mal auf gutes Wetter.
Bilder wird es vermutlich hier geben : https://plus.google.com/photos/117873424937705124794/albums/5631549051338001137
Und Twitter updates gibt es hier : http://twitter.com/#!/wg23u
4me, damit ich beim nächstenmal umziehen des Wiki's nicht wieder herrausfinden muss wie ich die Blog Einträge in die Original Reihenfolge zurückbekomme:
public class Transform
{
private String root = "/srv/www/inforw.de/content/data/pages/blog/";
RemoteFileManager fm = FileManagerFactory
.create("ssh://wg23.de/" + root);
/**
* @param args
*/
public static void main(String[] args) throws Exception
{
new Transform().run(args);
}
private void run(String[] args) throws Exception
{
for (int i = 1; i < 305; i++)
{
String file = String.format("%03d.txt", i);
Data x = readFile(file);
if (x != null)
{
System.out.println("Processing : " + file + " : " + x._date);
if (x._date != null)
{
StringBuilder cmd = new StringBuilder();
cmd.append("date ");
cmd.append("-s \"");
cmd.append(df2.format(x._date) + ":00\"");
cmd.append(" & ");
cmd.append("touch ");
cmd.append("-m -t ");
cmd.append(df.format(x._date));
cmd.append(" ");
cmd.append(root).append(file);
System.out.println("cmd = " + cmd.toString());
fm.executeShellCommand(cmd.toString());
}
}
}
fm.close();
}
Data readFile(String file) throws Exception
{
try
{
String content = fm.readRemoteFileContent(file);
int idx = content.indexOf("META DATA");
if (idx == -1)
{
return null;
}
return process(content.substring(idx));
}
catch (RemoteFileManagerException e)
{
// System.err.println(e.toString());
return null;
}
}
Pattern x = Pattern.compile("(\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2})");
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
{
sdf.setLenient(true);
}
private Data process(String meta) throws Exception
{
Data result = new Data();
result.exists = true;
Matcher match = x.matcher(meta);
if (match.find())
{
String date = match.group(1);
result.setDatum(sdf.parse(date));
}
return result;
}
class Data
{
boolean exists;
Date _date;
public void setDatum(Date parse)
{
_date = parse;
}
}
Und nochmal's ging es in den Alpstein. Diesmal hoch auf die Marwees: http://www.flickr.com/photos/giersig/sets/72157626928458701/show/
Nach mehreren Anläufen hat der zwei tages Trip in den Alpstein nun doch geklappt:
Zum Beneiden gibt es hier noch weitere Bilder.
Kurzfristig Urlaub und mal einen kurzen Wutachtal Trip gemacht :
For obvious reasons Wicket doesn't auto-create id attributes in the HTML markup ( after all it's your markup
). Testing this with Selenium dosn't lead to much fun.
But, there is also a solution : WICKET-1830
Instead of auto-create id attibute, Wicket can auto create a wicketpath attribute :
// Just add in the WebApplication::init() method: getDebugSettings().setOutputComponentPath(true);
Now your HTML markup (eg for a DataTable) will look like this:
<table wicketpath="listSuggestions" >
<thead>
<tr class="headers">
<th wicketpath="listSuggestions_topToolbars_2_toolbar_headers_1_header">
<span wicketpath="listSuggestions_topToolbars_2_toolbar_headers_1_header_label">Id</span>
</th>
...
<tbody wicketpath="listSuggestions_body">
<tr class="even" wicketpath="listSuggestions_body_rows_1">
<td wicketpath="listSuggestions_body_rows_1_cells_1">
<span wicketpath="listSuggestions_body_rows_1_cells_1_cell">1</span>
</td>
...
</table>
Now if you also add the user-extension suggested by WICKET-1830 to your Selenium IDE :
LocatorBuilders.add('wicketpath', function(e) {
this.log.debug("wicketpath: e=" + e);
if (e.attributes && e.hasAttribute("wicketpath")) {
this.log.info("found attribute " + e.getAttribute("wicketpath"));
return "//" + this.xpathHtmlElement(e.nodeName.toLowerCase()) +
"[@wicketpath=" + this.attributeValue(e.getAttribute("wicketpath")) + "]";
}
return null;
});
LocatorBuilders.order.unshift(LocatorBuilders.order.pop());
Selenium IDE recordings will use the wicketpath attribute instead of the id attribute. The resulting recording now looks like this:
<tr> <td>assertXpathCount</td> <td>//table[ @wicketpath='listSuggestions' ]//tr</td> <td>5</td> </tr> <tr> <td>click</td> <td>//span[@wicketpath='listSuggestions_topToolbars_2_toolbar_headers_1_header_label']</td> <td></td> </tr> <tr> <td>assertText</td> <td>//span[@wicketpath='listSuggestions_topToolbars_2_toolbar_headers_1_header_label']</td> <td>Id</td> </tr> <tr> <td>clickAndWait</td> <td>//span[@wicketpath='listSuggestions_body_rows_1_cells_2_cell_link_label']</td> <td></td> </tr>
So testing a wicket application with Selenium is easily possible. Optional the generation can be swiched of in your the production environment.
Ich spiele gerade mal ein bischen mit Apache Wicket herrum.
Hier mal eine Vorabversion: http://85.25.150.43:8080/sdc2/
Kann im Prinzip schon alles was ich brauche. Außer Apache Shiro ist alles drin: MySQL → Hibernate → Wicket
[SCM] https://bitbucket.org/rainerw/sdc-webapp
tja, da sind sie nun alle wieder weg. Aber ich muss sagen die Peace Mission letzte Woche war echt super.
Der eigentliche Chaos Communication Congress ist leider etwas überlaufen, was man von der Peace Mission hier nicht gerade sagen konnte. Aber das war ein super Vorteil, denn anders als in Berlin, muss man sich in den Pausen nicht durch Menschenmassen durchdrücken. Es blieb so genug Zeit den letzten Vortrag noch zu diskutieren. Vorort gehen tagsüber Diskussionen unter, erst wenn man man sich wieder in der Homebase trifft hat man Zeit für Diskussionen.
Klar gibt es auch verbesserungswürdige Dinge. Vorallem das Aufzeichnen der nicht live angesehen Steams muss verbessert werden. Und irgendwie muss man mehr Hands-on hinbekommen, damit man nicht nur Vorträge ansieht.
Ich bin also doch sehr positiv überrascht und denke, dass das nicht die letzte Peace Mission war.
Also das preplanning für die Peace Mission (aka 27c3 streaming) läuft gerade an.
Da wir zwei Tage versetzt zum 27c3 starten, wäre die Idee mal eine Liste an Vorträgen zu erstellen von denen wir auf jedenfall eine Aufzeichnung haben möchten.
Wiki für die Aktion : 27c3
Comment Feed : commentsfeed
Letzte Änderungen :
Diskussion