Wednesday, March 30, 2022

Notes Nokia 8.3 Android 11

DON'T BUY - Mine got Overheated with no chance of recovery. Bad thermal design.


Recovery Mode
Forgot Password
Missing Back button
Wifi - Hidden and MAC address
Screenshot button missing 

This notes may apply to Anroid 11 mobiles in general, although the notes are based on my Nokia 8.3. This is because the Nokia 8.3 is running Android One, which is supposed to be an unaltered version of pure Android.


Recovery Mode
===============
To enter recovery mode:
- plug in USB-C cable
- turn off the phone
- Press Volume Down AND Power button and hold for a few seconds.

Once in Recovery mode, the options are:
- START
- Restart Bootloader
- Recovery Mode
- Power Off
- Boot to FFBM
- Boot to QMMI


Forgot Password
=================
This will WIPE ALL DATA

- Go to Recovery Mode as mentioned above.
- Select Recovery Mode. The Android logo is shown
- Unplug the cable
- Press the Power and the Volume Up key once
- The Recovery Mode menu will show many options
- Choose the Wipe Data / Factory Reset


Missing Back button
====================
By default, Android 11 hides the 3 usual buttons, including the Back button.
To enable these 3 buttons on Nokia 8.3 Android 11:
- go to Settings -> Accessibility -> System Navigation
- Choose between:
Gesture Navigation
3 button Navigation (includes the Back, Home, Apps buttons)




Wifi - Hidden and MAC address
================================
Two important items when connecting to a Wifi on the phone is:
- using a Hidden wifi network
- using the Device MAC address, NOT Randomized Mac.

Unfortunately modern Android phone deliberately make these two security features very hard by HIDING the relevant settings.

On a totally new Android phone, with no SIM card, adding a Wifi network also seems to be a challenge. I forgot the exact details, but persevere and click through all possible options to add the first wifi network.

Before configuring the phone, ensure to 
i) change the network Wifi settings, to be it NOT HIDDEN temporarily.
ii) Add the MAC address of the phone

Then go into the phone and start Configuring:
- go to Settings -> Network and Internet -> Wifi
- Click Add Network at the bottom.
- Type in SSID, Security option eg WPA2, Password
- Click Advanced Options
--- In Hidden Network, change to 'Yes'
--- In Privacy, change to 'Use device MAC'
- Click Save and Connect.

Go back to network Wifi and change back to:
- Hidden Network enabled


Screenshot button missing 
=============================
In previous Android or other handset, the screenshot features is available in two places:
1. Swiping down from the Top of the screen will reveal apps settings like WiFi connection, GPS, HotSpot, Bluetooth, etc, AND Screenshot.
2. Pressing the Power and Volume Down button, will trigger screenshot.

However the above methods is no longer available in Nokia 8.3 running Android 11. It may also be the same for other mobile brands using Android 11.

The Screenshot however is still available in a new spot. This applies to whether using 3-button navigation or Gesture navigation. To trigger Screenshot, simply go to the screen that shows the multiple background apps.
i) Using 3 button navigation, the Background Apps is available by pressing the Squre icon button. Then the words Screenshot will appear on the bottom.
ii) Using Gesture navigation, the Background Apps is available by Swiping upwards from the bottom of the screen. Then the words Screenshot will appear on the bottom.

I can imagine this is a very smart and intuitive location, even though it is very annoying if we got used to the previous methods. It is intuitive because the Screenshot is taken for the whole screen. What better location than to put the Screenshot at the Background Apps area, where we can scroll through different Background Apps to take screenshot for.

NOTE: The word background does not mean wallpaper background. It means the multiple apps that we open, but it is hidden by the recent app. So these background apps are the ones still running but not on the front screen. 




Monday, January 31, 2022

Google Drive Desktop - Different modes of Syncing and Offline

 A bit of background first on Google Drive:

Google Drive have been in existence over many years. It's basically an online, browser based, file storage where you can drag-n-drop any files from your computer onto the webpage of Google Drive. Then there are specific Google office apps which are equivalents to Microsoft Office such as:
Docs (like Word)
Sheets (like Excel)
Slides (like Powerpoint)
.... and even better new apps like: Forms, Drawings, etc
Basically Google Drive allow you to have a file system / file storage plus working on some of those files online from a browser webpage.

Google Sync

Then came the little technology that allows us to install a component on our computer, which then automatically syncs between Google Drive and our computer. This means that we see the Google Drive files and folders on our computer, through File Explorer - as if those Google Drive files are on our computer. 
The reason for this blog is that the Google Sync technology has undergone a few iterations with new names and so creating some amount of confusion. Every few years coming back to this technology again, the name has changed. I may be mistaken, but I roughly remembered the earlier name as Google Sync -> then it became Backup and Sync -> now it became "Google Drive Desktop"

Google Drive Desktop

This post is about the new syncing technology called Google Drive Desktop (now that we are sort of clear on the history) and we won't mention the previous products from this point on.

Installation

Simply open your favourite browser and search engine and type: Google Drive Desktop
Then click on the results as shown below.
image.png

Installation Problems

It is worth mentioning a few of the installation problems I encountered which does not seem to have a specific or logical solution - but I managed to solve it and will share it here. 
The problem occurs after installing the Google Drive Desktop, the little icon in the taskbar is visible but nothing much else. There is a button or link to prompt us to sign in to our Google account or sign in to Google using the web browser or various other ways to prompt us to sign in to Google. But after signing in, still there are no options in the Google Drive Desktop taskbar icon except to sign-in. So I encountered this loop where I keep signing in and there are no results after that. Right click on the taskbar icon and select Preferences, and a window seems to pop up and disappear immediately. There is also a new icon on the desktop itself, and that also prompts us to sign-in, again repeated sign-in had no results.
You may also see the 'Success!' message below after each sign-in attempt, but we may still get nowhere, i.e the Google Drive files is still not showing in our local computer.

image.png

Here are a few things I tried that may in combination provided the solution:
- Restart your computer, perhaps do this two or three times.
- Definitely try signing in two or three or more times after each step.
- When there is an opportunity to sign-out, then completely sign-out of any Google accounts.
- Finally when there is an option to 'Disconnect' from Google Drive, then click Disconnect (this may appear in a smaller window)
Summary - keep on trying various things to sign-out, disconnect etc and signing in again until it works.

Installation Working

When the installation is successful, then in Windows File Explorer, it should show the Google Drive like this:
image.png


Syncing Warning

1. By default all files in MyDrive on Google Drive will be synced and appears in File Explore on the local computer
2. Deleting a file on the local computer, e.g. through File Explorer, will ALSO delete the file in the cloud Google Drive.
For my usage, I prefer NOT to sync everything between the Google Drive and my computer, so I prefer to choose which folders in Google Drive need to be synced to my computer.
The next section will discuss more on how to configure the other modes of syncing, and not deleting the files on the cloud when the local file is deleted.


"Set up offline access" - Right-click on the file or folder you want to make available for offline use. Next, choose "Available Offline" under the "offline access" menu.
image.png

Syncing with Offline access

Several modes are described here:  https://support.google.com/a/users/answer/9308619
Essentially with the offline access mode, we can work on the documents while temporarily not having internet connection. For example, this could be on a flight, in a park, in a coffee shop where we don't trust their public wifi, etc.
1. Working with non-Google files (ie not Docs, not Sheets, etc)
Assuming Google Drive for Desktop is installed, open the Google Drive folder. Select the file or folder to be accessed offline. Right-click on it, and select Drive File Streama and then Available offline.
2. Working with Google files (eg. Docs, Sheets, etc)
Install the Google Docs Offline extension. In Drive, click Settings, thenSettings.
Go to the Offline section, check the Create, open and edit your recent Google Docs, Sheets, and Slides files on this device while offline.
Right-click a file and turn on Available offline.
3. Working on mobile phones
On your mobile device, open the Google Docs, Sheets, or Slides app. Tap Menu and thenSettings. Turn on Make recent files available offline.

Syncing Mode Preferences

As shown below, there are at least 3 different syncing modes. To come to these options, right click on the Google Drive Desktop taskbar icon, then select Preferences.
image.png
image.png
1. Google Drive - My Drive - Stream files
The files are mostly in the cloud (not on our computer). But when we need to work on the files with no internet connection, we can make the files and folders available offline. See section above about working with offline files.

2. Google Drive - My Drive - Mirror files
The files are stored both in the cloud of Google Drive and also on the local computer. The files on the local computer are available to work with, even when there is no internet. There is no extra steps to make these files to be offline, since there is always an offline or local copy already.

3. My PC - This option allows us to select files or folders originally on our local computer already, to be stored / backed-up on the cloud. Click on the Add Folder button to select which existing local folders should be placed on the cloud.


When everything is working, opening the taskbar icon for Google Drive Desktop should show something like this:

image.png




Setting up a Secured Email Server

 This article is Work In Progress....

There are lots of good info on the web about setting up email servers. So this article will start with some links to those sites.

References:

https://helpdeskgeek.com/how-to/how-to-set-up-your-own-email-server/


Mail Server - it looks like the most popular on is 'hmailserver' - https://www.hmailserver.com/download/

Wednesday, January 05, 2022

Metaverse and the Bitcoin Blockchain CryptoCurrency

 Metaverse - What is it?

The metaverse has been around for a few decades in one way or another. However it is not until recently when Facebook chief - the Zuck - announced the new name Meta for his company that the Metaverse has come into heightened attention. Here are some definitions of the Metaverse typically found on Google search:

Wikipedia - "A metaverse is a network of 3D virtual worlds focused on social connection. In futurism and science fiction, the term is often described as a hypothetical iteration of the Internet as a single, universal virtual world that is facilitated by the use of virtual and augmented reality headsets"

Nvidia - "The metaverse is a shared virtual 3D world, or worlds, that are interactive, immersive, and collaborative. Just as the physical universe is a collection of worlds that are connected in space, the metaverse can be thought of as a bunch of worlds, too. Massive online social games, like battle royale juggernaut Fortnite and user-created virtual worlds like Minecraft and Roblox, reflect some ..."

Bybit - "Living, working and playing in an alternate reality requires funding, and that means cryptocurrency. Just as there are several metaverses to use, there are also multiple cryptocurrencies. Understanding the options, differences, and pros and cons f each one can help you make the best investment decision for your needs.

When I first encountered the hype about the Metaverse, it sounded very much like Virtual Reality (VR) - which was the big thing touted in the late 80s and early 90s. VR has not really taken off in the big way, although there are definitely some tangible benefits realised. Things like pilot training simulators and immersive technology certainly have their niches. There could even be a revival in the form of Google Glasses and the Oculus devices. Thinking a bit deeper, VR is usually associated with the technology that allows the  3D immersive experience. Although the implementation of the Metaverse is  also dependent on technology, the Metaverse is much more than about the 3D reality aspect - but it seems to encompass all aspects of the virtual world itself, including commerce, way of life and much more in this alternative metaverse.

The life and commercial aspect of the Metaverse is where cryptocurrency comes in. The quote by Bybit above says it precisely. What currency is better suited to a virtual meta world, then a virtual meta currency embodied by the cryptocurrency blockchain?

Here are some of the up and coming cryptocurrencies that may follow the development of the Metaverse:


ALIEN WORLDS (TLM)
Atari Token (ATRI)
Bloktopia (BLOK)
Boson Protocol (BOSON)
CEEK VR (CEEK)
Chromia (CHR)
CryptoPlanes (CPAN)
DEAPcoin (DEP)
Decentraland (MANA)
inSure DeFi (SURE)
IOTEX (IOTX)
METAHERO (HERO)
MINIGAME,
MRE
METAL
NJF
Polygon (MATIC)
Radio Caca (RACA)
RMRK (RMRK)
Sandbox (SAND)
Solana (SOL)
SQUID,
Starlink (STARL)
TERRA VIRTUA KOLECT (TVK)
Theta Network (THETA)
Torum (XTM)
UFO Gaming (UFO)
Verasity (VRA)
Victoria (VR)
Vulcan Forged (PYR)
WAX (WAXP)



Friday, September 10, 2021

DVB-T + DAB +FM - Software survey

 Bought an el-cheapo Digital TV (DVB-T) USB stick which also has Digital Radio (DAB) and FM Radio - what more could I ask for?

Actually I would ask for an actual software to come with that. As with all things in Ebay, there is a reason why they are cheap. The advertisement itself shows nice and flashy TV pictures on a software. It's only in the fine print of the Package contents that says the software is a Trial Version. I did read that in the ad, but subconsciously put that aside. So now, I'm left with a USB stick with drivers installed but nothing to play with. I don't think I want to touch Windows Media Center, though I guess that is an option to some people.

So the point of this post is to collect and comment of my research on the software that can work with the newly acquired DVB-T stick. Here goes..... (perhaps starting with the paid software, then saving the best free ones for last).


DVB Viewer - http://www.dvbviewer.com/en/index.php?page=features

Cost around 20Eu - which is not a bad price. However there are paid add-ons such as Media Server add-on and Video Editor add-on. On Screenshot pages shows it looks very professional. The Features pages is very comprehensive and also list a lot of TV cards that it supports. Unfortunately mine is a generic brand and I don't expect to find it on the list. The payment is by bank transfer and you put the description of the bank transfer as DVBViewer + email. So it feels quite old school and an independent developer (not a commercial company), and this is one of the positive point for me.


AltDVB - https://www.videohelp.com/software/ALTDVB

Looks like it is free and is under active development, since the last update at the time of writing is May 2021. It's meant to work with DVB-S (Satellite, meaning worldwide signals are available. The T in DVB-T stands for Terrestrial, meaning the local stations). It's 11Mb, its portable, and it has a whole list of Changelog and Release notes. It has its own YouTube subscription channel to explain how to use it.


ProgDVB - https://www.progdvb.com/progtva_download.html

There is a paid version with the title name and there is also a free version called ProgTV. The free version won't support recording and is around 11Mb. It's supposed to let you watch digital TV and listen to radio channels. The paid version supports IPTV, DVB-S/S2, DVB-C (cable) and more.


Media Portal - https://www.team-mediaportal.com/mediaportal/about-mediaportal

This looks like a very complete media center - a full fledged solution. So its ability to play DVB-(C/S/T) is almost drowned out by all the other features. Incredibly, it's not only free but it's open-source too. When it comes to popular software that non-technical people use and download, there is generally a risk of using Free software on the internet. However when a software is open source, like Media Portal, the risk is reduced because the source code is available for the world to see. (this is a general statement about truly open source software and it is not an assessment of the security and safety of using Media Portal). Only drawback is that some DAB (digital radio) functionality may not be fully supported yet.





Friday, July 09, 2021

Review - Antec C40 CPU Cooler

Is a CPU Cooler really necessary? Is it all hype? Or does it actually work? Or will it be much better than the stock CPU coolers that come together with the original CPUs.

In this simple, unofficial review of the Antec C40 CPU Cooler, I hope to answer some of those questions from my experience with this product. Firstly, for all the official information, please go to the following sites, so I won't repeat the stats of the device in this post:

(Apologies for not having a real photo of the actual cooler. I was too excited to install it before thinking about taking photos. The product link should have many photos of this product)

Why do I need a CPU cooler?

My Windows PC has been turning-off by itself at irregular and unpredictable times. Sure most of the times it is because of Windows - and I am never shy of blaming Windows because most of the time it is Windows' fault. I've checked for drivers incompatibilities, new programs that may cause crashes, anti-virus/anti-malware, plugins misbehaving, Windows Update. But none of this were the reasons. Good for Windows that it is not the problem this time. 

By the way, the effect is not really the PC 'crashing'. What happens is that while working on the PC, the computer literally turns-off or powers-off, the same effect as if someone just pull out the power plug. 

So this can only be two things:
  • Power Supply Unit
  • Overheating CPU (either motherboard or CPU triggers a shutdown to prevent damage)
The Power Supply Unit problem will be very difficult to check. Perhaps qualified electricians can use a multimeter to check a few points (DO NOT TRY THIS). But most PC enthusiasts way of testing is to try a different Power Supply and see if the problem exist. In addition, this problem happens at totally different activities while working on the PC. 

Although it looks random, the pattern of the auto turn-off problem emerges. It happens when the computer is left running for some time. It may also happen when doing heavy browsing. It feels more and more like a heat problem. But SpeedFan program says the temperature is between 45-60 degrees. This does not seem to be overly critical although it is high. 

Then one day I rebooted, when into BIOS and check the temperature from the BIOS stats, and it is 80'C degrees. Obviously SpeedFan is wrong! The PC is placed at a corner next to a tall filing cabinet, which I thought would have sufficient airflow since it is not tightly cramped, but apparently not. Bringing the PC out of the corner, and removing the side panel of the motherboard reduced the temperature to 60-70'C degrees.

So definitely temperature is the most likely culprit. Although 60-70'degrees may not cause the problem anymore, but I would need to place the PC back to its original position, hence I thought of purchasing another CPU Cooler to replace the stock standard CPU cooler that came with the original CPU.

CPU Socket Type

My desktop PC is based on an AMD APU (CPU + graphics) of FM2 socket type. So I did a whole lot of research of price vs functionality of CPU coolers before selecting this. What I did not realise that was motherboard was FM2+ socket type until after the purchase. However it turns out to be fine since FM2/FM2+ are compatible not only in terms of the motherboard but also the Antec C40.


In fact the Antec C40 is compatible against a variety of AMD CPUs(see product link above or specs in the images above), but it is also compatible with some types of Intel CPUs. For the Intel CPUs, Antec C40 provides an extra harness / frame to screw onto the motherboard (screws provided), on which to secure the CPU cooler. In addition, Antec C40 also comes with a thermal paste, which MUST be applied between the CPU and base of the cooler when installing it.



Product Selection

So apart from the price / functionality, why exactly did I choose this among the many other choices:
  • Antec seems to be a specialised brand when it comes to CPU cooling. Other brands which I seriously considered were Coolermaster and Thermaltake.
  • The Copper base was an important point for me.
  • The weight of the cooler - it is not the lightest but quite reasonable given the dimensions.
  • The cool factor from the blue LED lighting.



Installation

Before installation of the Antec C40, the original stock standard AMD CPU cooler fan has to be removed. These are the steps I follow - and I do not guarantee any safety  - please read other instructions or manuals before doing this.

Uninstalling the AMD stock standard CPU cooler:

  1. Switch of the PC and all connected equipment.
  2. Unplug everything connected to the PC.
  3. Open the CPU case and make sure you touch the metal from to unearth any static charge.
  4. Reposition the CPU case in a comfortable position, with proper lighting, so it is easy to work with.
  5. Gently move any wires aside.
  6. Unlock by pressing the lever on one side of the AMD stock standard CPU cooler. This type of cooler is extremely easy to remove. Once unlock, gently and lightly tilt both ways to let the CPU cooler unhinge from the motherboard latches. NEVER EVER use force. If anything does not move, just tilt or change some other position.
  7. As you lift up the old CPU cooler, you will see some old thermal paste on top of both the CPU and the base of the old CPU cooler. Clean the thermal paste on top of the AMD CPU by rolling the tip of a cotton butt on it.


(Old AMD stock standard CPU. The best thing about this is the super easy way to install/remove due to the excellent lever design. The Antec C40 on the other hand is hard to clip on, and even harder to unclip to remove)

Installing the new Antec C40

  1. Unpack the Antec C40. 
  2. Ignore the screws and square harness. Those items are for Intel CPUs.
  3. Test Run Only: Gently lower the Antec C40 on top of the AMD CPU. Practice to latch one side of the CPU Cooler onto the motherboard around the CPU - just to experience any challenges or difficulties. Get a feel of how difficult or easy it is to secure the latch but DON'T do the actual attachment yet.
  4. Use the thermal paste supplied by Antec and squeeze a light amount on top of the AMD CPU. Gently spread the paste with the thermal paste tip, then use a small flat thin cardboard to evenly spread the paste on the CPU. 
  5. Get the Antec C40 cooler AND REMOVE THE THIN FILM from the base of the C40 cooler.
  6. Lower the C40 down on top of the AMD CPU. In my case, lowering the side opposite to the latch until it hooks onto the CPU edge was actually quite easy - to this at an angle.
  7. When one side is latched, then very very gently tilt the CPU cooler to be horizontal, to latch on the other side, in order to clip it on. This is the hardest part. You need to apply force, but applying too much force may damage the CPU.
  8. When securely attached, close the PC case, attach the PC components again, restart the PC and go to BIOS screen.

Problem Solved


Is a CPU Cooler really necessary? Is it all hype? Or does it actually work? Or will it be much better than the stock CPU coolers that come together with the original CPUs.

YES, it is necessary. No it is not hype. Yes it does work. Yes, it is definitely better than the AMD Stock Standard CPU Cooler.

Actually the first time I installed it, the BIOS showed 80'C degrees. That was totally unexpected. At least if it was like 60-70'C degrees, that would be similar to the old AMD CPU cooler - that would be understandable. But why would the new Antec C40 produces 80'C degrees when first installed. After checking this and that, with the PC case still open, there seems to be  a shiny border between the CPU and the base of the CPU Cooler. Then the shocking realisation that I actually forgotten to remove the thin film packaging on the C40 cooler's base as described in step 4 above.

So after uninstalling the new C40 cooler (uninstalling is even more difficult  when trying to unclip the new C40 cooler), remove the thin file at the base of the cooler, then reinstall everything again,  the PC was rebooted. Now the very good surprise was that the temperature is hitting about 40'C degrees only. What's more when I place my hand near the CPU cooler fan, it is actually cool air, instead of the hot air I previously felt.

When Windows was restarted, running many applications, browsers, etc to test, the temperature was much lower than with the previous old AMD cooler (actual numbers given by SpeedFan were wrong in absolute terms, but the temperature readings are significantly lower with the new Antec C40 cooler). So the conclusion, at least on my particular AMD FM2 system, the Antec C40 cooler definitely show a dramatic reduction in CPU temperature and the PC does not switch off by itself anymore.

Below image shows the Antec C40 in all its glory (PC case is open)





 

Friday, May 14, 2021

Online Development Tools

 This post is a collection of useful tools for the programmer. The list will be updated as necessary:

https://gist.github.com/discover - Gist is a way to share codes and snippets with others. Every Gists are individual git repository and this is forkable and usable.

https://ideone.com/ - No need for any tools or installing compiler and editors. Ideone is capable to compile over 60 programming languages.

https://sqldbm.com/Home/ -  go to the website and start building your database. Supported database types

SQL server

MySQL

PostgreSQL

Another main facility here is work with the term in a collaboration. Developers can work remotely on a single project through this platform.

https://www.figma.com/ - Figma is a prototyping tool. Just go to the web and start building your design and save online.

https://coggle.it/ - This is a mind mapping application also applicable for structured documents like document trees.



Friday, April 23, 2021

Review - Machine Learning For Absolute Beginners - Oliver Theobold

Machine Learning For Absolute Beginners: A Plain English Introduction (Second Edition) 

Oliver Theobald

This book at Amazon

ISBN-10 : 1549617214

ISBN-13 : 978-1549617218

There is a wealth of information out there on the subject of Machine Learning (ML) especially over the last 10 years. There are books with catch-phrase titles but lacking in substance. Conversely there are books which dwell too deeply into certain kinds of programming framework for ML (nothing wrong with that). For a data scientist, there are not many books out there which cover a broad spectrum of ML, yet with substance on each topic. 'Machine Learning for Absolute Beginners' by Oliver Theobold seems to be one of these rare gems that covers ML broadly and capable of explaining important concepts without too much mathematics or code snippets. Despite the title, a seasoned data scientist may yet find this as a valuable reference.

Following a pleasant introduction to ML and an overview of a typical workflow, it discusses in detail the 3 classes of ML: Supervised, Unsupervised and Reinforcement Learning. It describes a special case of Reinforcement Learning known as Q-Learning. This is followed by a chapter on ML Toolbox where it discusses the data requirements, the infrastructure, the algorithms and the visualisation options that are available. Here it explores the various programming languages (Python, C, R, etc), the cloud platforms (Azure, AWS, Google) and the algorithm frameworks (Tensorflow, Caffe, Torch, etc).

The chapters on data preparation and feature selection covers a lot of the techniques as well as the motivation behind them. These include row and column compression, one hot encoding, binning, treatment of missing data, normalization and standardization. Partitioning of data and cross validation (k-fold) are discussed as the final stages of preparing the data before model training.

The next two chapters were devoted each to Regression and Clustering respectively. These are perhaps the two foundational families of algorithms which are also known outside the context of ML. The difference between Linear and Logistic regression conceptually and applicability to real scenarios were well illustrated. A very simple hand calculation shows how linear regression really works. Logistic regression is then explained by contrasting its usage with linear regression. Similarly the concepts and application for k-Nearest Neighbours and k-Means Clustering for supervised and unsupervised learning were well explained, including the reasonings behind the algorithms.

Machine Learning For Absolute Beginners: A Plain English Introduction (Second Edition) (Machine Learning From Scratch Book 1)

Bias and variance has a short chapter by itself and is enough to explain with sufficient details. Here is another example that brings this book above other ML books which just focus on coding. The understanding of the interplay between bias and variance, which is also emphasized in Andrew Ng's Machine Learning course, differentiates between a data scientist and an ML coder.

Next two chapters deal with the advanced algorithms Support Vector Machines (SVM) and Artificial Neural Networks (ANN). SVM is contrasted with Logistic regression, with explanation of the hyperplanes concept and the margins around the boundary for SVM. ANN concepts were explained from the basic components of neurons and activation functions, building up to the perceptron with mathematical examples for very simple cases. Multilayered Perceptron (MLP) and the various Deep Learning techniques were briefly discussed.

While ANN may be very effective in some cases, it is well known for its lack of explanability (except perhaps with recent developments in SHAP, ICE, LIME, etc). On the other hand Decision Trees has often been hailed for its high explainability nature. So a decent chapter is devoted to Decision Trees with simple mathematical calculations of entropy - which is key to decide on how to split the nodes of the tree. This is expanded to the advanced trees family including Boosting, Bagging and Random Forest and when to use them effectively. This is followed by a short chapter in Ensemble Modelling, where the Stacking method is also discussed.

The last three chapters, finally but rightly put, deals with introducing the development environment and the tool necessary for machine learning work. These include using the anaconda environent to program in the Python language and using the Panda library's dataframes. It also discusses the concept of model optimization and illustrated using the Grid Search technique. Towards the end there is a source code for a simple but complete Python code for an ML workflow, recommendation of other useful books, an Appendix on the introduction of Python but what I consider most useful is pointers to a few free datasets. 



Saturday, March 20, 2021

Help - Ping request could not find host ... DNS problem

 You may have seen this message before:

Ping request could not find host www.cnn.com. Please check the name and try again.

There could be many things that can go wrong with the networking that caused this. Ultimately it is very likely the DNS that is the problem.

Firstly, let's simply go through a few troubleshooting options - just to rule out it is not because of the them. Do one step at a time, check the WiFi and if it works, don't need to progress to the next step.

1. For older laptops, believe it or not, there is actually a slider switch to click the WiFi on or off. Check this if you have it.

2. On Windows, on the TaskBar, ensure that the Wifi (not any particular Wifi network yet) itself is turn on. The WiFi can be either On or Off or Flight Mode or something else.

3. Check that the Wifi is connected to a particular WiFi network. Make sure it says Connected and Secured. And there is no yellow exclamation mark.

4. Open up CMD command terminal, type:

ipconfig  /release 

ipconfig /renew

ipconfig /flushdns

5. Reboot the computer.

If all else does not work, it is now time to suspect the DNS.

The DNS, in layman's term (you can Google for the exact definition), is directory service that lookup the URL you type and translate to an IP address. Its like a Post Office that receives an address and then go to that address. Our computer need to have the address of the DNS server itself - eg. we need the POST OFFICE's address, so that we can give them our letter.

The so somehow, our computer needs to know which DNS IP address to use. Most of the time, this is hidden from the user, that is why most computer user don't have to deal with it and so don't understand it. It can be automatically set on the modem or router, and also optionally automatically set on the Windows network settings.

So why should there be a problem when the DNS working nicely behind the scenes one day, then the internet is not working the next day? There could be many answers, but a recent experience has shown that some software, including VPN software can go it to the network settings and change the DNS address.

Hence one more solution to above error message is to change the DNS address on the Windows networking level. Whichever Windows version you have, 

- find your own way to the 'Network Connections' page or 'Change Adapter Settings' and you can see a page with a list of your network (ethernet, Wifi, VPN) adapters. 

- Right click on the Wifi adapter, if you are using the Wifi adapter.

- Choose 'Internet Protocol Version 4', and click on the Properties

- Go to the section called 'Use the following DNS server addresses', and add 'Preferred DNS' and 'Alternative DNS'


Some of the free DNS addresses are:

Quad9 - known for security

9.9.9.9, 149.112.112.112 (Secured)

9.9.9.10, 149.112.112.10 (Unsecured)

Google - you know them

8.8.8.8, 8.8.4.4

Cloudfare - known for speed

1.1.1.2, 1.0.0.2

OpenDNS - mature and known for security, 

208.67.222.222, 208.67.220.220

CleanBrowsing - known for parental filtering

185.228.168.168, 185.228.169.168

Wednesday, October 07, 2020

Notes Crypto Coin (CRO)

Recently discovered ths exciting new crypto coin. There are a few features: - staking - The Syndycate https://www.securities.io/investing-in-crypto-com-cro-a-comprehensive-guide/

Saturday, September 12, 2020

Notes LinkedIn

 NotesLinkedIn

=================


How to Print Messages to PDF

How to Block someone without them knowing



How to Print Messages to PDF

================================

Printing to PDF is a very simple thing, or it should be. But by default, it seems very difficult to do to get the formatting just right. It is either cut off on the right hand (maybe we can change to Landscape). But then it only prints a little bit of the message on one page.


How to we print the many items of a very long message conversation? The trick is as follows.

- Use Chrome Browser

- Click Messaging on the top horizontal panel.

- The main screen has a left panel of various people, and the middle panel has the main message history of a chosen person.

- On the left panel, click on the person whose message you want to print, and check that the correct message history is on the main panel.

- For privacy, if you want to hide the people on the left panel before printing, go to the left panel, click on the triple dots on top, and select 'Manage Inbox Request'

- On the middle message panel, scroll up to see the start of the messages you want to print.

- Press Ctrl-P, choose Save as PDF.

- In the browser Print panel, Portrait was enough for my printing. But you can change to Landscape.

- In the browser Print panel, in Scale, choose a smaller number say 70% and try a few different numbers until the size and content of messages is OK for you.

- Then click Save. This will produce a PDF file.

- Open the PDF and print as usual.

The main step above is to choose the scaling to make sure it fits enough information of the messages you want to print.



How to Block someoone without them knowing

============================================

No problem, LinkedIn does the block discreetly. It says:

"The blocked member won't receive any notification of this action." 

in here: https://www.linkedin.com/help/linkedin/answer/47081


The steps are very simple and listed on the link above.

Basically you have to go to that person's page, click on More, select Report/Block. 

When a few options are presented, click on the option that says "Block [user name]". Then click Block.


Note: Blocking is different from Removing a Connection. With blocking it seems you are still connected but would not be able to see their profile, updates and cannot message them anymore.


To unblock is a bit different. Go back to your main page.

On top, click Me, click Settings and Privacy, click Block and Hiding, click Block and select Change. Then choose the person you want to block.



Whaling and Social Engineering by a LinkedIn Babe

 On LinkedIn, I have been recently approached by a very professional seeming young lady. Have you had that experience? Then read on......

(Google Reviewers, please do read carefully before making any decision).

Firstly, I am a male, and I am susceptible to be very friendly with females who are friendly to me (I accept not all males feel the same). Female readers are very welcome to leave your comments, but please understand our weakness.

This article is about an experience which can potentially lead to severe security compromise for the victim, their relatives, friends, colleagues and employers. This article is about a potential account of a whaling or social engineering attempt.

There are various definitions of whaling or social engineering, but let's just use the definition below as an example (not that it is the 100% correct definition), so that we have a rough idea to proceed. 

https://searchsecurity.techtarget.com/definition/whaling

"A whaling attack, also known as whaling phishing or a whaling phishing attack, is a specific type of phishing attack that targets high-profile employees, such as the CEO or CFO, in order to steal sensitive information from a company, as those that hold higher positions within the company typically have complete access to sensitive data. In many whaling phishing attacks, the attacker's goal is to manipulate the victim into authorizing high-value wire transfers to the attacker."

Guys, this paragraph is for you. It's not unusual I get unsolicited invites from LinkedIn. They include bearded guys whose name I cannot pronounce, I click Ignore. Nice looking gentlemen who are headhunters, maybe I accept or ignore. Various ladies who are headhunters, again I may accept or ignore. PhD or students of various types, I may accept if they have an interesting profile, otherwise I ignore. But I have never been invited by a babe-level (non-headhunter) who wanted to strike a conversation which is non-work / non-professional related - until now.....


Initial invitation -

So this under 30s, corporate entreprenuer and executive professional who appears to be running a company, decide to invite me in LinkedIn. Let's call her LX from here. To be specific her LinkedIn profile photo is not babe-level, but instead very professional and very expensive looking high class lady. So the invitation is unusual in the sense of it being rare (I don't get invitations like this) but not enough to be suspicious initially - maybe her work or project made her see something in my professional background that may be interesting - after all this is what LinkedIn is about, thank you. On a personal level, she is also the same ethnic background as myself, so in this case, that increased my interest a little.


Interaction - 

The following is an account of the interaction and so far the interaction is still on going and there is no conclusion yet.

- After connection at LinkedIn, we started with well wishes and small conversations. Nothing unusual, but I'm quite excited to have this interaction.

- Not long after, LX admits she does not use LinkedIn much, and asks if I use WhatsApp or WeChat. Immediately I too wanted to move off from LinkedIn and continue our conversation privately in a non-professional platform for chats. 

- On the Chat platform, the conversation continued. The conversations was very pleasant and non-committal. We started to talk about what each other is doing. From my personal view, I enjoyed this very much because it was refreshing to have a new friend who seemed to be very interested in my routine life. She was not nosy and not at all inquisitive of what I do. So no alarm bells there.

- I asked a few questions about her professional life, ie the business that she does. The questions were in the direction of trying to see if there is any synergies between my work and her work so there is more to talk about professionally, or help each other's business. Again this is quite standard in what LinkedIn is suppose to allow for.

- No business talk. However her response to work and business questions were polite and relevant, but usually ended quickly. For example, her company is multinational, and although they have offices in your country, she does not have direct dealings with your branch. This is quite plausible but adds or subtracts nothing in terms of evidence.

- How is your day? The conversation continues very politely and showing interest in daily life routine, such as how is your day, did you sleep well, have you eaten. These are all very nice and I'm very touched to have this level of interest from someone else.

- Niiice photos - Without making any requests, she voluntarily send me photos of herself doing sports (in tight sports gear, calm down you guys) and also showing her at dinner. The dinner picture of her is sensational - very photogenic. So of course I want to continue the interaction more.

- We talked about music, food, weekend activities. So very nice indeed. She does not seem to care about my family background, education background, social status. I have no pressure to try to impress her simply because she seems to have everything. Wow I really like to meet her. Even if for a purely platonic relationship (guys, please!), she is so refreshing to interact with.

- The summary of the interaction is so far we have both kept it very friendly and have not demanded anything from each other at all. Hence no pressure and no expectations. Other males in this position may have taken a different direction and I don't really know how she would respnd. In any case, at this point there is no cause for alarm based on the interaction in the chat room.

Let's now go to the other side of thought.....


Reality Check - 

1. Who am I that such a perfect lady (looks, wealth, charm, humour) would pay attention to me? An old saying goes 'Look at your own cat-face (literal translation from another culture)', 'Look at your own mug-shot', 'Have you looked in the mirror lately'? This is one reality check that pulled me down to earth. Though not looking like Brad Pitt or George Clooney, etc, I do think I'm not bad looking at times. But with double chin, and an average look, really? would a pretty and wealthy and successful young lady choose me out of millions of nicer looking guys out there? (If you answer yes, you don't deserve sympathy if you are taken for a ride).

2. 'If it is too good to be true, then it is not true'. 

Countless people with higher intelligence than myself have fallen victims to scams. I'm not qualified to give all the reasons why and how smart people get scammed, conned, tricked, but it happens all the time. To re-iterate many smart people fall for it. Simply put, when we see something is so good, and we really want it, then we will try to find all the reasons why this good thing can be true. It's not a matter of being optimistic that makes people vulnerable. Those who fall victim to scams, really do want the bait (money, pretty looking person, etc) - we all want something and sooner or later, there is scammer out there who would have the correct bait for us. 

3. Use logic not our senses - A Beutifual Mind.

Men have often been accused of thinking, not with their brain, but with the organ below. If looking in the mirror does not bring a reality check (coz You're So Vain), then remember the movie A Beutiful Mind about the Noble Prize winning mathematician and schizophrenic John Nash. Spolier Alert: Since his university days, he was seeing an imaginary little child. Through his many years of struggle with schizophrenia including hospitalization and medication, he still believed the child was real because he saw with his own eyes, and hear with his own ears. This super briliant mathematician knew he had schizophrenia but cannot deny the existence of the little child. However, the Reality Check came one day, when he realised (using simple logic), that he knew this child (seeing and talking with her) for many decades of his life but she did not grow old. This is the reality check that even all his physical senses tell him it is real, simple logic about humans and ageing brought him out of his delusion and so he accepted the little girl cannot be real.

OK - let's put our suspiscious cap on for a moment. (Remember, nothing in the interaction so far seems like she wants anything or has anything to offer, except friendship. Neither of us have spoken anything other than what two very familiar friends would speak about.) 


Profile:

- Profile photo included whole person, so her face is quite small in the picture.

- LinkedIn people also viewed other ladies with profiles which are very suggestive, yet with high corporate titles.

- She has a 500+ followers. Nothing wrong with that by itself.

- She has a very important, high position title, but somehow the wording is not quite right. 

- Education and work experience profile is quite short. For a yound person, this is understandable. Two universities were listed. Three work experiences listed, the first is an internship. The third is the current very high and important sounding role.

None of these stand out too much by itself, but ordinarily I would not have accepted the Connect invitation with someone with a very brief education and work experience profile. So my confession is that I accepted because she was an interesting lady.


Suspicions - Putting on the tin-foil hat.

The conversations in the chat does not indicate she wanted anything from me, neither information nor resources. The LinkedIn profile described above is not unusual for each individual item, but collectively, they are starting to ring the alarm bells. From there, trying much harder to look through all the evidence, here is a list of suspicious items.

- In the interaction / chats, when I tried to talk about her business to stimulate her interest or passion in her work or business, her answers very soon changed the topic. It was not avoiding the question, but the answers were very plausible, but like 'now let's talk about something more interesting in your personal life'

- She does not ask me about my work, except simply 'what I do at work'. There is no attempt to extract any kind of work related information at all. In fact this almost lack of interest about my professional experience, considering we met at LinkedIn is a bit unsual I thought.

- She has so far send two photos. The photo in a sporting activity shows her in a tight exercise suit - revealing a nice body (sorry, I have say it as it attracted my attention). The one at dinner was very proper looking, showing such a cute and sweet face. But comparing these two photos with her LinkedIn profile photo and the chat app profile photo, I cannot say for sure that it is or it is not the same person. Each photo was taken either at a different angle, with different hair style and different pose, basically enough differences that it could still be the same person.

- Photos - another thing about the photos is that they are not selfies. So she always has someone with her, taking these nice photos of her, whether in an action during sports or at dinner for one, yet looking nice and framed properly in the photos. Who took these photos? Was she with someone? If there is someone, even a friend, why would she be chatting with me half way around the world instead of giving more attention to that person who is with her?

- Looking more closely at the education level in combination with the work experience. She attended two universities consecutively from 2011-2017. A brief internship was done. Then it appears her first job after the internship is CEO of a company (4 years ago until now) and and second job at the executive level from (3 years ago until now). So this is what I meant by a seemingly successful or wealthy young lady. Can this be true? Yes since her country is a place where rule-of-law is not always true, and important people (e.g. her father) has significant advantages. Or it could be a not-very-good fake profile.

- Looking at her LinkedIn connections, it is almost all males out of the first 8 pages with only one female who is another high-powered successful lady. All the males are CXO, C-level executives, directors, Heads of xyz, business leaders etc. Not even head-hunters has such high powered connections. Could all these male high-flying individuals be potential victims?


Why me? What for?

Although some alarm bells may start to tingle, most likely we may not know the reason until it is too late. Here are just a few very general reasons and there could be more.

https://www.smh.com.au/lifestyle/life-and-relationships/don-t-know-why-i-sent-more-sally-lost-her-entire-savings-to-a-love-scam-20200909-p55ttb.html

1. The article above is about old-fashioned scamminng involving romantic love, but the technology could be modern, like chat or video conferencing. The scammers are patient and build trust and love on the victims, then the objective of the scam is old-fashioned money.

2. For more modern whaling, the objective would be to target high level corporate leaders, or someone influential enough in an organisation, such as an IT Administrator. Then if the scammer can infect the devices of the victim, potentially everyone else in the victim's computer network (ie the office) could be vulnerable.

3. Social engineering - this may combined the old-fashioned charm and get-to-know-the-person-trick, then with the similar objective as whaling, by having the goal of being able to access information or computer systems of more high value targets in the organisation of the victim. 

I don't think I can fall in the romantic scam trick, but that is in fact what I could fall for. I don't have a high title in my company nor important role, but that does not mean I cannot be used to get to another person through me. Just because I don't know why, does not make me any less valuable to a scammer.

4. Here is another potential reason (I won't comment further)

https://www.asianage.com/world/americas/310818/china-using-fake-linkedin-accounts-to-recruit-americans-us-top-spy-catcher.html


Checks

The suspicions above may or may not reflect the truth - and I still cannot be sure at this point.

However, a few things can be checked.

- Contact University? Alumni Lookup service?

- Check with a few others she has been in contact with.

- Check by calling the work company, maybe not directly, but approach with tact.

- Image check in the internet.

- Common scammer fake profiles search


Update:

I just verified using reverse image search (https://tineye.com/search/), that the chat app profile photo is taken from a young lady at a tourist website. The website has a lot of photos of the same lady and they are clearly recognizable as the same person. However, LX's various photo seem difficult to identify as the same person.

Sunday, August 23, 2020

Offline Browser, Proxy Server, Cache for viewing web pages without the Internet

 The following is a work in progress to find a way to view web pages without the internet.


How to Enable Offline Browsing in Chrome - an experimental feature within Chrome and like browsers.

https://www.hongkiat.com/blog/windows-offline-browsers/ - a good list of offline browsers

https://proxy-offline-browser.com/professional/Installation.html - MM3 Web Assistant. This functions as a proxy and automatically saves the webpages that have been visited. However the free version does not handle HTTPS. The benefit is that users do not need to specify which sites to save specifically.


HTTrack Website Copier - seems to be the best so far. Will test soon.

WebCopy - similar to HTTrack but not JavaScript....



Wiki for Offline browsing

  1. Download the linux version: http://xowa.org/home/wiki/Help/Download_XOWA.html
  2. On Linux, open a terminal and run sh /home/Your_Name/xowa/xowa_linux.sh
  3. Note that the shell script is a wrapper for java -Xmx256m -jar /home/Your_Name/xowa/xowa_linux.jar
  4. Path of jar file /home/Your_Name/xowa/xowa_linux.jar
Or when doing this from within docker
# on host of containers
docker run -it ....alpine

# inside the container
apk add wget
wget https://github.com/gnosygnu/xowa/releases/download/v4.6.5.1911/xowa_app_linux_64_v4.6.5.1911.zip
apk update
apk get openjdk11


Friday, August 21, 2020

Notes Video Editing

 

https://au.oberlo.com/blog/best-free-video-editing-software

I'll add comments to help narrow down even further for myself basically - but others may find it helpful too.

Blender - originally for 3D animation. I've also heard about its not-so-easy to learn aspect, though it has lots of features. But I won't be trying this.

Lightworks - the Free version has a limit of 720p. I've used another converter to convert to 1280x720 and compare with the original and very common 1920x1080 size. The 720 one is noticeably fuzzier. So I won't be testing this further.

Shortcut

While the cut function seems OK, the Export is difficult to configure. Pressing the Export button does nothing. In one case when it did export, the file is more than twice the original.

OpenShot

  • not really that straight-forward to use without using any help
  • Export to a lot of formats, but for some reason, the output is 10 times larger than the original. Why it doesn't use the exact compression level of the input?
  • BEST so far
  • Small footprint, about 80MB fully installed (according to the installation dialog)
  • Best Feature - COPY - this option in the video encoder format allows it to use exactly the same video format as the input. So if there are no edits being made, the new output is exactly the same size. This is very useful in comparison with other software above which, in most cases, result in an output which is larger than the input video file.

Kapwing Online Editor
  • limited to 7 minutes  clip for free version

Sunday, July 26, 2020

Tensorflow Deployment Requirements for Machine Learning / Neural Networks

This blog will be continuously updated.

Obviously from the title, out of the many Machine Learning (ML) framework, this post is about the Tensorflow (https://www.tensorflow.org/) framework as oppose to other ML frameworks. As a quick reference, the other ML frameworks are:


PyTorch vs TensorFlow — spotting the difference

Keypoints from this link is that Tensorflow is for the server whereas Caffe is for production edge deployment. Both support parallel computing but in a different way. Caffe needs to be installed by compiling from source, but Tensorflow is easier to deploy.


The following has simple instructions on how the setup the Tensorflow environment.

The articles in the link above are helpful in determining which software versions will work with other software versions. Please  note that the latest software version may not be compatible with other software it needs to work with.

Software Requirements: 
Python
CUDA toolkit
cuDNN
Tensorflow
Keras - Python Deep Learning API which works on top of Tensorflow



Hardware Requirements:
GPU is optional. However, when GPU is preferred, and specifically CUDA is preferred, then the GPU will be from NVIDIA.
In terms of laptops, there are broad classes of laptops referred to as Workstations and other are Gaming laptops. Workstations are generally more expensive. In a particular search, a Workstation laptop with Quadro T2000 GPU is clearly more expensive than a Gaming laptop with RTX 2060 GPU card. Yet benchmarks show that the RTX2060 performs much better than the Quadro T2000.



Monday, June 22, 2020

Unboxing - AIMOS HDMI KVM 2-port Switch



Below are some images of the manual

Chinese

Add caption

The package comes with two identical cables.
On one end of the cable is the normal USB connector which should be plug on your computers
On the other end of the cable is a connection that looks like a printer cable - this should of into the KVM.

There are 3 male-to-male HDMI cables that need to be purchased separately.
Cable 1 connect HDMI port on KVM to HDMI port on computer 1
Cable 2 connect HDMI port on KVM to HDMI port on computer 2
Cable 3 connect HDMI port on KVM (labelled 'output') to HDMI port on Monitor.

Once all cables are plugged in, the system is ready to be used.

Tuesday, April 28, 2020

Notes q

You Tube - Introduction to KDB+ and q
An Overview of the q language



You Tube - Introduction to KDB+ and q
========================================
Tutorial: https://www.youtube.com/watch?v=8eoysfqO3UY&list=PLypX5sYuDqvrwBD2EMWadIMiTqJZmVsqm
The following is a transcribe of the details in the above introduction course. It is meant as rough notes to capture the syntax and used as a reference, and may not give good worded descriptions.

#lesson 1
NO: control flow, loop, if-else, threads, shared globals, objects, inheritance
interpretive language, dynamically type, vector programming, functional programming, list, dictionaries, tables (1st class items, based on list, dicts)

#lesson 2
function has TYPE
42  -> 64 bit
42i -> 32 bit
4%2 -> % is division
2f  -> float

#lesson 3
1 2 3+10 20 30     -> vecotr operation, results is 11 22 33, spaces are used to separate list items
count 1.0 2.0 3.0  -> 3 is the result
1+10 20 30         -> 11 21 31  scalar(atom) + vector
# All operations have precedence, operations done right to left
2*3+4              -> (3+4) =7 then *2  =14
til 100            -> generates 01 2 ... up to 100 numbers
count til 100      -> 100
101+2*til 1000     -> generate (0 .. 999), then x 2, then add 100 to every item. Result: 101 103 105 ....

#lesson 4
0b      -> false
1b      -> true
101b    -> list of booleans true, false, true, NOT separated by space, and NOT a bitmask representation
42=6*7  -> 1b (true)
1 2 3=10 2 30  -> 010b  vector results of false, true, false
2018.01.01     -> actually count of days since millenium (yyyy.mm.dd)
2000.01.01=0   -> 1b True
1999.12.31=-1  -> 1b True
2000.02.01-2000.01.01  -> 31i (31 days, in INTEGER 'i') date arithmetic
2000.01.01+til 31      -> make 31 integers then add to 1st Jan 2000 -> gives the dates of that month. List-Date arithmetic
2000.01m    -> month
2000.01m=0  -> 1b    Comparing the 1st month since millennium
2000.02m=1  -> 1b    Comparing the 2nd month since millennium
2000.01.01=2000.01m  Comparing 1st day ever, to 1st month ever, q assumes the month is 1st day of month when comparing to date, hence true.

#lesson 5 - Casting
`long$1.0  -> cast to long
`float$1   -> cast to float
`boolean$1 -> cast to boolean
`date$31   -> cast to date format, ie 31 days since millennium is 2000.02.01
2000.01m+til 12   -> list of 12 months  2000.01 2000.02 2000.03 ...
15+2000.01m+til 3 -> 2001.04 2001.05 2001.06m    1st 3 months, after 15 months from the millenium

# lesson 6 - Operations on List
Declarative programming - what we want in q. Other languages are imperative, ie write loops to tell how to compute.
0 +/ 10 20 30 40 50    Initialise to zero then add the items on the list. The +/ symbol called 'over' in q, 'fold' in functional language.
(+/) 10 20 30 40 50    Same as above - add across a list. Does not need to be initialised.
'/'                    The slash is ALSO behaving like an iterator
sum 10 20 30 40 50     ->  same as above
(*/) 1+til 5           Does Factorial(5)
4|5                    -> 5 returns larger number
10&2                   -> 2 returns smaller number
0b|1b                  -> 1b  Larger operator for Boolean is equivalent to 'OR' operator
0b&1b                  -> 0b  Smaller operator for Boolean is equivalent to 'AND' operator
(|/) 10 30 20          -> 30
max 10 30 20           -> 30
(&/) 10 30 20          -> 10
min 10 30 20           -> 10
(+\) 10 20 30 40 50    -> 10 30 60 100 150. Backslash means create a CUMULATIVE / RUNNING list. also called 'sums'
(&\) 40 20 30 10 50    -> 40 20 20 10 10. Running minimum. Also called 'mins'. Similarly with 'maxs'

# Lesson 7 - Functions
{[x]x*x}               -> [x] is the parameter
{[x]x*x}5              -> substitutes 5 into x. Result is 5*5. Can also use {[x]x*x}[5]
{x*x}5                 -> implicit parameter, don't need to declare.

# Lesson 8 - Newton Raphson and Fibonacci Sequence
Say Function is f(x) 2-x^2. So f'(x) = -2x. NewtRaph algo is xn = xn - f(x)/f'(x)
{[xn]xn+(2-xn*xn)%2*xn}/[1.0]   -> 1.414214   .... result from Newton Raphson using 1.0 as initial point, being put into the function on the left iteratively.
{[xn]xn+(2-xn*xn)%2*xn}\[1.0]   -> 1  1.5  1.4.....  shows the intermediate results from Newton Raphson
\P 16                   -> shows 16 decimals. iteration stops until diff is 1e-14
2#10 20 30 40 50        -> 10 20   '#' retrieves the integers from the left of list
-2#10 20 30 40 50       -> 40 50   '#' retrieves the integers from the right of list
10 20, 100 200 300      -> 10 20 100 200 300      joins lists
{x, sum -2#x}/[10;1 1]  -> returns the Fibonacci Sequence. Iterate 10 times, starting with [1 1]

# Lesson 9 - Function, Variables
deltas 110 120 130      -> 110 10 10   takes differences between two numbers. The first result assumes difference with zero.
deltas sums 110 120 130 -> is the same as sums deltas 110 120 130   -> result is 110 120 130. Invariance in q.
a:42                    -> assign value of 42 to variable a.
buys:2 1 4 3 5 4        ->
sell:12                 -> want to sell 12 units from the various buys
sums buys               -> 2 3 7 10 15 19
sell&sums buys          -> 2 3 7 10 12 12 - creates a list of minimum between two lists.
deltas sell&sums buys   -> 1 2 4 3 2 0    - list of what how should buy

# Lesson 10 - Tables
Table = Collection of columns in q. Operations are column based, hence vector operations.
dates:2018.01.01+10000000?31  -> list of 10 million numbers between 0(including BUT not stated) and 31(stated, but EXCLUSIVE)
times:10000000?24:00:00.0000  -> 10 million random nums, between 0 (including, BUT not stated) and midnight (EXCLUSIVE)
qtys:100*1+10000000?100   -> 10 mil random numbes from 0 to 100, then +1, then * 100
ixs:10000000?3            -> 10 mil rand num, from 0 1 2.          store random numbers in ixs
10 20 30 ixs              -> 10 10 30 20 30 20 ......     Since ixs has 3 unique values, so the 10 20 30 will apply to 10 20 30, MAPPED into the 10 million entries of ixs.
syms:`appl`amzn`googl ixs -> `googl`aapl`amzn`googl`googl ....     applies symbols to list, store in syms. The 3 stock quotes is MAPPED to the 3 unique values of ixs for all 10 million values of ixs
172.0 1189.0 1073.0 ixs   -> maps the 3 unique values into the 10million numbers of ixs
pxs:(1+10000000?.03) 172.0 1189.0 1073.0 ixs           -> adds some random noise to the 10 million stock prices.
t:([] date:dates;time:times;sym:syms;qty:qtys;px:pxs)  -> creates a table, with specified column names, and columns of data
t:`date`time xasc t       -> sort ascending time, then date
5#t                       -> returns top(head) 5 rows

# Lesson 11 - qSQL
select date,time,qty,px from t where sym=`aapl 
\t select date,time,qty,px from t where sym=`aapl    -> returns time in milliseconds
first 10 20 30 40 50   -> first item on list
last 10 20 30 40 50    -> last item on list
select open:first px,close:last px by date,time from t where sym=`aapl

#Lesson 12 - Complex Queries(*)
4 3 2 1 wavg 10 20 30 40      -> 20f  calculate weighted average
5 xbar 0 1 2 3 4 5 10 11 21   -> 0 0 0 0 0 5 10 10 20   returns bucketed result. Useful for time domain values that needs bucketing
select max px - mins px from t where sym=`appl   -> is the Max idealised profit (ie buy at the lowest price of the day and sell at the highest price of the day. The function is the same as select (max (px - (mins px from t where sym=`appl) )). The mins is a running cumulative vector of the minimum, while the max just returns the single value.

#Lesson 13 - Interprocess Communication(*)
Server and Client - ie running two different q.
On Server
\p 4242            Starts the server on port 4242
On Client
h:hopen`::4242     Where machine name is omitted between two colons, since it is on the same machine. h is the handler
h "6*7"            Do compute on remote server
sq:{x*x}           Send function to remote server
h (sq; 5)          Execute on remote server
DON'T DO ABOVE since open ports are dangerous
On Server
cub3:{0N!x*x*x}    0N! displays computation on local server first, before shifting to client
On Client
h (`cub3; 5)       Safer this way, CALL the name of the function. First Argument is function name, the rest are arguments

#Lesson 14 - Callbacks(*)
Previously the client server were synchronous, meaning the parties wait for each other after sending a message.
For Asynchronous, when message is sent, the sender does not need to wait.
The handler h is an 'integers'.
On Client
h                      -> 3i  is the integer 3. this is a function handler
(neg h) (`cub3;5)      -> h is positive, neg h is negative. So "(neg h) (`cub3; 5)" is an ASYNCHRONOUS call.
Callback: Without callback, an asynchronous function would send message to server, then receives no response. With callback provided on the server, the server will send the result back whenever it is ready.
Client uses 'h' as its handler to call the server
Server uses '.z.w' as its handler of the function send from the client.  .z.w returns 6i

On Client (FINAL)
continue:{0N!x}                   -> displays x over here
(neg h) (`worker; 5; `continue)   -> (neg h) for asynchronous, call process 'worker' on server, with argument '5', use the callback label 'continue'. First Argument `worker is function name, the rest are arguments [5; `continue]

On Server (FINAL)
cub3:{0N!.z.w; x*x*x}
worker:{[arg; callback] r:cub3 arg; (neg .z.w) (callback; r)  -> 'worker' is process called by client, defined here on server. [arg; callback] are the parameters passed from client. 'callback' is the dummy name corresponding to 'continue'. Runs cub3 on arg, store result in r. Then (neg .z.w) triggers the callback to client asynchronously. Thirdly execute the 'callback' (which is 'continue') with result r.

# Lesson 15 - I/O
Strings - abit different than other languages. Strings are a list of characters, not a primitive type.
"jab"    is a list
`jab     is a variable name
Binary files - operations have 1 in their names
Text files - operations have 0 in their names
File records are list of strings to q. Which means they are a list of list of characters to q.

("So long"; "and thanks"; "for all the dish")    - a list of list of chars
count ("So long"; "and thanks"; "for all the dish")    -> three list items
`:/data/solong.txt  0: ("So long"; "and thanks"; "for all the dish")     -> `:/data/solong.txt   returns this file handler as acknowledgment
'                  error messages are 'Straight ticks'
`                  File handlers are 'back ticks'
`:                 is the file handler or names a file.
/data/solong.txt   is the local path
0:                 is the name of the WRITE to text file function
read0              is the name of the READ from text file operation
read0 `:/data/solong.txt                                  -> prints out the lines of the file
`:/data/answer.txt  0: txt,txt:read0 `:/data/solong.txt   -> `:/data/answer.txt   returns this file handler as acknowledgment


Date - starts from the millennum
Vector Column operations - not Rows
select from 10million rows in 150ms
Single line of code for even for non-trivial functions

select max px - mins px from t where sym=`appl    Algorithm for Idealised Profit in Trading (sym is symbol column, px is price column of table t )
{[xn]xn+(2-xn*xn)%2*xn}\[1.0]                     Algorithm for Newton Raphson with initial point as 1.0
{x, sum -2#x}/[10;1 1]                            Algorithm for Fibonacci Sequence, initial points 1 1 , for 10 iterations



An Overview of the q language
================================

'q' is a proprietary language build on top of an existing 'k' language (developed by ex-Morgan Stanley computer scientist Arthur Whitney) and the kdb+ datatbase (The 'q' language / kdb+ is free for non-commercial use). They are all proprietary products of Kx Systems and it is perhaps more widely known (if not the de facto) in the finance and investment banking industry more than any other industries. As such, it is aimed at time-series based data, large volumes and high transfer rates. Very complex applications can be written in the 'q' language with an extremely small footprint. A large number of Altair's real time visualisation software, Panopticon, connect to kdb+ databases and utilises q.

A recent exploration into the depths of the q language reveals a very sophisticated and expressive computational programming language. It is both like and unlike various programming languages. Perhaps the first point is the vector programming underlying its core, yet this language may not be known widely in the HPC community (or perhaps I have not looked wide enough while I was in HPC, it happens). Vector supercomputers once ruled the HPC world, but when they approached extinction, the vector processing capability were re-incarnated into commodity CPUs and is now powering our PCs (since the days of Intel MMX, SSE, etc...). And it appears that around that similar time shortly after the Millennium, 'q' was born independently of Vector Supercomputers or vectorised CPU instructions, but rather tracing its origin back to the 60s from APL (A Programming Language), thus having both vector and functional programming influence.

For reference, a free book is available at: https://code.kx.com/q4m3/0_Overview/
And a Tutorial series is at: https://www.youtube.com/playlist?list=PLypX5sYuDqvrwBD2EMWadIMiTqJZmVsqm

For those coming from scientific, computational, HPC background, thinking in terms of vectors will ease our understanding to 'q'. For the general programmers who are familiar with C, Java, Python, and the rest, the good advice from the YouTube link would be to throw away your understanding of control flow, loop, if-else, threads, shared globals, objects, inheritance. The syntax itself is short, succinct and raw, yet expresses beautifully the operations it performs. The following will describe some of the noteworthy things about 'q' which are different than the current popular programming languages.

'q' is similar to many scripting language, ie interpretative (no compilation), dynamically type (no pre-declaration of data type). The two fundamental data structures are lists and dictionary, again no surprises here. However it is the vector operations that are perhaps new to most modern day programmers. For example a vector 1 2 3 can be added directly to another vector 10 20 30. Yet these vector expressions should be reminiscent of those in Matlab and Fortran, but the similarities don't extend much further. The syntax is perhaps quite different (though perhaps not too dissimilar to other functional programming languages). The vector (list) items are delimited by spaces (not commas). The mathematical operators has equal precedence (no BODMAS rule) and the order is designed so that the operations are performed in the right-to-left order. For example: 2*3+4 is actually 2*7, which is 14. This right-to-left and single line way of writing code is perhaps the biggest change a programmer of other languages need to overcome.

Control flow and loops goes out the window because an operation acts on all the items in the vector. There is no point in having an explicit index to loop over. As such, an operation over 10 or 10 million items can be written in one line. In fact, entire functions or methods are written in one line, as shown in examples later. In terms of data types, there are the familiar char, boolean, integer, float and so on. Strings are like in Fortran or old C, a string in q is actually a character of arrays. The really most interesting data type I found is the Date representation. Instead of some arbitrary representation having an initial value at 1970 or 1900; q's date are actually integers starting from 1 Jan 2000. This means date computations benefit from the speed of raw integer operations, as well as being able to perform fancy date arithmetic.

List operations are powerful, since this is one of the core data structures of q. List, or vectors can be operated with another vector or scalar, not dissimilar at all to their mathematical counterparts. In addition to aggregate operations like 'max', 'min', 'sum', there are more interesting versions 'maxs', 'mins', 'sums' which actually returns a cumulative vector of the aggregation process. The highlight of the 'q' language of its expressiveness and power would be its function definitions. Instead of describing, ponder upon the following one-liner, and consider how such functions would need to be written in Python, Java, C, etc:
    Algorithm for Newton Raphson with initial point as 1.0
{[xn]xn+(2-xn*xn)%2*xn}\[1.0]
    Algorithm for Fibonacci Sequence, inital points 1 1 , for 10 iterations
{x, sum -2#x}[10;1 1]
    Algorithm for Idealised Profit in Trading (sym is symbol column, px is price column of table t )
select max px - mins px from t where sym=`appl

As for Data Analytics and complex data processing, there are tables, qSQL and a few more useful functions. Tables are collection of columns, like Fortran/Matlab but opposite to C-based languages. Columns in tables generally mean they are of the same data type that means they are easily stored as vectors. For q, this means performing operations on large datasets are extremely fast. Combining the single line functional syntax with vector based operations, very complex yet efficient programs can be written in a terse manner. The qSQL syntax enables very SQL-like expressions to be written. This may be a comfort for SQL programmers, but it still pays to understand the underlying concepts of q, since there are fundamental differences that can lead to incorrect expectations. Native functions like 'xbar' that creates bucketing are extremely powerful when applied to time-series based analysis. In an example of 10million rows, a certain select operation took 150ms.

Most programming languages have the capability of File I/O. q also has File I/O for both text and binary files (again there is the similarity with Fortran's binary files capability, rather than the streams based files I/O of other languages). Not surprisingly by now, q's way or reading and writing files are one-liners. There is no need to open or close a file or the many other lines of instructions needed by other languages. Besides File I/O, q is also capable of Interprocess Communications and Asynchronous processes. Together, these capabilities enable q to write client-server applications without using any other external tools.

From this brief high level exploration, q seems to be an interesting, powerful and useful programmig language. It has the expressiveness of functional programming, the power of vector processing and the applicability to real high volume data computational needs. The fact that it is born within the Financial Trading sector by no means exclude it from being used in other industries. Whereever there is large numerical datasets that requires computation, q may be a good choice. These other industries that may benefit include: data science, scientific research,  defence, telecommunications, etc. In terms of providing real-time visualisations of the large and fast datasets, Altair's Panopticon with kdb+/q would make a formidable combination.