private void createZipFile() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
zos.putNextEntry(new ZipEntry("First"));
String s = "test1";
zos.write(s.getBytes());
zos.closeEntry();
zos.putNextEntry(new ZipEntry("Second"));
String s2 = "test2";
zos.write(s2.getBytes());
zos.closeEntry();
zos.flush();
baos.flush();
zos.close();
baos.close();
}
While I am looking for answer how my app engine application can twitt automaitcally when it gets data, I found that there is no clear answers.
I do not really need to have oAuth since it is my twitter account and app engine server side needs to twitter.
Also, I didn't want to write to get consumer key or secret. all tutorials on web is started how to generate consumer key/secret from coding...
Eventually, by registering your app via https://dev.twitter.com/apps/new will give all keys what I need. basically, you can get cinsuer_key. consumer_secret, access_token, access_token_secret from the panel once you register.very simple.
Then, now, as you can see the below code, it can make your app engine to tweet via your twitter acount whenever data is received fron your client app to app engine server. easy and fun!
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
public class TwitterManager {
private static final String betaCONSUMER_KEY = "Jd28exxxxxxxxxxxxxOw";
private static final String betaCONSUMER_SECRET = "2aCSkyWxxxxxxxxxxg";
private static final String betaACCESS_TOKEN = "2658xxxxxxxxxxxxxxxxBD";
private static final String betaACCESS_TOKEN_SECRET = "tExxxxxxxxxxnYGHbk";
public TwitterManager() {
// TODO Auto-generated constructor stub
}
public String updateStatus(String message, boolean isBeta) throws TwitterException{
String s = "No";
AccessToken accessToken;
accessToken = new AccessToken(betaACCESS_TOKEN, betaACCESS_TOKEN_SECRET);
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(betaCONSUMER_KEY, betaCONSUMER_SECRET);
twitter.setOAuthAccessToken(accessToken);
try {
twitter.updateStatus(message);
s = "Successfully updated the status.";
} catch (TwitterException e) {
s = e.getMessage();
}
return s;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer=response.getWriter();
......
}

Recently, i needed to print QRCode based name badge for attendees. So, I have checked some existing free application. Unfortunately, I didn't like all of them since I needed to print into 4x6 size. Well, so, I decided to write my own application. Here is some constrains on this application
Step 2.Create Adobe AIR Application from your flashbuilder
Step 3.We need to a library that will used for PDF file generation. Get it and place it into your lib folder
- AlivePDF.swc : AlivePDF is a client side AS3 PDF generation library for Adobe Flash, Flex and AIR. http://code.google.com/p/alivepdf/
Step 4.
- Be familiar with google ZXING that is used to generate QRCode. ZXing (pronounced "zebra crossing") is an open-source, multi-format 1D/2D barcode image processing library implemented in Java. http://code.google.com/p/zxing/
- Get ZXING 1.5. When you unzip it, you can find actionscript folder. it contain zxing API so that we can use to generate QRCode. Place it under your src folder or you can make it library and place into lib folder.
Write QRCode generation actionscript class.
package vo{import flash.display.Bitmap;import core.src.com.google.zxing.common.BitMatrix;import mx.core.BitmapAsset;import core.src.com.google.zxing.common.flexdatatypes.HashTable;import flash.net.FileReference;import flash.display.*;import flash.net.URLRequest;import flash.events.Event;import mx.controls.Alert;import core.src.com.google.zxing.common.GlobalHistogramBinarizer;import core.src.com.google.zxing.common.ByteMatrix;import core.src.com.google.zxing.client.result.ParsedResult;import core.src.com.google.zxing.client.result.ResultParser;import core.src.com.google.zxing.DecodeHintType;import core.src.com.google.zxing.BarcodeFormat;import core.src.com.google.zxing.BinaryBitmap;import core.src.com.google.zxing.BufferedImageLuminanceSource;import core.src.com.google.zxing.MultiFormatReader;import core.src.com.google.zxing.MultiFormatWriter;import core.src.com.google.zxing.Result;public class QRCodeHandler{public function QRCodeHandler(){}public function generateQRCode(contents:String):Bitmap{var myWriter:MultiFormatWriter = new MultiFormatWriter();try{var result:ByteMatrix = (myWriter.encode(contents,BarcodeFormat.QR_CODE,300,300)) as ByteMatrix;}catch (e:Error){Alert.show('An error occurred during the encoding process');}var bmpd:BitmapData = new BitmapData(300, 300, false, 0x009900);var bmp:Bitmap = new Bitmap(bmpd);for (var h:int=0;h<300;h++){for (var w:int=0;w<300;w++){if (result._get(w,h) == 0){bmpd.setPixel(w,h, 0);}else{bmpd.setPixel(w,h, 0xFFFFFF);}}}return bmp;}}}
<?xml version="1.0" encoding="utf-8"?><s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="loadFile();"><fx:Style source="FileReader.css"/><fx:Script><![CDATA[import flash.display.DisplayObject;import flash.filesystem.File;import flash.filesystem.FileStream;import flash.sampler.NewObjectSample;import flash.utils.ByteArray;import mx.collections.ArrayCollection;import mx.collections.XMLListCollection;import mx.events.CollectionEvent;import mx.events.CollectionEventKind;import mx.events.DataGridEvent;import mx.events.FlexEvent;import mx.events.ListEvent;import org.alivepdf.fonts.CoreFont;import org.alivepdf.fonts.FontFamily;import org.alivepdf.fonts.IFont;import org.alivepdf.images.ColorSpace;import org.alivepdf.layout.Align;import org.alivepdf.layout.Mode;import org.alivepdf.layout.Orientation;import org.alivepdf.layout.Position;import org.alivepdf.layout.Resize;import org.alivepdf.layout.Size;import org.alivepdf.layout.Unit;import org.alivepdf.links.ILink;import org.alivepdf.links.InternalLink;import org.alivepdf.pages.Page;import org.alivepdf.pdf.PDF;import org.alivepdf.saving.Method;import vo.Attendee;import vo.AttendeeType;import vo.QRCodeHandler;[bindable]private var currentSelectedItemID:String;[bindable]private var iColor:uint = 0x0000FF;public function createPDF(obj:DisplayObject):void{var uf:IFont = new CoreFont ( FontFamily.HELVETICA_BOLD );var customsize:Size = new Size([400,600],"customsize", [4,6],[101.6,152.4]) ;var p:PDF = new PDF( Orientation.PORTRAIT, Unit.MM, customsize);p.setMargins(0,15,0,0);p.addPage();p.addImage( obj );var f:FileStream = new FileStream();var sFileName:String = "sdcPdf/"+ currentSelectedItemID + ".pdf"var file:File = File.desktopDirectory.resolvePath( sFileName);if(!file.exists) {f.open( file, FileMode.WRITE);var bytes:ByteArray = p.save( Method.LOCAL );f.writeBytes(bytes);f.close();}}private function displayInfo(evt:ListEvent):void{var aFirstName:String = String(evt.currentTarget.selectedItem.firstname);var aLastName:String = String(evt.currentTarget.selectedItem.lastname);this.setBadge(aFirstName, aLastName);//badge layoutaTitle.text = String(evt.currentTarget.selectedItem.title) ;aCompany.text = String(evt.currentTarget.selectedItem.company) ;aTwitter.text = String(evt.currentTarget.selectedItem.twitter) ;firstname.text = aFirstName.toUpperCase() ;lastname.text = aLastName.toUpperCase() ;//QRCode generationvar qrInfo:String = aFirstName + " ";qrInfo = qrInfo + aLastName + "\n";if(!isEmpty(String(evt.currentTarget.selectedItem.title))){qrInfo = qrInfo + String(evt.currentTarget.selectedItem.title) + "\n";}if(!isEmpty(String(evt.currentTarget.selectedItem.company))){qrInfo = qrInfo + String(evt.currentTarget.selectedItem.company) + "\n";}qrInfo = qrInfo + String(evt.currentTarget.selectedItem.email) + "\n";if(!isEmpty(String(evt.currentTarget.selectedItem.tel))){qrInfo = qrInfo + String(evt.currentTarget.selectedItem.tel) + "\n";}if(!isEmpty(String(evt.currentTarget.selectedItem.website))){qrInfo = qrInfo + String(evt.currentTarget.selectedItem.website) + "\n";}qrInfo = qrInfo + String(evt.currentTarget.selectedItem.asa) + "\n";qrInfo = qrInfo + String(evt.currentTarget.selectedItem.asa_event) + "\n";QRImage.source = new QRCodeHandler().generateQRCode(qrInfo);var sFileStart:String = aLastName;var sFileEnd:String = String(evt.currentTarget.selectedItem.id);sFileStart = sFileStart.replace(' ', '');sFileEnd = sFileEnd.replace(' ', '');this.currentSelectedItemID = sFileStart + "_" + sFileEnd;}private function isEmpty(text:String):Boolean{if(text == null|| text == ""){return true;}else{return false;}}private function setBadge(fname:String, lname:String):void{var objType:AttendeeType = new AttendeeType();if( objType.isStaff(fname, lname)){color.selectedColor = objType.staffColor;this.badgeTitle.text = "STAFF";}else if( objType.isSpeaker(fname,lname)){color.selectedColor= objType.speakerColor;this.badgeTitle.text = "SPEAKER";}else if( objType.isSponsor(fname,lname)){color.selectedColor = objType.sponosorColor;this.badgeTitle.text = "SPONSOR";} else{color.selectedColor = objType.attendeeColor;this.badgeTitle.text = "ATTENDEE";//this.badgeTitle.text = "PRESS";}}private function loadFile():void{var file:File = File.applicationDirectory.resolvePath("data/SDC0813.csv");var stream:FileStream = new FileStream();stream.open(file, FileMode.READ);var str:String = stream.readUTFBytes(stream.bytesAvailable);stream.close();var recordsetCollection:ArrayCollection = new ArrayCollection();var rowRecordSet:Array = str.split(/\n/gi);for (var i:String in rowRecordSet){var sTempRecord:String = rowRecordSet[i];sTempRecord = sTempRecord.replace( /["]/gi,'');var eachRecord:Array = sTempRecord.split(/,/gi);var attendee:Attendee = new Attendee();attendee.id = eachRecord[0];attendee.lastname = trimWord(eachRecord[1]);attendee.firstname= trimWord(eachRecord[2]);attendee.email= trimWord(eachRecord[3]);attendee.tel= eachRecord[4];attendee.twitter= reformatTwitter(trimWord(eachRecord[5]));attendee.title= trimWord(eachRecord[6]);attendee.company = trimWord(eachRecord[7]);attendee.website = eachRecord[8];attendee.asa= "http://m.aspaceapart.net/profiles/" + trimWord(eachRecord[2]) + "_" + trimWord(eachRecord[1]);attendee.hasBadge = this.hasBadgePDF(eachRecord[0], eachRecord[1]);recordsetCollection.addItem(attendee);}grid.dataProvider = recordsetCollection;}private function trimFirstNameForASA(fname:String):String{if(fname == null)return '';fname = fname.replace(' ', '');return fname;}private function hasBadgePDF(sID:String, lName:String):Boolean{if( lName != null){lName = lName.replace(' ', '');}if(sID !=null){sID = sID.replace(' ', '');}var sFileName:String = "sdcPdf/"+lName+"_"+ sID + ".pdf"var file:File = File.desktopDirectory.resolvePath( sFileName);if(file.exists) {return true;}elsereturn false;}private function trimWord(text:String):String{if(text == null || text == "-"){text = "";}if(text.charAt(0) == " "){text.substr(1, text.length);}return text;}private function reformatTwitter(strTwitter:String):String{if(strTwitter == null)return "";strTwitter = strTwitter.toLocaleUpperCase();if(strTwitter == "" || strTwitter == " " || strTwitter == "." || strTwitter == "@" || strTwitter == "-"){return "";}if(strTwitter =="NA" || strTwitter == "N/A" || strTwitter == "N\A" || strTwitter == "NONE" || strTwitter == "NO"){return "";}if(strTwitter.substring(0) != "@"){strTwitter = "@" + strTwitter;}strTwitter = strTwitter.replace("@@", "@");return strTwitter;}]]></fx:Script><s:layout><s:VerticalLayout /></s:layout><mx:ColorPicker id="color" color="0x000000"/><s:Button label="Generate PDF" click="{createPDF(this.infoPanel);}" /><s:Panel title="DataGrid Control"color="0x000000"borderAlpha="0.15"width="100%" height="100%"><s:layout><s:HorizontalLayout paddingTop="0" /></s:layout><mx:DataGrid id="grid"width="600" height="700"sortableColumns="true"draggableColumns="true" itemClick="{displayInfo(event);}"><mx:columns><mx:DataGridColumn dataField="id" headerText="ID"/><mx:DataGridColumn dataField="firstname" headerText="First"/><mx:DataGridColumn dataField="lastname" headerText="Last"/><mx:DataGridColumn dataField="title" headerText="Title"/><mx:DataGridColumn dataField="company" headerText="Company"/><mx:DataGridColumn dataField="email" headerText="eMail"/><mx:DataGridColumn dataField="twitter" headerText="twitter"/><mx:DataGridColumn dataField="hasBadge" headerText="Badge" /></mx:columns></mx:DataGrid><s:BorderContainer width="400" height="600" borderColor="#000000"><s:layout><s:VerticalLayout paddingLeft="0" paddingRight="0" paddingTop="0" paddingBottom="0"/></s:layout><s:VGroup width="400" height="600" id="infoPanel" horizontalAlign="center"><s:VGroup width="400" height="130" paddingTop="30" paddingLeft="10"><mx:Text id="firstname" fontSize="40" fontFamily="Helvetica" fontWeight="bold" width="100%" /><mx:Text id="lastname" fontSize="40" fontFamily="Helvetica" fontWeight="bold" width="100%" /></s:VGroup><s:HGroup width="400" height="250" verticalAlign="top" paddingTop="45" paddingRight="10" ><s:VGroup width="240" height="300" paddingLeft="10"><mx:Text text=" " /><mx:Text id="aTitle" width="235" fontSize="20" fontFamily="Helvetica" /><mx:Text id="aCompany" width="235" fontSize="20" fontFamily="Helvetica" /><mx:Text id="aTwitter" width="235" fontSize="20" fontFamily="Helvetica" /></s:VGroup><mx:Image layoutDirection="ltr" id="QRImage" width="150" verticalAlign="top" /></s:HGroup><s:VGroup width="400" height="220"><mx:Image horizontalAlign="center" id="sdclogo" source="assets/SDCLOGO.png" height="131" width="400" maintainAspectRatio="true" scaleContent="true"/><s:BorderContainer id="badgeBox" backgroundColor="{color.selectedColor}" width="400" height="70"><mx:Text paddingTop="7" text="ATTENDEE" id="badgeTitle" paddingBottom="0" width="100%" fontFamily="Helvetica" fontWeight="bold" fontSize="40" color="#FFFFFF" textAlign="center"/></s:BorderContainer></s:VGroup></s:VGroup></s:BorderContainer></s:Panel></s:WindowedApplication>