Archiv für den Monat: August 2011


Facebook erweitert Profileinstellungen

Mit der letzten Ankündigung gibt Facebook Einblick in künftigen Profileinstellungen.

 

Detailiertere Informationen sind direkt unter https://www.facebook.com/about/control ersichtlich!

Facebook tätigt damit einen Schritt in die richtige Richtung. Bei mehr als 700 Millionen Mitgliedern sind solche Sicherheitsvorkehrungen und Möglichkeiten dringend erforderlich. Es bleibt jedoch zu hoffen, dass die neuen Einstellungsmöglichkeiten rund um die Sicherheit und Sichtbarkeit nicht zu Komplex ausfallen ansonsten wird wohl ein Grossteil der Mitglieder überfordert werden.

 

 


Amazon Kindle Cloud Reader

Amazon stellt ab sofort den Cloud Reader zur Verfügung. Wer einen Kindle besitzt und über Amazon Bücher kauft kann diese künftig auch direkt online von einem beliebigen PC aus lesen.

 

Gleich ausprobieren? Dann ab auf https://read.amazon.com

Unterstützte Kindle Reader Plattformen

Die nachfolgenden Plattformen werden zusätzlich zur Online Version unterstützt:

Die Kindle App ist nun so gut wie auf jeder Plattform verfügbar was meiner Meinung nach ein klarer Pluspunkt für Amazon als E-Book Shop darstellt. Mein Kindle 3 hat sich bereits bewährt und das eine oder andere „physische“ Buch bei mir abgelöst. Einzig wünschenswert wäre eine grössere Auswahl an deutschen Bücher.


TeamSpeak 3.0 Final released – Neu mit iPhone und Android App

Es ist soweit! TeamSpeak ist nun in der Version 3.0 Final erschienen und bringt auch gleich eine Android und iOS App mit :) TeamSpeak erfreut sich gerade bei Spielern grosser Beliebtheit und wurde in der Version 3 stark erweitert und teilweise neu entwickelt!

Was ist neu?

Eine gute Übersicht über die wichtigsten Neuerungen findet sich direkt auf der Webseite von TeamSpeak ( http://www.teamspeak.com/?page=ts3splash)

Was taugt die iPhone App?

Ich habe mir kurzerhand die iPhone App heruntergeladen und im Kurztest hinterlässt diese einen durchaus positiven Eindruck. Natürlich gibt es hie und da noch etwas anzupassen oder zu optimieren für ein Erst-Release ist die App jedoch erstaunlich stabil.

 


Resize Image with Lotus Script and Java on Lotus Notes

Wer in Lotus Notes Anwendungen entwickelt ist sicherlich auch bereits über die Problematik mit Bilddateien gestolpert. Wer per Code ein Bild in bestimmter grösse einfügen will muss dies normalerweise über ein Addon DLL erledigen. Da meine Anwendung jedoch ohne Zusatzsoftware auskommen soll habe ich mich entschieden eine entsprechende Java/Lotus Script Klasse zu schreiben.

1. Schritt: Lotus Script Bibliotheke „LSJavaImageResizer“ erstellen

Nachfolgend der Code für die Lotus Script Klasse:

[sourcecode language=“plain“ collapse=“true“ title=“Lotus Script Class 'LSJavaImageResizer'“]
%REM
Code and Library written by Yves Menge (yves.menge@gmail.com)
For updates / news visit http://blog.y-m-e.net
09.08.2011
%END REM

Option Public
Option Declare

UseLSX "*javacon"
Use "JavaLibrary"

%REM
Sample Code for use in Lotus Script:

***

Use "LSJavaImageResizer"
Dim lsImageResizer As New LSJavaImageResizer([PathToSourceImage], [PathToTempDir],[MaxImageHeight],[MaxImageWidth],[UpscaleSmallImages])

‚Parameters:
‚[PathToSourceImage] => Path to source image as string (eg. C:Test.jpg)
‚[PathToTempDir] => Path to Tempfile as string (eg. C:Temp
‚[MaxImageHeight] => Max image height in pixels as int or long (eg. 200)
‚[MaxImageWidth] => Max image width in pixelx as int or long (eg. 200)
‚[UpscaleSmallImages] => 1 (true) or 0 (false)

Dim strResizedImage as String = lsImageResizer.StartResizePicture()

‚Possible Response Strings:
‚OK => Path to resized image as string (eg. C:Tempimg123456789.jpg)
‚ERROR => "ERROR" as string, no error description is suplied!

‚REMARK: This class does only the resizing stuff, it’s on your own to delete the probably unused generated files
‚ in the temp directory!

%END REM

Public Class LSJavaImageResizer

‚Define Vars
jSession As JAVASESSION
jObject As JAVAOBJECT
jClass As JAVACLASS

‚Resizer Setup Vars
strSourceFile As String
strTempDir As String
intHeight As Integer
intWidth As Integer
intMakeImageLarger As Integer

‚SUB New -> Cunstructor
Sub New (ByVal sFile As String, ByVal sTempDir As String, ByVal iHEIGHT As Integer, ByVal iWIDHT As Integer, ByVal iMakeImageLarger As Integer)
‚Initialize JAVA Class
Set jSession = New JAVASESSION
Set jClass=jSession.GetClass("JavaImageResizer")
Set jObject = jClass.CreateObject

strSourceFile = sFile
strTempDir = sTempDir
intHeight = iHeight
intWidth = iWidht
intMakeImageLarger = iMakeImageLarger
End Sub

‚Resize Image
Function StartResizePicture ()
Dim strReturnCode As String

strReturnCode=jObject.Resize(strSourceFile, strTempDir, intHeight, intWidth, intMakeImageLarger)

‚Return Path for resized Image
StartResizePicture = strReturnCode
End Function
End Class
[/sourcecode]

2. Schritt: Java Bibliotheke „JavaLibrary“ erstellen

Nachfolgend der Code für die Java Klasse „JavaImageResizer.java“

[sourcecode language=“java“ collapse=“true“ title=“Java Library JavaImageResizer.java for use in JavaLibrary library“]
/*
*
*Code and Library written by Yves Menge (yves.menge@gmail.com)
*For updates / news visit http://blog.y-m-e.net
*09.08.2011
*
*/

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import java.util.Calendar;

public class JavaImageResizer {

public String Resize(String strSourceFile, String strTempDir, int intMaxHeight, int intMaxWidth, int intMakeImageLarger){
float imgResizedWidth;
float imgResizedHeight;
String strOutputFile = "";

try{
//Get milliseconds (for random filename)
Calendar cal = Calendar.getInstance();
String strRandomNumber = String.valueOf(cal.getTimeInMillis());

//Construct destination path and get image type
strOutputFile = strTempDir + "img" + strRandomNumber + ".jpg";
BufferedImage originalImage = ImageIO.read(new File(strSourceFile));
int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();

//Get original size
imgResizedWidth = originalImage.getWidth();
imgResizedHeight = originalImage.getHeight();

//Change dimensions to fit maximum width and height
float imgAspectRatio = 0;

// Calculate image dimension for destination
if (imgResizedWidth > intMaxWidth || imgResizedWidth < intMaxWidth && imgResizedWidth >= imgResizedHeight && intMakeImageLarger==1){
imgAspectRatio = intMaxWidth / imgResizedWidth;
imgResizedWidth = java.lang.Math.round(imgAspectRatio * imgResizedWidth);
imgResizedHeight = java.lang.Math.round(imgAspectRatio * imgResizedHeight);
}
if (imgResizedHeight > intMaxHeight || imgResizedHeight < intMaxHeight && imgResizedHeight >= imgResizedWidth && intMakeImageLarger==1) {
imgAspectRatio = intMaxHeight / imgResizedHeight;
imgResizedWidth = java.lang.Math.round(imgAspectRatio * imgResizedWidth);
imgResizedHeight = java.lang.Math.round(imgAspectRatio * imgResizedHeight);
}

//Resize Image
BufferedImage resizeImageHint = reSizeImage(originalImage, type, (int)imgResizedHeight, (int)imgResizedWidth);
ImageIO.write(resizeImageHint, "jpg", new File(strOutputFile));

}
catch(Exception e) {
e.printStackTrace();
strOutputFile="ERROR";
}
// Return path to resized image or ERROR in case of a failure
return strOutputFile;
}

private static BufferedImage reSizeImage(BufferedImage originalImage, int type, int imgHeight, int imgWidth){
BufferedImage resizedImage = new BufferedImage(imgWidth, imgHeight, type);
Graphics2D g = resizedImage.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(originalImage, 0, 0, imgWidth, imgHeight, null);
g.dispose();
g.setComposite(AlphaComposite.Src);

return resizedImage;
}
}
[/sourcecode]

Etwas zur Verwendung des Codes

Der Code darf mit einem Vermerk auf seine Herkunft gerne verwendet werden. Ich übernehme keine Garantie für mögliche Schäden oder Fehler welche durch meinen Code entstehen. Verbesserungen oder Kritik? Ab in die Kommentare damit :)


Apple iCloud Preise sind bekannt!

Kürzlich wurden die Preise für den iCloud Service von Apple bekannt. Wem die kostenlosen 5 GB Speicherplatz nicht reichen der kann sich im Abo zusätzlich Speicher mieten.

iCloud Preise für in Schweizer Franken

Die Preisstruktur sieht wie folgt aus:

10 GB Speicher zusätzlich (Total 15 GB) für CHF 20 oder $20 pro Jahr
20 GB Speicher zusätzlich (Total 25 GB) für CHF 40 oder $40 pro Jahr
50 GB Speicher zusätzlich (Total 55 GB) für CHF 100 oder $100 pro Jahr

Speicher auf dem iPhone kaufen

Über Einstellungen -> iCloud -> Speicher & Backup-> „Mehr Speicher kaufen“ kann zusätzlicher Speicher erworben werden.

 

 

 

Fazit

Wer nicht gleich seine ganzen Videos und Bilder online sichern will dem reichen durchaus die 5GB Speicherplatz. Mein iPhone nutzt aktuell ca 400MB iCloud Speicher für ein Backup (bei deaktiviertem Fotoarchiv Backup). Wer mehrere Geräte einsetzt wird möglicherweise die 5GB Marke erreichen und sich mehr Speicher gönnen.