Publish a Message From Android on MQTT

AndroidManifest.xml

    <!-- Permissions the Application Requires -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!--<uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />

And register our MQTT Android Service in our app before the closing tag by adding this line:

 <service android:name="org.eclipse.paho.android.service.MqttService" />

Java

public class MqttManager {

    MqttAndroidClient mqtt=null;

    public void publishTest() throws MqttException {

        try
        {
            String clientId= MqttClient.generateClientId();
            mqtt=new MqttAndroidClient(CachePupli.context,"tcp://192.168.1.2:1883",clientId);
            MqttConnectOptions connectOptions=new MqttConnectOptions();
            connectOptions.setAutomaticReconnect(true);
            connectOptions.setCleanSession(true);
            IMqttToken token= mqtt.connect(connectOptions);
            token.setActionCallback(onConnect);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }


    private IMqttActionListener onConnect=new IMqttActionListener() {
        @Override
        public void onSuccess(IMqttToken asyncActionToken) {

            MqttMessage message=new MqttMessage("Hello World".getBytes());
            try {
                mqtt.publish("test",message);
            } catch (MqttException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(IMqttToken asyncActionToken, Throwable exception) {

        }
    };
}

References
https://www.eclipse.org/paho/clients/android/
https://wildanmsyah.wordpress.com/2017/05/11/mqtt-android-client-tutorial/

Setup specific GOPATH for your own Project

Create GOPATH folder
Create a folder in your project directory.This folder is going to be your GOPATH folder.
I creeated a folder named go for my specific GOPATH inside my project.

cd go
mkdir src

Create project folder

cd src
mkdir msync # project folder

Setup Jetbrains Gogland IDE

set the IDE to use your specific GOPATH not the global GOPATH

go get

every time you want to get an external package open a terminal ( I have tested in Linux) :

GOPATH=~/git/mediasync/go/
go env # for checking env
go get github.com/eclipse/paho.mqtt.golang

References
https://www.jetbrains.com/help/go/getting-started-with-gogland.html
https://stackoverflow.com/questions/37163048/how-to-install-github-repository-in-a-specific-gopath

Redirect Request to SSL on Apache

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   DocumentRoot /usr/local/apache2/htdocs
   Redirect /secure https://mysite.example.com/secure
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
   DocumentRoot /usr/local/apache2/htdocs
   SSLEngine On
# etc...
</VirtualHost>

When redirecting everything you don’t even need a DocumentRoot:

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName www.example.com
   Redirect / https://secure.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName secure.example.com
   DocumentRoot /usr/local/apache2/htdocs
   SSLEngine On
# etc...
</VirtualHost>

Note: Once the configuration is working as intended, a permanent redirection can be considered. This avoids caching issues by most browsers while testing. The directive would then become:

Redirect permanent / https://secure.example.com/

—————

<Directory /topsecret>
  SSLRequireSSL
</Directory>

References
https://wiki.apache.org/httpd/RedirectSSL
https://serverfault.com/questions/429634/restrict-apache-to-only-allow-access-using-ssl-for-some-directories
https://www.tecmint.com/redirect-http-to-https-on-apache/

Install ShadowSocks via shadowsocks-libev on Ubuntu 16.04

sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev
sudo apt-get update
sudo apt install shadowsocks-libev

Configure and start the service

# Edit the configuration file
sudo vim /etc/shadowsocks-libev/config.json

# Edit the default configuration for debian
sudo vim /etc/default/shadowsocks-libev

# Start the service
sudo /etc/init.d/shadowsocks-libev start    # for sysvinit, or
sudo systemctl start shadowsocks-libev      # for systemd
sudo systemctl enable shadowsocks-libev

References
https://github.com/shadowsocks/shadowsocks-libev