Egyszerűen
BasicConfigurator.configure(); System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
Egyszerűen
BasicConfigurator.configure(); System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
A Java telepítés nem egy nagy varázslat. Rendszerint arról szól, hogy kitömörítjük valahova a fájlokat, és elérjük, hogy amikor beírjuk hogy java, akkor az általunk kitömörített cucc induljon el.
Ez windows alatt egy download, total commander, és a PATH környezeti változó módosításával elérhető.
Ubuntu alatt főként csak terminált használok, szóval beírtam a google-be, hogy jdk install ubuntu, és vadabbnál vadabb dolgokat láttam, és nagyjából semmi se működött. Szóval ha valaki jdk-t szeretne telepíteni ubuntura, akkor az alábbit kell tenni:
Ellátogatni az OpenJdk oldalára, és kimásolni a nekünk tetsző JDK csomag URL-jét
Letölteni a kívánt csomagot:
wget https://download.java.net/java/GA/jdk15.0.1/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/openjdk-15.0.1_linux-x64_bin.tar.gz
Ki kell tömöríteni a cuccot amit letöltöttünk:
sudo tar -xvf openjdk-15.0.1_linux-x64_bin.tar.gz -C /usr/lib/jvm/
Fel kell venni az újonnan létrehozott JDK-a az alternatives közé:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-15.0.1/bin/java 1151
Utána pedig beállíthatjuk a használni kívánt java verziót az alábbi paranccsal:
sudo update-alternatives --config java
A mobil alkalmazásfejlesztés terén sokan próbálkoztak már mindenféle cross platform fordítóval, most úgy tűnik, hogy egy igazán nagy név is beszáll a játékba:
https://software.intel.com/en-us/blogs/2015/07/30/multi-os-engine-of-intel-inde-technical-overview
Egy ideig működött, majd nem… A megoldás:
Open up an administrator command window (this is needed if you’re using Vista or Windows 7 with UAC enabled) and do:
assoc .jar=jarfileterm
ftype jarfileterm=”C:\Program Files\Java\jre7\bin\java.exe” -jar “%1” %*
In your case, you should replace the C:\Program Files\Java\jre7\bin\java.exe path with the one for your install of the jre.
Forrás: http://stackoverflow.com/questions/10446986/double-clicking-jar-file-does-not-open-command-prompt
Az egyik publikus képfeltöltő szervlet kapcsán jeleztek egy hibát, hogy valamiféle csodaképeket egyszerűen nem lehet feltölteni. A naplófájlok elemzése után látszott is a hiba:
java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:460) at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082) at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897) at javax.imageio.ImageIO.read(ImageIO.java:1422) at javax.imageio.ImageIO.read(ImageIO.java:1282)
A hiba viszonylag könnyen reprodukálható volt, tehát volt egy jó képem, és egy rossz. A gimp semmi extrát nem mondott a képről, és a rossz kép az ismételt elmentés után is rossz maradt.
Kis keresgélés után rátaláltam az exiftool nevű alkalmazásra:
exiftool -a -G ./JUT430-1.jpg
Látszott is, hogy a kép adatai között mindenféle furcsaság található:
[JFIF] JFIF Version : 1.01
[JFIF] Resolution Unit : inches
[JFIF] X Resolution : 300
[JFIF] Y Resolution : 300
[ICC_Profile] Profile CMM Type : HDM
[ICC_Profile] Profile Version : 2.4.0
[ICC_Profile] Profile Class : Output Device Profile
[ICC_Profile] Color Space Data : CMYK
[ICC_Profile] Profile Connection Space : Lab
...
[ICC_Profile] Profile Description : ISO Coated v2 (ECI)
[ICC_Profile] Char Target : (Binary data 126677 bytes, use -b option to extract)
[EXIF] Modify Date : 2012:08:21 09:56:35
[EXIF] Compression : JPEG (old-style)
[EXIF] Thumbnail Offset : 1829717
[EXIF] Thumbnail Length : 5947
Ekkor gyanús lett a dolog, az én képeimen nem volt ennyi szemét. Letöröltem az összes exif adatot:
exiftool -all= ./JUT430-1.jpg
A dolog működött, a kép megnyitható java-ban. Innen már azt hittem egyszerű a dolog, már csak meg kellene oldani, hogy az exif adatokat a java is le tudja kapni feldolgozás előtt.
Erre találtam is egy ígéretes projektet az Apache common’s Sanselan-t. Az mondjuk furcsa volt, hogy még incubator-os, béta, és 3 éve senki nem nyúlt hozzá, de abból indultam ki, hogy biztosan azért mert annyira jó… 🙂
Természetesen a dolog nem működött. A forráskód tanulmányozása során feltűnt, hogy az általam használt kódból mintha hiányzott volna az érdemi rész…
</pre> public void removeExifMetadata(ByteSource byteSource, OutputStream os) throws ImageReadException, IOException, ImageWriteException { JFIFPieces jfifPieces = analyzeJFIF(byteSource); List pieces = jfifPieces.pieces; //Debug.debug("pieces", pieces); //pieces.removeAll(jfifPieces.exifPieces); //Debug.debug("pieces", pieces); writeSegmentsReplacingExif(os, pieces, null); } <pre>
Gondoltam ez így nem a legjobb, ezért visszacommenteztem (nyílt forráskód rulz) a removeAll-t. Sajnos ez még önmagában nem jelentett megoldást, ugyanis nem minden addicionális adat EXIF adat, és pont azok az adatok maradtak a képen, amik a problémát okozták.
Minden JFIFPieceSegment eltávolítása nem minősült kimondottan jó taktikának, de egy kis wikipedia-s utánaolvasás után megvolt, hogy mik az egyéb adatok marker bit-jei, amikre nekem semmi szükségem, innen már csak pár sor választott el a sikertől…
public void removeExifAndAllMetadata(ByteSource byteSource, OutputStream os) throws ImageReadException, IOException, ImageWriteException { JFIFPieces jfifPieces = analyzeJFIF(byteSource); List pieces = jfifPieces.pieces; //Debug.debug("pieces", pieces); Iterator it = pieces.iterator(); while (it.hasNext()) { Object object = (Object) it.next(); if (object instanceof JFIFPieceSegment ) { JFIFPieceSegment iffdat=(JFIFPieceSegment)object; if (iffdat.marker>= 0xFFE0 && iffdat.marker<=0xFFEF) { it.remove(); } } } pieces.removeAll(jfifPieces.exifPieces); //Debug.debug("pieces", pieces); writeSegmentsReplacingExif(os, pieces, null); }
A végeredmény valami ilyesmi lett:
public static void main(String[] args) { try { String fileName="c:/JUT430-1.jpg"; File f=new File(fileName); ExifRewriterAdv eRewriter=new ExifRewriterAdv(); FileInputStream fis=new FileInputStream(f); ByteSourceInputStream bis=new ByteSourceInputStream(fis, null); ByteArrayOutputStream bout=new ByteArrayOutputStream (); eRewriter.removeExifAndAllMetadata(bis, bout); ByteArrayInputStream iobis=new ByteArrayInputStream(bout.toByteArray()); ImageIO.read(iobis); } catch (Exception e) { e.printStackTrace(); } }
Nagy nehezen elindult végre a synctocloud.net.
Mint minden jó release esetén az utolsó pillanatokban még hibákat javítottam (egész pontosabban próbáltam megcsinálni azokat a dolgokat, amikről már azt hittem, hogy rég megcsináltam őket).
És mint minden jó program esetében itt sem az a kérdés, hogy van e benne hiba, inkább csak az, hogy mennyi 🙂
Az új eclipse verzió óta elég gyakran megesik velem, hogy egy két projektben egyszerűen nem működik az auto-import, open by type, és ehhez hasonló nyalánkságok.
Erre a megoldás egyszerű, törölni kell a workspace/.metadata/.plugins/org.eclipse.jdt.core könyvtárból a *.index and savedIndexNames.txt fájlokat…
Épp ma leltem rá erre a forráskódra:
public class Swapy { public static void swap(Point arg1, Point arg2) { arg1.x = 100; arg1.y = 100; Point temp = arg1; arg1 = arg2; arg2 = temp; } public static void main(String[] args) { Point pnt1 = new Point(0, 0); Point pnt2 = new Point(0, 0); System.out.println("X: " + pnt1.x + " Y: " + pnt1.y); System.out.println("X: " + pnt2.x + " Y: " + pnt2.y); System.out.println(" "); swap(pnt1, pnt2); System.out.println("X: " + pnt1.x + " Y:" + pnt1.y); System.out.println("X: " + pnt2.x + " Y: " + pnt2.y); } }
Aminek a kimenete:
X: 0 Y: 0
X: 0 Y: 0
X: 100 Y: 100
X: 0 Y: 0
Azt hiszem ez is ideális lenne egy jó felvételi kérdésnek, de egyszerűbbekre is alig tudják a választ… 🙁
Forrás:
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
Igen igen, hiába mondjuk azt a Microsoft böngészőjének azt css-ben:
border: 0 none;
Ez nem elég egyértelmű. ha egy IFrame-ről van szó. Ahhoz, hogy IE alatt is működjön a dolog ezt kell mondani HTML-ben:
...iframe frameBorder="0" ...
GWT alól pedig valami ilyesmit:
iFrame.getElement().setAttribute("frameBorder", "0");
Amikor fáj a fejem, vad dolgokra vagyok képes… De arra jöttem rá, hogy mások fejfájás nélkül is képesek vad dolgokra…