<![CDATA[MrEngineer13.com]]>http://mrengineer13.com/http://mrengineer13.com/favicon.pngMrEngineer13.comhttp://mrengineer13.com/Ghost 1.21Tue, 04 Dec 2018 13:13:35 GMT60<![CDATA[Get Nextcloud as a full app on MacOS]]>

Nextcloud has more than just file backup to it. It has a whole host of other apps associated with it. This details what I use to get a Mac app for Nextcloud, it may just be a web wrapper but you can access all of your Nextcloud apps.

Begin by

]]>
http://mrengineer13.com/get-nextcloud-as-a-full-app-on-macbook-osx/5adcf56c6fe37907f68b6fe8Sun, 20 May 2018 21:03:00 GMT

Nextcloud has more than just file backup to it. It has a whole host of other apps associated with it. This details what I use to get a Mac app for Nextcloud, it may just be a web wrapper but you can access all of your Nextcloud apps.

Begin by downloading the FluidApp for mac from Here. Then once you create a FluidApp, for the URL: enter your IP address or domain name of your Nextcloud installation, name it Nextcloud and have it use the website favicon so it will pull in the icon. That's it, that's all it takes and now you have a moveable, pinable, app that launches your Nextcloud installation.

]]>
<![CDATA[Installing LEMP & NextCloud on a Raspberry Pi running Ubuntu 16.04]]>

This is a thrown tutorial mostly from here and here, I have been piecing together from tutorials about how to do this so I thought I'd share the steps I took to install NextCloud.

Section 1: First get your Rasberry Pi setup with ssh and take it through the inital

]]>
http://mrengineer13.com/installing-nextcloud-with-nginx/5adb88996fe37907f68b6fe0Sun, 22 Apr 2018 20:28:10 GMT

This is a thrown tutorial mostly from here and here, I have been piecing together from tutorials about how to do this so I thought I'd share the steps I took to install NextCloud.

Section 1: First get your Rasberry Pi setup with ssh and take it through the inital setup steps until you have ssh setup and connected. There are plenty of websites that have that tutorial so go ahead and find one.

Section 2: Start by signing up for a dynamic DNS service like NoIP. If you use NoIP go through their documentation for setting up their app on linux. Also make sure you forward ports 80 and 443 on your router.

Section 3: Setup & Install dependencies

Download & Install NextCloud

wget https://download.nextcloud.com/server/releases/latest.zip
sudo apt install unzip
unzip nextcloud-latest.zip

Lets move the NextCloud directory to the doc root of Nginx:

sudo mv nextcloud /usr/share/nginx/

Give it permissions like so:

sudo chown www-data:www-data /usr/share/nginx/nextcloud/ -R
  1. We are going to start installing some of the dependencies. Start by updating

    sudo apt-get update
    sudo apt-get upgrade

  2. Install and start Nginx, and have it start on boot

    sudo systemctl enable nginx
    sudo systemctl start nginx
    sudo systemctl enable nginx

    Here are more commands if you need to deal with Nginx:
    Check if Nginx is running

     systemctl status nginx
    

    Stop then start Nginx

     sudo systemctl restart nginx
    

    Start nginx at boot

     sudo systemctl enable nginx
    
  3. Configure MariaDB
    Install, start and have MariaDB start on boot:

    sudo apt install mariadb-server mariadb-client
    sudo systemctl start mysql
    sudo systemctl enable mysql
    

    When you are done with the install you still need to run the SQL startup scrypt:

    sudo /usr/bin/mysql_secure_installation
    

    Login to the MariaDB with the following:

    mysql -u root -p
    

    Create a database for NextCloud:

    create database nextcloud;
    

    Create a user and a password for that user:

    create user nextclouduser@localhost identified by 'your-password';
    

    Grand that user privileges:

    grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';
    

Flush privileges and exit:

  flush privileges;
  exit;
  1. Install php7 and extensions

    sudo apt install php7.0-fpm php7.0-mbstring php7.0-xml php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli php7.0-curl
    

    Edit your php config

     sudo nano /etc/php/7.0/fpm/pool.d/www.conf
    

    Find the line that starts with listen and make it look like this:

    ;listen = 127.0.0.1:9000
    listen = /var/run/php5-fpm.sock
    

    Reload php

     sudo service php7.0-fpm reload
    
  2. Create an Nginx config file in /etc/nginx/conf.d/

       sudo nano /etc/nginx/conf.d/nextcloud.conf
    

Paste this as your config. Replace your domain with your noip domain

server {
    listen 80;
    server_name nextcloud.your-domain.com;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /usr/share/nginx/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
       return 301 $scheme://$host/remote.php/dav;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
       rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
       deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
       deny all;
     }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php/php7.0-fpm.sock;
       fastcgi_intercept_errors on;
       fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
       try_files $uri/ =404;
       index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
   }

   location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}

Save and close the file. Test Nginx and reload. If this passes you should be able to

sudo nginx -t
sudo systemctl reload nginx
  1. Download & install Let's Encrypt:

    cd 
    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    ./letsencrypt-auto --help
    

Switch to the directory and replace webroot and domain name:

cd ~
cd letsencrypt/
./letsencrypt-auto certonly --nginx -w root /usr/share/nginx/nextcloud/ -d your-domain.name

If that was sucessful, then we need to edit the Nginx config again:

sudo nano /etc/nginx/conf.d/nextcloud.conf

Change the top of the file to be this, overrite the old listen 80;:

listen 443 ssl;

Add these lines below they are to verify Let's Encrypt so you can use ssl. Replace the domain with yours:

ssl_certificate /etc/letsencrypt/live/your-domain.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

Then add this to the top of the file, not inside your other server declaration:

server {
  listen 80;
  server_name mre.sytes.net;
  return 301 https://$server_name$request_uri;  # enforce https
}

Test Nginx and reload. If this passes you should be able to navigate to your-domain.com/nextcloud in a browser:

sudo nginx -t
sudo systemctl reload nginx

Make Nextclouds data directory and give it permission

sudo mkdir /usr/share/nginx/nextcloud-data
sudo chown www-data:www-data /usr/share/nginx/nextcloud-data -R

Now if it shows the web login then it was a sucess! If you have an external hhd you want to add here's how. Use this to find your external hard drives UUID which is associated with a /sda1 drive:

ls -l /dev/disk/by-uuid/

Mount the drive:

sudo mount -t ntfs-3g -o uid=1000,gid=1000,umask=007 /dev/sda1 /media/nextcloud

Backup and open fstab:

sudo cp /etc/fstab /etc/fstab.backup
sudo nano /etc/fstab

Add this line:

UUID=[Your UUID] /media/nextcloud ntfs-3g uid=1000,gid=1000,umask=007 0 0

Now that should be it, your nextcloud installation should work and after you install the external files app you should be able to add your drive through the web interface.

]]>
<![CDATA[So you want to learn Android development in 2016?]]>

Was on Reddit and came across a similar post as this and wanted to share my thoughts as a long time Android devloper about starting Android development as it's that time of year. A while ago there was a post about this but I wanted to update it with this

]]>
http://mrengineer13.com/so-you-want-to-learn-android-development-in-2016/5abecb446fe37907f68b6fc8Thu, 31 Dec 2015 16:42:00 GMTSo you want to learn Android development in 2016?

Was on Reddit and came across a similar post as this and wanted to share my thoughts as a long time Android devloper about starting Android development as it's that time of year. A while ago there was a post about this but I wanted to update it with this post. Hopefully you are familiar with Java already and can get started on the fun stuff. Below is the slightly edited/expanded guide to making 2016 the year you get started with Android development.

The obvious place to get started is still with the first app walkthrough from the official Android docs. Then I would move on to making your own first app, usually it's a weather app because it has a simple UI and it teaches you how to pull the data in from an API. After that I would move into an app that interests you (to keep you motivated) and just keep working on your pet project until it's complete. After doing it all by hand at first, I would also suggest not being afraid to add popular libraries (Retrofit, Picasso, Okhttp, etc.) to your project to make development easier.

If you've done all the above then I would start looking at some open source apps to see how they are organized and take note of not only the structure but what paradigms they use as well. You'll typically see lots of Dagger dependency injection as well as some reactive stuff with RXJava. Next I would find a mildly popular open source project to contribute to as working with Git/GitHub (or Bitbucket) is pretty much a requirement for Android developers.

That should keep you busy for about a year or so and get you on your way to becoming an Android dev. Wanted to wish you the best of luck in 2016 and with learning the Android platform.

Pro tip: Use Android Studio
Android Studio is the IDE that Google built specifically for Android development.

Pro tip: Use StackOverflow
So StackOverflow (which you probably already know) is a Q&A community. I usually use the '30 minute rule' for posting questions there. I google the problem first and keep trying to solve it myself in 30 minutes, if I exceed that time then I'll post a question on StackOverflow.

Pro tip: Join a community
There are a number of communities for discussing Android development, there's /r/androiddev and if you use Slack there are some Slack groups like HashtagAndroid (Disclaimer: I started that group).

Pro tip: Settings -> Developer Options -> Show layout bounds
This allows you to see an outline of your views to debug layouts.

]]>
<![CDATA[Decode Gradle dependencies and add them to a project]]>

Android Studio has introduced a new paradigm in project management, specifically with dependency management. With Eclipse, dependencies had to be manually added to the project. To update these dependencies, first the latest version would have to be downloaded then imported into Eclipse. And if that wasn't enough, this process was

]]>
http://mrengineer13.com/decode-gradle-dependencies-and-add-them-to-a-project/5abecaec6fe37907f68b6fc7Mon, 18 May 2015 19:40:00 GMT

Android Studio has introduced a new paradigm in project management, specifically with dependency management. With Eclipse, dependencies had to be manually added to the project. To update these dependencies, first the latest version would have to be downloaded then imported into Eclipse. And if that wasn't enough, this process was exacerbated by the fact that checking for updates on a dozen or so dependency meant keeping up with the project to make sure they would be no issues once the dependency was updated. Enter Gradle, the new Android build system introduced along with Android Studio. The process of adding and keeping up with dependencies has been greatly simplified.

]]>
<![CDATA[Top 10 Android Studio keyboard shortcuts]]>

Man is a tool-using animal. Without tools he is nothing, with tools he is all. - Thomas Carlyle

Thomas Carlyle was on the right path but his assessment applies even more so to programmers. We use tools constantly to make us better, more efficient Android Developers. As an Android Developer,

]]>
http://mrengineer13.com/top-10-android-studio-keyboard-shortcuts/5abec7bf6fe37907f68b6fbdSun, 26 Apr 2015 23:26:00 GMT

Man is a tool-using animal. Without tools he is nothing, with tools he is all. - Thomas Carlyle

Thomas Carlyle was on the right path but his assessment applies even more so to programmers. We use tools constantly to make us better, more efficient Android Developers. As an Android Developer, our most used tool is our IDE, which in most cases is Android Studio. Android Developers that are not currently using Android Studio should be evaluating their current life choices as AS is an IDE designed specifically for Android Developers whereas Eclipse is a Java IDE with an Android plugin. This post will explore some of the keyboard shortcuts that you can use in Android Studio to make you an even more efficient developer.

  1. Complete statement - Ctrl + Shift + Enter (Ctrl + ;)
    Used to space out and complete conditional statements as well as to add a semicolon to the end of the current statement.
    {<1>}Android Studio complete statement

  2. Generate (Getters/setters) - Alt + Insert
    This one is pretty standard across various IDEs, basically it will generates getPrivateField() and setPrivateField(Object o) for which ever private fields you specify.
    {<2>}Android Studio Generate menu

  3. Go to declaration - Ctrl + B
    What this shortcut does depends on how it is called. If it is called on an instance variable, it will scroll to the point in the class where that variable was declared. If it is called on a class name, that class will open in the editor, even if Android Studio has to decompile the source to show it to you.

  4. Cast as type - Ctrl + Shift + Space
    This will cast a variable automatically which comes in handy when you are using findViewById(). It will be cast the View to whatever class the variable is.
    {<3>}Android Studio cast as type

  5. Find Usages -Alt + F7
    Using this will search the entire project for the query. It will show you all of the instances of the query, including import statements, variables and even classes that extend the query (if it was a class).

  6. Extract as

  • Constant - Ctrl + Alt + C
  • Field - Ctrl + Alt + F
  • Method - Ctrl + Alt + M

These shortcuts will turn any expression(s) into either a public static final constant, a local variable or a method.

Android Studio extract as method

  1. Parameters - Ctrl + P
    Once a method is selected, this will will show the parameters for that method and if the method is overloaded it will display a list of the possible parameters.
    {<4>}Android Studio parameters

  2. Search everywhere - Shift Shift
    This will look everywhere for the query and show you the results. Queries can include, classes, files, methods, settings and more.
    {<5>}Android Studio search everywhere

  3. Rename - Shift + F6
    This will update all occurrences of whatever is being renamed and it will show it in real time. Anything that can be named can also be renamed; classes, files, methods, variables and more.
    {<6>}Android Studio rename

  4. Surround with block comments - Ctrl + Shift + Slash
    This will take whatever is highlighted and surround it with block comments /* and \*.
    {<7>}Android Studio toggle block comments

This was meant as an introduction into the keyboard shortcuts that Android Studio supports out of the box. It was in no way an exhaustive list as some of the more common shortcuts were not included. If one of your favorites shortcuts wasn't included, feel free to drop us a comment and let the world know what keyboard shortcut is your favorite.

]]>
<![CDATA[How to use Toolbar to replace your Actionbar]]>

So a while ago Google released their AppCompat v21 library which brought Material Design to Pre-lollipop devices. In the article announcing that the new AppCompat library was release amoung other things, a new Toolbar widget was introduced as a widget based generalization of the much loved ActionBar.

To use the

]]>
http://mrengineer13.com/how-to-use-toolbar-to-replace-your-actionbar/5abeca9a6fe37907f68b6fc6Fri, 14 Nov 2014 15:39:00 GMT

So a while ago Google released their AppCompat v21 library which brought Material Design to Pre-lollipop devices. In the article announcing that the new AppCompat library was release amoung other things, a new Toolbar widget was introduced as a widget based generalization of the much loved ActionBar.

To use the Toolbar there are two main options; it can either be used to replace the ActionBar or in a layout as a widget on its own. The reason Toolbar can work either way is because it has all of the features of the ActionBar like the abilty to support navigation, to have a title or subtitle, and also to have a logo.

Using the Toolbar to replace an ActionBar is pretty straight forward and begins with making sure that the activity extends ActionBarActivity. Also make sure that the theme for this activity is a child of either Theme.AppCompat.NoActionBar or Theme.AppCompat.Light.NoActionBar. If you are not using the Theme.AppCompat variants then you can alternatively add the following lines to your theme:

<item name="android:windowNoTitle">true</item>
 <item name="windowActionBar">false</item> 

Then just add the Toolbar to your Activities layout:

<android.support.v7.widget.Toolbar  
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

Set the Toolbar to be your ActionBar via setSupportActionBar:

    Toolbar mToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(mToolbar);

That last part is where all the magic happens because it tells Android to use this Toolbar widget exactly how it would use the SupportActionBar. This means that most of the SupportActionBar methods work so to set the title/subtitle just call:

    getSupportActionBar().setTitle("Toolbar Title");
    getSupportActionBar().setSubtitle("Toolbar Subtitle");

This also means that you can use the same callbacks to create a menu on the Toolbar.
onCreateOptionsMenu and onOptionsItemSelected.

For further information checkout the documentation just to see what all the Toolbar supports. As a general rule, if the Actionbar could do it, the Toolbar can. If you have crazy requirements beyond what is supported by the Toolbar then just remember that the Toolbar is just a fancy ViewGroup so you can add widgets/views just as easily as if it were a LinearLayout.

]]>
<![CDATA[How to add an Actionbar to your SettingsActivity with AppCompat v21]]>

A couple of days ago the Android group released a new AppCompat library that among other things added a number of new widgets for developers to take advantage of. One of these new widgets is the Toolbar, which according to its description is a widget based generalization of the much

]]>
http://mrengineer13.com/how-to-add-an-actionbar-to-your-settingsactivity-with-appcompat-v21/5abeca336fe37907f68b6fc4Tue, 21 Oct 2014 13:37:00 GMT

A couple of days ago the Android group released a new AppCompat library that among other things added a number of new widgets for developers to take advantage of. One of these new widgets is the Toolbar, which according to its description is a widget based generalization of the much loved Actionbar. Looking further at the documentation it become apparent that the Toolbar supports most of the features that the Actionbar does such as having a navigation button, a logo, a title and subtitle, custom views and an action menu. So what is the difference between the two? The Toolbar is a widget so it can be included in a layout and used like any other ViewGroup. This also means that it can be used for uses not suppored by the Actionbar for example multiple Toolbars can exist in the same layout and they can be use in Activities that don't extend from ActionBarActivity like PreferenceActivity.

]]>
<![CDATA[Can you play Pokemon better than a fish?]]>

A few months ago the internet was all a buzz about TwitchPlaysPokemon. It was an experiment that turned into a phenomenal success. Initially, the stream had a modest following and then it exploded into hundreds of thousands of participants and millions of viewers.

Not too long after, FishPlaysPokemon burst onto

]]>
http://mrengineer13.com/can-you-play-pokemon-better-than-a-fish/5abec9c56fe37907f68b6fc3Sat, 20 Sep 2014 08:35:00 GMT

A few months ago the internet was all a buzz about TwitchPlaysPokemon. It was an experiment that turned into a phenomenal success. Initially, the stream had a modest following and then it exploded into hundreds of thousands of participants and millions of viewers.

Not too long after, FishPlaysPokemon burst onto the scene. The premise is fairly simple, different locations in the fishes tank are mapped to different keys required to play the GameBoyColor. As the fish swims around it generates random keystrokes in the game.

After seeing the phenomenal amount of attention these projects gathered, I wanted a little bit more information on how similar emulators would work. It was that search that brought me to the weplay repo. This technology allows you to run a GameBoyColor emulator and capture keystrokes all with JavaScript. On their demo site they have Pokemon Yellow set up for anyone to play and test out their library to see how it runs. It is set-up similar to how TwitchPlaysPokemon was set-up. Instead of blocking the chat feature, to move around in the game it uses your keystrokes so you and any number of players can all chat and play at the same time.

After seeing how well the emulator worked; it got me thinking. As an Android Developer I type a lot of words when I'm coding which made me wonder, who would do better at playing Pokemon, me or a fish? I started looking around for some tool or script that would allow me to capture my keystrokes while I'm programming and send them to a Pokemon Yellow game I had open in the browser. After doing some searching I foundout that I can use AutoHotkey (which I already use) to send keystrokes to browser tabs, even in the background. I started playing around with a script and this is what I came up with. It takes my "random" keystrokes from Android Studio and sends them to the minimized IE window opened to weplay.io.

]]>
<![CDATA[How to Get Started With Android Development]]>http://mrengineer13.com/how-to-get-started-with-android-development-2/5abec6d56fe37907f68b6fbcSun, 17 Aug 2014 17:25:00 GMTHow to Get Started With Android Development

The number of applications downloaded from Google Play has topped over 50 billion. Just to put that into perspective, 50 billion is about half of the number of people who have ever lived. With that in mind, it has never been easier to start learning how to develop Android applications.

The first step is learning how to program. There are a number of different programming languages, however Java is typically used for Android development. If you have programming experience, but not with Java, it would be wise to get some experience with Java.

You Aren't a Programmer

Even if you have no coding experience, you can still build a powerful app. App Inventor is a platform that enables you to do just that. With App Inventor you manipulate puzzle piece shaped blocks of code into a functional program. Although you may be able to produce an app that suits your needs, learning to code is vital to producing applications that are much more robust and feature rich.

When it comes to learning to write code, there is a plethora of free online based options. So far, one of the most highly regarded program is the CS50x course over at Edx, one of the main MOOC providers. CS50x is a self-paced exploration into the basics of computer science. Each week you have challenges based on what you learned that week and videos for harder to grasp concepts that make them fully digestible. The main programming language used for the course is C which is a much older and distant cousin of Java, the language used for Android development. Although the languages may be incompatible, the theoretical understanding gained in this course is one that would serve you well as an Android developer.

You Program But Not With Java

Depending on your language of choice and whether or not it utilizes the object-oriented programming paradigm, your experience with Java will vary greatly. There are courses specifically for Java development, so you should try one of those. Udacity has an introduction to programming with Java course that should help you make the transition.

Java is Your Preferred Language

If you already know Java then your work has been significantly reduced. All you need to do is follow the instructions on the Android Developer website (ADW) to obtain the required dependencies. If the terminology seems a bit scary or out of your league, you can check out the list below to help you out.

JDK - Java Development Kit: Implementation of a Java platform that allows developers to build programs using Java.

ADT - Android Developer Tools: Various tools aimed at aiding you in Android development.

ADW - Android Developer Website: Website filled with documentation of Android platform.

API - Application Programming Interface: Method to interface with specific software components.

AVD - Android Virtual Device: Allows you to emulate an actual Android device.

IDE - Integrated Development Environment: Software for software/application development, ex: Eclipse or Android Studio
SDK - Software Development Kit: Set of tools that allow for the development of resources for a specific platform

Once you have your system set up, you can now begin to write apps for the Android platform. There is a guide to writing your first app on the ADW. The ADW is your number one resource for learning about the platform, you might as well bookmark it now. It covers a wide array of topics, not just housing the official Android documentation, but also tutorials on implementation and best practices for your app. For Android developers at any stage in their careers, this website is an indispensable resource.

However awesome the ADW is, you may experience errors that aren't covered in the documentation. You will want to know how to implement something special or solve an issue in your code. The first step in debugging is reading though the documentation at the ADW. Reading the documentation allows you to ensure you've implemented your code correctly. If that yields no results, then try Googling your problem. There are tons of developers and chances are, someone has probably had the same problem you are experiencing. If your Google search isn't particularly fruitful then try searching StackOverflow. StackOverflow is a question and answer website for programmers. If you still can't find the answer to your problem, then you could try posting your own question on StackOverflow and waiting for a response.

Even if you don't have any programming experience, you can still take advantage of the numerous resources at your disposal. These resources allow for you to begin your journey to becoming an Android developer.

]]>