Pages

Saturday, January 31, 2015

KirSizer Flex AIR Image Sizer app Part 4

In this tutorial we will add the ability to add folders to the selected file list.

First of all, we need to adjust the existing code in filesSelected() function by changing the way we store data in selectedFiles array. It is going to have a "type" property, which will be set to 0 if it is a file that is stored, and to 1 if it is a directory (we are going to keep files AND directories in the same array). Set the nativePath value to "path" property. Change the line that updates total file count to call updateTotalFiles() function:

private function filesSelected(evt:FileListEvent):void {
for (var i:int = 0; i < evt.files.length; i++) {
var alreadySelected:Boolean = false;
for (var u:int = 0; u < selectedFiles.length; u++) {
if (selectedFiles[u].type == 0 && selectedFiles[u].path == evt.files[i].nativePath) {
alreadySelected = true;
}
}
if (!alreadySelected) selectedFiles.addItem({type:0, path:evt.files[i].nativePath});
}
updateTotalFiles();
}

Now find the "Add folder" button and add a click event handler addFolder():

<s:Button label="Add folder" width="100%" click="addFolder();" />

This function creates a file, which we use to call a browseForDirectory() method, with Event.SELECT event listener and handler folderSelected:

private function addFolder():void {
var file:File = new File();
file.browseForDirectory("Select a directory");
file.addEventListener(Event.SELECT, folderSelected);
}

The handler function calls a doFolder() function, passing the selected directory as parameter:

private function folderSelected(evt:Event):void {
doFolder(evt.currentTarget as File);
}

The doFolder() function is a big once, since it does multiple things.

First of all, it declares 2 variables - picturesInFolder (and sets its value to 0) and childFiles (array). We set the childFiles array to file.getDirectoryListing(), so that it contains all the files and directories from the folder.

Then we loop through these childFiles elements, see if they are png/jpg/jpeg files or directories. If its a picture file, we increase picturesInFolder. If its a directory, we call doFolder() on that directory. This means that the function will also select subfolders, subsubfolders, and so on.

Then we check if there were any pictures in this folder (in other words, if its not empty). If it isnt empty, we check if this folder has already been selected, similarly to the way we did in filesSelected(). Finally, we add the item to selectedFiles by providing several properties. The properties are type, path, name and num. We set type to 1, since its a directory, path to file.nativePath, name to file.name, and num to picturesInFolder.

private function doFolder(file:File):void {
var picturesInFolder:int = 0;
var childFiles:Array = file.getDirectoryListing();
for (var i:int = 0; i < childFiles.length; i++) {
if (childFiles[i].extension == "png" || childFiles[i].extension == "jpg" || childFiles[i].extension == "jpeg") {
picturesInFolder++;
}
if (childFiles[i].isDirectory) {
doFolder(childFiles[i]);
}
}
if (picturesInFolder > 0) {
var alreadySelected:Boolean = false;
for (var a:int = 0; a < selectedFiles.length; a++) {
if (selectedFiles[a].type == 1 && selectedFiles[a].path == file.nativePath) {
alreadySelected = true;
}
}
if (!alreadySelected) selectedFiles.addItem( { type:1, path:file.nativePath, name:file.name, num:picturesInFolder } );
updateTotalFiles();
}
}

The updateToatlFiles() function weve used twice now simply loops through all the children of the array and sees if its a file or a directory and adds the necessary amount of files to the total amount:

private function updateTotalFiles():void {
var totalFiles:int = 0;
for (var i:int = 0; i < selectedFiles.length; i++) {
if (selectedFiles[i].type==1) {
totalFiles += selectedFiles[i].num;
}else {
totalFiles++;
}
}
labelSelected.text = totalFiles + " files selected";
}

Now, we need to update TileRenderer class, so that it displays a folder icon if its representing a directory, along with two labels that show the name of the folder and how many pictures it contains. The code is pretty straightforward - we simply check what data.type it is and set the values:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
horizontalAlign="center" verticalAlign="middle"
horizontalScrollPolicy="off" verticalScrollPolicy="off" creationComplete="init();" updateComplete="init();">
<fx:Script>
<![CDATA[
[Embed(source="../lib/folder.png")]
private var fold:Class;

private function init():void{
if (data.type == 0) {
img.source = data.path;
fgroup.alpha = 0;
}
if (data.type == 1) {
img.source = fold;
fgroup.alpha = 1;
fname.text = data.name;
fnum.text = "(" + data.num + ")";
}
}
]]>
</fx:Script>
<s:Group>
<mx:Image id="img" maxWidth="60" maxHeight="60" scaleContent="true"/>
<s:VGroup mouseEnabled="false" mouseChildren="false" alpha="0" id="fgroup" top="16">
<s:Label id="fname" width="60" color="#000000" height="12" />
<s:Label id="fnum" width="60" color="#000000" height="12" />
</s:VGroup>
</s:Group>
</mx:VBox>

You can see that I used a folder.png picture from the lib folder of the project. Here it is:


Full Main.mxml code:

<?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"
width="300" height="460"
showStatusBar="false" title="KirSizer">

<fx:Declarations>
<mx:ArrayCollection id="measures">
<fx:String>%</fx:String>
<fx:String>px</fx:String>
</mx:ArrayCollection>
<mx:ArrayCollection id="actions">
<fx:String>Fixed width, fixed height</fx:String>
<fx:String>Fixed width, proportional height</fx:String>
<fx:String>Proportional width, fixed height</fx:String>
<fx:String>Proportional sizes to fit specified sizes</fx:String>
</mx:ArrayCollection>
<mx:ArrayCollection id="formats">
<fx:String>Same format as initial file</fx:String>
<fx:String>Convert all to JPG</fx:String>
<fx:String>Convert all to PNG</fx:String>
</mx:ArrayCollection>
<mx:Fade id="fadeIn" alphaFrom="0" alphaTo="1" duration="300"/>
<mx:Fade id="fadeOut" alphaFrom="1" alphaTo="0" duration="300"/>
</fx:Declarations>

<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";

#contentStack{
backgroundColor: #313131;
}

s|Label{
color: #fcfcfc;
}

s|Button{
chromeColor: #636363;
}

mx|ComboBox{
chromeColor: #636363;
color: #fcfcfc;
contentBackgroundColor: #000000;
rollOverColor: #aaaaaa;
selectionColor: #ffffff;
}
</fx:Style>

<fx:Script>
<![CDATA[
import flash.events.Event;
import flash.events.FileListEvent;
import flash.filesystem.File;
import flash.net.FileFilter;
import mx.collections.ArrayCollection;
import mx.effects.easing.Linear;
import mx.controls.Alert;

[Bindable]
private var selectedFiles:ArrayCollection = new ArrayCollection([]);

private function actionChange():void{
switch (actionCombo.selectedIndex) {
case 0: case 3:
newWidth.enabled = true;
widthMeasure.enabled = true;
newHeight.enabled = true;
heightMeasure.enabled = true;
break;
case 1:
newWidth.enabled = true;
widthMeasure.enabled = true;
newHeight.enabled = false;
heightMeasure.enabled = false;
break;
case 2:
newWidth.enabled = false;
widthMeasure.enabled = false;
newHeight.enabled = true;
heightMeasure.enabled = true;
break;
}
}

private function addFiles():void {
var file:File = new File();
file.browseForOpenMultiple("Select JPG or PNG files", [new FileFilter("Pictures", "*.jpg;*.jpeg;*.png")]);
file.addEventListener(FileListEvent.SELECT_MULTIPLE, filesSelected);
}

private function filesSelected(evt:FileListEvent):void {
for (var i:int = 0; i < evt.files.length; i++) {
var alreadySelected:Boolean = false;
for (var u:int = 0; u < selectedFiles.length; u++) {
if (selectedFiles[u].type == 0 && selectedFiles[u].path == evt.files[i].nativePath) {
alreadySelected = true;
}
}
if (!alreadySelected) selectedFiles.addItem({type:0, path:evt.files[i].nativePath});
}
updateTotalFiles();
}

private function addFolder():void {
var file:File = new File();
file.browseForDirectory("Select a directory");
file.addEventListener(Event.SELECT, folderSelected);
}

private function folderSelected(evt:Event):void {
doFolder(evt.currentTarget as File);
}

private function doFolder(file:File):void {
var picturesInFolder:int = 0;
var childFiles:Array = file.getDirectoryListing();
for (var i:int = 0; i < childFiles.length; i++) {
if (childFiles[i].extension == "png" || childFiles[i].extension == "jpg" || childFiles[i].extension == "jpeg") {
picturesInFolder++;
}
if (childFiles[i].isDirectory) {
doFolder(childFiles[i]);
}
}
if (picturesInFolder > 0) {
var alreadySelected:Boolean = false;
for (var a:int = 0; a < selectedFiles.length; a++) {
if (selectedFiles[a].type == 1 && selectedFiles[a].path == file.nativePath) {
alreadySelected = true;
}
}
if (!alreadySelected) selectedFiles.addItem( { type:1, path:file.nativePath, name:file.name, num:picturesInFolder } );
updateTotalFiles();
}
}

private function updateTotalFiles():void {
var totalFiles:int = 0;
for (var i:int = 0; i < selectedFiles.length; i++) {
if (selectedFiles[i].type==1) {
totalFiles += selectedFiles[i].num;
}else {
totalFiles++;
}
}
labelSelected.text = totalFiles + " files selected";
}
]]>
</fx:Script>

<mx:ViewStack id="contentStack" width="100%" height="100%">
<s:NavigatorContent width="100%" height="100%" hideEffect="fadeOut" showEffect="fadeIn">
<s:VGroup width="100%" height="100%" paddingLeft="10" paddingTop="10" paddingRight="10" paddingBottom="10">
<s:Label id="labelSelected">0 files selected</s:Label>
<mx:TileList id="tileList" width="282" height="100%" dataProvider="{selectedFiles}" itemRenderer="TileRenderer" columnWidth="60" rowHeight="60" columnCount="4" />
<s:Button label="Add folder" width="100%" click="addFolder();" />
<s:Button label="Add files" width="100%" click="addFiles();" />
<s:Button label="Continue" width="100%" click="contentStack.selectedIndex = 1;" />
</s:VGroup>
</s:NavigatorContent>
<s:NavigatorContent width="100%" height="100%" hideEffect="fadeOut" showEffect="fadeIn">
<s:VGroup width="100%" height="100%" paddingLeft="10" paddingTop="10" paddingRight="10" paddingBottom="10">
<s:Button label="Return to file selection" width="100%" click="contentStack.selectedIndex = 0;" />

<s:Label>Resize options:</s:Label>

<mx:ComboBox width="100%" id="actionCombo" height="22" dataProvider="{actions}" selectedIndex="0" editable="false" change="actionChange();"
openEasingFunction="Linear.easeOut" closeEasingFunction="Linear.easeIn" openDuration="300" closeDuration="300"/>
<s:HGroup verticalAlign="middle">
<s:Label width="50">Width:</s:Label>
<s:NumericStepper id="newWidth" height="22" width="150" minimum="1" value="100" maximum="{(widthMeasure.selectedIndex==0)?(100):(4000)}" />
<mx:ComboBox id="widthMeasure" height="22" width="50" dataProvider="{measures}" selectedIndex="0" editable="false"
openEasingFunction="Linear.easeOut" closeEasingFunction="Linear.easeIn" openDuration="300" closeDuration="300"/>
</s:HGroup>

<s:HGroup verticalAlign="middle">
<s:Label width="50">Height:</s:Label>
<s:NumericStepper id="newHeight" height="22" width="150" minimum="1" value="100" maximum="{(heightMeasure.selectedIndex==0)?(100):(4000)}"/>
<mx:ComboBox id="heightMeasure" height="22" width="50" dataProvider="{measures}" selectedIndex="0" editable="false"
openEasingFunction="Linear.easeOut" closeEasingFunction="Linear.easeIn" openDuration="300" closeDuration="300"/>
</s:HGroup>

<s:Label/>

<s:Label>Output file names:</s:Label>
<s:HGroup verticalAlign="middle">
<s:TextInput width="240" text="%initialName%" />
<s:Button width="35" label="?"/>
</s:HGroup>

<s:Label/>

<s:Label>Output destination:</s:Label>
<s:HGroup verticalAlign="middle">
<s:RadioButton id="oldDestination" label="Same directory" groupName="destinationGroup" selected="true" />
<s:RadioButton id="newDestination" label="Specified directory" groupName="destinationGroup" />
</s:HGroup>
<s:HGroup verticalAlign="middle" width="100%">
<s:TextInput width="100%" enabled="{newDestination.selected}" text="Select destination..." editable="false" />
<s:Button width="80" label="Browse" enabled="{newDestination.selected}"/>
</s:HGroup>

<s:Label/>

<s:Label>Output format:</s:Label>
<mx:ComboBox width="100%" height="22" id="formatCombo" dataProvider="{formats}" selectedIndex="0" editable="false"
openEasingFunction="Linear.easeOut" closeEasingFunction="Linear.easeIn" openDuration="300" closeDuration="300"/>

<s:Label/>

<s:Label>Output JPG quality:</s:Label>
<s:HSlider width="100%" minimum="1" maximum="100" value="100" />

<s:Label/>

<s:Button label="Resize" width="100%" />
</s:VGroup>
</s:NavigatorContent>
</mx:ViewStack>
</s:WindowedApplication>

Thanks for reading!
Read more »

SlideShare now let you import Google docs

Online PowerPoint and document sharing website SlideShare today released a new feature of importing your Google presentations and documents into SlideShare account. You just need to click on the “Import from Google Docs” link on the upload page, enter your Google username and password, select the file and click “Import to SlideShare”. See more details at SlideShare blog.

Reblog this post [with Zemanta]
Read more »

How to Create Wi Fi Hotspot for All Windows in Urdu


How to Create Wi-Fi Hotspot for All Windows in Urdu


وائی فائی کی حامل کئی ڈیوائسس آج کل ہر گھر میں دستیاب ہیں مثلاً لیپ ٹاپ، ٹیبلٹ کمپیوٹرز اور موبائل فونز وغیرہ۔ خاص طور پر موبائل فونز پر وائی فائی کی دستیابی نے اس ٹیکنالوجی کی پہچان عام کردی ہے۔ اس کے ساتھ ایک انٹرنیٹ کنکشن کو اپنی مختلف ڈیوائسس پر شیئر کرنا بھی ہماری ضرورت بن چکا ہے۔ ظاہر ہے اب ہم ہر ڈیوائس کے لئے الگ سے انٹرنیٹ نہیں خرید سکتے۔ عام طورپر اس کام کیلئے ہارڈو یئر رائوٹر کی ضرورت پیش ہوتی ہے۔ جس کی قیمت ایک ہزار سے دس ہزار روپے تک ہوسکتی ہے۔ لیکن اس مضمون میں ہم آپ کو بتائیں گے کہ آپ ایک عام کمپیوٹر جس میں وائی فائی کی سہولت موجود ہو، کوبغیر کسی ہارڈ ویئر کے وائی فائی راؤٹر میں بدل سکتے ہیں۔
’’کنیکٹی فائی‘‘ سافٹ ویئر کی مدد سے آپ باآسانی اپنے کمپیوٹر پر چلنے والے انٹرنیٹ کو وائی فائی کی حامل ڈیوائسس یا کمپیوٹرز سے شیئر کر سکتے ہیں۔ یعنی ایک انٹرنیٹ کنکشن گھر یا دفتر میں موجود تمام ایسی ڈیوائسس بشمول موبائل فونز کے ساتھ شیئر کیا جاسکتا ہے جن میں وائی فائی کی سہولت موجود ہو.

"اس سافٹ ویئر کے چند بنیادی فیچرز"

 ♥ کنیکٹی کا بنیادی مقصد کمپیوٹر کو وائی فائی ہاٹ اسپاٹ میں تبدیل کر کے اس پر چلنے والے انٹرنیٹ کو دوسری وائی فائی ڈیوائسس کیلئے دستیاب کردینا ہے۔


    ♥ اگر انٹرنیٹ پہلے ہی کسی دوسرے وائی فائی نیٹ ورک سے چل رہا ہو تو اسے بھی شیئر کیا جاسکتا ہے۔


      ♥ کنیکٹی فائی ہاٹ اسپاٹ سے جڑی تمام ڈیوائسز یا کمپیوٹرز کی فہرست دیکھی جاسکتی ہے۔


        ♥ ہاٹ اسپاٹ پر پاس ورڈ لگا کر اس کے استعمال پر پابندی لگائی جاسکتی ہے۔


          ♥ نیٹ ورک پر موجود ڈیوائسز یا کمپیوٹرز پر مختلف پابندیاں عائد کرنے کی سہولت بھی اس میں موجود ہے جیسا کہ آپکسی جڑی ہوئی ڈیوائس کا انٹرنیٹ بند کرسکتے ہیں یا پھر اس کا ایل اے این ایکسس بند کرسکتے ہیں۔


            ♥ کنیکٹی فائی کے ذریعے بنائے گئے نیٹ ورک کو بالکل عام ایل اے این کی طرح استعمال کیا جا سکتا ہے۔اس سافٹ ویئر سے نیٹ ورک بنا کر آپ اسے بالکل عام نیٹ ورک کی طرح استعمال کر سکتے ہیں اور اس کے لئے آپ کو کسی ہارڈ ویئر رائوٹر کی بھی ضرورت نہیں۔مثال کے طور پر اس کی مدد سے آپ ایک کمپیوٹر سے فائل دوسرے کمپیوٹر پر بذریعہ وائی فائی نیٹ ورک منتقل کرسکتے ہیں یا اس کمپیوٹر کا ریموٹ ڈیسک ٹاپ سیشن لے سکتے ہیں۔’’کنیکٹی فائی‘‘ استعمال میں بے حد آسان سافٹ ویئر ہے۔ اس کا فری ورژن دس کنکشنز کی گنجائش کا حامل ہے یعنی ایک وقت میں دس مختلف کمپیوٹرز، موبائل فونز یا ٹیبلٹس وغیرہ ہاٹ اسپاٹ سے جڑ سکتے ہیں۔ اگر آپ اسے بڑے نیٹ ورک پر استعمال کرنا چاہیں تو پھر آپ کو اس سافٹ ویئر کو خریدنا پڑے گا۔ اس لئے مفت ورژن آپ کیلئے کافی ہے۔اس سافٹ ویئر کے استعمال کی صرف دو شرائط ہیں۔پہلی شرط یہ ہے کہ جس کمپیوٹر کو ہاٹ اسپاٹ بنانا ہے، اس پر بھی وائی فائی کی سہولت موجود ہے۔ عموماً ڈیسک ٹاپ کمپیوٹرز میں وائی فائی نیٹ ورک ڈیوائس موجود نہیں ہوتی۔ اس کے لئے آپ وائرلیس لین کارڈ با آسانی مارکیٹ سے خرید سکتے ہیں جس کی قیمت کوالٹی کے مطابق پانچ سو سے ایک ہزار روپے ہوسکتی ہے۔ لیپ ٹاپس میں عموماًوائرلیس لین موجود ہوتا ہے.



              "یو ایس بی وائرلیس لین" 


              دوسری شرط یہ ہے کہ اسے صرف ونڈوز 7یا ونڈوز 8 پر ہی انسٹال اور استعمال کیا جاسکتا ہے۔ دراصل یہ سافٹ ویئر ونڈوز 7 اور ونڈوز 8 میں موجود ’’ورچوئل رائوٹر‘‘ بنانے کی سہولت کا استعمال کرتا ہے جو کہ ونڈوز کے پرانے ورژن میں ممکن نہیں۔ اس لئے ضروری ہے کہ جس کمپیوٹر کو ہاٹ اسپاٹ بنانا ہو، اس پر کم از کم ونڈوز 7انسٹال ہو۔ تاہم اس ہاٹ اسپاٹ سے جڑنے والی ڈیوائسس کے لئے ایسی کوئی شرط نہیں۔ ان پر کوئی بھی آپریٹنگ سسٹم ہو،کنیکٹی فائی کو اس سے غرض نہیں۔کنیکٹی فائی کی مدد سے کیبل انٹرنیٹ، ڈی ایس ایل، تھری جی یا فور جی موڈیم بلکہ وائی فائی کے ذریعے چلتے انٹرنیٹ کو بھی شیئر کیا جا سکتا ہے۔کنیکٹی اس کی انسٹالیشن اور کنفیگریشن بھی بے حد سادہ اور آسان ہے۔ کنیکٹی فائی کی ویب سائٹ سے آپ اس کا تازہ ورژن ڈاؤن لوڈ کر سکتے ہیں.

              DOWNLOAD

              ڈاؤن لوڈنگ مکمل ہونے کے بعد اسے انسٹال کر لیں۔ پہلی دفعہ چلانے پر آپ کواپنے نئے نیٹ ورک کا نام منتخب کرنا ہو گا۔ اس کے بعد پاس ورڈ بھی دینا ہوگا تاکہ آپ کی اجازت کے بغیر کوئی آپ کا نیٹ ورک استعمال نہ کر سکے۔ورنہ وہ مشہور لطیفہ تو آپ نے سن ہی رکھا ہوگا کہ دنیا کا سب سے بہترین انٹرنیٹ پڑوسیوں کا ہوتا ہے۔اس سافٹ ویئر کو مفت استعمال کرتے ہوئے ضروری ہے کہ نیٹ ورک کا نام “Connectify” سے شروع ہو۔ مثلاً Connectify-com وغیرہ۔ اگر آپ اس کا پروفیشنل ورژن استعمال کریں تو اپنی مرضی کا نام منتخب کیا جا سکتا ہے۔

              اس کے علاوہ یہاں اپنا انٹرنیٹ کنکشن منتخب کریں جسے آپ شیئر کرنا چاہتے ہیں اور اپنے سسٹم میں موجود وائی فائی کو منتخب کرنے کے بعد ہاٹ اسپاٹ کو اسٹارٹ کر دیں۔لیجیے آپ کا کمپیوٹر یا لیپ ٹاپ اب ایک ’’ہاٹ اسپاٹ‘‘ بن چکا ہے۔ کسی دوسرے لیپ ٹاپ یا موبائل کے وائر لیس کنکشنز میں اگر آپ تلاش کریں گے تو آپ کا یہ ہاٹ اسپاٹ بھی وہاں ظاہر ہو رہا ہو گا۔ اپنے منتخب کردہ پاس ورڈ سے اسے جوڑنے کے بعد آپ دیکھیں گے کہ اُس ڈیوائس پر انٹرنیٹ چلنا شروع ہو چکا ہے۔جس پی سی پر کنیکٹی فائی انسٹال ہے اس میں آپ یہ بھی دیکھ سکتے ہیں کہ اس وقت کون کون سے پی سی نیٹ ورک پر موجود ہیں۔ اس کے علاوہ یہاں آپ مختلف ایکشن بھی دیکھ سکتے مثلاً اگر آپ کسی پی سی کا آئی پی جاننا چاہتے ہیں یا کسی کو انٹرنیٹ نہیں دینا چاہتے تو یہ بھی ممکن ہے۔



              "ونڈوز ایکس پی پر انٹرنیٹ شیئرنگ"

              فرض کریں کہ آپ کے پاس انٹرنیٹ صرف ونڈوز ایکس پی پر چل رہا ہے لیکن آپ اسے شیئر کرنا چاہتے ہیں۔ اس کا ایک آسان طریقہ یہ ہے کہ آپ ونڈوز ایکس پی پر سی سی پراکسی نامی سافٹ ویئر انسٹال کرلیں۔ اس سافٹ ویئر کو درج ذیل لنک سے ڈائون لوڈ کیا جاسکتا ہے.

              DOWNLOAD


              یہ سافٹ ویئر آپ کے کمپیوٹر کو ایک انٹرنیٹ پراکسی میں بدل دیتا ہے۔ یعنی اب نیٹ ورک پر موجود دیگر کمپیوٹر یا دیگر وائی فائی ڈیوائسس اس پراکسی کو استعمال کرتے ہوئے انٹرنیٹ استعمال کرسکتے ہیں۔ وائی فائی نیٹ ورک بنانے کے لئے آپ کسی بھی ونڈوز 7 والے کمپیوٹر پر کنکٹی فائی انسٹال کرکے سب ڈیوائسس بشمول ونڈوز ایکس پی والا کمپیوٹر، کنکٹ کردیں۔ اب ونڈوز 7 بطور ہاٹ اسپاٹ کام کرے گی لیکن انٹرنیٹ ونڈوز ایکس پی پر موجود سی سی پراکسی کے ذریعے چل رہا ہوگا۔ یاد رہے کہ آپ کو ہر کمپیوٹر اور ڈیوائس کے برائوزر میں پراکسی بھی ڈالنی ہوگی۔


              اس کے علاوہ ونڈوز ایکس پی پر ہاٹ اسپاٹ بنانے کے لیے یہاں سے مفت پروگرام بھی ڈاؤن لوڈ کیا جا سکتا ہے۔وائی فائی ہاٹ اسپاٹ بنائیے
              Read more »

              Learn Complete Ms Excel 2007 Video Course in Urdu an Hindi


              Learn Complete Ms Excel 2007 Video Course in Urdu an Hindi

              Microsoft Excel

              Excel is the spreadsheet program created by Microsoft.  Although you can use any spreadsheet program for analyzing data, the instructions given here are specific for Excel and you must use Excel for the three Excel quizzes. NOTE: Microsoft also makes a less powerful spreadsheet program as part of Microsoft Works or some similar title.  Some of the features that we will use in these exercises are not found in MS Works, so you will not be able to complete all the exercises using MS Works.

              Excel is, in its most basic form, a very fancy calculator.  The information given in this quick tutorial is meant to give a working knowledge of how to use Excel.  There are usually several different ways to perform the same function in Excel, this tutorial will usually just give one way.  If you need more information on how to use Excel, there are many web sites dedicated to using Excel, a simple google search will find many of them.  In addition, accessing the HELP menu from within the program can also be useful!

              In this Tutorial you learn the basic tools of Excel in Urdu and Hindi. The most used options of all menus in Excel 2007/2010 in Urdu and Hindi. and after having learnt tools, you will learn the formulas from basic to Advance level in Urdu. Having learnt Formula, you will learn making different sheets in Ms Excel 2007/2010 in Urdu and Hindi. I have made 7 data sheets including Mark Sheet, Salary Sheet, Profit & Loss Sheet, Invoice Sheet and others. 



              Microsoft Excel Tutorial 2007/2010 (98 Videos)







              Microsoft Excel Tabs (19 Videos)









              Microsoft Excel Formulas (20 Videos)





               Note: All videos are hosted on YouTube.com, so if you are in Pakistan then first open YouTube and then watch these videos 
              Read more »

              Friday, January 30, 2015

              Yuandao N101 II RK3066 Dual core tablet Firmware

              Yuandao N101 II RK3066 Dual core tablet Firmware

              tabletrom.blogspot.com
              Logo is property of  Respective Owners. 
              Rockchip Based CPU 

              Wiki

              Read article about Rockchip CPU on Wikipedia 


              Knowledge base :

              What board ID , Tablet CPU Chip ,Firmware Number does my Tablet have ? 
              Frequently Asked Question about Android Tablets 

              When I need to Restore or Reset  my Android Tablet Pc?


              1. Forgotten Pattern Lock . 
              2.Too many pattern attempts / Reset user lock.
              3.  Tablets PC stuck on Gmail account.
              4. Android Tablets PC stuck on Android logo.
              5. Tablet Android  hang on start up / Multiple errors generating by OS. 
              6. Android Market  having problems or generating errors. 
              7.Upgrading to new Android OS.
              Instructions: 

              you can use this Android Tablet firmware,  Stock ROM to restore your Android China tablets to generic firmwares or upgrades . Make sure to charge battery . Power failure during flashing may result dead or broken tablets.
              .
              Note : Flashing generic tablet firmware should be last option.

              Flashing Tutorials :


              Read Before : Flashing Tutorial for Rockchip 
              Download Flashing Instructions : PDF


              Drivers for Rockchip:



              Download Drivers for Rockchip tablets

              Flashing Tools:



              Download: RKbatch Tool

              Recommended  Tools:

              you can also use:Android Tools for Rockchip Tablets

              Downloads: 

              DOWNLOAD OFFICIAL FIRMWARE
              Read more »

              O 8 52 stock rom to unbrick your phone

              Hey ho!,Im done uploading the stock rom for O+ 8.52... I have also uploaded a video on how to flash your O+ 8.52. After flashing your phone, make sure to hard reset your phone.







              Firmware Here -->O+ 8.52
              VCOM Driver -->VCOM Manual
              Alternative Driver --> AutoInstaller
              SPFlashTool --> SPFlashTool
              SPFlashTool --> LatestVersion 

              "Extract the files to your desired folder" See picture below"
              "If you encounter error in flashtool, use different version of it."

              Installing Driver

              First try the Alternative Driver, which is the AutoInstaller. Just open the install.bat then it will automatically install the driver. Then proceed to flashing. If it did not work then proceed with VCOM driver that you had downloaded. Then install it manually follow the guide below.

              Video Reference using Driver Auto Installer (watch in HD)


              When installing it manually your phone must be turned off, then connect it to your computer/laptop while pressing VOLUME UP or VOLUME DOWN. This will detect and look for the driver.

               1. This is the first time that you will connect your phone and it will search for the correct driver.

              2. Check include this location ... ... and click on browse. Look for USB VCOM Driver and Click on 2K_XP_COM folder if you are using Windows XP or Win7 for Windows 7 and then press OK when you are done picking the right folder for the driver.


              3. If the driver is successfully installed MediaTek DA USB VCOM will appear in the New Hardware Wizard.

              Video Installing VCOM Driver (please watch in HD)







              Video Flashing your phone (please watch in HD)


              Your phone must be turned  off when Flashing


              Flashing
              1. Launch FlashTool
              2. Click on Scatter-Loading, and load your scatter file. (see example below with loaded file in Flash Tool



               Video Reference Using FlashTool version 5.xxx (watch in HD)

              3. After you load the file, press F9 or Press Download to Flash your Phone.
              4. If Download is not possible, you can press Firmware Upgrade.
              5. After you press Download or Firmware Upgrade re-insert your battery and connect your Phone to the PC. Press Volume Down or Volume Up while connecting to PC.


              "Hard reset your phone after flashing"

              I hope this tutorial help you. Please drop a comment if something is not clear to you.
              Read more »

              Android beginner tutorial Part 1 Introduction

              This is the introduction part of the Android development tutorial series.

              So far Ive written only Actionscript 3 tutorials for this blog. I believe it is time to move on to another technology, which Ive chosen to be Android. The language used here isnt AS3, its Java - a language Im sure youve heard of. The syntax is similar to Actionscript, but some things are different. The Android SDK itself is pretty complex too. It is not going to be easy to learn Android development, but, in my opinion, its definitely worth it.

              Since this used to be an AS3 blog, I am going to assume that my readers are people with some knowledge of AS3 and are beginners to Android SDK like me. The official Android website offers a series of tutorial to get developers started, however it is aimed at Java programmers.

              For the first few tutorials, I am going to basically show you how to do the same thing they show at their official website, but explaining every detail that would be unclear to people with no previous experience with Java, for example, Ill explain the differencies in syntax between AS3 and Java as we write code.

              I will try to explain everything the way that a person with some previous AS3 experience would understand. This means when we encounter unusual and new techniques or syntax features, Ill compare them with AS3, make analogies and give examples of how the same functionality could be achieved with AS3. I believe this will be a good learning experience for both you, my readers, and myself too.

              All the tools used in Android development are free. It is also very good if you have an android device you can debug the applications on. The Eclipse IDE, which we will be using, together with Android SDK provide virtual device emulators too, which will show us how the application looks on a phone or a tablet by emulating the device. This will especially be useful when we want to see how our application looks on devices with different screen sizes.

              First thing we need to do is head to the android developer website and download the Android SDK together with Eclipse IDE. Click here to do that now.

              Download the bundle, unpack the ZIP file somewhere (the IDE has no installer, just a standalone exe), and run the eclipse.exe located in eclipse folder. Theres the IDE with all the Android SDK tools already built-in!

              Well start writing our first Hello World application in the next tutorial.

              Thanks for reading!
              Read more »

              Thursday, January 29, 2015

              Creating a Flex AIR text editor Part 16

              In this tutorial we will add a right click context menu specially for the tabbar, with options like Close tab and Close other tabs.

              First of all, we will need to create the context menu with all its items. We do this by declaring variables in the init() function. We need to create 2 ContextMenuItem objects, "Close tab" and "Close other tabs", as well as add event listeners for both of them and set tabContextClose and tabContextCloseOther functions as handlers.

              After that we create a new ContextMenu object and set its items property to an array consisting of these two context menu items. We hide the default menu items using the hideBuiltInItem() method, then we apply this object to the contextMenu property of our tabBar. Finally, we add a right click listener for the tabBar itself (Ill explain later what for) and add a handler function called tabRightClick.

              // Context menu declaration for the tabbar control
              var cm_close:ContextMenuItem = new ContextMenuItem("Close tab");
              cm_close.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, tabContextClose);
              var cm_closeother:ContextMenuItem = new ContextMenuItem("Close other tabs");
              cm_closeother.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, tabContextCloseOther);

              var cm:ContextMenu = new ContextMenu();
              cm.items = [cm_close, cm_closeother];
              cm.hideBuiltInItems();
              tabBar.contextMenu = cm;
              tabBar.addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, tabRightClick);

              We need to listen to the right click event, because this way we can find out the index of the tab that we are going to perform the action on. We can calcluate the index knowing the width of each tab, number of tabs and the position of the mouse on the tabbar control. We can then story this index in a variable called rightclickTabIndex. Lets declare it first:

              private var rightclickTabIndex:int = 0;

              Now the tabRightClick function:

              private function tabRightClick(evt:MouseEvent):void {
              var tabWidth:Number = tabBar.width / tabData.length;
              var rcIndex:int = Math.floor(tabBar.mouseX / tabWidth);
              rightclickTabIndex = rcIndex;
              }

              The tabContextClose function just closes the tab using the closeTab function:

              private function tabContextClose(evt:ContextMenuEvent):void{
              closeTab(rightclickTabIndex);
              }

              In the tabContextCloseOther function, we loop through the tabs, deleting all except the one that was right clicked on:

              private function tabContextCloseOther(evt:ContextMenuEvent):void {
              var len:int = tabData.length;
              for (var i:int = 0; i < len; i++) {
              if (i != rightclickTabIndex) {
              closeTab(i);
              }
              }
              }

              Heres the full code:

              <?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"
              xmlns:custom="*"
              creationComplete="init();" title="Kirpad" showStatusBar="{pref_status}">

              <s:menu>
              <mx:FlexNativeMenu dataProvider="{windowMenu}" showRoot="false" labelField="@label" keyEquivalentField="@key" itemClick="menuSelect(event);" />
              </s:menu>

              <fx:Script>
              <![CDATA[
              import flash.events.KeyboardEvent;
              import flash.events.Event;
              import flash.events.MouseEvent;
              import flash.events.NativeWindowBoundsEvent;
              import flash.net.SharedObject;
              import mx.collections.ArrayCollection;
              import mx.controls.Alert;
              import mx.events.FlexNativeMenuEvent;
              import flashx.textLayout.elements.TextFlow;
              import flashx.textLayout.elements.Configuration;
              import flash.system.System;
              import flash.desktop.Clipboard;
              import flash.desktop.ClipboardFormats;
              import flash.ui.Mouse;
              import mx.events.CloseEvent;
              import flash.ui.ContextMenu;
              import flash.ui.ContextMenuItem;
              import flash.events.ContextMenuEvent;
              import mx.events.ResizeEvent;

              private var preferences:SharedObject = SharedObject.getLocal("kirpadPreferences");
              [Bindable]
              private var pref_wrap:Boolean = true;
              [Bindable]
              private var pref_status:Boolean = true;
              [Bindable]
              private var pref_toolbar:Boolean = true;
              [Bindable]
              public var pref_fontsettings:Object = new Object();

              private var initHeight:Number;
              private var heightFixed:Boolean = false;

              private var statusMessage:String;
              [Bindable]
              private var textHeight:Number;
              [Bindable]
              private var textY:Number;
              [Bindable]
              private var tabY:Number;

              private var previousIndex:int = 0;
              private var rightclickTabIndex:int = 0;

              public var fontWindow:FontWindow = new FontWindow();

              private function init():void {

              // Create a listener for every frame
              addEventListener(Event.ENTER_FRAME, everyFrame);

              // Set initHeight to the initial height value on start
              initHeight = height;

              // Set preferences if loaded for the first time
              if (preferences.data.firsttime == null) {
              preferences.data.firsttime = true;
              preferences.data.wrap = true;
              preferences.data.status = true;
              preferences.data.toolbar = true;
              preferences.data.fontsettings = {fontfamily:"Lucida Console", fontsize:14, fontstyle:"normal", fontweight:"normal", fontcolor:0x000000, bgcolor:0xffffff};
              preferences.flush();
              }

              // Set preferences loaded from local storage
              pref_wrap = preferences.data.wrap;
              pref_status = preferences.data.status;
              pref_toolbar = preferences.data.toolbar;
              pref_fontsettings = preferences.data.fontsettings;

              // Allow insertion of tabs
              var textFlow:TextFlow = textArea.textFlow;
              var config:Configuration = Configuration(textFlow.configuration);
              config.manageTabKey = true;

              // Set status message
              statusMessage = "[ " + new Date().toLocaleTimeString() + " ] Kirpad initialized";
              updateStatus();

              // Close all sub-windows if main window is closed
              addEventListener(Event.CLOSING, onClose);

              // Add listener for the event that is dispatched when new font settings are applied
              fontWindow.addEventListener(Event.CHANGE, fontChange);

              // Update real fonts with the data from the settings values
              updateFonts();

              // Create a listener for resizing
              addEventListener(NativeWindowBoundsEvent.RESIZE, onResize);

              // Context menu declaration for the tabbar control
              var cm_close:ContextMenuItem = new ContextMenuItem("Close tab");
              cm_close.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, tabContextClose);
              var cm_closeother:ContextMenuItem = new ContextMenuItem("Close other tabs");
              cm_closeother.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, tabContextCloseOther);

              var cm:ContextMenu = new ContextMenu();
              cm.items = [cm_close, cm_closeother];
              cm.hideBuiltInItems();
              tabBar.contextMenu = cm;
              tabBar.addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, tabRightClick);
              }

              private function menuSelect(evt:FlexNativeMenuEvent):void {
              (evt.item.@label == "New")?(doNew()):(void);
              (evt.item.@label == "Word wrap")?(pref_wrap = !pref_wrap):(void);
              (evt.item.@label == "Cut")?(doCut()):(void);
              (evt.item.@label == "Copy")?(doCopy()):(void);
              (evt.item.@label == "Paste")?(doPaste()):(void);
              (evt.item.@label == "Select all")?(doSelectall()):(void);
              (evt.item.@label == "Status bar")?(pref_status = !pref_status):(void);
              (evt.item.@label == "Tool bar")?(pref_toolbar = !pref_toolbar):(void);
              (evt.item.@label == "Font...")?(doFont()):(void);
              savePreferences();
              updateStatus();
              }

              private function savePreferences():void {
              preferences.data.wrap = pref_wrap;
              preferences.data.status = pref_status;
              preferences.data.toolbar = pref_toolbar;
              preferences.data.fontsettings = pref_fontsettings;
              preferences.flush();
              }

              private function doCut():void {
              var selectedText:String = textArea.text.substring(textArea.selectionActivePosition, textArea.selectionAnchorPosition);
              System.setClipboard(selectedText);
              insertText("");
              }

              private function doCopy():void {
              var selectedText:String = textArea.text.substring(textArea.selectionActivePosition, textArea.selectionAnchorPosition);
              System.setClipboard(selectedText);
              }

              private function doPaste():void{
              var myClip:Clipboard = Clipboard.generalClipboard;
              var pastedText:String = myClip.getData(ClipboardFormats.TEXT_FORMAT) as String;
              insertText(pastedText);
              }

              private function doSelectall():void {
              textArea.selectAll();
              }

              private function insertText(str:String):void {
              var substrPositions:int = textArea.selectionActivePosition - textArea.selectionAnchorPosition;
              var oldSel1:int = (substrPositions>0)?(textArea.selectionAnchorPosition):(textArea.selectionActivePosition);
              var oldSel2:int = (substrPositions<0)?(textArea.selectionAnchorPosition):(textArea.selectionActivePosition);
              var preText:String = textArea.text.substring(0, oldSel1);
              var postText:String = textArea.text.substring(oldSel2);
              var newSelectRange:int = preText.length + str.length;
              textArea.text = preText + str + postText;
              textArea.selectRange(newSelectRange, newSelectRange);
              }

              private function cursorFix():void{
              Mouse.cursor = "ibeam";
              }

              private function everyFrame(evt:Event):void {
              if (!heightFixed && height==initHeight) {
              height = initHeight - 20;
              if (height != initHeight) {
              heightFixed = true;
              updateTextSize();
              }
              }
              }

              private function onResize(evt:ResizeEvent):void {
              updateTextSize();
              }

              private function updateTextSize():void {
              tabY = (toolBar.visible)?(toolBar.height):(0);
              textY = tabBar.height + tabY;
              var statusHeight:Number = (pref_status)?(statusBar.height):(0);
              textHeight = height - textY - statusHeight;
              focusManager.setFocus(textArea);
              }

              private function updateStatus():void {
              var str:String = new String();
              str = (pref_wrap)?("Word wrapping on"):(caretPosition());
              status = str + " " + statusMessage;
              }

              private function caretPosition():String {
              var pos:int = textArea.selectionActivePosition;
              var str:String = textArea.text.substring(0, pos);
              var lines:Array = str.split("
              ");
              var line:int = lines.length;
              var col:int = lines[lines.length - 1].length + 1;

              return "Ln " + line + ", Col " + col;
              }

              private function doFont():void{
              fontWindow.open();
              fontWindow.activate();
              fontWindow.visible = true;
              fontWindow.setValues(pref_fontsettings.fontsize, pref_fontsettings.fontfamily, pref_fontsettings.fontstyle, pref_fontsettings.fontweight, pref_fontsettings.fontcolor, pref_fontsettings.bgcolor);
              }

              private function onClose(evt:Event):void {
              var allWindows:Array = NativeApplication.nativeApplication.openedWindows;
              for (var i:int = 0; i < allWindows.length; i++)
              {
              allWindows[i].close();
              }
              }

              private function fontChange(evt:Event):void{
              pref_fontsettings.fontfamily = fontWindow.fontCombo.selectedItem.fontName;
              pref_fontsettings.fontsize = fontWindow.sizeStepper.value;

              if (fontWindow.styleCombo.selectedIndex == 0) {
              pref_fontsettings.fontstyle = "normal";
              pref_fontsettings.fontweight = "normal";
              }
              if (fontWindow.styleCombo.selectedIndex == 1) {
              pref_fontsettings.fontstyle = "italic";
              pref_fontsettings.fontweight = "normal";
              }
              if (fontWindow.styleCombo.selectedIndex == 2) {
              pref_fontsettings.fontstyle = "normal";
              pref_fontsettings.fontweight = "bold";
              }
              if (fontWindow.styleCombo.selectedIndex == 3) {
              pref_fontsettings.fontstyle = "italic";
              pref_fontsettings.fontweight = "bold";
              }

              pref_fontsettings.fontcolor = fontWindow.colorPicker.selectedColor;
              pref_fontsettings.bgcolor = fontWindow.bgColorPicker.selectedColor;

              savePreferences();
              updateFonts();
              }

              private function updateFonts():void{
              textArea.setStyle("fontFamily", pref_fontsettings.fontfamily);
              textArea.setStyle("fontSize", pref_fontsettings.fontsize);
              textArea.setStyle("fontStyle", pref_fontsettings.fontstyle);
              textArea.setStyle("fontWeight", pref_fontsettings.fontweight);
              textArea.setStyle("color", pref_fontsettings.fontcolor);
              textArea.setStyle("contentBackgroundColor", pref_fontsettings.bgcolor);
              }

              private function onTabClose(evt:Event):void {
              closeTab(tabBar.selectedIndex);
              }

              private function closeTab(index:int):void {
              if (tabData[index].saved) {
              removeTab(index);
              }
              if (!tabData[index].saved) {
              Alert.show("Save " + tabData[index].title + " before closing?", "Confirmation", Alert.YES | Alert.NO, null, confirmClose);
              }
              function confirmClose(evt:CloseEvent):void {
              if (evt.detail == Alert.YES) {
              Alert.show("Perform save function here and then delete");
              }else {
              removeTab(index);
              }
              }
              }

              private function removeTab(index:int):void {
              // if this is the last tab, create a new empty tab
              if (tabData.length == 1) {
              tabData.addItem( { title:"Untitled", textData:"", saved:false } );
              }
              tabData.removeItemAt(index);
              previousIndex = tabBar.selectedIndex;
              textArea.text = tabData[tabBar.selectedIndex].textData;
              textArea.selectRange(tabData[tabBar.selectedIndex].selectedAnchor, tabData[tabBar.selectedIndex].selectedActive);
              }

              private function doNew():void{
              tabData.addItem( { title:"Untitled", textData:"", saved:false } );
              tabBar.selectedIndex = tabData.length - 1;
              tabChange();
              }

              private function tabChange():void {
              tabData[previousIndex].textData = textArea.text;
              tabData[previousIndex].selectedActive = textArea.selectionActivePosition;
              tabData[previousIndex].selectedAnchor = textArea.selectionAnchorPosition;
              previousIndex = tabBar.selectedIndex;
              textArea.text = tabData[tabBar.selectedIndex].textData;
              textArea.selectRange(tabData[tabBar.selectedIndex].selectedAnchor, tabData[tabBar.selectedIndex].selectedActive);
              updateStatus();
              }

              private function tabContextClose(evt:ContextMenuEvent):void{
              closeTab(rightclickTabIndex);
              }

              private function tabContextCloseOther(evt:ContextMenuEvent):void {
              var len:int = tabData.length;
              for (var i:int = 0; i < len; i++) {
              if (i != rightclickTabIndex) {
              closeTab(i);
              }
              }
              }

              private function tabRightClick(evt:MouseEvent):void {
              var tabWidth:Number = tabBar.width / tabData.length;
              var rcIndex:int = Math.floor(tabBar.mouseX / tabWidth);
              rightclickTabIndex = rcIndex;
              }
              ]]>
              </fx:Script>

              <fx:Declarations>
              <fx:XML id="windowMenu">
              <root>
              <menuitem label="File">
              <menuitem label="New" key="n" controlKey="true" />
              <menuitem label="Open" key="o" controlKey="true" />
              </menuitem>
              <menuitem label="Edit">
              <menuitem label="Cut" key="x" controlKey="true" />
              <menuitem label="Copy" key="c" controlKey="true" />
              <menuitem label="Paste" key="v" controlKey="true" />
              <menuitem type="separator"/>
              <menuitem label="Select all" key="a" controlKey="true" />
              </menuitem>
              <menuitem label="Settings">
              <menuitem label="Word wrap" type="check" toggled="{pref_wrap}" />
              <menuitem label="Font..."/>
              </menuitem>
              <menuitem label="View">
              <menuitem label="Tool bar" type="check" toggled="{pref_toolbar}" />
              <menuitem label="Status bar" type="check" toggled="{pref_status}" />
              </menuitem>
              </root>
              </fx:XML>
              <mx:ArrayCollection id="tabData">
              <fx:Object title="Untitled" textData="" saved="false" seletedActive="0" selectedAnchor="0" />
              </mx:ArrayCollection>
              </fx:Declarations>

              <s:Group width="100%" height="100%">
              <s:TextArea id="textArea" width="100%" height="{textHeight}" y="{textY}" borderVisible="false" lineBreak="{(pref_wrap)?(toFit):(explicit)}" click="cursorFix(); updateStatus();" change="updateStatus();" keyDown="updateStatus();"/>
              <custom:CustomTabBar id="tabBar" dataProvider="{tabData}" width="100%" y="{tabY}" itemRenderer="CustomTab" height="22" tabClose="onTabClose(event);" change="tabChange();" />
              <mx:Box id="toolBar" width="100%" backgroundColor="#dddddd" height="24" visible="{pref_toolbar}">
              </mx:Box>
              </s:Group>

              </s:WindowedApplication>

              Thanks for reading!
              Read more »

              Flatland and my adventures in Stanfords libraries

              I almost forgot to post this tale, but I recently ran across the relevant photos on my phone and knew I had to write something.

              A few months ago, in preparation for a trip up to Sonoma, Molly and I were at the Stanford Library to pick out a few books. Susans house in Healdsburg is one of the few places I actually take the time to read, as opposed to listening to audiobooks; after a day of biking, wine tasting and swimming, there is nothing better than relaxing by the pool with a good story. Except the massages. But thats a different story.

              The pool
              I keep track of all the books I read - and all the books I want to read - on Visual Bookshelf, so I had my list ready when we got to the library. I found the nearest computer and began to search. First up was Richard Dawkins The Selfish Gene. They had a copy, but it seemed to be on hold. Next up: The Pragmatic Programmer. Somebody already had it out. I then tried Xenocide, the 3rd book in the Enders Game series. They had it! I wrote down the call number and headed down to the stacks with Molly.

              20 minutes later, we came back to the terminal empty handed. The book was nowhere to be found. I continued searching. The Island? Out. The Girl Who Kicked the Hornets Nest? Lost. I tried a few more and finally got a hit for One Hundred Years of Solitude in another library. We wandered over there and, sure enough, it was missing from the shelves. How could this be? A world class library and I cant find a single thing to read? Close to giving up, I decided to look up one final book: Flatland. It was available, but hidden away somewhere in the basement. Expecting more failure, we headed down.

              We found ourselves in a large room with a dark red carpet, low ceilings with exposed pipes jutting out and sliding stacks. We followed the call number to the proper shelf and, to our great astonishment, the book was there!


              Success! I was just about to head out when one of the pages caught my attention. I opened the book up to take a closer look and this is what I found:


              Scribbles. I flipped the page and found more scribbles. I flipped through the whole thing and it was nothing but jagged lines. Every. Single. Page. At this point, I was sure that I had lost my mind. Perchance to Dream anyone?

              Molly captured on camera the split second when I totally, utterly cracked.
              As it turns out, instead of the real Flatland by Edwin A. Abbott, I had stumbled across some modern art/poetry thing with the exact same title. The "author" explains on his webpage:
              For each page of Abbott’s novel I have traced, by hand, a representation of each letter’s occurrence across every page of text. The generated result is a series of superimposed seismographic images which reduce the text in question into a  two-dimensional schematic reminiscent of EKG results or stock reports.
              How the hell does this crap get published? Why did Stanford buy it? WHY?

              I left the library that day without a book and quite shaken by the experience. Fortunately, time heals all wounds. Time, and a nice bottle of wine.

              Read more »

              Crime Scene Investigation Android game for free

              CSI:Crime Scene Investigation

              Find hidden Objects and Crime.

              Download full game for free now on  Android

               Android full game free download


              CSI is very popular Android game. Investigate as agent. Find hidden object to solve the case mistery. Find proof against criminals. The game based on American Tv series. The most popular TV series in USA. The game status was paid but now its free to download. Download and enjoy the best hidden object game on your smartphones and tablets. 

              Android Game Features :


              • Investigate whole crime scene 
              • Find proofs and gather them. 
              • Get the Criminals. 
              • Internet required . 
              Status : Free 

              Download Paid Game for Free from PlayStore

              Read more »

              Wednesday, January 28, 2015

              Hard Reset your Alcatel One Touch Tab 7 HD and remove pattern lock password and gmail account

              An Alcatel Tablet came into my workplace. It is the Alcatel One Touch Tab 7 HD. A tutorial to hard reset your tablet is coming your way ;)





              Hard resetting / factory resetting your phone will solve the following issues:
              1. If you forgot your pattern lock
              2. If you forgot your gmail account
              3. If you forgot your password
              4. Apps that automatically force closing
              5. Stuck in Alcatel Logo (sometimes does not work if the firmware is totally damage)

              NOTE: Performing hard reset will erase your data.

              To hard reset:

              1. Turn off your tablet.
              2. Press and Hold VOLUME UP + VOLUME DOWN + Power button. Release the power Button only when the tablet power up. Just wait until the Android Robot appear.
              3. To activate Android System Recovery, press VOLUME UP and POWER button simultaneously. Keep pressing until the Android System Recovery appear.
              4. Select wipe / factory reset, press Volume rocker to navigate and press the Power Button to confirm your selection.
              4. Reboot your tablet.

              Note: If performing hard reset did not succeed, you need to wipe the cache first in the android system recovery before performing wipe / factory reset.

              I hope this tutorial helps you.. If you have any question just drop a comment.
              Read more »

              Remove password pattern lock gmail account in your Torque Droidz Avatar TV

              Alright another tutorial for  Torque, and this one is for Torque Droidz Avatar TV. This phone is like Galaxy S3.



              Hard resetting / factory resetting your phone will solve the following issues:
              1. If you forgot your pattern lock
              2. If you forgot your gmail account
              3. If you forgot your password
              4. Apps that automatically force closing
              5. Stuck in Torque Logo (sometimes does not work if the firmware is totally damage)

              NOTE: Performing hard reset will erase your data.

              To hard reset:

              1. Turn off your phone
              2. Press and Hold Volume UP +Power Button simultaneously
              3. An Android with exclamation mark will appear, Press Power Button to activate recovery mode
              4. Select wipe / factory reset, to navigate press the Volume DOWN, to select press VOLUME UP
              5. Reboot your phone.


              Note: If performing hard reset did not succeed, you need to wipe the cache first in the android system recovery before performing wipe / factory reset.

              I hope this tutorial helps you.
              Read more »

              So I got a new toy

              The Intro


              After much debate and soul searching over what monitor to get, a nice deal that suddenly popped up made my decision easy. Of course, this 150 page thread - full of raving reviews and mouth watering images - on HardForum helped too. On Wednesday night, I ordered a Westinghouse LCD TV from newegg. On Friday afternoon (newegg is amazing!), it arrived at my house and the fun began.

              The Specs


              • Model: Westinghouse LVM-37W3se monitor
              • Type: LCD
              • Size: 37"
              • Resolution: 1920*1080 (1080p)
              • Colors: 16.7 million
              • Contrast ratio: 1000:1
              • Response time: 8ms
              • Connectivity: tons of inputs, including HDMI, DVI, VGA, component and more

              The Experience


              So what is it like using a 37" TV as a computer monitor? I tried to take some pictures, but believe me, they hardly do it justice. You just have to see it in person to get a true feel for how huge this thing is and how incredible images, movies, games, etc look:

              Entering the room:


              At the desk:


              Desktop:


              Watching the 300 Trailer in HD:


              The Review


              I use my computer for a little bit of everything:

              • Browsing the web & email
              • Productivity apps (Word, Excel, etc)
              • 3D games (Call of Duty 4, Medieval II: Total War, Half Life 2, Hitman: Blood Money)
              • Movies (DivX, DVD, HD)
              • Photo editing
              • Programming

              In other words, I put this monitor through the gauntlet of tests and I have to admit, Im impressed.

              Pros/Cons

              (+) Huge. 37" is an awesome size for a monitor: its jaw-dropping big, but not so big you get a headache using it.
              (+) Amazingly crisp image. Everything on this 1080p screen is very detailed and sharp, including text, images, movies, etc.
              (+) Gaming and movies get a huge benefit from this big screen.
              (+) Surprisingly, even text benefits from the screen: the high resolution allows the text to be exceptionally crisp, and the large screen size allows it to be big, so you reduce eye strain.
              (+) Tons of inputs. The PC inputs - DVI and VGA - are especially nice as they let you use this screen as a computer monitor without any converters.
              (+) So far (knock on wood) this thing has been problem free: no dead pixels, no noticeable backlight bleeding, no ghosting.
              (+/-) Viewing angles are very solid. You can see a very slight change in brightness when you view it from a large angle, but youll only notice it if youre really paying attention.
              (+/-) Very bright backlight. Its too bright for monitor use, but it can easily be turned down to acceptable levels.
              (-) No tuners. This monitor is cheap because it has absolutely no tuners, so you cant connect it directly to your cable. Youll need some device (cable box, DVD player, computer) in between to decode the signal.
              (-) The black levels are only average. At this price range, they are more than acceptable, but more expensive screens are able to produce much richer darks.
              (-) The colors are only average. Again, at this price range, they are more than acceptable, but more expensive screens are able to produce colors that have more depth and pop.

              Summary

              As a computer monitor, the Westinghouse is an incredible value. For a great price, I got a massive screen that totally changes my movie watching and gaming experience. To my great surprise, all text related activities are improved as well: its remarkably nice to have large, crisp text in every application.

              Of course, not everything is perfect. Im upgrading to the Westinghouse from a Sony FW900, one of the best CRTs ever produced. As such, Im used to a screen that can produce perfect black levels and amazing colors. No, the LVM-37w3se cannot produce the kind of black levels and rich colors Im used to. And yes, there are more expensive LCDs out there that can do better. However, the differences are not that dramatic and have little impact in day-to-day usage.

              Overall, I think the sheer size of the Westinghouse as well as the crispness of the images & text make up for all of its shortcomings. You just cannot place enough value on the way such a big screen changes your computer experience.


              Read more »

              PowerPoint 2010 and 2013 Whats added and what got removed

              Microsoft has added some new features to PowerPoint 2013 and has discontinued some of the existing features or functionality.

              What new features, functionality has been added in PowerPoint 2013?

              Eye dropper: Eyedropper the color picker tool helps you copy the shape color and apply to any other shape.


              PowerPoint to MP4: PowerPoint 2013 allows you to convert PowerPoint presentations in MP4 video format.

              Search and insert images and videos from within PowerPoint: PowerPoint 2013 has inbuilt image and video search engine which lets you search images from Bing, Flickr and videos from Bing and YouTube.

              Theme family and variants: PowerPoint 2013 has more themes and flexibility to choose and edit variants.

              Presenter View: Changes to presenter view like automatic selection of monitor, jump to slides and zoom in.

              Share and publish online

              Head here for more details on these and other features added to PowerPoint 2013.

              What has been removed or changed in PowerPoint 2013 from earlier versions?

              PowerPoint viewer: PowerPoint viewer is a small free exe that lets you view presentations created in PowerPoint 97 and later versions without the need of licensed version of PowerPoint. This has been in use to view PowerPoint presentations on machines that doesnt have purchased versions of MS PowerPoint software.

              Now question arises how to view PowerPoint presentations created in 2013 without PowerPoint viewer if you dont have licensed copy of PowerPoint 2013? If you are not worried about animations and media, use Google docs or Slideshare, Scribd. If you are worried about animations and media too, try authorSTREAM or Microsoft web apps.

              Save PPT as HTML:  This feature existed so that people can save a PPT as HTML and use that HTML on web to show case the presentation. This feature became obsolete with online presentation sharing websites like Slideshare and authorSTREAM providing embeds that could play your presentations on blogs, website and even on Social media platforms like Facebook, Twitter, LinkedIn.

              Media formats: Video (WMV) and Audio (WMA) formats have been default video and audio formats for PowerPoint till 2010. Now default media formats are H.264 for video and AAC for audio.

              Equation Editor: Equation Editor the formula editor that that allows you to insert math and science equations in a slide is no longer available in 2013.

              Microsoft Clip Organizer:  The Clip Organizer feature has been replaced by the Insert Media dialog box.  Insert Media feature lets you search and insert content from the Office.com Clip Art collection and other online sources, such as Bing Image/Video search, Flickr, and your SkyDrive or Facebook page.



              Read more »