Seven days challenge to learn one new topic each day

So I decided to improve my skills as a developer. I’m going to do a 7 days challenge to learn the new topics that I always wanted to learn but couldn’t arrange the time to do so. This is the first 7 days. I’m going to learn the following topics:

Day 1: PHP Composer

Day 2: PHP Autoload

Day 3: PHP Namespace

Day 4: PHP Generators

Day 5: PHPUnit

Day 6: PHP Hashing

Day 7: WordPress Nonce

Here are the additional topics I would like to learn in later days:

  • PHP namespaces
  • Cross Site Request Forgery

At the end of each day, I’m going to summarize all the things I learned in one article.

Accessing Media Files (Audio, Video, Images…) From DigitalOcean Spaces Using Java

Recently, I need to upgrade my English learning app on Android to use multiple servers. Previously, I used two servers already. However, the way I manage media files caused me a lot of headache. So, I decided to switch to DigitalOcean since they have servers around the world and the pricing is good ($5 for 250GB storage and 1TB monthly transfer, which is good).

The initial problem with DigitalOcean spaces

Coming from old-school servers, I thought I can upload the files to DigitalOcean spaces using FTP and access the files directly as I usually used. However, the first problem is you cannot upload to spaces using FTP and the second problem is in order to make a file accessible to public, you need to set it permission to public. If you have one or two files, that wouldn’t be a problem.

I have more than 18,000 files.

The solutions to uploading multiple files

It turned out that DigitalOcean spaces use Amazon s3 technologies. So, in order to upload to spaces, you need to have FileZilla Pro (paid) or CyberDuck(free). I chose FileZilla Pro because it allows you to resume failed transfers while CyberDuck doesn’t allow that (or I couldn’t find where is that option).

The solution to accessing files

As my app used by thousands of people, the media files need to be accessible to all of the users. Actually, it is very easy to generate a public accessible URL for any files (they are called objects) using the aws-android-sdk. In case you need a working sample code, here it is:

public class DigitalOcean implements MediaServer{

    private static final String KEY = "YOUR_KEY";
    private static final String SECRETS = "YOUR_SECRETS";

    private String endpoint, bucketName;
    private AmazonS3Client s3Client;


    @Override
    public String getEndpoint() {
        return endpoint;
    }

    @Override
    public String getType() {
        return "s3";
    }

    public DigitalOcean(String endpoint, String bucketName)
    {
        this.bucketName = bucketName;
        this.endpoint = endpoint;
        AWSCredentials myCredentials = new BasicAWSCredentials(
                KEY,
                SECRETS
        );

        s3Client = new AmazonS3Client(myCredentials);

        s3Client.setEndpoint(this.endpoint);
    }

    public String getMediaURL(String objectPath)
    {
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectPath);
        URL objectURL = s3Client.generatePresignedUrl(request);

        return objectURL.toString();
    }




}

As you can see, I created an object to generate URL to any files(objects). For example, here is a sample space url:

The bucket name would be data-sample.

If your file, let call it song.mp3 located at /data-sample/media/song.mp3, the objectPath would be: /media/song.mp3.

If you run the method getMediaURL(), you will get the path to the file that is accessible to your users but you don’t have to mark the file public.

https://data-sample.sgp1.digitaloceanspaces.com/media/song.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180925T060309Z&X-Amz-SignedHeaders=host&X-Amz-Expires=899&X-Amz-Credential=BP5K25LRRQWYV2CMHZLL%2F20180925%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=6a21133ced60047cfba60053afcdf712997c474585ade2f0050bc853b0a4db89

 

How To Filter Non Alphanumerics Characters From Your String And Its Application In Excel

If you are like me, I have to deal with text a lot in my work. As a programmer, I need to find and match string. Recently, a friend of mine, who is an accountant gave me a list of books’ titles. Most of them are fine. However, there are some contains strange characters and she wanted to remove such titles.

As you can see in the picture, there titles with @ and Chinese characters. Using filters doesn’t work because there are more than 1000 rows. That was when I said to myself: “I need a tool”.

So, I made one for this specific purpose: “to help my friend remove all the strange characters in her Excel workbook”.

Here is how the tool look like:

As you can see, you can put the original text in the source string box, adjust a few options above and click on filter. The result will be shown in the Result string box:

As you can see that all the rows that contain strange characters are removed.

However, what if you have some special characters that is allowed to appear in the title? No worries! You can put that into the Allowed characters box and separated them by spaces.

For example, It is OK for me to have the character @ in the title, I would put @ into the Allowed characters box. In addition, that title Blog@books.de contains the character dot (.) so you need to put that into the list of allowed characters too.

Let’s see what we’ll have:

As you can see now, the title with . and @ is accepted.

There are also two checkboxes that allowed you to filter the text further. You can decide to allow numbers or spaces in the title by checking these checkboxes.

I put the full source code for the tool here:

https://github.com/datmt/Remove-Lines-Contain-NonAlphaNumeric-Characters

If you are not a programmer, you can download the application here to start using it:

Download the .jar file

If you have any suggestions, please let me know. Thank you very much!

How To Resize and Copy Images Files To Android Drawable Folders Quickly

I’m not a full time Android developer. I make Android apps such as this. Android studio is great and I can develop my ideas quickly. However, there is one thing I don’t like is the way I have to deal with images. Every time I need to add an icon to my app, I need to resize that image to the following sizes:

  1. 144 x 144
  2. 96 x 96
  3. 72 x 72
  4. 48 x48

And put them in the following folders, respectively:

  1. drawable-xxhdpi
  2. drawable-xhdpi
  3. drawable-hdpi
  4. drawable-mdpi

The task is boring and tedious. So, I decided to make a tool to make this task less painful.

How does the tool work?

Let’s say you want to use a new icon like this in your app:

Now, instead of resize and copy the file 4 times, you just need to open the tool:

The first step is to select your /res folder which contains the drawable-..dpi folders. The Directory Chooser will make this step simple an easy.

Now, look at the checkboxes, they are self-explanatory. If for some reasons, you don’t want to copy the image to a particular folder, simply uncheck the checkbox in front of it.

Then, click on select Image to select your image. The image should be square and have resolution at lest 144 x 144 pixel to avoid pixelation.

If your image is in JPG format, you select JPG, if it is PNG, select PNG.

After that, you click on open to complete the process.

And that’s all. You don’t need to open your image editor to resize the images. With less time spent, you have your images in all drawable folders.

Further features

I made this tool out of my need. I think there are more improvements to be made. Here are some ideas:

  • Let user set the resolution (instead of fixed size as of now)
  • Let user select more folders, even add folders outside the /res folder

The app is free and the repo is open on github. You can download the source and the app here

I hope the app can save you some precious time. Let me know if you have any suggestions.

 

Excel Software: How To Search For Text Through Multiple Big Excel Files

Working with big Excel spreadsheets never have been easy, especially when you need to search for a piece of text in a file that have thousands, even ten of thousands rows. Searching through a single file can cost you hours, if not days if you work on a slow computer. To make the matter worse, sometimes you need to search in multiple files and search for multiple strings.

Let me give you an example.

I have a imaginary store that sells auto parts. My store has over 400,000 items and they are in two separated files. Opening it on an old computer is problematic. 

Now, for example, I want to search for parts that contain the text “SPLS” for some reasons. If I go with the traditional way, I would press control + F (or Command + F on a Mac) to start searching. To be very honest with you, looking for results from thousands or million in my case is not an easy task.

To make the problem worse, what if I want to search for multiple text, not just one? What if you need to search for multiple text in MULTIPLE files? Excel only provides us one search box and you can search for one string of text at a time.

Are we out of luck? Is there any better way to search for:

  • Multiple text
  • In multiple Excel files

Search Text In Multiple Excel Files Using Software

Luckily, there is a better way to do this boring task, which is using a pieces of software made exactly to do this task.

Let’s have a look at the software and how it works.

As you can see, this is the software that solves the searching problem in big excel files. You see its true value when you have many files to search and many text to find. Also, the larger the files, the more time the software can save you.

This is the way this software work step by step:

  1. You select the file or files you need to search by clicking on add excel files button at the top left of the panel. You can select multiple excel files using this button.
  2. Then, enter the text you want to search in these files, you need to enter one search per line. There is no limit.
  3. Click on start searching

It takes some time for the software to go through the files and find the text you want to find. As you can guess, the bigger the files, the longer it takes to find all matches. However, in comparison to a human, the software is much quicker, by hundreds times.

You may wonder, is this for Windows only? Good news is Excel Ultimate Search works perfectly on Windows, Mac, and Linux (Ubuntu, Fedora, Centos…)

excel-ultimate-search-works-on-windows-linux-macos

Download Excel Ultimate Search

Free version

  • Search up to 3 files
  • Supports .xls, .xlsx extensions
  • Show up to 5 results

Pro version

  • Search unlimited files
  • Suports .xls, .xlsx, .xlsm, .xslb
  • Show all results found

You can start using the program for free by downloading it here:

When you need more features, feel free to upgrade using the links below: