Saturday, January 31, 2015
How to Unhide Virus Infected Files
How to unhide files That’s been Hidden by a Virus in USB Flash Drives or hard disks
Instructions to unhide files Thats been Hidden by a Virus in USB Flash Drives or hard disks
These days, floppy drives are simply remainders of old machines. Lions share of machine clients today are utilizing USB Flash Disks as their essential stockpiling of their documents. Farewell to the 1.4mb diskettes. You dont need to purchase bunches of these diskettes just to store extensive documents any longer.
With USB Flash drives, everything you need is a machine that has USB port to module to which is accessible in every machine today. Not just they are helpful as a result of their little sizes, USB Flash drives can additionally store huge documents!
The issue with using these USB sticks, theyre effectively contaminated with infections. A few types of infection between USB drives are the accompanying: shrouds your files and folders, makes exe files extensions of your documents and even corrupt your documents. Whats more later on contaminating your PC.
In the event that you have a solid antivirus, you dont need to stress with these dangers that could taint your machine when a USB blaze drive has been attachment to the machine in light of the fact that they are effortlessly erased upon identification.
Presently, if your documents have been tainted even your antivirus is forward and theyve been concealed and no more unmistakable when you open your records, these are a few tips on the best way to unhide shrouded documents brought on by an infection.
1. At times this contamination could be unraveled by:
Going to Windows Explorer
Tools menu
Folder Option
View Tab
Pick "show Hidden Files and Folders".
Tools menu
Folder Option
View Tab
Pick "show Hidden Files and Folders".
If the files will show up, simply change the properties of the files/folders. Uncheck the “hidden” checkbox and the files will show again just like before.
2. If the above doesn’t work, and your files are still hidden, do this one that will surely work.
Go to the command prompt.
Go to the drive where your hidden files are located.
Type the following: attrib -s -h /s /d *.* (this will unhide all your files that have been hidden by the virus) i.e. I:> attrib -s -h /s /d *.*
There you go, a quick and easy way on how to unhide hidden files caused by a virus in your computer.
Android beginner tutorial Part 10 TextView introduction
Today well start learning about text widgets in Android.
A widget is any UI component in Android - a button, a text field, a slider, etc. You have a set of pre-built widgets to create your application with.
Today we will start learning about text widgets. There are two classes responsible for displaying text: TextView and EditText. The TextView class simply displays text on screen, without giving the user the ability to edit the text. If you want the text to be editable, use EditText.
Both of these classes inherit many properties and methods from the View class, and it should also be noted that EditText is a subclass of TextView.
In this tutorial well start learning about the first class I mentioned - TextView.
Its a simple but at the same time one of the most used widgets in Android applications. It is also used in other widgets for displaying text data, and quite a few widgets are actually extensions of this class. So, anything with text in it is related to TextView class one way or another.
You should keep that in mind, because TextView class has a few unique attributes and methods that are also available in any classes that extend TextView.
Properties for this class can be defined in XML layout file, or programmatically in a Java class.
For example, if you want to apply a text value to a TextView object, you can use that using the android:text XML attribute, or using the setText() method in Java. Usually the attribute and method names are similar (android:textColor and setTextColor();), but not always (android:textColorHighlight and setHighlightColor();).
Ive already wrote about ids in Android, they can be defined using the android:id attribute and generally look like this:
And to refer to this object later, the plus symbol is emitted:
The text values can be defined using an id, which refer to separate objects in res/values/strings.xml file.
For example, if you set the text value of a TextView like this:
It would refer to this part in the strings.xml file and use that value:
To set the value similarly in Java:
The Java syntax might look strange to you if youve never dealt with it before. Here is what the same code would look like in AS3 syntax (note: not working code):
The strings.xml should be used most of the time to declare text values, instead of hardcoding the values directly into the attribute. This is done mainly because of the ability to add new languages.
Thats all for today. Well continue next time.
Thanks for reading!
Read more »
A widget is any UI component in Android - a button, a text field, a slider, etc. You have a set of pre-built widgets to create your application with.
Today we will start learning about text widgets. There are two classes responsible for displaying text: TextView and EditText. The TextView class simply displays text on screen, without giving the user the ability to edit the text. If you want the text to be editable, use EditText.
Both of these classes inherit many properties and methods from the View class, and it should also be noted that EditText is a subclass of TextView.
In this tutorial well start learning about the first class I mentioned - TextView.
Its a simple but at the same time one of the most used widgets in Android applications. It is also used in other widgets for displaying text data, and quite a few widgets are actually extensions of this class. So, anything with text in it is related to TextView class one way or another.
You should keep that in mind, because TextView class has a few unique attributes and methods that are also available in any classes that extend TextView.
Properties for this class can be defined in XML layout file, or programmatically in a Java class.
For example, if you want to apply a text value to a TextView object, you can use that using the android:text XML attribute, or using the setText() method in Java. Usually the attribute and method names are similar (android:textColor and setTextColor();), but not always (android:textColorHighlight and setHighlightColor();).
Ive already wrote about ids in Android, they can be defined using the android:id attribute and generally look like this:
android:id = "@+id/myObject"
And to refer to this object later, the plus symbol is emitted:
"@id/myObject"
The text values can be defined using an id, which refer to separate objects in res/values/strings.xml file.
For example, if you set the text value of a TextView like this:
android:text = "@string/myText"
It would refer to this part in the strings.xml file and use that value:
<string name="myText">Hello world!</string>
To set the value similarly in Java:
TextView text = (TextView)findViewById(R.id.myObject);
text.setText(R.string.myText);
The Java syntax might look strange to you if youve never dealt with it before. Here is what the same code would look like in AS3 syntax (note: not working code):
var text:TextView = (myObject as TextView);
text.setText(myText);
The strings.xml should be used most of the time to declare text values, instead of hardcoding the values directly into the attribute. This is done mainly because of the ability to add new languages.
Thats all for today. Well continue next time.
Thanks for reading!
Your job posting sucks
Silicon valley is in a talent war. Tech companies are battling to hire the top prospects like never before, with Google alone planning to add more than 6,000 people in 2011. They are also dishing out money left and right to retain employees, with counter-offers ranging from $500k to $3.5 million, and even $100 million! And yet, despite the incredibly high priority of hiring, companies like Google still waste their time with job postings like this:
Looks like a normal job posting, right? Whats so bad about that, you ask? Everything. Just about the whole thing, start to finish, is a waste of time. And this post isnt to pick on Google: just about every company does it: Facebook, Twitter and my own company, LinkedIn, all use the same types of job postings. In this blog post, Im going to tell you why they are all wrong.
So many words. So little meaning.
Lets start with the obvious: most of the content in these job postings is absolutely meaningless. Here are some choice phrases pulled straight from the job postings mentioned above:
Clones
One of the difficulties in this talent war is distinguishing your company from the competition. In case you havent noticed, all job postings look alike. Even if you skip over the meaningless phrases mentioned above, every job posting is still just a blob of boring text that rattles off requirements. The job posting for a "Software Engineer" at one company is indistinguishable from another: "5+ years of experience, BS/MS/PhD in CS, excellent programming skills in Java..." Considering companies spend millions of dollars on branding, their job postings remain remarkably uniform.
The me monster
Finally, the biggest problem of all: most job postings are are totally, utterly selfish. They are the ultimate "me monster" at the party, totally focused on what the company wants, what the companys requirements are, we must have this, we need that, dont bother applying if you dont have those. The candidates needs and desires are almost totally forgotten. The vast majority of job postings describe the how and the who, but totally leave out why youd ever want to apply there in the first place.
If youre fighting tooth and nail to fill job openings, this is kind of a big deal. Your job posting might contain some info an active job candidate is looking for - and even that is questionable - but it is totally useless to passive candidates. And thats a problem, because the vast majority of people are passive candidates and, by definition, are not looking for a job, or for that matter, a job posting.
The ideal job posting
To figure out what the ideal job posting is, you have to ask one question: what is the candidate actually looking for? Of course, youve known the answer to this all along: everyone wants the opportunity to work on cool products, with smart people, and in a great culture. So the perfect job posting would do two things:
Some examples
Sadly, there are relatively few decent job postings on the web. Just about every company has been suckered into using this antiquated text-based method - a left over from newspapers and bulletin boards - and we have yet to move this part of the hiring process into the 21st century. Here are a few decent examples Ive been able to find that are at least intriguing and, even as a passive candidate, might have caught my interest (click for a larger image):
If you know of other job postings, let me know in the comments!
Read more »
Click for larger image |
Looks like a normal job posting, right? Whats so bad about that, you ask? Everything. Just about the whole thing, start to finish, is a waste of time. And this post isnt to pick on Google: just about every company does it: Facebook, Twitter and my own company, LinkedIn, all use the same types of job postings. In this blog post, Im going to tell you why they are all wrong.
So many words. So little meaning.
Lets start with the obvious: most of the content in these job postings is absolutely meaningless. Here are some choice phrases pulled straight from the job postings mentioned above:
Results-oriented.
Work well both as part of a group and independently.
Strong communication and documentation skills.
Detail oriented with excellent written and verbal communication skills.Now ask yourself a question: has anyone EVER looked at one of the phrases above and thought to themselves, "Communication skills? Nah, guess I cant apply." These are all vacuous phrases that your brain skips over as you read the job posting. They have no impact on the candidate one way or the other.
Clones
One of the difficulties in this talent war is distinguishing your company from the competition. In case you havent noticed, all job postings look alike. Even if you skip over the meaningless phrases mentioned above, every job posting is still just a blob of boring text that rattles off requirements. The job posting for a "Software Engineer" at one company is indistinguishable from another: "5+ years of experience, BS/MS/PhD in CS, excellent programming skills in Java..." Considering companies spend millions of dollars on branding, their job postings remain remarkably uniform.
The me monster
Finally, the biggest problem of all: most job postings are are totally, utterly selfish. They are the ultimate "me monster" at the party, totally focused on what the company wants, what the companys requirements are, we must have this, we need that, dont bother applying if you dont have those. The candidates needs and desires are almost totally forgotten. The vast majority of job postings describe the how and the who, but totally leave out why youd ever want to apply there in the first place.
If youre fighting tooth and nail to fill job openings, this is kind of a big deal. Your job posting might contain some info an active job candidate is looking for - and even that is questionable - but it is totally useless to passive candidates. And thats a problem, because the vast majority of people are passive candidates and, by definition, are not looking for a job, or for that matter, a job posting.
Who exactly are you targeting with your job posting? |
The ideal job posting
To figure out what the ideal job posting is, you have to ask one question: what is the candidate actually looking for? Of course, youve known the answer to this all along: everyone wants the opportunity to work on cool products, with smart people, and in a great culture. So the perfect job posting would do two things:
- Advertise the fact that your company is, in fact, hiring for specific positions. This should take no more than a few sentences: job title, location, very brief description.
- Show off everything you can about your brand to convince the candidate that your company is where theyd want to work.
Some examples
Sadly, there are relatively few decent job postings on the web. Just about every company has been suckered into using this antiquated text-based method - a left over from newspapers and bulletin boards - and we have yet to move this part of the hiring process into the 21st century. Here are a few decent examples Ive been able to find that are at least intriguing and, even as a passive candidate, might have caught my interest (click for a larger image):
From Mckinsey |
From Warning: we brake for number theory |
View source on flickr.com |
From 10 Creative Recruitment Ads |
From Cool Microsoft Job Ad: Problem Solvers Wanted |
From Tonic: Copywriter Wanted |
From Response Headers coming from twitters bootstrap framework |
The apply button in the Be a Frontend Engineer at reddit page doesnt work unless you use your console to hack it. |
If you know of other job postings, let me know in the comments!
KirSQLite Flex AIR Database Manager Part 17
In this tutorial we will add the ability to view details of each column in the table.
When the user selects a column, its details will be automatically displayed in the form next to the list. Weve created this form in the last tutorial, but we havent given ids to the objects. Lets do that right now. Set ids of each object inside the FormItem containers, and also set the dataProviders of the DataType and OnConflict ComboBoxes to dataTypes and conflictTypes. Bind the enabled property of the Form container to isTableSelected:
Lets declare these ArrayCollections now. The conflictTypes one is either blank ("---"), or one of the 5 possible conflict types in SQLite:
Set items of dataTypes to 5 of the most used ones, however, the user will not be limited to just these data types. They will be able to enter their own value.
Now find the List component and set its change event handler to columnSelect().
This function is where all the action happens.
First of all, we load the table schema to read the tables "sql" property, since it is the query that well be parsing and extracting data from.
We need to get rid of the unneeded text in the query and just leave columns separated by commas.
Get the current data related to the currentColumn using the selectedIndex of columnList:
Delete the name of the column from this text, because it will only get in our way:
Now, we will find and extract the DEFAULT value from the query. Create a regular expression pattern that matches "DEFAULT <value>". Keep in mind that the value can be a number (for example, 3) or a text piece in quotes (for example, "hello"). Find the match using regex, delete the "DEFAULT <value>" piece from currentParameters and then get rid of the word "DEFAULT" and the space after it from the match. If there are any quotes in the match, get rid of the first and last quotes:
Now we will look for an ON CONFLICT match. Create a regular expression also, extract it, delete from currentParameters and get rid of "ON CONFLICT" with a space character from the match:
Now we apply the values weve extracted to the form. We can check primary key, autoincrement, unique and not null values by simply using an indexOf() method on currentParameters and then setting the selected properties of the respective CheckBoxes to true or false, depending on the results. Set default text to defaultMatch value, and then do a few if... statements to set the selectedIndex of the conflict ComboBox:
We can read the data type without having to extract it from the SQL - just by reading the schema:
Full function:
Full code:
Thanks for reading!
Read more »
When the user selects a column, its details will be automatically displayed in the form next to the list. Weve created this form in the last tutorial, but we havent given ids to the objects. Lets do that right now. Set ids of each object inside the FormItem containers, and also set the dataProviders of the DataType and OnConflict ComboBoxes to dataTypes and conflictTypes. Bind the enabled property of the Form container to isTableSelected:
<mx:Form enabled="{isTableSelected}">
<mx:FormItem label="Name">
<s:TextInput id="col_name"/>
</mx:FormItem>
<mx:FormItem label="Data type">
<s:ComboBox id="col_data" dataProvider="{dataTypes}"/>
</mx:FormItem>
<mx:FormItem label="Primary Key">
<s:CheckBox id="col_key"/>
</mx:FormItem>
<mx:FormItem label="AutoIncrement">
<s:CheckBox id="col_auto"/>
</mx:FormItem>
<mx:FormItem label="Unique">
<s:CheckBox id="col_unique"/>
</mx:FormItem>
<mx:FormItem label="Allow Null">
<s:CheckBox id="col_null"/>
</mx:FormItem>
<mx:FormItem label="Default Value">
<s:TextArea id="col_default"/>
</mx:FormItem>
<mx:FormItem label="On Conflict">
<mx:ComboBox id="col_conflict" dataProvider="{conflictTypes}" editable="false" />
</mx:FormItem>
</mx:Form>
Lets declare these ArrayCollections now. The conflictTypes one is either blank ("---"), or one of the 5 possible conflict types in SQLite:
<mx:ArrayCollection id="conflictTypes">
<fx:String>---</fx:String>
<fx:String>ABORT</fx:String>
<fx:String>FAIL</fx:String>
<fx:String>IGNORE</fx:String>
<fx:String>ROLLBACK</fx:String>
<fx:String>REPLACE</fx:String>
</mx:ArrayCollection>
Set items of dataTypes to 5 of the most used ones, however, the user will not be limited to just these data types. They will be able to enter their own value.
<mx:ArrayCollection id="dataTypes">
<fx:String>NONE</fx:String>
<fx:String>INTEGER</fx:String>
<fx:String>TEXT</fx:String>
<fx:String>REAL</fx:String>
<fx:String>NUMERIC</fx:String>
</mx:ArrayCollection>
Now find the List component and set its change event handler to columnSelect().
<mx:List id="columnList" width="200" height="100%" dataProvider="{columnData}" labelField="name" change="columnSelect();" />
This function is where all the action happens.
First of all, we load the table schema to read the tables "sql" property, since it is the query that well be parsing and extracting data from.
connection.loadSchema(SQLTableSchema, tableTree.selectedItem.@label, tableTree.selectedItem.@databaseName);
var schema:SQLSchemaResult = connection.getSchemaResult();
var fullSQL:String = schema.tables[0].sql;
We need to get rid of the unneeded text in the query and just leave columns separated by commas.
// extract the text inside the ( )
fullSQL = fullSQL.substring( fullSQL.indexOf("(") + 1 , fullSQL.lastIndexOf(")") );
// split all columns into an array
var columns:Array = fullSQL.split(",");
Get the current data related to the currentColumn using the selectedIndex of columnList:
// get the currently selected column
var currentColumn:String = columns[columnList.selectedIndex];
Delete the name of the column from this text, because it will only get in our way:
// delete the name of the column from this text
var currentParameters:String = currentColumn.substr(currentColumn.indexOf(columnList.selectedItem.name) + columnList.selectedItem.name.length + 1);
Now, we will find and extract the DEFAULT value from the query. Create a regular expression pattern that matches "DEFAULT <value>". Keep in mind that the value can be a number (for example, 3) or a text piece in quotes (for example, "hello"). Find the match using regex, delete the "DEFAULT <value>" piece from currentParameters and then get rid of the word "DEFAULT" and the space after it from the match. If there are any quotes in the match, get rid of the first and last quotes:
// find DEFAULT and extract it
var defaultMatch:String = "";
var defaultPattern:RegExp = /((DEFAULT)s((".+")|([0-9]+)))/i;
if (currentParameters.match(defaultPattern)) {
defaultMatch = currentParameters.match(defaultPattern)[0];
// delete it from currentParameters
currentParameters = currentParameters.replace(defaultMatch, "");
// delete "DEFAULT" from the match
defaultMatch = defaultMatch.substr(8);
// if any quotes are found, remove the first and last symbols
if (defaultMatch.indexOf(") != -1) {
defaultMatch = defaultMatch.substring(1, defaultMatch.length - 1);
}
}
Now we will look for an ON CONFLICT match. Create a regular expression also, extract it, delete from currentParameters and get rid of "ON CONFLICT" with a space character from the match:
// find ON CONFLICT and extract it
var conflictMatch:String = "";
var conflictPattern:RegExp = /((ON CONFLICT)s(ABORT|FAIL|IGNORE|ROLLBACK|REPLACE))/i;
if (currentParameters.match(conflictPattern)) {
conflictMatch = currentParameters.match(conflictPattern)[0];
// delete it from currentParameters
currentParameters = currentParameters.replace(conflictMatch, "");
// delete "ON CONFLICT" from the match
conflictMatch = conflictMatch.substr(12);
}
Now we apply the values weve extracted to the form. We can check primary key, autoincrement, unique and not null values by simply using an indexOf() method on currentParameters and then setting the selected properties of the respective CheckBoxes to true or false, depending on the results. Set default text to defaultMatch value, and then do a few if... statements to set the selectedIndex of the conflict ComboBox:
// apply values
col_name.text = columnList.selectedItem.name;
col_key.selected = (currentParameters.toUpperCase().indexOf("PRIMARY KEY") != -1)?(true):(false);
col_auto.selected = (currentParameters.toUpperCase().indexOf("AUTOINCREMENT") != -1)?(true):(false);
col_unique.selected = (currentParameters.toUpperCase().lastIndexOf("UNIQUE") != -1)?(true):(false);
col_null.selected = (currentParameters.toUpperCase().indexOf("NOT NULL") != -1)?(false):(true);
col_default.text = defaultMatch;
col_conflict.selectedIndex = 0;
if (conflictMatch.toUpperCase() == "ABORT") col_conflict.selectedIndex = 1;
if (conflictMatch.toUpperCase() == "FAIL") col_conflict.selectedIndex = 2;
if (conflictMatch.toUpperCase() == "IGNORE") col_conflict.selectedIndex = 3;
if (conflictMatch.toUpperCase() == "ROLLBACK") col_conflict.selectedIndex = 4;
if (conflictMatch.toUpperCase() == "REPLACE") col_conflict.selectedIndex = 5;
We can read the data type without having to extract it from the SQL - just by reading the schema:
// read data type
col_data.textInput.text = schema.tables[0].columns[columnList.selectedIndex].dataType;
Full function:
private function columnSelect():void {
connection.loadSchema(SQLTableSchema, tableTree.selectedItem.@label, tableTree.selectedItem.@databaseName);
var schema:SQLSchemaResult = connection.getSchemaResult();
var fullSQL:String = schema.tables[0].sql;
// extract the text inside the ( )
fullSQL = fullSQL.substring( fullSQL.indexOf("(") + 1 , fullSQL.lastIndexOf(")") );
// split all columns into an array
var columns:Array = fullSQL.split(",");
// get the currently selected column
var currentColumn:String = columns[columnList.selectedIndex];
// delete the name of the column from this text
var currentParameters:String = currentColumn.substr(currentColumn.indexOf(columnList.selectedItem.name) + columnList.selectedItem.name.length + 1);
// find DEFAULT and extract it
var defaultMatch:String = "";
var defaultPattern:RegExp = /((DEFAULT)s((".+")|([0-9]+)))/i;
if (currentParameters.match(defaultPattern)) {
defaultMatch = currentParameters.match(defaultPattern)[0];
// delete it from currentParameters
currentParameters = currentParameters.replace(defaultMatch, "");
// delete "DEFAULT" from the match
defaultMatch = defaultMatch.substr(8);
// if any quotes are found, remove the first and last symbols
if (defaultMatch.indexOf(") != -1) {
defaultMatch = defaultMatch.substring(1, defaultMatch.length - 1);
}
}
// find ON CONFLICT and extract it
var conflictMatch:String = "";
var conflictPattern:RegExp = /((ON CONFLICT)s(ABORT|FAIL|IGNORE|ROLLBACK|REPLACE))/i;
if (currentParameters.match(conflictPattern)) {
conflictMatch = currentParameters.match(conflictPattern)[0];
// delete it from currentParameters
currentParameters = currentParameters.replace(conflictMatch, "");
// delete "ON CONFLICT" from the match
conflictMatch = conflictMatch.substr(12);
}
// apply values
col_name.text = columnList.selectedItem.name;
col_key.selected = (currentParameters.toUpperCase().indexOf("PRIMARY KEY") != -1)?(true):(false);
col_auto.selected = (currentParameters.toUpperCase().indexOf("AUTOINCREMENT") != -1)?(true):(false);
col_unique.selected = (currentParameters.toUpperCase().lastIndexOf("UNIQUE") != -1)?(true):(false);
col_null.selected = (currentParameters.toUpperCase().indexOf("NOT NULL") != -1)?(false):(true);
col_default.text = defaultMatch;
col_conflict.selectedIndex = 0;
if (conflictMatch.toUpperCase() == "ABORT") col_conflict.selectedIndex = 1;
if (conflictMatch.toUpperCase() == "FAIL") col_conflict.selectedIndex = 2;
if (conflictMatch.toUpperCase() == "IGNORE") col_conflict.selectedIndex = 3;
if (conflictMatch.toUpperCase() == "ROLLBACK") col_conflict.selectedIndex = 4;
if (conflictMatch.toUpperCase() == "REPLACE") col_conflict.selectedIndex = 5;
// read data type
col_data.textInput.text = schema.tables[0].columns[columnList.selectedIndex].dataType;
}
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" showStatusBar="false">
<s:menu>
<mx:FlexNativeMenu dataProvider="{windowMenu}" showRoot="false" labelField="@label" keyEquivalentField="@key" itemClick="menuSelect(event);" />
</s:menu>
<fx:Declarations>
<fx:XML id="windowMenu">
<root>
<menuitem label="Database">
<menuitem id="newdb" label="New" key="n" controlKey="true" />
<menuitem id="opendb" label="Open" key="o" controlKey="true" />
<menuitem id="savedb" label="Save a copy" key="s" controlKey="true" enabled="{tableTree.selectedItems.length>0}"/>
</menuitem>
<menuitem label="Table">
<menuitem id="newtable" label="Add table" key="t" controlKey="true" enabled="{tableTree.selectedItems.length>0}"/>
<menuitem id="droptable" label="Drop table" key="d" controlKey="true" enabled="{isTableSelected}"/>
</menuitem>
</root>
</fx:XML>
<fx:XMLList id="dbData">
</fx:XMLList>
<mx:ArrayCollection id="tableData">
</mx:ArrayCollection>
<mx:ArrayCollection id="columnData">
</mx:ArrayCollection>
<mx:ArrayCollection id="conflictTypes">
<fx:String>---</fx:String>
<fx:String>ABORT</fx:String>
<fx:String>FAIL</fx:String>
<fx:String>IGNORE</fx:String>
<fx:String>ROLLBACK</fx:String>
<fx:String>REPLACE</fx:String>
</mx:ArrayCollection>
<mx:ArrayCollection id="dataTypes">
<fx:String>NONE</fx:String>
<fx:String>INTEGER</fx:String>
<fx:String>TEXT</fx:String>
<fx:String>REAL</fx:String>
<fx:String>NUMERIC</fx:String>
</mx:ArrayCollection>
<mx:AdvancedDataGridColumn id="checkboxColumn" headerText=" " width="30" sortable="false" draggable="false" resizable="false" editable="false">
<mx:itemRenderer>
<fx:Component>
<mx:Box width="30" horizontalAlign="center">
<mx:CheckBox selected="@{data.sel}" />
</mx:Box>
</fx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>
<mx:TitleWindow id="newTableWindow" title="Create new table" close="closeNewTableWindow();" showCloseButton="true">
<s:VGroup>
<s:HGroup width="100%" verticalAlign="middle">
<s:Label>Table name: </s:Label>
<s:TextInput id="newTableName" />
</s:HGroup>
<s:Button click="createNewTable();" label="Create" width="100%" />
</s:VGroup>
</mx:TitleWindow>
<mx:TitleWindow id="historyWindow" title="SQL History" close="closeHistoryWindow();" showCloseButton="true">
<mx:Box width="100%" height="100%" paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10">
<s:TextArea id="historyText" width="100%" height="100%" editable="false" />
</mx:Box>
</mx:TitleWindow>
</fx:Declarations>
<fx:Script>
<![CDATA[
import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLSchema;
import flash.data.SQLSchemaResult;
import flash.data.SQLStatement;
import flash.errors.SQLError;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.Responder;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import mx.collections.ArrayCollection;
import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.events.FlexNativeMenuEvent;
import mx.managers.PopUpManager;
private var connection:SQLConnection = new SQLConnection();
private var selectedDatabase:String = "";
[Bindable]
private var isTableSelected:Boolean = false;
private var sqlHistory:Array = [];
private function selectAllChange(evt:Event):void {
var i:int;
if (evt.currentTarget.selected) {
for (i = 0; i < tableData.length; i++) {
tableData[i].sel = true;
}
} else
if (!evt.currentTarget.selected) {
for (i = 0; i < tableData.length; i++) {
tableData[i].sel = false;
}
}
tableGrid.invalidateDisplayList();
tableGrid.invalidateList();
}
private function menuSelect(evt:FlexNativeMenuEvent):void {
(evt.item.@id == "newdb")?(newDatabase()):(void);
(evt.item.@id == "opendb")?(openDatabase()):(void);
(evt.item.@id == "newtable")?(newTable()):(void);
(evt.item.@id == "droptable")?(dropTable()):(void);
(evt.item.@id == "savedb")?(saveCopy()):(void);
}
private function newDatabase():void {
var file:File = File.desktopDirectory.resolvePath("Untitled");
file.addEventListener(Event.SELECT, newSelect);
file.browseForSave("Choose where to save the database");
var newDB:XML;
var statement:SQLStatement = new SQLStatement();
function newSelect(evt:Event):void {
if (file.exists) {
Alert.show("File already exists, cannot overwrite.", "Nope");
return;
}
file.nativePath += ".db";
var n:String = parseDatabase(file);
loadDataSchema(n);
}
}
private function openDatabase():void {
var file:File = new File();
file.browseForOpen("Open database", [new FileFilter("Databases", "*.db"), new FileFilter("All files", "*")]);
file.addEventListener(Event.SELECT, openSelect);
function openSelect(evt:Event):void {
var n:String = parseDatabase(file, true);
loadDataSchema(n);
}
}
private function saveCopy():void {
var databasePath:String;
if (selectedDatabase == "main") databasePath = dbData.db[0].@path;
if (selectedDatabase != "main") {
var newNum:int = Number(selectedDatabase.replace("db", ""));
var newInd:int;
for (var i:int = 0; i < dbData.db.length(); i++) {
if (dbData.db[i].@numid == newNum) {
newInd = i;
break;
}
}
databasePath = dbData.db[newInd].@path;
}
var file:File = new File(databasePath);
file.browseForSave("Save copy of database");
file.addEventListener(Event.SELECT, onCopySelect);
function onCopySelect(evt:Event):void {
if(notAlreadyOpen(file)){
var initFile:File = new File(databasePath);
initFile.copyTo(file, true);
}else {
Alert.show("Cannot overwrite a file that is currently open.", "Nope");
}
}
}
private function loadDataSchema(name:String):void {
if (name != "") {
connection.loadSchema(null, null, name, true, new Responder(schemaSuccess, schemaError));
function schemaSuccess(evt:SQLSchemaResult):void {
// Schema found! Now parsing:
var result:SQLSchemaResult = evt;
// Adding tables:
var nid:Number = (name=="main")?(1):(Number(name.replace("db", "")));
var dataNode:XMLList = dbData.db.(@numid == nid);
dataNode.setChildren(<placeholder/>);
delete dataNode.placeholder;
for (var i:int = 0; i < result.tables.length; i++) {
var newTable:XML = new XML(<tb/>);
newTable.@label = result.tables[i].name;
newTable.@isBranch = false;
newTable.@databaseName = name;
dataNode.appendChild(newTable);
}
}
function schemaError(evt:SQLError):void {
// Alert.show("Database is empty");
}
isTableSelected = false;
}
}
private function parseDatabase(file:File, needCheck:Boolean = false):String {
var ret:String = "";
if (!needCheck || file.exists) {
if(!needCheck || notAlreadyOpen(file)){
var newDB:XML;
if (dbData.db.length() == 0) {
connection.open(file);
dbData = new XMLList(<root></root>);
newDB = <db/>
newDB.@label = file.name;
newDB.@numid = 1;
newDB.@isBranch = true;
newDB.@path = file.nativePath;
dbData[0].appendChild(newDB);
ret = "main";
}else
if (dbData.db.length() > 0) {
var newnum:int = dbData.db.length() + 1;
connection.attach("db"+newnum.toString(), file);
newDB = <db/>
newDB.@label = file.name;
newDB.@numid = newnum.toString();
newDB.@isBranch = true;
newDB.@path = file.nativePath;
dbData[0].appendChild(newDB);
ret = "db" + newnum.toString();
}}else {
Alert.show("Database already opened.", "Error");
}
}else {
Alert.show("File not found.", "Error");
}
return ret;
}
private function notAlreadyOpen(file:File):Boolean{
var r:Boolean = true;
for (var i:int = 0; i < dbData.db.length(); i++) {
if (file.nativePath == dbData.db[i].@path) {
r = false;
}
}
return r;
}
private function tableSelect():void {
saveTableButton.emphasized = false;
columnData = new ArrayCollection([]);
if (tableTree.selectedItem.@isBranch) {
isTableSelected = false;
var dataname:String;
if (tableTree.selectedItem.@numid == 1) dataname = "main";
if (tableTree.selectedItem.@numid > 1) dataname = "db" + tableTree.selectedItem.@numid;
selectedDatabase = dataname;
}
if (tableTree.selectedItem.@isBranch == false) {
isTableSelected = true;
selectedDatabase = tableTree.selectedItem.@databaseName;
tableData = new ArrayCollection([]);
var newColumns:Array = [checkboxColumn];
connection.loadSchema(SQLTableSchema, tableTree.selectedItem.@label, tableTree.selectedItem.@databaseName);
var schema:SQLSchemaResult = connection.getSchemaResult();
for (var i:int = 0; i < schema.tables[0].columns.length; i++) {
columnData.addItem({name:schema.tables[0].columns[i].name});
var aColumn:AdvancedDataGridColumn = new AdvancedDataGridColumn();
aColumn.headerText = schema.tables[0].columns[i].name;
aColumn.dataField = "db_" + schema.tables[0].columns[i].name;
if (schema.tables[0].columns[i].autoIncrement) aColumn.editable = false;
if (schema.tables[0].columns[i].primaryKey) tableTree.selectedItem.@primaryKeyColumn = schema.tables[0].columns[i].name;
newColumns.push(aColumn);
}
tableGrid.columns = newColumns;
var stat:SQLStatement = new SQLStatement();
stat.sqlConnection = connection;
stat.text = "SELECT * FROM " + tableTree.selectedItem.@databaseName + "." + tableTree.selectedItem.@label;
lastStatement(stat.text);
stat.execute(-1, new Responder(tableSuccess, tableError));
}
function tableSuccess(evt:SQLResult):void {
if (evt.data != null) {
for (var item:Object in evt.data) {
var obj:Object = new Object();
for (var value:Object in evt.data[item]) {
obj["db_"+value] = evt.data[item][value];
}
tableData.addItem(obj);
}
}
}
function tableError(evt:SQLError):void {
Alert.show("Unable to read table data.", "Error");
}
}
private function newTable():void {
PopUpManager.addPopUp(newTableWindow, this);
PopUpManager.centerPopUp(newTableWindow);
newTableWindow.title = "Create new table";
focusManager.setFocus(newTableName);
}
private function dropTable():void {
Alert.show("Are you sure you want to completely delete this table?", "Drop table?", Alert.YES | Alert.NO, null, dropConfirm);
function dropConfirm(evt:CloseEvent):void {
if (evt.detail == Alert.YES) {
var stat:SQLStatement = new SQLStatement();
stat.sqlConnection = connection;
stat.text = "DROP TABLE " + selectedDatabase + "." + tableTree.selectedItem.@label;
lastStatement(stat.text);
stat.execute( -1, new Responder(dropTableSuccess, dropTableError));
}
}
function dropTableSuccess(evt:SQLResult):void {
loadDataSchema(selectedDatabase);
}
function dropTableError(evt:SQLError):void {
Alert.show("ERROR:" + evt.details, "Error");
}
}
private function closeNewTableWindow():void{
PopUpManager.removePopUp(newTableWindow);
}
private function createNewTable():void {
var stat:SQLStatement = new SQLStatement();
stat.sqlConnection = connection;
stat.text = "CREATE TABLE IF NOT EXISTS " + selectedDatabase + "." + newTableName.text + "(id INTEGER PRIMARY KEY AUTOINCREMENT, blankColumn TEXT)";
lastStatement(stat.text);
stat.execute( -1, new Responder(newTableSuccess, newTableError));
function newTableSuccess(evt:SQLResult):void {
closeNewTableWindow();
loadDataSchema(selectedDatabase);
}
function newTableError(evt:SQLError):void {
Alert.show("ERROR:" + evt.details, "Error");
}
}
private function lastStatement(text:String):void {
statementText.text = text;
sqlHistory.push(text);
}
private function openHistory():void {
PopUpManager.addPopUp(historyWindow, this);
historyWindow.width = width - 100;
historyWindow.height = height - 100;
PopUpManager.centerPopUp(historyWindow);
historyText.text = "";
for (var i:int = sqlHistory.length - 1; i >= 0; i--) {
historyText.appendText(sqlHistory[i] + "
");
}
}
private function closeHistoryWindow():void {
PopUpManager.removePopUp(historyWindow);
}
private function saveTable():void {
var keyColumnName:String = tableTree.selectedItem.@primaryKeyColumn;
// clear all "sel" and store them in a temp array
var tempSel:Array = [];
for (var s:int = 0; s < tableData.length; s++) {
if (tableData[s].sel) {
tempSel.push(true);
tableData[s].sel = false;
}else
if (!tableData[s].sel) {
tempSel.push(false);
}
}
// update each row
for (var i:int = 0; i < tableData.length; i++) {
var stat:SQLStatement = new SQLStatement();
var sqlStat:String = "UPDATE " + selectedDatabase + "." + tableTree.selectedItem.@label + " SET";
// add each attribute as parameter
for (var attribute:String in tableData[i]) {
// if column is not our CheckBox column or the key column
if (attribute != "mx_internal_uid" && attribute!=keyColumnName && attribute!="sel") {
// add value as parameter
stat.parameters["@" + attribute.substr(3)] = tableData[i][attribute];
sqlStat += " " + attribute.substr(3) + "=@" + attribute.substr(3) + ",";
}
}
// remove the last comma
sqlStat = sqlStat.substr(0, sqlStat.length - 1);
sqlStat += " WHERE " + keyColumnName + "=" + tableData[i]["db_"+keyColumnName];
stat.sqlConnection = connection;
stat.text = sqlStat;
stat.execute( -1, new Responder(saveSuccess, saveError));
}
function saveSuccess(evt:SQLResult):void {
}
function saveError(evt:SQLError):void {
Alert.show("ERROR: " + evt.details, "Error");
}
tableSelect();
for (var t:int = 0; t < tableData.length; t++) {
if (tempSel[t]) tableData[t].sel=true;
}
tableGrid.invalidateDisplayList();
tableGrid.invalidateList();
}
private function deleteSelected():void {
var keyColumnName:String = tableTree.selectedItem.@primaryKeyColumn;
for (var i:int = 0; i < tableData.length; i++) {
if (tableData[i].sel) {
var stat:SQLStatement = new SQLStatement();
stat.sqlConnection = connection;
stat.text = "DELETE FROM " + selectedDatabase + "." + tableTree.selectedItem.@label + " WHERE " + keyColumnName + "=" + tableData[i]["db_" + keyColumnName];
stat.execute( -1, new Responder(deleteSuccess, deleteError));
}
}
tableSelect();
tableGrid.invalidateDisplayList();
tableGrid.invalidateList();
function deleteSuccess(evt:SQLResult):void {
}
function deleteError(evt:SQLError):void {
Alert.show("ERROR: " + evt.details, "Error");
}
}
private function newRecord():void {
var stat:SQLStatement = new SQLStatement();
stat.sqlConnection = connection;
stat.text = "INSERT INTO " + selectedDatabase + "." + tableTree.selectedItem.@label + " DEFAULT VALUES;";
stat.execute( -1, new Responder(newSuccess, newError));
function newSuccess(evt:SQLResult):void {
tableSelect();
tableGrid.invalidateDisplayList();
tableGrid.invalidateList();
}
function newError(evt:SQLError):void {
Alert.show("ERROR: " + evt.details, "Error");
}
}
private function columnSelect():void {
connection.loadSchema(SQLTableSchema, tableTree.selectedItem.@label, tableTree.selectedItem.@databaseName);
var schema:SQLSchemaResult = connection.getSchemaResult();
var fullSQL:String = schema.tables[0].sql;
// extract the text inside the ( )
fullSQL = fullSQL.substring( fullSQL.indexOf("(") + 1 , fullSQL.lastIndexOf(")") );
// split all columns into an array
var columns:Array = fullSQL.split(",");
// get the currently selected column
var currentColumn:String = columns[columnList.selectedIndex];
// delete the name of the column from this text
var currentParameters:String = currentColumn.substr(currentColumn.indexOf(columnList.selectedItem.name) + columnList.selectedItem.name.length + 1);
// find DEFAULT and extract it
var defaultMatch:String = "";
var defaultPattern:RegExp = /((DEFAULT)s((".+")|([0-9]+)))/i;
if (currentParameters.match(defaultPattern)) {
defaultMatch = currentParameters.match(defaultPattern)[0];
// delete it from currentParameters
currentParameters = currentParameters.replace(defaultMatch, "");
// delete "DEFAULT" from the match
defaultMatch = defaultMatch.substr(8);
// if any quotes are found, remove the first and last symbols
if (defaultMatch.indexOf(") != -1) {
defaultMatch = defaultMatch.substring(1, defaultMatch.length - 1);
}
}
// find ON CONFLICT and extract it
var conflictMatch:String = "";
var conflictPattern:RegExp = /((ON CONFLICT)s(ABORT|FAIL|IGNORE|ROLLBACK|REPLACE))/i;
if (currentParameters.match(conflictPattern)) {
conflictMatch = currentParameters.match(conflictPattern)[0];
// delete it from currentParameters
currentParameters = currentParameters.replace(conflictMatch, "");
// delete "ON CONFLICT" from the match
conflictMatch = conflictMatch.substr(12);
}
// apply values
col_name.text = columnList.selectedItem.name;
col_key.selected = (currentParameters.toUpperCase().indexOf("PRIMARY KEY") != -1)?(true):(false);
col_auto.selected = (currentParameters.toUpperCase().indexOf("AUTOINCREMENT") != -1)?(true):(false);
col_unique.selected = (currentParameters.toUpperCase().lastIndexOf("UNIQUE") != -1)?(true):(false);
col_null.selected = (currentParameters.toUpperCase().indexOf("NOT NULL") != -1)?(false):(true);
col_default.text = defaultMatch;
col_conflict.selectedIndex = 0;
if (conflictMatch.toUpperCase() == "ABORT") col_conflict.selectedIndex = 1;
if (conflictMatch.toUpperCase() == "FAIL") col_conflict.selectedIndex = 2;
if (conflictMatch.toUpperCase() == "IGNORE") col_conflict.selectedIndex = 3;
if (conflictMatch.toUpperCase() == "ROLLBACK") col_conflict.selectedIndex = 4;
if (conflictMatch.toUpperCase() == "REPLACE") col_conflict.selectedIndex = 5;
// read data type
col_data.textInput.text = schema.tables[0].columns[columnList.selectedIndex].dataType;
}
]]>
</fx:Script>
<s:HGroup gap="0" width="100%" height="100%">
<s:VGroup width="200" height="100%" gap="0">
<s:HGroup>
<s:Button label="New table" click="newTable();" enabled="{tableTree.selectedItems.length>0}"/>
<s:Button label="Drop table" click="dropTable();" enabled="{isTableSelected}" />
</s:HGroup>
<mx:Tree id="tableTree" width="100%" height="100%" dataProvider="{dbData}" showRoot="false" labelField="@label" itemClick="tableSelect();"/>
</s:VGroup>
<s:VGroup width="100%" height="100%" gap="0">
<mx:Box height="80" width="100%">
<s:VGroup paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10" width="100%" height="100%">
<s:HGroup width="100%" verticalAlign="middle">
<s:Label width="100%">Latest SQL statement:</s:Label>
<s:Button width="100" label="View history" click="openHistory();" />
</s:HGroup>
<s:TextArea id="statementText" editable="false" width="100%" height="30"/>
</s:VGroup>
</mx:Box>
<mx:TabNavigator width="100%" height="100%" paddingTop="0">
<s:NavigatorContent label="Table contents">
<s:VGroup width="100%" height="100%" gap="0">
<mx:HBox width="100%" height="30" paddingLeft="8" paddingTop="6">
<mx:CheckBox label="Select all" change="selectAllChange(event);" />
<s:Button label="Delete selected" enabled="{isTableSelected}" click="deleteSelected();" />
<s:Button id="saveTableButton" label="Save changes" click="saveTable();" enabled="{isTableSelected}"/>
<s:Button id="newRecordButton" label="Add a record" click="newRecord();" enabled="{isTableSelected}"/>
</mx:HBox>
<mx:AdvancedDataGrid id="tableGrid" width="100%" height="100%" dataProvider="{tableData}" editable="true" itemEditBegin="saveTableButton.emphasized=true;">
<mx:columns>
<mx:AdvancedDataGridColumn dataField="" headerText="Data" editable="false" />
</mx:columns>
</mx:AdvancedDataGrid>
</s:VGroup>
</s:NavigatorContent>
<s:NavigatorContent label="Edit columns">
<s:HGroup width="100%" height="100%" >
<mx:List id="columnList" width="200" height="100%" dataProvider="{columnData}" labelField="name" change="columnSelect();" />
<s:VGroup height="100%" paddingTop="10">
<s:HGroup>
<s:Button label="Add column" />
<s:Button label="Update selected" />
<s:Button label="Delete selected" />
</s:HGroup>
<mx:Form enabled="{isTableSelected}">
<mx:FormItem label="Name">
<s:TextInput id="col_name"/>
</mx:FormItem>
<mx:FormItem label="Data type">
<s:ComboBox id="col_data" dataProvider="{dataTypes}"/>
</mx:FormItem>
<mx:FormItem label="Primary Key">
<s:CheckBox id="col_key"/>
</mx:FormItem>
<mx:FormItem label="AutoIncrement">
<s:CheckBox id="col_auto"/>
</mx:FormItem>
<mx:FormItem label="Unique">
<s:CheckBox id="col_unique"/>
</mx:FormItem>
<mx:FormItem label="Allow Null">
<s:CheckBox id="col_null"/>
</mx:FormItem>
<mx:FormItem label="Default Value">
<s:TextArea id="col_default"/>
</mx:FormItem>
<mx:FormItem label="On Conflict">
<mx:ComboBox id="col_conflict" dataProvider="{conflictTypes}" editable="false" />
</mx:FormItem>
</mx:Form>
</s:VGroup>
</s:HGroup>
</s:NavigatorContent>
<s:NavigatorContent label="Query">
</s:NavigatorContent>
</mx:TabNavigator>
</s:VGroup>
</s:HGroup>
</s:WindowedApplication>
Thanks for reading!
Google Maps Announced Underwater Street View
Google Announced addition of Underwater Street View in Google Maps.
Google Maps |
Created in September 2012, the 360-degree, panoramic photographs produced by the Catlin Seaview Survey will allow scientists to monitor the health of coral reefs around the world and offer policy makers and the general public a closer look at a critical part of the environment.
The newly added photographs feature locations including Isla Mujeres and Cancun in the southeastern region of Mexico. In Google Maps announcement, the team posted photographs of a whale shark swimming near Isla Contoy, north of Cancun, and a sunken car hosting sea life thats part of an underwater museum in Isla Mujeres.
The new photographs of Mexicos underwater world join many others around the world as a part of the Street View Oceans section of Google Maps Views. Street View Oceans already showcases coral reefs in Bermuda, the San Francisco shoreline, sea lions playing in the Galapagos sea, turtles swimming in the Great Barrier Reef and many other stunning ocean views.
Source : Mashable
LG Latest announced G Pad 7 0 8 0 10 1 inch tablets series latest news
LG Announced Latest Series of Tablets G Pad 7 ,8 ,10.1 inch.
LG is prepared to announced the new GPAD tablets series in Europe biggest tech trade show named MedPI 2014 which is going to held in Monaco from May 13 to May 16. The new G Pad tablet series contain G Pad 7.0 , G Pad 8.0 and G Pad 10.1. The tablet series will appear with LG s UX series like QPair 2.0 and Knock Code however other spec were not revealed by officials. LG G Pad most probably will appear as mid range Tablets and in 3 different colors , blue, white and black as leaked image shows.
upcoming LG G PAD Tabs |
Q Pair 2.0 is an app which allow user to call and receive text on tablet PC and the Knock Code will allow user power on and unlock LG smartphones entering a personalized ‘knock’ pattern on the smartphone’s display.
Friday, January 30, 2015
Adobe Photoshop CS4 Online Training for Beginners First 3 Chapters FREE
The VTC Online University is a great site that offers high-quality software video training. Check out their Adobe Photoshop CS4 Online Training for Beginners course. Scroll down to watch the first 3 chapters for free. Just click on the video links to launch the free video tutorials. Visit the course details page for more information about this Photoshop CS4 online training course for beginners. The entire course contains a total of 9 hours worth of excellent video tutorials. Sign up for a VTC.com membership in order to view the entire course.
[Become a VTC.com Member]
Get complete access to ALL the VTC Online University courses for $30/month
System Requirements
RAM Requirements
Peripheral Devices
Work Files
Toolbox
Spring-Loaded Tools
Menus
Panels
Shortcuts
Help
Arrangements
Metadata
Organize
Loupe & Compare
Raster vs. Vector
Size & Resolution
Resize Documents
The Canvas
Undo & Step
Drag & Drop
Layer Options
Opacity & Fills
Blend Modes pt. 1
Blend Modes pt. 2
Layer Comps
Adjustment Layers
Layer Styles
Auto Align Layers
Crop & Rotate
Crop Perspective
Navigator Panel
Create Swatches
Color Picker & Eyedropper
Quick Select
Magic Wand
Marquees & Strokes
Paste Into & Invert
Feather & Anti-alias
Save & Load
Content Aware Scale pt. 2
Transform
Free Transform
Warp Tool
Arbitrary Rotation
Curves
Levels
Vibrance Adjustment
Variations
Match Color
Red Eye
Vector Masks
Clipping Masks
Quick Mask
Layer Masks
Refine Edge
Fonts & Colors
Type on a Path
Type as a Mask
Edit Type
Rasterize Type
Dodge / Burn & Sponge
Smudge / Sharpen & Blur
The Eraser Tools
Define Patterns
Brush Preview
Define Brushes
Brush Dynamics
Edit Paths
Vector Shapes
Smart Filters
Blurs
Textures
Lighting Effects
Styles
Liquefy
Fade
Smart Objects pt. 2
Notes Annotation
Camera Raw pt. 2
Clone Stamp
Clone with Two Images
Clone Source
Patch Tool
Dust & Scratches
Art History Brush
History Brush
Vanishing Point pt. 2
Alpha Channels
Play Actions
PDF Presentation
Droplets
Contact Sheets
Picture Package
Web Photo Gallery
Flatten
Export to Illustrator
PDF
File Formats
Slice Options
Save for Web
Websites
Orbiting Mothership pt. 1
Orbiting Mothership pt. 2
Orbiting Mothership pt. 3
Orbiting Mothership pt. 4
Orbiting Mothership pt. 5
Course: Adobe Photoshop CS4
Author: Dwayne Ferguson
Release Date: 2009-01-16
Duration: 9 hrs / 141 tutorials
The Virtual Training Company (VTC) started in Californias Silicon Valley in 1996, and is one of the leading online training providers in the web today. Theyve built up a library of more than 1000 video training courses, which you can access entirely for $30/month.
Heres what some of their satisfied customers have to say:
This site is basically going to save my semester. I will be using it beyond that though. What a great site. Worth every penny. Thank you so much for your product.
- Kevin
My company recently switched out to Outlook 2010, gave us a pamphlet of a few pages covering the very basics. We were lost! Especially coming from Groupwise/Novell. That said, Laurie Ulrich Fuller is an outstanding instructor. This has been the simplest way to explain Outlook 2010. Loved her!!! She made my life easier. Thanks a million!!!
- Celia Esquivel
Geoff Blake performed superbly on introducing Acrobat forms: clear, well-organized and instructive on the basics of the process. Bravo! I would highly recommend this course to anyone searching for a basic introduction to Acrobat forms.
- Brad B.
Over the course of a few weeks, I received approximately 60 hours of on-line Project Managent training from Vanina Mangano through VTC. The training was for Project Management certification exam and I took 3 courses PMBOK (a bootcamp like course), PMBOK Schedule and PMBOK Risk. Vanina really prepared me for the test. I particularly found the Schedule and Risk Bundles instructive in expanding my intuitive understanding of these overall processes. Vanina did a great job of performing the training and her commentary and explanations were right on. Vaninas melodic voice is easy to listen to - she motivates and encourages study. I passed the Project Management Certification on my first try after completing this course of study. Top qualities: Great Results, Personable, Good Value
- Annemarie DeMarco
I joined on the 20th August 2010 to your program and Im most impressed. I need to learn Excel for my job and at 64 years old I never thought I would ever be able to conquer spreadsheets etc. I have been practicing along with your tutorials since Saturday and I cant believe how quickly I am picking it up. The online course is worth every penny and I will be recommending you and your team for the excellent service and content to anyone who will listen. Magic! By the way Im not that great on a computer either so if I can do it, then its a doddle for anyone else!
- Barbara Richards
Are you ready to start your Adobe Photoshop CS4 Online Training for Beginners? Then sign up for a VTC.com membership today!
Read more »
Adobe Photoshop CS4 Training
from VTC.com[Become a VTC.com Member]
Get complete access to ALL the VTC Online University courses for $30/month
Adobe Photoshop CS4 Online Training for Beginners
Introduction
New in Photoshop CS4System Requirements
RAM Requirements
Peripheral Devices
Work Files
Interface
Document WindowToolbox
Spring-Loaded Tools
Menus
Panels
Shortcuts
Help
Arrangements
Adobe Bridge
The BridgeMetadata
Organize
Loupe & Compare
Documents
New DocumentRaster vs. Vector
Size & Resolution
Resize Documents
The Canvas
Undo & Step
Drag & Drop
Layers
Add / Delete & MergeLayer Options
Opacity & Fills
Blend Modes pt. 1
Blend Modes pt. 2
Layer Comps
Adjustment Layers
Layer Styles
Auto Align Layers
Cropping
Crop ToolCrop & Rotate
Crop Perspective
Navigation
NavigateNavigator Panel
Color Tools
Color PalettesCreate Swatches
Color Picker & Eyedropper
Selections
Selection ToolsQuick Select
Magic Wand
Marquees & Strokes
Paste Into & Invert
Feather & Anti-alias
Save & Load
Transformation
Content-Aware Scale pt. 1Content Aware Scale pt. 2
Transform
Free Transform
Warp Tool
Arbitrary Rotation
Adjustments
Adjustments PanelCurves
Levels
Vibrance Adjustment
Color Correction
Replace ColorVariations
Match Color
Red Eye
Masks
Mask PanelVector Masks
Clipping Masks
Quick Mask
Layer Masks
Refine Edge
Type
Type ToolsFonts & Colors
Type on a Path
Type as a Mask
Edit Type
Rasterize Type
Painting
GradientsDodge / Burn & Sponge
Smudge / Sharpen & Blur
The Eraser Tools
Define Patterns
Brushes
Mouse vs. TabletBrush Preview
Define Brushes
Brush Dynamics
Drawing
Pen ToolEdit Paths
Vector Shapes
Filters & Effects
Filter GallerySmart Filters
Blurs
Textures
Lighting Effects
Styles
Liquefy
Fade
Smart Objects
Smart Objects pt. 1Smart Objects pt. 2
Guides & Annotation
GuidesNotes Annotation
Camera Raw
Camera Raw pt. 1Camera Raw pt. 2
Retouching
Retouching ToolsClone Stamp
Clone with Two Images
Clone Source
Patch Tool
Dust & Scratches
History
HistoryArt History Brush
History Brush
Vanishing Point
Vanishing Point pt. 1Vanishing Point pt. 2
Channels
The Channels PaletteAlpha Channels
Actions
Record ActionsPlay Actions
Automation
Batch RenamePDF Presentation
Droplets
Contact Sheets
Picture Package
Web Photo Gallery
Saving & Exporting
Save DocumentsFlatten
Export to Illustrator
Scanning
Scan in ArtworkOutput
PrintingFile Formats
Web Preparation
The Slice ToolSlice Options
Save for Web
Resources
MagazinesWebsites
Project: Orbiting Mothership
Mothership OverviewOrbiting Mothership pt. 1
Orbiting Mothership pt. 2
Orbiting Mothership pt. 3
Orbiting Mothership pt. 4
Orbiting Mothership pt. 5
Course Information:
Course: Adobe Photoshop CS4
Author: Dwayne Ferguson
Release Date: 2009-01-16
Duration: 9 hrs / 141 tutorials
About VTC
The Virtual Training Company (VTC) started in Californias Silicon Valley in 1996, and is one of the leading online training providers in the web today. Theyve built up a library of more than 1000 video training courses, which you can access entirely for $30/month.
Heres what some of their satisfied customers have to say:
This site is basically going to save my semester. I will be using it beyond that though. What a great site. Worth every penny. Thank you so much for your product.
- Kevin
My company recently switched out to Outlook 2010, gave us a pamphlet of a few pages covering the very basics. We were lost! Especially coming from Groupwise/Novell. That said, Laurie Ulrich Fuller is an outstanding instructor. This has been the simplest way to explain Outlook 2010. Loved her!!! She made my life easier. Thanks a million!!!
- Celia Esquivel
Geoff Blake performed superbly on introducing Acrobat forms: clear, well-organized and instructive on the basics of the process. Bravo! I would highly recommend this course to anyone searching for a basic introduction to Acrobat forms.
- Brad B.
Over the course of a few weeks, I received approximately 60 hours of on-line Project Managent training from Vanina Mangano through VTC. The training was for Project Management certification exam and I took 3 courses PMBOK (a bootcamp like course), PMBOK Schedule and PMBOK Risk. Vanina really prepared me for the test. I particularly found the Schedule and Risk Bundles instructive in expanding my intuitive understanding of these overall processes. Vanina did a great job of performing the training and her commentary and explanations were right on. Vaninas melodic voice is easy to listen to - she motivates and encourages study. I passed the Project Management Certification on my first try after completing this course of study. Top qualities: Great Results, Personable, Good Value
- Annemarie DeMarco
I joined on the 20th August 2010 to your program and Im most impressed. I need to learn Excel for my job and at 64 years old I never thought I would ever be able to conquer spreadsheets etc. I have been practicing along with your tutorials since Saturday and I cant believe how quickly I am picking it up. The online course is worth every penny and I will be recommending you and your team for the excellent service and content to anyone who will listen. Magic! By the way Im not that great on a computer either so if I can do it, then its a doddle for anyone else!
- Barbara Richards
Are you ready to be part of this community of satisfied learners?
[Become a VTC.com Member TODAY!]
Get complete access to ALL the VTC Online University courses for $30/month
[Become a VTC.com Member TODAY!]
Get complete access to ALL the VTC Online University courses for $30/month
Are you ready to start your Adobe Photoshop CS4 Online Training for Beginners? Then sign up for a VTC.com membership today!
Creating EasyTooltip class Part 5
In this tutorial well start adding the ability to stylize tooltips.
For styling we will use a class called TooltipStyle, which will do 2 things:
1) declare some variables related to tooltip styles and store their values,
2) set default values for these properties.
For now, lets add only 2 properties - backgroundColor and textFormat:
In TooltipCursor well add a new function called setStyle(), which is public and receives a TooltipStyle object as parameter. Using this function, it will be able to change the style of tooltips by simply providing a TooltipStyle object.
Before we do that, well need to declare a new property "style":
Now, in the new function setStyle(), we can apply the received parameter value to our style variable, and then adjust the appearance of the text field according to the provided values.
Well also introduce a new function called setText(), which receives a String value and applies it to the tooltip. Moreover, here we calculate the new position and size of the text field, as well as set its style again.
Full TooltipCursor class:
Go to EasyTooltip and create a new function called setStyle(), which sets the style of its cursor object.
Remove the lines from onFrame() that set the position and size of the text field inside the cursor, and use the setText() function to update the text of the tool tip instead of directly using the textfields text property:
In the constructor of the class, we need to call the setStyle() function and pass a new TooltipStyle object as a parameter, to set the default values:
Full class code so far:
Now in main.as you can use the defauly style by simply not specifying a custom style:
Or you can set a custom style like this:
Thats all for today.
Thanks for reading!
Read more »
For styling we will use a class called TooltipStyle, which will do 2 things:
1) declare some variables related to tooltip styles and store their values,
2) set default values for these properties.
For now, lets add only 2 properties - backgroundColor and textFormat:
package com.kircode.EasyTooltip
{
import flash.text.TextFormat;
/**
* Used for visually styling tooltips.
* @author Kirill Poletaev
*/
public class TooltipStyle
{
public var backgroundColor:uint;
public var textFormat:TextFormat;
public function TooltipStyle()
{
backgroundColor = 0x000000;
textFormat = new TextFormat("Arial", 17, 0xffffff);
}
}
}
In TooltipCursor well add a new function called setStyle(), which is public and receives a TooltipStyle object as parameter. Using this function, it will be able to change the style of tooltips by simply providing a TooltipStyle object.
Before we do that, well need to declare a new property "style":
private var style:TooltipStyle;
Now, in the new function setStyle(), we can apply the received parameter value to our style variable, and then adjust the appearance of the text field according to the provided values.
/**
* Set style of the tooltips.
* @paramst TooltipStyle object to apply.
*/
public function setStyle(st:TooltipStyle):void {
style = st;
txt.background = true;
txt.backgroundColor = style.backgroundColor;
txt.setTextFormat(style.textFormat);
}
Well also introduce a new function called setText(), which receives a String value and applies it to the tooltip. Moreover, here we calculate the new position and size of the text field, as well as set its style again.
/**
* Change the text value of the tooltip.
* @parammessage The new text value.
*/
public function setText(message:String):void {
txt.text = message;
setStyle(style);
txt.y = -30;
txt.width = 130;
txt.height = 25;
}
Full TooltipCursor class:
package com.kircode.EasyTooltip
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFormat;
/**
* The cursor that follows the mouse (if not set otherwise) and displays each tooltip.
* @author Kirill Poletaev
*/
public class TooltipCursor extends MovieClip
{
public var txt:TextField;
private var style:TooltipStyle;
public function TooltipCursor()
{
txt = new TextField();
addChild(txt);
}
/**
* Set style of the tooltips.
* @paramst TooltipStyle object to apply.
*/
public function setStyle(st:TooltipStyle):void {
style = st;
txt.background = true;
txt.backgroundColor = style.backgroundColor;
txt.setTextFormat(style.textFormat);
}
/**
* Change the text value of the tooltip.
* @parammessage The new text value.
*/
public function setText(message:String):void {
txt.text = message;
setStyle(style);
txt.y = -30;
txt.width = 130;
txt.height = 25;
}
}
}
Go to EasyTooltip and create a new function called setStyle(), which sets the style of its cursor object.
/**
* Set a new style for the tooltips.
* @paramstyle TooltipStyle object that defines the style.
*/
public function setStyle(style:TooltipStyle):void {
cursor.setStyle(style);
}
Remove the lines from onFrame() that set the position and size of the text field inside the cursor, and use the setText() function to update the text of the tool tip instead of directly using the textfields text property:
private function onFrame(evt:Event):void {
cursor.x = par.mouseX;
cursor.y = par.mouseY;
var displayInd:int = -1;
for (var i:int = 0; i < listeners.length; i++) {
if (listeners[i].tip.display) {
displayInd = i;
break;
}
}
if (displayInd == -1) {
cursor.alpha = 0;
}else {
cursor.alpha = 1;
cursor.setText(listeners[displayInd].tip.msg);
}
}
In the constructor of the class, we need to call the setStyle() function and pass a new TooltipStyle object as a parameter, to set the default values:
/**
* Create a Tooltip manager. Needed for creating and managing tooltips.
* @paramparent Reference to the parent of tooltips - the container, which will contain the objects that will be rolled over.
*/
public function EasyTooltip(parent:DisplayObjectContainer)
{
par = parent;
listeners = [];
cursor = new TooltipCursor();
cursor.mouseChildren = false;
cursor.mouseEnabled = false;
parent.addChild(cursor);
cursor.addEventListener(Event.ENTER_FRAME, onFrame);
setStyle(new TooltipStyle());
trace("Tooltip manager created!");
}
Full class code so far:
package com.kircode.EasyTooltip
{
import flash.display.DisplayObjectContainer;
import flash.display.DisplayObject;
import flash.events.Event;
/**
* Utility for creation of tooltips.
* @author Kirill Poletaev
*/
public class EasyTooltip
{
private var par:DisplayObject;
public var listeners:Array;
private var cursor:TooltipCursor;
/**
* Create a Tooltip manager. Needed for creating and managing tooltips.
* @paramparent Reference to the parent of tooltips - the container, which will contain the objects that will be rolled over.
*/
public function EasyTooltip(parent:DisplayObjectContainer)
{
par = parent;
listeners = [];
cursor = new TooltipCursor();
cursor.mouseChildren = false;
cursor.mouseEnabled = false;
parent.addChild(cursor);
cursor.addEventListener(Event.ENTER_FRAME, onFrame);
setStyle(new TooltipStyle());
trace("Tooltip manager created!");
}
/**
* Set a new style for the tooltips.
* @paramstyle TooltipStyle object that defines the style.
*/
public function setStyle(style:TooltipStyle):void {
cursor.setStyle(style);
}
/**
* Add a Tooltip listener.
* @paramlistener Object, which invokes the tooltip on roll over.
* @paramtooltip Message to be displayed.
* @returnNewly created Tooltip object. Can be used to dynamically change its properties in real-time.
*/
public function addListener(listener:DisplayObject, tooltip:String):Tooltip {
var tip:Tooltip = new Tooltip(tooltip);
var list:TooltipListener = new TooltipListener(listener, tip);
listeners.push(list);
return tip;
}
private function onFrame(evt:Event):void {
cursor.x = par.mouseX;
cursor.y = par.mouseY;
var displayInd:int = -1;
for (var i:int = 0; i < listeners.length; i++) {
if (listeners[i].tip.display) {
displayInd = i;
break;
}
}
if (displayInd == -1) {
cursor.alpha = 0;
}else {
cursor.alpha = 1;
cursor.setText(listeners[displayInd].tip.msg);
}
}
}
}
Now in main.as you can use the defauly style by simply not specifying a custom style:
tooltip = new EasyTooltip(stage);
tooltip.addListener(object1, "This is an object.");
Or you can set a custom style like this:
var myStyle:TooltipStyle = new TooltipStyle();
myStyle.backgroundColor = 0x333333;
tooltip.setStyle(myStyle);
Thats all for today.
Thanks for reading!
KitKat 4 4 Updates Revealed for Many Smartphones
Upcoming Android KitKat 4.4 Updates Revealed.for Many Smartphones.
The secret have been revealed about Upcoming Kitkat updates for many Samsung Smartphones. Samsung users are going to taste Kitkat soon. "When my devices will have Kitkat "was the most asking question by the Galaxy Users after releasing Kitkat for Some latest devices. Sammobile revealed the secret of upcoming updates and the devices which will have Kitkat.Sammobile were succeeded to receive internal documents that confirms the date and devices which will receive updates. Some devices might skip over Android 4.4.2 to get Android 4.4.3. This could be a main reason to delay updates in smartphones .
Samsung S3 will not be able receive Kitkat update due to some technical difficulties.Samsung S3 Updates are pending . However S3 LTE (American Version) will be able to receive Kitkat Updates. Here is Devs Report about S3 Updates.
Source : Sammobile.com
How to draw a heart in Illustrator Video Tutorial
In this video from lynda.com, author Deke Mclelland shows you how to draw a heart in Illustrator.
Deke has more Adobe Photoshop and Illustrator video tutorials in an excellent series called Dekes Techniques. You can check them all out with this free 7-day trial pass.
Read more »
Deke has more Adobe Photoshop and Illustrator video tutorials in an excellent series called Dekes Techniques. You can check them all out with this free 7-day trial pass.
Working with Adobe Premiere Pros Basic 3D Video Effect PART 2
Next, we are going to apply the Basic 3D video effect to the title clip that was just placed on the Timeline.
Go to the Effects window (choose Window > Effects from the main menu if you do not see it). You will find the Basic 3D video effect under Video Effects > Perspective. Once you find it, click and drag it down onto the basic_3D title clip on the Video 1 track of your Timeline in order to apply the video effect.
Make sure that your title clip is still selected, then go to the Effect Controls window (choose Window > Effect Controls if you do not see it). You should be able to see Basic 3D under Video Effects. Click the right-facing arrowhead beside the word Basic 3D in order to see the effects properties. You will see 5 items: Swivel, Tilt, Distance to Image, Specular Highlight and Preview.
Lets work with the Swivel property first. The Swivel property controls the clips horizontal rotation. It has two values that you can work with: the number of rotations and the rotation angle.
Make sure that the title clip on your Timeline is still selected. Then in the Effect Controls window, drag the playhead to the leftmost edge of the clips timeline. Then click on the Toggle Animation button beside the word Swivel (its the icon that looks like a stopwatch). This will turn on keyframing for the Swivel property and will automatically add one keyframe to where the playhead is positioned.
Then move the playhead forward by about 1 second and add another keyframe by clicking on the Add Keyframe button. Keep the playhead over that keyframe and change the Swivel propertys angle value. The angle value is the one to the right of the x. Right now, it should be 0.0. Click on it and input a value of 80.
Then move the playhead forward once again by about 1 second and add another keyframe. On this keyframe, change the Swivel propertys angle back to zero.
By now, if you play your movie on the program monitor, you should have something like this:
go back to Working with Adobe Premiere Pros Basic 3D Video Effect PART 1
continue to Working with Adobe Premiere Pros Basic 3D Video Effect PART 3
Read more »
Go to the Effects window (choose Window > Effects from the main menu if you do not see it). You will find the Basic 3D video effect under Video Effects > Perspective. Once you find it, click and drag it down onto the basic_3D title clip on the Video 1 track of your Timeline in order to apply the video effect.
Make sure that your title clip is still selected, then go to the Effect Controls window (choose Window > Effect Controls if you do not see it). You should be able to see Basic 3D under Video Effects. Click the right-facing arrowhead beside the word Basic 3D in order to see the effects properties. You will see 5 items: Swivel, Tilt, Distance to Image, Specular Highlight and Preview.
Lets work with the Swivel property first. The Swivel property controls the clips horizontal rotation. It has two values that you can work with: the number of rotations and the rotation angle.
Make sure that the title clip on your Timeline is still selected. Then in the Effect Controls window, drag the playhead to the leftmost edge of the clips timeline. Then click on the Toggle Animation button beside the word Swivel (its the icon that looks like a stopwatch). This will turn on keyframing for the Swivel property and will automatically add one keyframe to where the playhead is positioned.
Then move the playhead forward by about 1 second and add another keyframe by clicking on the Add Keyframe button. Keep the playhead over that keyframe and change the Swivel propertys angle value. The angle value is the one to the right of the x. Right now, it should be 0.0. Click on it and input a value of 80.
Then move the playhead forward once again by about 1 second and add another keyframe. On this keyframe, change the Swivel propertys angle back to zero.
By now, if you play your movie on the program monitor, you should have something like this:
go back to Working with Adobe Premiere Pros Basic 3D Video Effect PART 1
continue to Working with Adobe Premiere Pros Basic 3D Video Effect PART 3
Repair bootloop or stuck in android logo in your S5280 with Firmware
You can recover your S5280 with boot loop problem or stuck in android in this tutorial. If you have problem like the phone is keep on rebooting, stuck on logo. Do not try this tutorial in yoour S5282, because this has different firmware. It might brick your S5282 if you proceed in this tutorial.
You need to download several files including the firmware
Odin --> Odin 3.07
Firmware -- > S5280XXAMF1_OXXAME5.zip
Samsung Driver -- > SamsungDriver
"Extract these files in your desired folder"
Installing the driver
1. Install driver first just keep on hitting next.
2. After installing the driver Press and Hold Volume Down + Home Key + Power Button, a selection will appear if you would like to go in Download Mode, Press Volume Up to proceed in Download Mode.
3. Connect your phone in the PC via USB Cable
4. Wait for it to finish installing the driver.
"Note: Sometimes it is better to reboot your PC. After installing the driver."
BEFORE PROCEEDING IN FLASHING MAKE SURE THAT THE BATTERY IS FULLY CHARGED OR 50% CHARGED.
Flashing your Phone
1. Open Odin 3.07
2. Load the following file. PDA, Phone, CSC. No need to overwrite Boot. And its okey to not include the pit file.
3. Do not check repartition in option key, copy only what is shown in the picture above.
4. When you are ready to flash your phone, Press and Hold Volume Down + Home Key + Power Button, a selection will appear if you would like to go in Download Mode, Press Volume Up to proceed in Download Mode.
5. Connect your phone in the PC via USB Cable, wait for a value in the ID:COM to appear. It will turn yellow with number example: COM32
6. Press START to proceed flashing your phone. Wait until it is done, the phone will reboot after flashing.
I hope this tutorial help you. Drop a comment if there is something is not clear to you. Cheers! ^_^
Read more »
You need to download several files including the firmware
Odin --> Odin 3.07
Firmware -- > S5280XXAMF1_OXXAME5.zip
Samsung Driver -- > SamsungDriver
"Extract these files in your desired folder"
Installing the driver
1. Install driver first just keep on hitting next.
2. After installing the driver Press and Hold Volume Down + Home Key + Power Button, a selection will appear if you would like to go in Download Mode, Press Volume Up to proceed in Download Mode.
3. Connect your phone in the PC via USB Cable
4. Wait for it to finish installing the driver.
"Note: Sometimes it is better to reboot your PC. After installing the driver."
BEFORE PROCEEDING IN FLASHING MAKE SURE THAT THE BATTERY IS FULLY CHARGED OR 50% CHARGED.
Flashing your Phone
1. Open Odin 3.07
2. Load the following file. PDA, Phone, CSC. No need to overwrite Boot. And its okey to not include the pit file.
PDA --> CODE_S5280XXAMF1_1247256_REV03_user_low_ship.tar.md5
Phone -- > MODEM_S5280XXAMF1_REV03.tar.md5
CSC -- > CSC_OXX_S5280OXXAME5_1236083_REV03_user_low_ship.tar.md5
3. Do not check repartition in option key, copy only what is shown in the picture above.
4. When you are ready to flash your phone, Press and Hold Volume Down + Home Key + Power Button, a selection will appear if you would like to go in Download Mode, Press Volume Up to proceed in Download Mode.
5. Connect your phone in the PC via USB Cable, wait for a value in the ID:COM to appear. It will turn yellow with number example: COM32
6. Press START to proceed flashing your phone. Wait until it is done, the phone will reboot after flashing.
I hope this tutorial help you. Drop a comment if there is something is not clear to you. Cheers! ^_^
Thursday, January 29, 2015
Karbonn A30 Hard Reset Google Account Remove Pattern Lock Force Close
Before you proceed flashing / hard resetting your phone / tablet make sure to back up your important files if possible. Because we care about your data.
In this tutorial I will gonna teach you how to hard reset your Karbonn A30. This can fix the following issues that you are experiencing in your phone:
1. Force Close Apps
2. If you forgot your Google Account
3. Hang in Logo
Ok lets do it. Just follow the procedure
1. Power off mobile
2. Now press Volume UP and Power Key altogether
3. Recovery Menu will appear
4. Press Home Button, Android menu will appear
5. Select Wipe Data/Factory Reset
****Note: Sometimes you must press the power button first. Before pressing the other combination button.
Read more »
We also suggest that your battery should be atleast 50% or better to have it fully charge, lower than the said value may cause unwanted result, such as bricking your phone / tablet rendering it unuseable. This is very important in flashing your phone / tablet. Use original USB cable as possible.
Files that you downloaded should not be corrupted, if ever the file is corrupted you might brick your phone. Or the flashing will start.
Drivers are very important specially in Spreadtrum Chipset, having an Spreadtrum SPD6610 (non android devices) driver will not work in SPD6820 (android devices).
If you are using laptop to flash your phone, make your that it has enough charge. If your laptop shutdown when your flashing your phone/tablet, youll end up bricking your phone. Sometimes you can still recover your phone just flash it again and your phone will boot up again. But that is just a case to case basis, if your phone / tablet is deadboot (totally dead, erased all program in the chip) you cant recover it, you will need to seek professional help (technician).
In this tutorial I will gonna teach you how to hard reset your Karbonn A30. This can fix the following issues that you are experiencing in your phone:
1. Force Close Apps
2. If you forgot your Google Account
3. Hang in Logo
Ok lets do it. Just follow the procedure
1. Power off mobile
2. Now press Volume UP and Power Key altogether
3. Recovery Menu will appear
4. Press Home Button, Android menu will appear
5. Select Wipe Data/Factory Reset
****Note: Sometimes you must press the power button first. Before pressing the other combination button.
Thats it. Your phone will be back in its original state.
I hope this tutorial help you with your problem.
If you have any tutorial or problems in your mobile phone I will be glad to help.
KNC MD803 Allwinner A13 Android Tablet PC Restore Firmware
KNC MD803 8 Inch
Allwinner A13 Android Tablet PC
Restore Firmware
Similar to board id : FOR-FUN-Q5-V1.3 2012-9-05
Learn :How to check board id of Tablet
Company Warranty for Tablet PC:
One year warranty cover repair or replacement of defective products.
Encyclopedia:-
Read Article About Allwinner Technology
Read Article About Allwinner Technology
Specifications:
KNC Brand Model 803
LCD | 8 inch Capacitive Touch Screen |
Screen Resolution | 800 x 600 Pix |
Processor | 1.5 Ghz Cortex A8 |
Chipset / Boxchip | Allwinner A13 |
RAM | 512 MB |
Built in Memory | 8 GB |
External Memory | Support Micro Card (Max 32GB) |
Wifi | 802.11 b/g/n supported |
Bluetooth | N/A |
Sim | N/A |
Camera | 0.3Mp front and 2Mp rear camera |
HDMI /3g Dongle | Support 3G Dongle |
Microphone | Built IN |
Weight | 436 g |
Android Version | 4.0 |
Tablets Restore Instructions:
To find out generic or factory firmware you need to find board id of Android Tablets.
Learn :How to check board id of Tablet
Tablet PC Flashing Tools:
- Tablet Flashing Tool :Firmware upgrade tool LiveSuit & Drivers
- Tablet Flashing Tool: Firmware upgrade Tool Phoenix Usb Pro
- Flashing with TF Card:Firmware update instruction with microSD card
Tablet PC Flashing Tutorials:
- LiveSuit Tutorial : How to flash tablet with LiveSuit
- LiveSuit Video Tutorial : Tablets flashing Video Tutorial
- Phoenix Usb PrO Video Tutorial :Tutorial
Recommended Tools:
You can also use : Android Multi Tools
Common Android Tablets issues :
The following firmware , ROM file will be used when your Android tablet facing various problems .
1. Forgotten Pattern Lock on Android Tablets.
2.Too many pattern attempts / Reset user lock.
3. Tablets PC stuck on Gmail account.
4. Android Tablet PC stuck on Android logo.
5. Tablet Android hang on start-up / Multiple errors generating by OS.
6. Google play store having problems or generating errors.
7.Upgrading tablets to new Android OS.
6. Google play store having problems or generating errors.
7.Upgrading tablets to new Android OS.
you can use this Android Tablet firmware, ROM to restore your Android China tablets to generic firmwares or upgrades . Make sure to charge battery upto 60%. Power failure during flashing may result dead or broken tablets.
Note : Flashing generic tablet firmware should be last option.
Firmware Download:
Download Restore Firmware
Subscribe to:
Posts (Atom)