Saturday, March 7, 2015

#34 How to Become a Free Software Hacker

Writing and using Free software is not just a type of programming, it is a kind of philosophy. While knowing a programming language is all you need to program, this post is about how to join the community, get friends, do great work together, and become a respected specialist with a profile you cannot get anywhere else. In the world of Free software you may rather easily get tasks that in a company only the elite, top level programmers are allowed to do. Think about the amount of experience this can bring. However, if you once decided to become a Free software hacker, you must be ready to invest some time into achieving this goal. This remains true even if you are an IT student already. Also, this post is not about how to become a cracker.


Steps 

Step 1:

Get a good Unix distribution. GNU/Linux is one of the most popular for hacking, but GNU Hurd, BSD, Solaris and (to some extent) Mac OS X is often used.



Step 2:

Learn how to use Command Line. You can do much more with Unix like operating systems if you use command line.



Step 3:

Learn some popular programming language until you reach a more or less satisfactory level. Without this, you cannot contribute code (the most important part of any software project) to the free software community. Some sources suggest to begin at once with two languages: one system language (C, Java or similar) and one scripting language (Python, Ruby, Perl or similar).



Step 4:

To be more productive, learn Eclipse or some other similar integrated development tool.



Step 5:

Learn and use advanced editor like VI or Emacs. They have a higher learning curve but you can do much more with them.



Step 6:

Learn version control. Version control is the likely most important co-operation tool for shared software development. Understand how to create and apply patches (text difference files). Most Free software development in the community is creating, discussing and applying various patches.




Step 7:


Find a suitable small Free software project, which you could easily join to get experience. Most of such projects now can be found on SourceForge.net. The suitable project must:


  • Use the programming language you know.

  • Be active, with recent releases.

  • Already have three to five developers.

  • Use version control.

  • Have some part you think you can immediately start implementing without modifying the existing code too much.

  • Apart from the code, a good project also has active discussion lists, bug reports, receives and implements requests for enhancement and shows other similar activities.



Step 8: 

Contact the administrator of the selected project. In a small project with few developers your help will usually be immediately accepted.



Step 9:

Carefully read the rules of the project and more or less follow them. The rules of the coding style or necessity to document your changes in a separate text file may first appear ridiculous to you. However the purpose of these rules is to make the shared work possible - and the most projects do have them.



Step 10:

Work on this project for several months. Listen carefully that the administrator and other project members say. Apart programming, you have a lot of things to learn. But if you really do not like something, just go away to another project.



Step 11:

Do not stick with the underground project for too long. As soon as you find yourself successfully working in that team, it is time to look for the serious one.



Step 12:

Find a serious, high level Free software or Open source project. Most such projects are owned by GNU or Apache organizations.



Step 13:

As we are doing a serious jump now, be ready for the far cooler acceptance. You will likely be asked to work for some time without direct write access to the code repository. The previous underground project should, however, have taught you a lot - so after several months of the productive contribution you can try to demand rights you think you should have.



Step 14:

Take and do a serious task. It is time. Do not be afraid. Go on even after you discover that the task is lots more difficult than you initially thought - in this step it is important not to give up.



Step 15:

If you can, apply to your serious task to the Google's "Summer of Code" to get some money from this adventure. But just do not care if the application is not accepted as they have far less funded positions than really good hackers.



Step 16:

Look for a suitable conference happening nearby ("Linux days" or something similar) and try to present your project there (all projects, not just the part you are programming). After you, tell you are representing a serious Free / Open source project, the organizers frequently release you from the conference fee (if they do not, the conference is likely unsuitable anyway). Bring your Linux laptop (if you have one) and run demos. Ask the project administrator for the material you may use when preparing your talk or poster.



Step 17:

Search the web for an announcement about the install party happening nearby and try to join it first time as a user (watch for all problems and how hackers solve them) and next time as an installer.



Step 18:

Complete the task, cover with automatic tests and contribute to the project. You are done! To be sure, try to meet some hackers of the project physically and have a glass of beer.




Step 19:






Step 20:

For better understanding, look into real example of the development history for a Free Software project (above). Each raising curve represents a contribution (lines of code) from a single developer. Developers tend to become less active over the years, but the project frequently even accelerates as new people join. Hence, if you already come with some useful skills, there are no reasons why the team would not invite you.




Tips

  • Before asking any question about the working rules inside the project, try to search for the answer in the project documentation and mailing list archives.

  • Always continue the hacking you started. Does not build, does not run, crashes? There are reasons for everything and if you have source code this usually means that you can force the system to do whatever you want, especially with the help of the web search. This rule has its limits, but, indeed, never yield easily.

  • Only say you are a hacker after some true hacker community recognizes you as such.

  • From the beginning, select a class, module or some other unit under which nobody is very actively working at the moment. Working together on the same class or even function needs more skills and a lot of care from all sides.

  • The employers of some hackers seem motivated enough to allow contributions during their working time (usually because the institution uses the Free/Open source program that the hacker is developing). Think, maybe you can get at least part of the needed time this way.

  • If you still do not trust yourself enough, start from some part of code that you think is missing and can be written from scratch. Changes in existing code are much more likely to attract criticism.




Warnings

  • In the informal meeting like beer event of the project to that you have never contributed any code you will have the unpleasant feeling of being highly ignored. Do not worry, some hackers are great friends later, after you earn respect with your code.

  • In the cooperative world of Free software you code and in rare cases even all projects of your group may be unexpectedly replaced by some other contribution. Examples of large scale overwrites could be the now forgotten Harmony or more recent history of GNU Classpath, for instance. Mature hackers say "welcome" and take benefits of the new code becoming available - there is just no better way to react. This, however, does not come naturally and must be learned. See an example of such an attitude.

  • Already very successful projects may have written or unwritten policies never return anything back to your work (no money, no possibility to self - promote, no elevated status regardless of the contribution, etc. - see Wikipedia). If you do not accept this well, stick with more mid range projects that cannot afford such attitude.

  • Do not start from small code optimizations, extra comments, coding style improvements and other similar "small-scale" stuff. It may attract far more criticism than any serious contribution. Instead, collect these into a single 'cleanup' patch.


  • Your hacker status in the project community reflects your present more than your past. In particular, if you want a recommendation from the project leader or anything they like, ask till you are still actively contributing.


  • Avoid asking any question related to the fundamentals of programming or programming tools. A Free software programmer's time is valuable. Instead, discuss the basics of programming in communities for amateur or new programmers.


  • While the word "hacker" sounds with respect in the most of the academic environments, for some uninformed people it may associate with breaking into security systems and other computer-related crimes that a different social group (crackers) do. Unless you are ready to explain, look to whom are you saying this word. Real hackers as they are meant in this article never join programming activities that seem for them illegal. First, they are proud of following the hacker ethic. Second, the law violations are not necessarily better paid.


  • If you plan to meet Free software hacker's eye to eye, always leave your Windows laptop at home. Mac OS is tolerated somewhat better, but also not welcome. If you do bring your laptop, it must run Linux or other operating system that they consider as "Free software".


  • For the same reason, never expect an older hacker to write a detailed description of your task or even provide any kind of supervision for you. While open source projects may have a lot of strict rules, they usually work along the lines of what is known as extreme programming in the programming methodology.

    • If your mail client supports HTML messages, turn this feature off. Never attach documents that only proprietary software (like MS Word) can open properly. Hackers understand this as insulting.

    • Do not volunteer to the company-owned projects that are not releasing any parts of their code under approved Open Source license. In such cases the really important parts of the project are likely to stay behind the closed doors of the owner, preventing you from learning anything useful.

    • Do not begin from starting your own project, unless you want to stick in a proud loneliness for ever. For the same reason, do not start from the attempt to revive the abandoned project, which has already lost its previous team (see why).

    • Big Free software projects, especially around GNU domain, do not treat your job as your personal matter. After you get or change the job in a software - related companies, they ask your employer to sign certain agreements that these may or may not sign. This can force to select the project with looser requirements.



    Things You'll Need

      • Linux. Many Free software projects are either more complicated to build under Windows or do not build properly at all. This is especially true for the advanced projects, devoted to the programming of mobile phones, USB keys and other amazing devices.

      • A computer with relatively good Internet connection. If you want to keep the dual boot with Windows, a second hard drive or partition for Linux would be a good solution.


      • Basic knowledge of at least one programming language and a strong intention to learn more. The most popular languages currently seem to be C and Java.


      • A considerable amount of time, at least 5 hours a week (a typical hardcore hacker contributes as many as 14).


      • While the formal education in informatics would make your way lot easier, you do not need it as a mandatory condition and no any real hacker community will ever ask you. Hackers judge about each other by one's hacking, not bogus criteria such as degrees, age, race, or position. However, at least 60 % of hackers that watch you patches do have the "right" university degree and will not allow you to do any nonsense in the project.

        • During the last steps (conference and install party) you would benefit from your own laptop. However, it is not good for working at home, so only buy it if you can afford the second machine.

          • The described path of becoming a hacker needs at least about two years to be completed.

            Thursday, March 5, 2015

            #33 NVIDIA announces Android powered SHIELD console at GDC 2015

            NVIDIA hopes to redefine the future of gaming with the SHIELD console, which has now spent five years in the making 

             

            There have been plenty of exciting announcements at the GDC (Game Developers Conference) so far and today morning it was NVIDIA’s turn to unveil a whole new ecosystem around the SHIELD of which we have seen and heard quite a lot. This news provides a much needed positive outlook in the wake of the recent GTX 970 controversy.





            The event began with Jen-Hsun, CEO, NVIDIA coming onto the stage to highlight three major points around the SHIELD console and they are:

            Revolutionary TV Experience – SHIELD hopes is coming that one solution to all your living room entertainment needs.

            Game Console – Not only a movie and TV show centric device, the SHIELD will also be a fully fledged gaming console to compete with the likes of XBOX ONE and PS4.


            Super Computer – Powered by the Tegra X1 the SHIELD is nothing short of packing the same computational power as is seen in today’s supercomputers.


            Jen-Hsun then gave a brief history lesson on the evolution of gaming frfor a niche segment to one of the biggest in the world today and highlighted NVIDIA’s role in all of it. All of which has culminated into the launch of the NVIDIA SHIELD console. 



            FIRST ANNOUNCEMENT
             
            The SHIELD has a very slick look and the one that becomes readily apparent is the small size of the device. It’s no surprise that the device would be this small since the hardware is akin to those found in tablets. The design of the device had to be such that it is performance while having an elegant body. By the looks of it, the SHIELD too has gone the same way as the XBOX ONE and the PS4 in terms of design with sharp edges, matte finish and oblong slits for ventilation.


            Here are some of the specs which were unveiled at the event.

             Sac – Tegra X1
             Android based
             Gigabit Ethernet 802.11ac WI-Fi

             Video decode capabilities of up to 4K resolution @60Hz rendering 30/60 FPS with each pixel having a colour depth of 10-bits per colour. Games will continue to be rendered at 1080p 30/60FPS. The XBOX One and the PS4 still don't have 4K video support which is rumoured to be included with the next hardware revision. As for gaming, we've seen quite a few games being rendered at 720p and 900p as opposed to 1080p which most gamers desire. In fact, Sony was subjected to a lawsuit for the same reason. The point to note here is that the Tegra X1 has a compute power of 1 Teraflop while the XBOX One and PS4 boast of 1.3 and 1.84 Teraflops, respectively. So despite the lower compute power NVIDIA claims to render games in 1080p. This again comes down to the game developers who might reduce the resolution as a quick means for porting games. 

            Jen-Hsun then proceeded to demo the UI of the shield after unveiling the remote control for the SHIELD. NVIDIA’s claims to have put in a high data-rate bi-directional microphone for voice enabled functionality which seems to run off of Google Now since the device is Android based. The remote supports a very minimalist design with just five buttons on the front – D-pad, select, back, home and microphone activate. The lower half of the remote has a ridge which is a touch sensitive volume control so sliding your finger along the ridge is how you’d go about messing with the levels. The rear of the remote is made of a single aluminium piece. There is a secondary microphone for chatting and it also has a Bluetooth receiver for headsets. Lastly, the remote has a rechargeable battery with a micro-USB port. 



            SECOND ANNOUNCEMENT
             
            The focus then shifted towards the gaming capabilities of the device. With the SHIELD, NVIDIA hopes to affect the same change that Netflix did to the video ecosystem and Spotify did to the music ecosystem. Given NVIDIA’s vast experience in making GPUs it was no surprise when the Tegra’s performance was shown to be 35 times greater than what the Apple TV is capable of. However, there was a caveat – the benchmark used to be quite old because it was the only one that would run across all TV hubs. Current gen benchmarks, if and when they release for all platforms, might have a slightly different story to tell.


            The Tegra X1 that sits at the heart of the device is based on the same Maxwell architecture that we’ve seen in the GTX 960/970/980/750/750Ti. Essentially, it performs the same as the previous generation but is a lot more efficient in terms of power and output/core. Since the SHIELD is a console, it was compared with the Xbox 360 and is reportedly capable of crunching twice the amount of numbers at one-fifth of the power. Needless to say, a Maxwell based chip should also run cooler in comparison to the other consoles. This is one of the main reasons why the device could be so small. 


            No announcement of a console could be complete without a controller. The SHIELD controller is the same that was launched with the SHIELD Tablet 8. It has a very simple layout with two analogue sticks, a D-pad and four buttons on the front with trigger and shoulder buttons on the top. Just like the remote, the controller uses WI-Fi direct to communicate with the SHIELD. This results in a reduced latency compared to other protocols. Also present is the voice functionality which we saw earlier along with a secondary microphone for chatting.




            We then saw the NVIDIA Store which will have 50 titles at launch, though quite a few of them are already available on the Android store. XBOX ONE had 22 launch titles and the PS4 had 26 launch titles. NVIDIA seems to have outdone both major players in this aspect and claims that another 50 will be added to the mix by the end of the year.


            Here are some of the AAA games that you can look forward to:

             Batman Arkham Knight
             Witcher 3
             Metal Gear Solid 5
             Resident Evil Revelations 2 Episode 2
             Borderlands: The Presequel
             War Thunder
             The Talos Principle
             Star Wars: Knights of the Old Republic
             And many more…

            We then had a few game studios, talk about the console before going on to demonstrate some of the games that have been ported onto the console.


            THIRD ANNOUNCEMENT

            The last highlight of the event was the announcement of NVIDIA GRID which is a GaaS (Gaming as a Service) and is going to be a subscription based service. NVIDIA has partnered with Amazon to host their GPU clusters in Amazon’s data centres across the world. The service enables you to purchase games on the SHIELD STORE and play them instantly, there is no waiting time for downloads for the entire computation is happening at Amazon’s AWS and just the video stream is being sent to the SHIELD console. There are going to be two subscription tiers:

             Basic – 720p streaming
             Premium – 1080p 60 FPS streaming
            This was again followed by demonstrations by different game studios who had already ported their games for the SHIELD console. The streaming service was reportedly capable of maintaining a latency of 150ms during the event, but that is dependent on a lot of external factors and experiencing the same level of fluidity wouldn’t be possible all over the globe. The SHIELD STORE goes live in May 2015.



            PRICING

            The SHIELD console along with one controller is set to retail at $199 (Rs.12,323) in May 2015, the remote is an optional purchase. This is half of what the XBOX ONE and the PS4 retail for in the US. Availability in India is still unknown at this point though an approximate estimation would put it somewhere around Rs.20,000. We do not know if the $199 price tag would carry an introductory GRID subscription.


            NVIDIA hopes to redefine the future of gaming with the SHIELD console which has now spent five years in the making - See more at: http://www.digit.in/gaming/nvidia-announces-the-shield-console-at-gdc-2015-25460.html#sthash.8emLfNqz.dpuf

            #32 How to Learn a Programming Language

            If you have an interest in creating computer programs, mobile apps, websites, games or any other piece of software, you'll need to learn how to program. Programs are created through the use of a programming language. This language allows the program to function with the machine it is running on, be it a computer, a mobile phone, or any other piece of hardware.




            Part 1: Choosing a Language
             
             
            Step 1:
             
            Determine your area of interest. You can start learning with any programming language (though some are definitely "easier" than others), so you'll want to start by asking yourself what it is you want to accomplish by learning a programming language. This will help you determine what type of programming you should pursue, and provide you a good starting point.  
             
            • If you want to get into web development, you'll have a whole different set of languages that you'll need to learn as opposed to developers  computer programs. Mobile app developing requires a different skillset than machine programming. All of these decisions will influence your direction. 
             
             
             
            Step 2:
             
            Consider starting with a "simpler" language. Regardless of your decision, you may want to consider starting with one of the high-level, simpler languages. These languages are especially useful for beginners, as they teach basic concepts and thought processes that can apply to virtually any language.
             
            •  The two most popular languages in this category are Python and Ruby. These are both object-oriented web application languages that use a very readable syntax.
             
            • "Object-oriented" means that the language is built around the concepts of "objects", or collections of data, and their manipulation. This is a concept that is used in many advanced programming languages such as C++, Java, Objective-C, and PHP.
             
             
             
            Step 3:
             
            Read through some basic tutorials for a variety of languages. If you're still not sure which language you should start learning, read through some tutorials for a few different languages. If one language makes a bit more sense than the others, try it out for a bit to see if it clicks.
            •  Python - A great starter language that is also quite powerful when you get familiar with it. Used for many web applications and even some games.
             
            •  Java- Used in countless types of programs, from games to web applications to ATM software.
             
            •  HTML- An essential starting place for any web developer. Having a handle on HTML is vital before moving on to any other sort of web development.
             
            • C- One of the older languages, C is still a powerful tool, and is the basis for the more modern C++, C#, and Objective-C.
             
             
             
             
            Part 2: Starting Small 
             
             
            Step 1:
             
            Learn the core concepts of the language. While the parts of this step that apply will vary depending on the language you choose, all programming languages have fundamental concepts that are essential to building useful programs. Learning and mastering these concepts early will make it easier to solve problems and create powerful and efficient code. Below are just some of the core concepts found in many different languages:
             
            •  Variables - A variable is a way to store and refer to changing pieces of data. Variables can be manipulated, and often have defined types such as "integers", "characters", and others, which determine the type of data that can be stored. When coding, variables, typically have names that make them somewhat identical to a human reader. This makes it easier to understand how the variable interacts with the rest of the code.
             
            • Conditional Statements - A conditional statement is an action that is performed based on whether the statement is true or not. The most common form of a conditional statement is the "If-Then" statement. If the statement is true (e.g. x = 5) then one thing happens. If the statement is false (e.g. x != 5), then something else happens.

            •  Functions or Subroutines - The actual name for this concept may be called something different depending on the language. It could also be "Procedure", a "Method", or a "Callable Unit". This is essentially a smaller program within a larger program. A function can be "called" by the program multiple times, allowing the programmer to efficiently create complex programs.
             
            • Data input - This is a broad concept that is used in nearly every language. it involves handling a user's input as well as storing that data. How that data is gathered depend on the type of program and the inputs available to the user (keyboard, file, etc.). This is closely linked to Output, which is how the result is returned to the user, be it displayed on the screen or delivered in a file.
             
             
             
            Step 2: 
             
            Install any necessary software. Many programming languages require compilers, which are programs designed to translate the code into a language that the machine can understand. Other languages, such as Python, use an interpreter which can execute the programs instantly without compiling.  

            • Some languages have IDEs (Integrated Development Environment) which usually contain a code editor, a compiler and/or interpreter, and a debugger. This allows the programmer to perform any necessary function in one place. IDEs may also contain visual representations of object hierarchies and directories.
             
            • There are a variety of code editors available online. These programs offer different ways of highlighting syntax and provide other developer-friendly tools.
             
             
             
            Part 3: Creating Your First Program
             
             
            Step 1: 
             
            Focus on one concept at a time. One of the first programs taught for any language is the "Hello World" program. This is a very simple program that displays the text "Hello, World" (or some variation), on the screen. This program teaches first-time programmers the syntax to create a basic, functioning program, as well as how to handle displaying output. By changing the text, you can learn how basic data are handled by the program. Below are some examples on creating a "Hello World" program in various languages:  
             
             
            Step 2:
             
            Learn through deconstruction of online examples. There are thousands of code examples online for virtually every programming language. Use these examples to examine how various aspects of the language work and how the different parts interact. Take bits and pieces from various examples to create your own programs. 



            Step 3:

            Examine the syntax. The syntax is the way the language is written so that the compiler or interpreter can understand it. Each language has a unique syntax, though some elements may be shared across multiple languages. Learning the syntax is essential for learning how to program in the language, and is often what people think of when they think about computer programming. In reality, it is simply the foundation upon which more advanced concepts are built. 
             
             
             
            Step 4:
             
            Experiment with changes. Make changes to your example programs and then test the result. By experimenting, you can learn what works and what doesn't much quicker than by reading a book or guide. Don't be afraid to break your program; learning to fix errors is a major part of any development process, and new things almost never work right the first time.

             
             
            Step 5:

            Start practicing debugging. When you're programming, you're invariably going to come across bugs. These are errors in the program, and can manifest virtually anywhere. Bugs can be harmless quirks in the program, or they can be major errors that keep the program from compiling or running. Hunting down and fixing these errors is a major process in the software development cycle, so get used to doing this early. 
             
            • As you experiment with changing basic programs, you're going to come across things that don't work. Figuring out how to take a different approach is one of the most valuable skills you can have as a programmer.
             
             
             
            Step 6:
             
            Comment all of your code. Nearly all programming languages have a "comment" function that allows you to include text that is not processed by the interpreter or compiler. This allows you to leave short, but clear, human-language explanations of what the code does. This will not only help you remember what your code does in a large program, it is an essential practice in a collaborative environment, as it allows others to understand what your code is doing.  




            Part 4: Practicing Regularly


            Step 1:

            Code daily. Mastering a programming language takes time above all else. Even a simpler language like Python, which may only take a day or two to understand the basic syntax, takes lots of time to become truly proficient at. Like any other skill, practice is the key to becoming more proficient. Try to spend at least some time each day coding, even if it's only for an hour between work and dinner.



            Step 2:

            Set goals for your programs. By setting attainable, but challenging goals, you will be able to start solving problems and coming up with solutions. Try to think of a basic application, such as a calculator, and develop a way to make it. Use the syntax and concepts you've been learning and apply them to practical uses. 
             
             
             
            Step 3:
             
            Talk with others and read other programs. There are lots of programming communities dedicated to specific languages or disciplines. Finding and participating in a community can do wonders for your learning. You will gain access to a variety of samples and tools that can aid you in your learning process. Reading other programmers' code can inspire you and help you grasp concepts that you haven't mastered yet.
             
            •  Check out programming forums and online communities for your language of choice. Make sure to participate and not just constantly ask questions. These communities are usually viewed as a place of collaboration and discussion and not simply Q&A. Feel free to ask for help, but be prepared to show your work and be open to trying different approaches.
             
            • Once you have some experience under your belt, consider attending a hack-a-thon or programming jam. these are events where individuals or teams compete against the clock to develop a functional program, usually based around a specific theme. These events can be a lot of fun and are a great way to meet other programmers.
             
             
             
            Step 4:
             
            Challenge yourself to keep it fun. Try to do things that you don't know how to do yet. Research ways to accomplish the task (or a similar one), and then try to implement that in your own program. Try to avoid being content with a program that "basically" works; do everything you can make sure every aspect works flawlessly.  



            Part 5: Expanding Your Knowledge
             
             
            Step 1:

            Take a few training courses. Many universities, community colleges, and community centers offer programming classes and workshops that you can attend without having to enroll in the school. These can be great for new programmers, as you can get hands-on help from an experienced programmer, as well as network with other local programmers. 
             
             
             
            Step 2:
             
            Buy or borrow a book. There are thousands of instructional books available for every conceivable programming language. While your knowledge should not come strictly from a book, they make great references and often contain a lot of good examples.  



            Step 3:

            Study math and logic. Most programming involves basic arithmetic, but you may want to study more advanced concepts. This is especially important if you are developing complex simulations or other algorithm-heavy programs. For most day-to-day programming, you don't need much advanced math. Studying logic, especially computer logic, can help you understand how best to approach complex problem solving for more advanced programs.
             
             
             
            Step 4:
             
            Never stop programming. There is a popular theory that becoming an expert takes at least 10,000 hours of practice. While this is up for debate, the general principle remains true: mastery takes time and dedication. Don't expect to know everything overnight, but if you stay focused and continue to learn, you may very well end up an expert in your field.
             
             
             
            Step 5:
             
            Learn another programming language. While you can certainly get by with mastering one language, many programmers help their chances of success in the field by learning multiple languages. Their second or third languages are usually complementary to their first one, allowing them to develop more complex and interesting programs. Once you have a good grasp on your first program, it may be time to start learning a new one.  

            • You will likely find that learning your second language goes much quicker than the first. Many core concepts of programming carry over across languages, especially if the languages are closely related.
             
             
             
             
            Part 6: Applying Your Skills
             
             
            Step 1:
             
            Enroll in a four year program. While not strictly necessary, a four year program at a college or university can expose you to a variety of different languages, as well as help you network with professionals and other students. This method certainly isn't for everyone, and plenty of successful programmers never attended a four-year institution. 
             
             
             
            Step 2:
             
            Create a portfolio. As you create programs and expand your knowledge, make sure that all of your best work is saved in a portfolio. You can show this portfolio to recruiters and interviewers as an example of the work you do. Make sure to include any work done on your own time, and ensure that you are allowed to include any work done by another company.  
             
             
             
            Step 3:
             
            Do some freelance work. There is a very large freelance market for programmers, especially mobile app developers. Take on a few small freelance jobs to get a feel for how commercial programming works. Oftentimes you can use the freelance jobs to help build your portfolio and point to published work.  
             
             
             
            Step 4:
             
            Develop your own freeware or commercial programs. You don't have to work for a company to make money programming. If you have the skills, you can develop software yourself and release it for purchase, either through your own website or through another marketplace. be prepared to be able to provide support for any software you release for commercial sale, as customers will expect their purchase to work.
             
            • Freeware is a popular way to distribute small programs and utilities. The developer doesn't receive any money, but it's a great way to build name recognition and make yourself visible in the community. 
             
             
             
             
            Tips
            •  If you are interested in game programming, investigate Python, C++, and Java. Of the three, C++ is probably the best performer, Python by far the easiest to learn, and Java best able to run on Windows, Mac OS, and Linux without change.
             
            • Learn about Free software. Study the source code of the programs available at the Free software directory. Why re-invent the wheel when you can make it better? Just make sure you understand what you're programming.
             
            • For most people, programming something that interests them or that they can use is more interesting than textbook examples. Use a search engine to find out about projects that interest you.
             
            • When you learn something new, it is often helpful to implement it yourself and then tweak the design, predicting the results, to make sure you understand the concept.
             
            • Make use of up-to-date application programming interfaces and official reference materials available from the software publisher.
             
            •  The references are there to help you. Don't be ashamed if you don't remember everything by heart; that comes with time. The important thing is knowing where to find reference material.
             
            • For practice, try to teach others. It will not only make you more competent but let you think more deeply from different perspectives.
             

            Wednesday, March 4, 2015

            #31 How to Become a Teen Hacker

            Hello,
            Friend's today I am going to show you how to became a teen hacker.
            What exactly is a real hacker, and how do I become one?



            Read following steps:


            Step 1:

            Be a teen. That is the essential part of being a "Teen Hacker."  




            Step 2:

            Learn the different types of hackers. 

            • Type A (rookie hacker): This type of hacker is interested in new technology and hacks that others are preforming. What distinguishes these hackers from others is that they simply don't have the amount of computer expertise to preform many/any hacks. Every hacker starts out as a Type at A.
             
            • Type B (beginner): Has the know-how to solve basic/intermediate computer problems and write basic programs. If you are a Type B hacker, you will make numerous mistakes, some minor, some major.
             
            • Type C (intermediate hacker): Comfortable fiddling with hardware and software alike. Likes to build computers, root cell phones and tablets, and test all electronic devices to their limits. Most Type C, D, and E hackers have their own websites and networks.
             
            • Type D (expert hacker): King of all other hackers. Can hack almost any piece of software or hardware in almost every way imaginable. Becoming a Type D hacker takes a lot of practice and dedication.
             
            • Type E (Business hacker): Turns computer knowledge into cash. Type E hackers can do things for money, such as rooting devices, selling custom operating systems and programs, and fixing computer problems. These people are most often also Type C or D hackers.
             
            • Type F (illegal hacker): Called "crackers" by some, you do not want to be one of these.




            Step 3:

            Define "real." In the context of computers, real can be defined as someone who makes computers do things they do not currently do, or perfects things they do poorly.  



             
            Step 4:
             
            Limit your scope. Will you work primarily with Hardware or Software? Do not decide "both" because you will work with both no matter what. The decision determines where to start to focus. 
             
             
             
            Step 5:
             
            Learn how to use a computer. Learn every function, every component. This will teach you the arena in which you will work, and focus your attention.    
             
             
             
            Step 6:
             
            Read everything you can find. Learn what has been done, and how. This will teach you what can be done, and refine your focus. You might even find something that interests you.  
             
            • Duplicating what has been done before is a good first step in experimenting.
             
             
             
            Step 7:
             
            Begin to experiment with hardware and software to learn how to control a computer into directions you've never read about one going.
             
             
             
            Step 8: 
             
            Learn a high-level language of your choice. A high level language is a programming language that is high above the level of machine language (1s and 0s), and tend to use many more English words that we can comprehend. Programs are then converted by a compiler to machine code or a language that the computer can understand and work with. Some suggested languages to learn are C or C++, Java, or BASIC. Also, assembly for the x86 platform, and a scripting language such as Perl. Learning to script in Batch is very useful, as Batch language is very simple and gives you much control over Windows computers. 




            Tips 

            • Question everything, especially what you know to be true.
             
            • Listen to others. Have friends. Have fun. Girls and boys can both be geeks.
             
            • Finding a helpful community can help you get started.
             
            • Remember the RFCs and keep them "Holy" (if you can get an RFC changed while you're a teenager, change it ruthlessly).
             
            • Do not do it for money. Greed stifles to create profit. Computer fraud gets you in jail!
             
            • Google, Linux, Firefox, Wikipedia, and wikiHow are perfect.

            • Learn everything. Try. You never will, but you should try.
             
            • Focus your attention. Try. If you stop having fun, you might not cut out to be a hacker.
             
            • Portable HDDs and mountains upon mountains of useful portable software are also your best friend.
             
            • Do not do it to "change the world." The world changes itself. You'd love to change the world, but they won't give you its source code.
             
             
             
            Warnings
             
            • You might hack and crack someone else's computer. Watch out.
             
            • You can crack/ hack hotmail passwords (MSN). It has been done, but it is about the most difficult thing to do. Think about it. You're probably hacking into a system of the same people that made the system you are working with (but with Hotmail, they have a known security vulnerability.)
             

            Nokia C1 renders leak ahead of launch, hints at 4GB RAM and dual rear cameras

            Is Nokia working on its own AI assistant for smartphones? Nokia is planning its return to the smartphone industry with two new flagshi...