wtorek, 19 lutego 2013

Eclipse, Ant, Maven, Specified VM install not found: type Standard VM, name

zrodlo: http://merakachra.blogspot.com/2010/11/specified-vm-install-not-found-type.html jesli przeinstalowales czlowieku jave, a miales projekty antowe, mavenowe albo inne tego typu... boj sie. wyskoczy ci blad podobny do tego:
"Specified VM install not found: type Standard VM, name xxx
rozwiazaniem jest usuniecie plikow w tym katalogu:
{eclipse_workspace_home}\.metadata\.plugins\org.eclipse.debug.core\.launches\
pliki antowe wygladaja tak:
nazwa_projektu.build.xml.launch

czwartek, 24 stycznia 2013

logarytmowanie w javie...

a dawno niczego nie wrzucalem. zapomnialem w sumie o tym, ze mam tego bloga... ;]
czasem sie przypomina, jak potrzebuje cos scp skopiowac...

ale coz, jest to blog, wiec wstep byl. teraz mieso. konkret:
java jest gupia i w jej podstawowym api nie ma metody by liczyc logarytmy z zadana podstawa...
ponizej funkcja, ktora pomaga sie uporac z tym problemem.


private double log2(double num, int podstawa){
	return (Math.log(num)/Math.log(podstawa));
}
jesli ktos nie wie (i tak przeciez nikt tego nie czyta) czemu tak jest - polecam: stronę wikipedii o logarytmach oczywiscie

środa, 13 czerwca 2012

Instalacja javy 7 pod ubuntu 10.04 i nowszych

mozna znalesc wszystko co trzeba tutaj:
http://www.ubuntu-pomoc.org/instalacja-oracle-java-jdk-7/

na wypadek wszelki, gdyby z tamta strona mialo cos sie stac:

  1. Dodaj repozytorium:
    sudo add-apt-repository ppa:webupd8team/java
  2. Zaktualizuj listę pakietów:
    sudo apt-get update
  3. Zainstaluj pakiet oracle-jdk7-installer:
    sudo apt-get install oracle-jdk7-installer

Usuwanie

sudo apt-get remove oracle-jdk7-installer

środa, 6 czerwca 2012

Linux, Unix, Copy, SCP

generalnie to nie rozpisujac sie...
zrodlo: http://vikashazrati.wordpress.com/2008/02/03/quicktip-transferring-files-between-two-ubuntu-systems/

kopiowanie folderow:
scp -r directoryname userid@hostname:directoryname2
czyli aby skopiowac katalog XXX z aktualnie uzywanego komputera, na komputer o adresie CCC i uzytkownika VVV nalezy wpisac:
scp -r XXX VVV@CCC:XXX
i to wszystko ;]

edit: jest jeszcze pscp, którego używa się dokładnie tak samo, lecz ma kilka dodatkowych opcji, m.in:
-pw do ustawienia hasła - można wtedy wklepać plain tekstem hasło sobie do skryptu, jeśli nie jest to specjalnie istotna sprawa. jeśli chce się zachować bezpieczeństwo i jednocześnie używać scp w skryptach - należy używać RSA.

poradnikow do tego jest wiele, jak choćby te tutaj:
http://linuxproblem.org/art_9.html
https://help.ubuntu.com/community/SSH/OpenSSH/Keys

środa, 18 kwietnia 2012

Wypisanie Environment Variables Java, JAVA_HOME

Poniżej krótki programik w javie, który wypisuje JAVA_HOME.
Printer.java
package java_home;

import java.util.Enumeration;
import java.util.Properties;

public class Printer {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Properties p = System.getProperties();
  Enumeration<Object> keys = p.keys();
  while (keys.hasMoreElements()) {
    String key = (String)keys.nextElement();
    String value = (String)p.get(key);
    if(key.contains("java.home"))
     System.out.println(key   ": "   value);
  }

 }

}


Aby wypisać wszystkie variable wystarczy wykomentować linijkę
if(key.contains("java.home"))

i po wszystkim!
 można toto wysłać komuś, żeby to odpalił i odesłał wyniki - jeśli jest mało kumaty i sam nie umie sprawdzić.... a takim też czasem trzeba pomóc;]

Java FileWriter RandomAccessFile Update

Tytuł jest taki a nie inny, żeby się ładnie w wyszukiwarce znajdowało ;]
generalnie chodzi o to, ze java ma wiele metod dodawania czegos na koniec pliku,
natomiast nie jest już tak różowo, jak trzeba coś zmienić w środku...
Poniżej przykład loga, w którym zmieniać się będzie 1 int, aczkolwiek ta konstrukcja pozwala już na zbudowanie dokładnie wszystkiego.

edit: tak swoja droga, to do zabaw z plikami o wiele lepszy jest linux'owy SED czy AWK, no ale cóż. Może innym razem będzie mi się chciało jakiś fajny skrypt zamieścić. Zresztą czasem trzeba to zrobić w javie, bo tak ci na gorze każą ;]

tak, żeby być fajnym, to wrzuciłem jeszcze enuma ze sztryngami
StringEnum.java
package stringi;

public enum StringEnum {
  HEADER     ("General Log HEADER"), 
  ROW_1     ("jakis tekst, row1:"), 
  ROW_2     ("siakis int:");
  
  private String description;
  
  private StringEnum(String s) {
   description = s;
  }
  
  public String getDescription() {
    return description;
  }
}

a teraz, po tym przydługim wstępie - rozwiązanie problemu - RandomAccessFile.
Klasa ta pozwala ustawić "kursor" (metoda seek) w dowolnym miejscu dokumentu i potem wpisać żądaną treść (ja akurat używam writeBytes, ale jest tez wiele innych "write'ów")
uwaga: write nie dopisuje treści w danym miejscu przesuwając resztę dalej (jak w wordzie ;]). nie ma tak dobrze. write nadpisuje kolejne bajty do znaku końca linii (tak to z doświadczenia u mnie wyszło)
najłatwiej jest oczywiście nadpisać cały plik od początku, szczególnie, że wtedy odpada problem z ustawianiem długości pliku[setLength()] (tak, żeby ko na końcu nie obcięło, jeśli dodamy coś w środku)

NewTestRandomAccessFile.java
package stringi;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class NewTestRandomAccessFile {
    private File file = null;
 private RandomAccessFile generalFileWriter = null;
 private Integer siakisInt = 0;
 
 public NewTestRandomAccessFile(String fileName) {
  try {
   initGeneralLog(fileName);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
    
 private void initGeneralLog(String fileName) throws IOException{
  file = new File(fileName);
  if(file.exists()){
   file.delete();
   file.createNewFile();
  }
  generalFileWriter = new RandomAccessFile(file, "rw");
  generalFileWriter.writeBytes(buildGeneralLog());
 }

 private String buildGeneralLog(){
  StringBuilder sb = new StringBuilder();
  sb.append(StringEnum.HEADER.getDescription())           .append("\n");
  sb.append(StringEnum.ROW_1.getDescription())  .append("some static data bla bla") .append("\n");
  sb.append(StringEnum.ROW_2.getDescription())  .append(siakisInt +=150)    .append("\n");
  return sb.toString();
 }
 
 
 private void writeDataToGeneralLog(String output) throws IOException {
  generalFileWriter.setLength(output.getBytes().length);
  generalFileWriter.seek(0);
  generalFileWriter.writeBytes(output);
 }
 
 private void closeLog() throws IOException{
  if(generalFileWriter != null){
   writeDataToGeneralLog(buildGeneralLog());
   generalFileWriter.close();
  }
 }
 
 public static void main(String[] args) throws IOException {
  NewTestRandomAccessFile test = new NewTestRandomAccessFile("WrRaThY.txt");
  for(int i = 0; i<10;  i){
   test.writeDataToGeneralLog(test.buildGeneralLog());
  }
  test.closeLog();
  
 }
}

edit:  jest niby jeszcze jeden sposób, żeby updatować plik, ale nie wydaje mi się ani ładny, ani stabilny.
przy dużej ilości zapisów do pliku pewnie się wysypie... ale niech będzie, wrzucę go.

package stringi;

import java.io.FileWriter;
import java.io.IOException;

public class Filewriter {

 /**
  * @param args
  */
 private static FileWriter fw = null;
 private static int samplersProcessedCounter = 0;
 
 public static void main(String[] args) throws IOException, InterruptedException {
     int count = 10;
     Filewriter my = new Filewriter();
     for(int i = 0; i<count;  i){
      my.funkcja();
     }
 }
 
 public void funkcja(){
  try {
   String line = "";

   if (fw == null) {// initiate file writer
    fw = new FileWriter("test.csv");
    line = "col1, col2, col3\n";
    fw.append(line);

   }

   line = "col1row" samplersProcessedCounter ", col2row" samplersProcessedCounter ", col3row" samplersProcessedCounter "\n";
   fw.append(line);
   samplersProcessedCounter  ;
   //WARNING! this is strange, probably will be unstable
   fw.flush();
   fw.close();
   fw=null;
   
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

od zwykłego file writera rozni sie tylko miejscem zamykania (stad moje obawy o stabilność, po każdym wierszu trzeba zamknąć plik, znullować referencję i otworzyć plik od nowa...
package stringi;

import java.io.FileWriter;
import java.io.IOException;

public class Filewriter {

 /**
  * @param args
  */
 private static FileWriter fw = null;
 private static int samplersProcessedCounter = 0;
 
 public static void main(String[] args) throws IOException, InterruptedException {
     int count = 10;
     Filewriter my = new Filewriter();
     for(int i = 0; i<count;  i){
      my.funkcja();
     }
     //NORMAL FLUSH AND CLOSE, AFTER EVERYTHING IS DONE
     fw.flush();
     fw.close();
 }
 
 public void funkcja(){
  try {
   String line = "";

   if (fw == null) {// initiate file writer
    fw = new FileWriter("test.csv");
    line = "col1, col2, col3\n";
    fw.append(line);

   }

   line = "col1row" samplersProcessedCounter ", col2row" samplersProcessedCounter ", col3row" samplersProcessedCounter "\n";
   fw.append(line);
   samplersProcessedCounter  ;
   /*WARNING! COMMENT!
   fw.flush();
   fw.close();
   fw=null;*/
   
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}


piątek, 13 kwietnia 2012

StringToHex, HexToString

czesto sie tego szuka, szybko sie znajduje... ale zawsze mozna szybciej ;]


 public synchronized static String convertStringToHex(String str) {

  char[] chars = str.toCharArray();

  StringBuffer hex = new StringBuffer();
  for (int i = 0; i < chars.length; i  ) {
   hex.append(Integer.toHexString((int) chars[i]));
  }

  return hex.toString();
 }


 public synchronized static String convertHexToString(String hex) {

  StringBuilder sb = new StringBuilder();

  for (int i = 0; i < hex.length() - 1; i  = 2) {

   // grab the hex in pairs
   String output = hex.substring(i, (i   2));
   // convert hex to decimal
   int decimal = Integer.parseInt(output, 16);
   // convert the decimal to character
   sb.append((char) decimal);

  }

  return sb.toString();
 }

Kod jest skopiowany z czyjegos bloga, dobre pare miechow temu, wiec niestety odnosnika nie bedzie