Thursday

How to Install SQL Server on MacOS with docker


 I'm writing a small tut for who need to install SQL Server on macOS using docker

Step 1: Download the SQL Server Image

sudo docker pull mcr.microsoft.com/mssql/server:2019-latest

Step 2: Launch the SQL Server Image in Docker

docker run -d --name example_sql_server -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pass.word-123' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest

Step 3: Check the SQL Server Docker Container

docker ps -a


Step 4: Install SQL Server Command-Line Tool

sudo npm install -g sql-cli

Step 5: Connect to SQL Server 

5.1 Using Command

mssql -u sa -p Pass.word-123

5.2: Using VSCode to connect to sql server

Using the extension SQL Server (mssql)



Sunday

[DP] Minimum number of coins need for a specific amount


 322. Coin Change - LeetCode

You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money.

Return the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.

You may assume that you have an infinite number of each kind of coin.

Example 1:

Input: coins = [1,2,5], amount = 11
Output: 3
Explanation: 11 = 5 + 5 + 1

Example 2:

Input: coins = [2], amount = 3
Output: -1

Explanation:

We use dynamic programming for this problem: First, we try to resolve the smaller problem!

Suppose we have numbers type of coins = [1,2,5]
We need to get minimum coins for amount 2
        The smallest amount is 0 then we need 0 coin
        With amount 1 we need 1 coin
        With amount 2:
            For case: coin 1 < 2, mean coin 1 can be used, then 1 coin
                      We need to calculate the coins for remain amount
                            The reimain amount is 2-1 = 1 
                            No. of coin for amount 1 is 1
                       => for this case we need 2 coins.
            For case: coin 2 <= 2, mean coin 2 can be used, then we have 1 coin
                      We need to calculate the coins for remain amount
                            The reimain amount is 2 - 2 = 0
                            No. of coin for amount 0 is 0
                       => for this case we need 1 coins.
                       compare with the previouse case, 1<2 then the answer is 1
            For case 5: 5 > 2, cannot use
 Then we just continue until the amount we're looking for.


Solution:

public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount+1];
        Arrays.fill(dp, amount + 1);
        dp[0] = 0;
        Arrays.sort(coins);
        for (int a = 1; a <= amount; a++){
            for(int i = 0; i<coins.length; i++){
                if (coins[i] <= a){
                    int remain = a - coins[i];
                    int numOfCoin = 1 + dp[remain];
                    dp[a] = Math.min(dp[a], numOfCoin);
                }
            }
        }
        return dp[amount] > amount? -1: dp[amount];
    } 

Free App - Layout Application Windows in Mac OS


One of my favorite built-in features in Windows OS is arranging the windows. This feature is very useful for me when implementing the front end, or do some translation stuff. Unfortunately, this feature is not available for Mac OS, we must use a window manager application.

   Windows management in Windows 11

In my opinion, the best application for organizing workspace on Mac is Magnet. Magnet is paid application, it cost ~2$ and we buy it here ‎Magnet on the Mac App Store (apple.com)

Today I would like to introduce an alternative free solution is that Rectangle (rectangleapp.com). Rectangle App is free and very lightweight. It's also very fast.




The following screenshot displays the windows positions and the corresponding shortcut in Rectangle.


Monday

Identify the type of array


 Interview question:

  • An array is given and it can be of four types:
    (a). increasing
    (b). decreasing
    (c). first increasing then decreasing
    (d). first decreasing then increasing
    Without traversing the array we need to tell its type.There was a long discussion on this question.

Thursday

Template Method Pattern


Definition: define the skeleton of an algorithm in a a method, deferring some steps to subclasses. Template Method pattern lets subclasses redefine certain steps of an algorithms without changing the algorithm's structure. 

Class diagram:

The OO Principles: 
- The Hollywood Principles: Dont call us, we'll call you.
The template method in supper class tell the subclasses that, dont call us, we'll call you. The supper class is on high level component, it has control over the algorithm, and call the subclasses only when they're need for an implementation of template method. 
The client will depend on the abstraction supper class rather than the concrete subclasses, which reduce the dependencies of overall system.

Advantages:
- There is no code duplication. (the reusable code is pulled to the parent class)
- Flexibility lets subclasses decide how to implement steps in an algorithm.

Disadvantages:
- Difficult for debug and maintenance.

Relation with other pattern:
- Factory method pattern: Subclasses decide which concrete classes to instantiate.  this pattern is a specialization of Template Method.
- Strategy pattern: Encapsulate interchangeable behaviors and use delegation to decide which behavior is use.
- Template method: Subclasses decide how to implement the steps in an algorithm.

What problem does this pattern solve?
Two different components have significant similarities, but demonstrate no reuse of common interface or implementation. If a change common to both components becomes necessary, duplicate effort must be expended.

Use case:

The template method pattern is a technique that defines the steps required for some action, implementing the boilerplate steps, and leaving the customizable steps as abstract. Subclasses can then implement this abstract class and provide a concrete implementation for the missing steps.

public abstract DatabaseQuery {

    public void execute() {
        Connection connection = createConnection();
        executeQuery(connection);
        closeConnection(connection);
    } 

    protected Connection createConnection() {
        // Connect to database...
    }

    protected void closeConnection(Connection connection) {
        // Close connection...
    }

    protected abstract Results executeQuery(Connection connection, String query);
}




Saturday

How to improve your Java programming skill with JShell


Introduction

If you are a javascript developer, I believe you will use the developer tool of the browser to interact with the page that you're inspecting or test a piece of code. This console is a REPL (Read-eval-print-loop) or language Shell. A REPL is a simple, interactive programming environment that takes user input (Read), executes the user command (Evaluate), returns the result to the user (Print), and waits for the next user input (Loop).

From java 9, we also have a REPL tool for java which called Java Shell Tool or in short JShell.

Open Jshell:

quoc ~  $ jshell
|  Welcome to JShell -- Version 15.0.2
|  For an introduction type: /help intro

jshell>

Tuesday

Ubuntu – Cannot connect MySQL Workbench to MySQL server


 I have installed MySQL workbench from Snap Store and MySQL server 8.0 using apt. The server is running fine and I can access MySQL shell from terminal. But I am having issues connecting the Workbench to the server. I'm getting

        Cannot Connect to Database Server

Your connection attempt failed for user 'root' to the MySQL server at localhost:3306:

  An AppArmor policy prevents this sender from sending this message to this recipient; type="method_call", sender=":1.125" (uid=1000 pid=7944 comm="/snap/mysql-workbench-community/5/usr/bin/mysql- wo" label="snap.mysql-workbench-community.mysql-workbench- community (enforce)") interface="org.freedesktop.Secret.Service" member="OpenSession” error name="(unset)" requested_reply="0" destination=":1.13" (uid=1000 pid=2044 comm="/usr/bin/gnome- keyring-daemon –daemonize –login" label="unconfined")

Best Answer

  • You have installed MySQLWorkbench as a Snap package. You want to store the database password(s) in the Gnome Passwords & Keys facility.

    However, a Snap package is sandboxed; it is not by default allowed to access this service. When you choose "Store in keychain" MySQLWorkbench is blocked by AppArmor.

    You need to enter a command to allow this package to access the service. The command is:

    sudo snap connect mysql-workbench-community:password-manager-service :password-manager-service
    

    I got this from the discussion at this site.

  •  

    Thursday

    What to look for in a code review


    In doing a code review, you should make sure that:

    • The code is well-designed.
    • The functionality is good for the users of the code.
    • Any UI changes are sensible and look good.
    • Any parallel programming is done safely.
    • The code isn’t more complex than it needs to be.
    • The developer isn’t implementing things they might need in the future but don’t know they need now.
    • Code has appropriate unit tests.
    • Tests are well-designed.
    • The developer used clear names for everything.
    • Comments are clear and useful, and mostly explain why instead of what.
    • Code is appropriately documented (generally in g3doc).
    • The code conforms to our style guides.


    Wednesday