How do I download or save a YouTube video to my computer?

YouTube has been designed to only allow users to watch and view videos on their website. Many users want to save their favorite videos to their computer so they can watch them without being connected to the Internet or so they can watch them on other devices. Below are the steps required for downloading and watching YouTube videos on your computer for free.

Saving YouTube video as a video file on your computer

Today, there are several online websites that allow you to enter the URL of the video you wish to save to your computer, and get a link to download the file. Below is the simple three step process that will link you to a page that does the job.

  1. Go to the YouTube video page and copy the URL of the video you wish to save. For example, below is a URL to a video on YouTube, the whole address would be copied.
  2. Once this address has been copied, paste that URL into the below URL text field and click the Download Video button.

  3. If done properly, a new window will open with available video formats that can be saved. For most users we suggest the MP4 format, other formats may include FLV, 3GP, and WebM.

Hope you liked the simple way to download the videos from YouTube.  :-)

How to Root any Android Phone without PC

Rooting your android phone is a time consuming tasks and requires having a PC with other accessories. For those people who want to root android phone without a PC now can root their device without using computer.

Not everyone roots their android phones, but there are several advantages of rooting your phone. It removes several restrictions and gives you full access to the device. You can increase the performance of your android phone by tweaking few things on it, ability to install custom ROM with latest firmware update and many more awesome things.

But the thing to remember before rooting any android phone is that it voids warranty of your device. And if something goes wrong while rooting your phone you better forget you have any warranty card.

Can you Unroot your Android Phone?

Thankfully! Yes you can unroot any android phone easily with few clicks. I have covered this topic in this post: How to unroot any Android Phone

Coming back to the method rooting android phone without PC is instructed and developed by a developer called alephzain from XDA forums. By using Framaroot app you will be able to root any android phone without the need of a PC.

How does this App Works?

Once you download and install Framaroot application on your android phone it can install the Superuser and Su binary on your phone and also uses six safe exploits to complete the rooting process namely Gandalf, Boromir, Sam,,Frodo , Aragorn and Gimli.

Note: Using Framaroot You can only root phone running on Android 2.0 to Android 4,2 Jelly Bean.
Root Android Phone without a PC

1. Download Framaroot App on your PC or You can directly download it on your Android phone

Note: Download the Frameroot APKs from the XDA site. 

2. If you have downloaded the apk file on your computer then copy it to your android phone memory and if you have downloaded on your phone then be it there itself and proceed with step 3.

3. Now click on the downloaded or copied apk file to install it

4. Next inside the app choose “Install Superuser “ option

5. Now select any of the exploits that appear in the app and wait till the process completes

6. If the rooting is successful then you’ll see a message like this “Success. Superuser and su binary installed”. You have to reboot your device”

7. If the rooting process fails with a message like “Failed. Try another exploit if available” then try any other exploit from the app.

That’s it! You have successfully rooted your android phone without using a PC. If you want you can also unroot your device using the same app.

Compatibility for Qualcomm devices (Gandalf exploit only) :

Asus Padfone 1/2
Asus Padfone Infinity
Asus Transformer Pad Infinity TF700KL
BW T18+ (Fortis Evo)
Cloudfone Thrill 430x
Disgo 8400g
DNS S4504/S4503/S4502
Gigabyte GSmart G1315 Skate
Gigabyte GSmart Rio R1
Google Nexus 4
Highscreen Spark/OMEGA Q/Blast/Strike/Boost
Huawei Honor Pro (U8950-1)
Huawei U8815/U8816 Ascend G300/G301
Huawei U8825D Ascend G330D
Karbonn Titanium S5
Kyocera Torque
Lenovo S870E
LG Nitro HD
LG L7 II P710/P714/P715
LG Optimus F5 (P875)
LG Optimus G E970/E975
LG Optimus L3 II E425
LG Optimus L5 E610/612/615
LG Optimus L7 II P710/P713/ P714/P715
LG Optimus L7 P700/Р705
LG Optimus LTE 2
Micromax A111 Canvas Doodle
Oppo Find 5
Orange Nivo
Pantech Discover
Pantech IM-A840S Vega S5
Samsung Galaxy Win I8552
Sharp Aquos Phone SH930W
Sony Xperia E C1505/Dual C1605
Sony Xperia L C210X
teXet TM-3204R
teXet TM-4677
Xiaomi Mi-2S
ZTE V880G/ZTE V955

Compatibility for MTK devices (Boromir exploit only) :

Alcatel OT 4030D S’POP
Alcatel OT 8008D Scribe HD
Alcatel OT 997D
Alcatel OT Idol 6030X/6030D/6030H
Amoi N828
ASUS Memo Pad HD 7
Chinese Star S7589
Explay HD Quad
Explay infinity II
Explay Polo
Explay Surfer 7.32 3G
Explay Surfer 8.31 3G
Fly IQ440 Energie
Fly IQ441 Radiance
Fly IQ442 Miracle
Fly IQ443 Trend
Fly IQ446 Magic
Fly IQ450 Quattro Horizon 2
Fly IQ451
GoClever Fone 570Q
Haipai I9389
Highscreen Alpha GTX
HKC Q79 3G
Huawei U8836D G500 Pro
IconBIT NetTAB Space 3G Duo
iOcean X7
Jiayu G2
Jiayu G3S
Jiayu G4
Lava iris 405
Lenovo IdeaPhone P700i
Lenovo IdeaPhone S720
Lenovo IdeaTab A3000-H
Lenovo IdeaTab S6000-H
Lenovo P770
Lenovo S820, S920, A390
Micromax Canvas HD
Motorola RAZR D3
Newman N1
Oppo findway U7015
Philips W536
Philips W736
Prestigio MultiPhone 4055
Prestigio MultiPhone PAP 4505DUO
Sharp AQUOS SH837W
Star S5 Butterfly
TeXet NaviPad TM-7055HD
Texet TM-5277
THL W100 (130711)
THL W200
ZOPO C2 Platinum
ZOPO ZP900 Leader
ZTE V987 Grand X Quad

Compatibility for Samsung devices (Legolas and Aragorn exploits only) :

Samsung Galaxy Core GT-I8262
Samsung Galaxy Proclaim S720C
Samsung Galaxy Young GT-S6312/GT-S6310
Samsung Lightray SCH-R940

Compatibility for Exynos devices (Sam, Frodo, Legolas and Aragorn exploits only) :

AT&T Galaxy Note 2 SGH-I317
Highscreen Explosion
Hyundai T7s
Impression 9702 (Exynos 4412)
Lenovo K860/К860i
Newman N2
Meizu MX2
Samsung Galaxy Camera EK-GC100
Samsung Galaxy Note 10.1 GT-N8000, GT-N8010, GT-N8013, GT-N8020
Samsung Galaxy Note 2 GT-N7100
Samsung Galaxy Note 2 LTE GT-N7105
Samsung Galaxy Note 8.0
Samsung Galaxy Note GT-N7000
Samsung Galaxy S GT-i9000
Samsung Galaxy S2 AT&T SGH-I777
Samsung Galaxy S2 Epic 4G Touch – SPH-D710
Samsung Galaxy S2 GT-I9100
Samsung Galaxy S3 GT-I9300
Samsung Galaxy S3 LTE GT-I9305
Samsung Galaxy Tab Plus GT-P6200/GT-P6210
Samsung Galaxy Tab 7.7 GT-P6800/GT-P6810
Samsung SGH-i997 Infuse 4G
T-Mobile Galaxy Note 2 T-889
Verizon Galaxy Note 2 SCH-I605
iBerry Auxus CoreX2 3G and CoreX4 3G

Compatibility for Omap36XX devices (Gimli exploit only) :

Archos Gen8
Cliq 2 MB611
Coolpad Quattro 4G
Droid 2 (a955)
Droid 2 Global (a956)
Droid X (MB810)
LG Marquee LS855
LG P970 Optimus Black
Motorola DEFY+ (MB525 / MB526)
Motorola Droid PRO
Motorola Droid X
Motorola XPRT
Parrot ASTEROID Smart
R2D2 (a957)

If you have any queries/feedback, please write it in comments section below OR mail me here : Snehal[at]Techproceed[dot]com

Happy Androiding :-)

How to Enable USB Debugging & Developer Options in Android 4.2 Jelly Bean

The USB Debugging and Developer Options are hidden in latest Android 4.2 Jelly Bean. If we want to use that options, manually activate it. Google has rolled out latest Jelly Bean OTA update for their nexus mobiles. After the updating process, the developer option is not there in settings. Here is the guide to enable USB debugging on Android 4.2 Jelly Bean running mobiles and tablets.

Developer Options have many features for app developer to test an app on their device from PC via ADB. After enabling the debugging mode only, access the mobile from PC. ADB is used for users if they want to quickly access and run commands on their device from their PC or Laptop. In gingerbread it is placed in Settings >  Applications  >  Development  >  USB Debugging. And ICS it is placed in Settings  >  Developer Options  >  USB Debugging. But, after upgrading it to 4.2 it is missing. After a long time to search around, we found the way how to activate it.

How to Enable USB Debugging and Developer Options on Android 4.2 Jelly Bean:
  1. Go to – Settings > About phone.
  2. Then move on to Build number option
  3. Tap on Build number repeatedly about 7 times.
  4. This is enough.
  5. After touching 7th time you will see a message that, “you are now a developer”.

Now the option will be placed in Settings menu. Normally it placed under System in Settings menu. Then you can enable it in Developer Options and Android Debugging.

5 class design principles [S.O.L.I.D.] in Java

Classes are the building blocks of your java application. If these blocks are not strong, your building (i.e. application) is going to face the tough time in future. This essentially means that not so well-written can lead to very difficult situations when the application scope goes up or application faces certain design issues either in production or maintenance.

On the other hand, set of well designed and written classes can speed up the coding process by leaps and bounds, while reducing the number of bugs in comparison.

In this post, I will list down 5 most recommended design principles, you should keep in mind, while writing your classes. These design principles are called SOLID, in short. They also form the best practices to be followed for designing your application classes.
  1. Single Responsibility Principle
  2. Open Closed Principle
  3. Liskov’s Substitution Principle
  4. Interface Segregation Principle
  5. Dependency Inversion Principle

Lets drill down all of them one by one.

Single Responsibility Principle

The name of the principle says it all:

"One class should have one and only one responsibility"

In other words, you should write, change and maintain a class for only one purpose. If it is model class then it should strictly represent only one actor/ entity. This will give you the flexibility to make changes in future without worrying the impacts of changes for another entity.

Similarly, If you are writing service/manager class then it should contain only that part of method calls and nothing else. Not even utility global functions related to module. Better separate them in another globally accessible class file. This will help in maintaining the class for that particular purpose, and you can decide the visibility of class to specific module only.

Open Closed Principle

This is second important rule which you should keep in mind while designing your application. It says:

"Software components should be open for extension, but closed for modification"

What does it mean?? It means that your classes should be designed such a way that whenever fellow developers wants to change the flow of control in specific conditions in application, all they need to extend your class and override some functions and that’s it.

If other developers are not able to design desired behavior due to constraints put by your class, then you should reconsider changing your class. I do not mean here that anybody can change the whole logic of your class, but he/she should be able to override the options provided by software in unharmful way permitted by software.

For example, if you take a look into any good framework like struts or spring, you will see that you can change their core logic and request processing, BUT you modify the desired application flow just by extending some classes and plugin them in configuration files.

Liskov’s Substitution Principle

This principle is a variation of previously discussed open closed principle. It says:

"Derived types must be completely substitutable for their base types"

It means that the classes fellow developer created by extending your class should be able to fit in application without failure. I.e. if a fellow developer poorly extended some
part of your class and injected into framework/ application then it should not break the application or should not throw fatal exceptions.

This can be insured by using strictly following first rule. If your base class is doing one thing strictly, the fellow developer will override only one feature incorrectly in worst case. This can cause some errors in one area, but whole application will not do down.

Interface Segregation Principle

This principle is my favorite one. It is applicable to interfaces as single responsibility principle holds to classes. It says:

"Clients should not be forced to implement unnecessary methods which they will not use"

Take an example. Developer Alex created an interface “Reportable” and added two methods generateExcel() and generatedPdf(). Now client ‘A’ wants to use this interface but he intend to use reports only in PDF format and not in excel. Will he achieve the functionality easily.

NO. He will have to implement two methods, out of which one is extra burden put on him by designer of software. Either he will implement another method or leave it blank. So are not desired cases, right??

So what is the solution? Solution is to create two interfaces by breaking the existing one. They should be like PdfReportable and ExcelReportable. This will give the flexibility to user to use only required functionality only.

Dependency Inversion Principle

Most of us are already familiar with the words used in principle’s name. It says:

"Depend on abstractions, not on concretions"

In other words. you should design your software in such a way that various modules can be separated from each other using an abstract layer to bind them together. The classical use of this principle of BeanFactory inspring framework. In spring framework, all modules are provided as separate components which can work together by simply injected dependencies in other module. They are so well closed in their boundaries that you can use them in other software modules apart from spring with same ease.

This has been achieved by dependency inversion and open closed principles. All modules expose only abstraction which is useful in extending the functionality or plugin in another module.

These were five class design principle which makes the best practices to be followed to design your application classes. Let me know of your thoughts.

Happy Learning !!