Thursday, December 31, 2015

Gradle

Gradle wrapper

 Zajímavý koncept, který umožní automtické nastavení Gradle bez nutnosti instalace. Stačí nahrát projekt, jehož součástí je gradlew.sh nebo gradlew.bat. Ten již zajistí nahrání binárních souborů a spuštění Gradle.

V sobuoru build.gradle je potřeba přidat:

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

a následně spustit

gradle wrapper

Ten vytvoří výše zmíněný spustitelný soubor gradlew.

Saturday, October 31, 2015

Grafické zobrazení maven závislostí

Viz http://mvnplugins.fusesource.org/maven/1.4/maven-graph-plugin/index.html

1) do pom.xml přidat

<project>
  <profiles>
  
    <profile>
      <id>graph</id>
      <pluginRepositories>
        <pluginRepository>
          <id>mvnplugins.fusesource.org</id>
          <url>http://mvnplugins.fusesource.org/repo/release</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </pluginRepository>
      </pluginRepositories>
      <build>
        <plugins>
          <plugin>
            <groupId>org.fusesource.mvnplugins</groupId>
            <artifactId>maven-graph-plugin</artifactId>
            <version>1.4</version>
          </plugin>
        </plugins>
      </build>
    </profile>
    
  </profiles>
</project> 
 
2) Nainstalovat graphviz
 
(Ubuntu 14.04) sudo apt-get install graphviz 
 
3) spustit 
 
$ mvn -P graph graph:project
 -- OR --
$ mvn -P graph graph:reactor
 
$ mvn -P graph graph:reactor -Dhide-scope=test -Dhide-optional=true 

Automatizované testy

Fitnesse

http://fitnesse.s3.amazonaws.com/tdd_net_with_fitnesse.pdf

Video Intro:
http://vimeo.com/3323573

Programování slim fixture:
http://butunclebob.com/FitNesse.UserGuide.FixtureCode

AutoIt

https://www.autoitscript.com/wiki/Best_coding_practices

Seznam užitečných knihoven

Zde jsem nalezl řešení pro naši úlohu vzdáleného volání mezi Fitnesse a AutoIt.

https://www.autoitscript.com/wiki/User_Defined_Functions

Napojení na Oracle


http://www.autoitscript.com/forum/topic/37381-connect-oracle/

JSON v AutoIt

Knihovna
http://www.autoitscript.com/forum/topic/148114-jsmn-a-non-strict-json-udf/


Zkoušel jsem také, ale moc to nefungovalo -
http://www.autoitscript.com/forum/topic/104150-json-udf-library-fully-rfc4627-compliant/
Upozornění:
- bez úpravy mi knihovna nefungovala, musel jsem:
1) V notepad++ jsem změnil kódování na UTF-8 bez BOM


HTTP v AutoIt

Client
http://brugbart.com/http-post-request-autoit
http://brugbart.com/http-get-request-autoit

Server
http://www.autoitscript.com/forum/topic/68851-powerful-http-server-in-pure-autoit/ - tento jsem použil jako základ pro implementaci RESTful service na testované straně
https://code.google.com/p/autoit-winhttp/downloads/list
http://www.autoitscript.com/forum/topic/26213-my-web-server-v01a/

WebSphere Applcation Server - how to get J2C authentication alias in Java code



Sometimes I need securely connect to external system from WebSphere Application server application. The secure connection usualy requires password as a credential. The WebSphere Application Server allows store the username and password inside its configuration as so called J2C Authentication Alias. If I need use the cofigured J2C Auth Alias I can use the following Java code fragment:

 public static final String USERNAME = "username";
 public static final String PASSWORD = "password";

 /** Return username and pasword for specific J2C authentication alias
  *
  * @param authenticationAlias
  * @return Map with "username" and "password" keys
  * @throws NotImplementedException
  * @throws LoginException
  */
      public Map<String,String> getCredentials(String authenticationAlias) throws NotImplementedException, LoginException {
     Map<String,String> map = new HashMap<String,String>();
     map.put(Constants.MAPPING_ALIAS, authenticationAlias);
     CallbackHandler callbackHandler = WSMappingCallbackHandlerFactory.getInstance().getCallbackHandler(map, null);
     LoginContext loginContext = new LoginContext("DefaultPrincipalMapping", callbackHandler);
     loginContext.login();
     Subject subject = loginContext.getSubject();
     Set credentials = subject.getPrivateCredentials();
     PasswordCredential passwordCredential = (PasswordCredential) credentials.iterator().next();
     String user = passwordCredential.getUserName();
     String password = new String(passwordCredential.getPassword());
     Map<String,String> result = new HashMap<String,String>();
     result.put(USERNAME, user);
     result.put(PASSWORD, password);
     return result;
      }

Thursday, May 7, 2015

Robot simulace

GAZEBO - 3D simulace
http://gazebosim.org/

Stage - 2D simulace

http://playerstage.sourceforge.net/index.php?src=stage

Player - klient pro GAZEBO nebo STAGE

http://playerstage.sourceforge.net/index.php?src=player

Coppelia Robotics v-rep

http://www.coppeliarobotics.com/downloads.html

Robocode

http://robocode.sourceforge.net/



Instalace:
Vyzkouseno na Ubuntu 14.04 TLS ve virtualni image VMWare Player.

Instalace Gazebo 5.0.1 - bez problemu podle navodu z distribuce

Instalace Stage 4.1.1 - bez problemu, build projektu

Instalace Player 3.0.2 -
make hlasi chybu /usr/bin/ld: cannot find -lgeos


reseni: opraveno pridanim linku v /usr/lib:
cd /usr/lib
sudo ln -s libgeos_c.so.1.8.2 libgeos.so.1
sudo ln -s libgeos_c.so.1.8.2 libgeos.so


dale make hlasi:
playerclient.cc:171:34: error: expected unqualified-id before numeric constant

reseni: sleduj odkaz http://sourceforge.net/p/playerstage/mailman/message/32992365/
To work around this problem until the next Player release comes out, you
can just substitute "boost::TIME_UTC_" for "boost::TIME_UTC" in
client_libs/libplayerc++/playerclient.cc
 
 

dale make hlasi:
readlog.cc:714:62: error: cannot convert ‘FILE* {aka _IO_FILE*}’ to ‘gzFile’ for argument ‘1’ to ‘char* gzgets(gzFile, char*, int)’
reseni: sleduj odkaz http://sourceforge.net/p/playerstage/mailman/message/28994223/
v server/drivers/shell/readlog.cc
change the line
>
> ret = gzseek(this->file,0,SEEK_SET);
>
> to
>
> ret = gzseek((gzFile)this->file,0,SEEK_SET);
 
a take 
 
ret = (gzgets(this->file, this->line, this->line_size) == NULL); 

to

 
ret = (gzgets((gzFile)this->file, this->line, this->line_size) == NULL); 

dale make hlasi:
/usr/bin/ld: CMakeFiles/camera.dir/camera.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'

reseni: sleduj http://player-stage-gazebo.10965.n7.nabble.com/TIME-UTC-is-not-a-member-of-boost-td11642.html
For each error : undefined reference to symbol '_ZN5boost6system15system_categoryEv'
add the flag -lboost_system after -lboost_signals in the file player-3.0.2/build/examples/libplayerc++/
CMakeFiles/*.dir/link.txt
For example : player-3.0.2/build/examples/libplayerc++/CMakeFiles/camera.dir/list.txt will be :
/usr/bin/c++ -Wall CMakeFiles/camera.dir/camera.o -o camera -rdynamic -L/usr/local/lib ../../client_libs/libplayerc++/libplayerc++.so.3.0.2 ../../client_libs/libplayerc/libplayerc.so.3.0.2 ../../libplayerinterface/libplayerinterface.so.3.0.2 ../../libplayercommon/libplayercommon.so.3.0.2 -lm -lz -lgeos -lgeos_c -lboost_thread -lboost_signals -lboost_system -lm ../../libplayerjpeg/libplayerjpeg.so.3.0.2 -ljpeg ../../libplayerwkb/libplayerwkb.so.3.0.2 ../../libplayercommon/libplayercommon.so.3.0.2 -lgeos -lgeos_c -Wl,-rpath,/usr/local/lib:/home/doizuc/Downloads/player-3.0.2/build/client_libs/libplayerc++:/home/doizuc/Downloads/player-3.0.2/build/client_libs/libplayerc:/home/doizuc/Downloads/player-3.0.2/build/libplayerinterface:/home/doizuc/Downloads/player-3.0.2/build/libplayercommon:/home/doizuc/Downloads/player-3.0.2/build/libplayerjpeg:/home/doizuc/Downloads/player-3.0.2/build/libplayerwkb 


Opravu provest v
examples/libplayerc++/CMakeFiles/camera.dir/link.txt
examples/libplayerc++/CMakeFiles/clientgraphics.dir/link.txt
examples/libplayerc++/CMakeFiles/clientgraphics3d.dir/link.txt
examples/libplayerc++/CMakeFiles/example0.dir/link.txt 
examples/libplayerc++/CMakeFiles/example1.dir/link.txt
examples/libplayerc++/CMakeFiles/example2.dir/link.txt
examples/libplayerc++/CMakeFiles/example3.dir/link.txt  
examples/libplayerc++/CMakeFiles/example4.dir/link.txt  examples/libplayerc++/CMakeFiles/goto.dir/link.txt
examples/libplayerc++/CMakeFiles/grip.dir/link.txt 
examples/libplayerc++/CMakeFiles/laserobstacleavoid.dir/link.txt 
examples/libplayerc++/CMakeFiles/ptz.dir/link.txt
examples/libplayerc++/CMakeFiles/randomwalk.dir/link.txt
examples/libplayerc++/CMakeFiles/sonarobstacleavoid.dir/link.txt
examples/libplayerc++/CMakeFiles/speech.dir/link.txt
examples/libplayerc++/CMakeFiles/speech_cpp_client.dir/link.txt
examples/libplayerc++/CMakeFiles/wallfollow.dir/link.txt
utils/playerjoy/CMakeFiles/playerjoy.dir/link.txt
utils/playerprint/CMakeFiles/playerprint.dir/link.txt
utils/playerprop/CMakeFiles/playerprop.dir/link.txt

priklad hromadneho prikazu na replace textu v souborech

cd ~/player-3.0.2/build

sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/camera.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/clientgraphics.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/clientgraphics3d.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example0.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example1.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example2.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example3.dir/link.txt 
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/example4.dir/link.txt 
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/goto.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/grip.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/laserobstacleavoid.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/ptz.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/randomwalk.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/sonarobstacleavoid.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/speech.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/speech_cpp_client.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' examples/libplayerc++/CMakeFiles/wallfollow.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' utils/playerjoy/CMakeFiles/playerjoy.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' utils/playerprint/CMakeFiles/playerprint.dir/link.txt
sed -i -- 's/-lboost_signals/-lboost_signals -lboost_system/g' utils/playerprop/CMakeFiles/playerprop.dir/link.txt



dale

make install bylo potreba volat s admin pravy: sudo make install



Otestovani funkcnosti Player/Stage
 
player ~/stg/share/stage/worlds/simple.cfg
 
Objevila se chyba:
error   : Sorry, no support for shared libraries, so can't load plugins.
error   : You should install libltdl, which is part of GNU libtool, then re-compile player.
 
reseni: nastavit export LD_LIBRARY_PATH=/usr/local/lib64:/home/tomas/stg/lib64 

Dale se objevila chyba:

error   : Failed to load plugin stageplugin.
error   : libtool reports error: file not found
error   : plugin search path: /home/tomas/player-3.0.2/build:/home/tomas/stg/share/stage/worlds:/usr/local/lib/
error   : failed to load plugin: stageplugin

reseni: doplneni cesty k plugin adresari do LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tomas/stg/lib64
Objevilo se okno Stage se zakladnim prostredim a jednim robotem.


Uff. Tim je prostredi a robot pripraveny na klientske pripojeni a rizeni. Dalo to trochu prace, ale nakonec se zdarilo. Simon bude mit radost...



 


Rizeni robota v playerv

Spustit prikaz
playerv -h marvin --position2d --laser
 
Bohuzel s parametrem --laser playerv okamzite ukonci cinnost, pri pouziti  
playerv -h marvin --position2d klient funguje. Zarizeni position2d i obe zarizeni ranger funguji.
 
 




Rizeni robota pouzitim playerc a jazyka Python

Priklad v Python zde:
http://playerstage.sourceforge.net/doc/Player-svn/player/group__libplayerc__py__example.html

Neco o nastaveni:
https://packages.debian.org/unstable/python-playerc

Instalace python-playerc:
sudo dpkg -i ~/python-support_1.0.14ubuntu2_all.deb
sudo dpkg -i ~/python-playerc_3.0.2+dfsg-3ubuntu2_amd64.deb

sudo chmod 755 /usr/local/lib/python2.7/site-packages/_playerc.so

export LD_LIBRARY_PATH=/usr/local/lib64:/home/tomas/stg/lib64:/usr/lib/pyshared/python2.7
export PYTHONPATH=/usr/local/lib/python2.7/site-packages:/usr/lib/pyshared/python2.7:/usr/share/pyshared


Python editor:

Eric6 - http://eric-ide.python-projects.org/eric-download.html

Velmi jednoduchy priklad pro pohyb:

# Jizda dopredu

import time
import math
from playerc import *

# Pripojeni k robot simulatoru
c = playerc_client(None, 'localhost', 6665)
c.connect()

# Prihlaseni se k zarizeni pohybu robota
p = playerc_position2d(c,0)
if p.subscribe(PLAYERC_OPEN_MODE) != 0:
  raise playerc_error_str()

# Rozjeti robota rychlosti 1
p.set_cmd_vel(1.0,0.0,0.0,1)

# Cekani 10 x 1 sekunda
for i in range(0,10):
 time.sleep(1)
 print i

# Zastaveni pohybu robota
p.set_cmd_vel(0.0, 0.0, 0.0, 1)

# Odhlaeni se od zarizeni pohybu
p.unsubscribe()

# Odpojeni od simulatoru
c.disconnect()



Instalace python player pro 32bit potřebuje tyto knihovny:
sudo dpkg -i libstdc++6_5.1.1-6_i386.deb
sudo dpkg -i libstdc++6_5.1.1-6_i386.deb
sudo dpkg -i gcc-5-base_5.1.1-6_i386.deb
sudo dpkg -i libstdc++6_5.1.1-6_i386.deb
sudo dpkg -i libgeos-3.4.2_3.4.2-7_i386.deb
sudo dpkg -i libgeos-c1_3.4.2-7_i386.deb
sudo dpkg -i libjpeg62-turbo_1.4.0-7_i386.deb
sudo dpkg -i libplayercommon3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerinterface3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerjpeg3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerwkb3.0_3.0.2+dfsg-4.2+b1_i386.deb
sudo dpkg -i libplayerc3.0_3.0.2+dfsg-4.2+b1_i386.deb