Safari: ‘a.getTime’ is undefined

Recently, we were working with Google Charts at which we were presenting data from a timeline with some processing.
Our JavaScript code was formatted as follows to create Date objects:

$value = "2020-03-19 23:45:00";
var dateStrFormat = new Date($value);

The above code worked fine on Firefox and Chrome but it failed on Safari with the error:
a.getTime is not a function. (In 'a.getTime()', 'a.getTime' is undefined)
After some investigation we found that Safari does not support a Date() constructor that contains time as well so we had to change the code to the following block:

var dateStr = "2020-03-19";
var dateStrFormat = new Date(dateStr);
var hourStr = "23";
var minutesStr = "45";
dateStrFormat.setHours(hourStr, minutesStr);

The above works on all browsers!

Advertisements

Micro SD Card Testing with DJI Mavic Mini

Below we will be posting the lists of micro SD cards that we tested with DJI Mavic Mini and the result (which is if they work or not).

Work

  • integral
    • Capacity: SDXC 64GB
    • Speed: UHS-I
    • Speed Class: 10
    • UHS Speed Class: 3
    • Video Speed Class: V30
    • Application Performance Class: A1
  • SanDisk Ultra
    • Capacity: SDHC 32GB
    • Speed: UHS-I
    • Speed Class: 10
    • UHS Speed Class: 1
    • Video Speed Class: ?
    • Application Performance Class: A1
  • Verbatim
    • Capacity: SDHC 16GB
    • Speed: UHS-I
    • Speed Class: 10
    • UHS Speed Class: 1
    • Video Speed Class: ?
    • Application Performance Class: ?
  • SanDisk Extreme
    • Capacity: SDHC 32GB
    • Speed: UHS-I
    • Speed Class: ?
    • UHS Speed Class: 3
    • Video Speed Class: V30
    • Application Performance Class: A1

Do not work (SD Card Unavailable)

  • SanDisk Ultra Plus
    • Capacity: SDXC 64GB
    • Speed: UHS-I
    • Speed Class: ?
    • UHS Speed Class: 1
    • Video Speed Class: ?
    • Application Performance Class: ?
Screen capture from DJI Fly application showing an SD card that cannot be used nor formatted giving out the message “SD card unavailable”.

Hikvision DVR sending email over GMail

Recently, we were trying to setup the email configuration of a Hikvision DVR which even though it was updated to the latest firmware we would get the message Testing Failed when trying to send an email over GMail.

In the GUI of the DVR there was an option to Enable SSL but no option to enable TLS/STARTTLS. So after consulting the GMail official documentation on how to configure an email client for GMail, we set the SMTP Port to 465 and enabled the SSL option. Then we created an application password for the DVR and tried to test the settings. To our disappointment we got the Testing Failed message.

After reading the latest user manual of the DVR, it mentioned an option to Enable SSL/TLS but not Enable SSL which got us curious. It raised the following question to us: “What if they enabled the TLS functionality but they forgot to update the GUI to match it?”. So we changed the port to 587 and hit Test again.

Guess what ?

It worked!!

It appears that Hikvision enabled the TLS/STARTTLS functionality but forgot to make their GUI reflect the change!

Using the settings depicted in this photo, we were able to send test messages from our Hikvision DVR over GMail using TLS/STARTTLS on port 587 of smpt.gmail.com!
The confirmation of the successful email sending operation.
“TESTING SUCCEEDED.”

Ubuntu 18.04 LTS: Setting up a symfony 4 skeleton project

Recently we decided to give it a go with Symfony PHP framework on an Ubuntu 18.04 LTS. Below you will find the commands we executed to install the skeleton project of symfony with some comments.

Composer

To install symfony, you need composer which is a dependency manager for PHP. The version of composer that was available in apt when this post was written was “very” old. Specifically, it had version Composer 1.6.3 2018-01-31 16:28:17. For this reason we decided to go with the version that is available in the official website of composer. The steps we followed were the ones below:

# Update our system
sudo apt update -y;
sudo apt upgrade -y;
# Install dependencies
sudo apt install curl php-cli php-mbstring git unzip php-xml -y;
# Get composer installer from the official site
curl -sS https://getcomposer.org/installer -o composer-setup.php;
# Verify the the download was not corrupt by checking the sha384 sum of the installer file
HASH=`curl https://composer.github.io/installer.sha384sum | cut -d' ' -f 1`;
# If this step fails, go back to the curl command and try again, it would mean that there was a problem when downloading the installer from the net
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# Upon successfully validating the install, we can proceed to the actual installation.
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer;
source ~/.bashrc;

Symfony Skeleton Project

After the above steps are completed, we were able to proceed with the final step, which would be to create the symfony skeleton project via the composer with the following command in the folder named sandbox:

composer create-project symfony/skeleton sandbox '4.4.*';

To verify the installation of the skeleton project we started a web server with PHP in the installation folder of the project and thus verify it through the browser:

cd sandbox;
# We did not use the port 80 as it would require root access to start
php -S 127.0.0.1:8000 -t public;

From a browser visiting http://127.0.0.1:8000/ we got to see: