יום שלישי, 26 במאי 2020

Connecting to MySQL 8 from Old PHP version using mysqli

If you have upgraded your MySQL to MySQL 8 version and still using older version of PHP you might encounter a few problems in the connection using mysqli connector library.

1.
The first problem we are going to solve is:

php mysql 8: "Server sent charset (255) unknown to the client. Please, report to the developers"

The problem is that MySQL have changed the default character set from utf8 to utf8mb4 and it is not supported by mysqli connector (nor PDO as I have checked) in older versions of php.

"The default collation for utf8mb4 differs between MySQL 5.7 and 8.0 ( utf8mb4_general_ci for 5.7, utf8mb4_0900_ai_ci for 8.0). When the 8.0 client requests a character set of utf8mb4 , what it sends to the server is the default 8.0 utf8mb4 collation; that is, the utf8mb4_0900_ai_ci."

The way to solve it easily (there are other ways, such as upgrading php or connectors and more ...) is to force MySQL 8.0 to use UTF8 as default charset for connection.

Add those lines at the end of the my.cnf configuration file. In Ubunutu 20.04 it will be /etc/mysql/mysql.conf.d/mysqld.cnf

So:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

And add at the end (must be at the end of the file):
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
default_authentication_plugin = mysql_native_password

do not forget to restart the server after:
sudo service mysql restart

2.
Second problem is new plugin for MySQL 8 passwords. Instead of the default mysql_native_password it is now using caching_sha2_password so you will get the error:  mysqli::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]

The last line we added to the my.cnf file should fix it but not entirely. When creating the users inside your database make sure to CREATE USER or ALTER USER to use the mysql_native_password like that:

CREATE USER 'username'@`location` IDENTIFIED WITH mysql_native_password BY '[somepassword]'; 

That solved me some problems.

יום שני, 25 במאי 2020

The way I use mysqldump



sudo mysqldump --master-data=1 --flush-logs --single-transaction --routines --quick --all-databases > db.sql

יום שישי, 15 במאי 2020

Simple system to track errors in code and find them easily

Hi,

Here is a trick I developed during my years as a developer / programmer and team code leader. This system not just helps you to find the location of the error or warning in the code, but also who wrote it (without the need to open Git Blame or SVN log) and when was it coded in written.

They say that grep (find in all files) is the best friend of the programmer. Hence if you see an error in text or log file, let's say "Error: can't find configuration file". So you copy the text and "grep" it. It might be you would find this string in a few places scattered around the code.

So, we have started to give some Error Codes to the error. For example "Error: can't find configuration file (1029)". This will make it much easier and this unique error code is easy to search inside all the code files.

So how do you keep all the Error Codes unique ? Maybe a new programmer will add the same code number.

Do you keep a file with all Error Codes ?

Here is my system for assigning error codes:

"Error: some error description (ErrorCode: 20200515.1271726)"

And here is the format of the Error Code

YYYYMMDD.XXXHHII

YYYY, MM, DD - is obvious the date the code was written

HH, II - is the hour and minutes

The XXX is a unique number each of the coder team member identifier.

So let's say a programmer called Dani with code 019 have to add a new log  line with some warning or error. He will add 20200515.0191727 as the Error Code.
Next time I will see this code I can easily 'grep' it and I can also know who wrote this piece of code and when.

Believe me, it helps when the team is large.

Cheers.
Cnaan

יום שלישי, 24 במרץ 2020

Defragmentation and resizing to minimize HD size of a Virtual Machine Drive for Virtual Box

When creating a Virtual HD for Virtual Machine in Virtual Box, you can create a large disc space but the actual size on the disc can be much smaller until you fill it up.
But after you fill it, and then delete and try to free space the size on the host disc still remain large.

Here is how to resize the Virtual Drive HD on the host machine:

You have to do the following steps:

Run defrag in the guest (Windows only)
Nullify free space:

With a Linux Guest run this:
dd if=/dev/zero of=/var/tmp/bigemptyfile bs=4096k ; rm /var/tmp/bigemptyfile
Or:

telinit 1
mount -o remount,ro /dev/sda1
zerofree -v /dev/sda1
With a Windows Guest, download SDelete from Sysinternals and run this:

sdelete.exe c: -z
(replace C: with the drive letter of the VDI)

Shutdown the guest VM

Now run VBoxManage's modifymedium command with the --compact option:

With a Linux Host run this:

vboxmanage modifymedium --compact /path/to/thedisk.vdi
With a Windows Host run this:

VBoxManage.exe modifymedium --compact c:\path\to\thedisk.vdi
With a Mac Host run this:

VBoxManage modifymedium --compact /path/to/thedisk.vdi
This reduces the vdi size.

https://superuser.com/questions/529149/how-to-compact-virtualboxs-vdi-file-size

יום רביעי, 11 במרץ 2020

גרף שעוקב אחר התפשטות והדבקות נגיף הקורונה בארץ

העיתונות מפרסמת הרבה מספרים והרבה מלל. אז אני מנסה לתמצת את זה, ותמונה שווה יותר מאלף מילים וגרף שווה יותר. אז אני אוסף את פרומי העיתונות ועוקב כמה חולי קורונה חדשים יש לנו כל יום ושם את זה על גרף בשאיפה לראות מגמות, כמה נדבקים, כמה נדבקו בארץ מקורונה ולכמה תחלואה בארץ ישראל גורם הנגיף COVID-19. 

ניתן גם לראות את המספרים הגולמיים של חולי הקורנה, הדבקות חדשות, חולים קשה וכמה הבריאו מהנגיף ישירות במסמך Google Sheets שיצרתי על חולי הקורונה.

והנה גרף חולי הקורונה בארץ:

יום שבת, 7 במרץ 2020

Firefox notifications permissions fix for non secured domains (http and not https)

I had a running internal service inside an organization intranet. We wanted to allow notifications (web notifications) but we couldn't. In order to allow notifications for website and domains, both Firefox and Chrome requires https. Quite annoying since it is an Intranet inside the organization.

Trying to install a self-sign certificate or a signed certificate inside the organization (where there is no outside internet connectivity) it's really a pain in the a** and does not work well - and if you ask me it should be much easier and simple than it is.

I found a nice bypass workaround to allow notifications from websites and domains without SSL, hence http:// and not https:// for Firefox.

Firefox holds a file inside the Mozilla directory called permissions.sqlite which is a sqlite database file that holds the permissions for domains. You can add your domain there http://yourdomainname with permissions for notifications and it will work.

I have created a demonstration for Windows here
https://gist.github.com/caviv/8df5fa11a98e0e33557f75215f691d54 in go (golang)

יום שלישי, 28 בינואר 2020

Fixing screen not waking up (xorg) on Ubuntu from command line

Sometimes after xubunutu screen is in hibernate mode the screen does not wake up.

Open terminal ALT+CTRL+F1 (tty)

Run:
  sleep 5 && xrandr -d :0 --output 'eDP-1' --primary --auto

Then switch fast back to the graphic mode (ALT+CTRL+F7) wait a few seconds for the screen to wake up.

'eDP-1' is the name of your screen

You can see connected screens running
    xrandr -d :0


יום שני, 16 בספטמבר 2019

יום שלישי, 28 במאי 2019

יום ראשון, 13 בינואר 2019

Enlrage, resize bash command line linux history line to remember

nano ./.profile
nano ./.bashrc

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=10000
HISTFILESIZE=20000

יום חמישי, 3 בינואר 2019

Disconnecting second monitor display from command line

xrandr --output eDP-1 --auto
xrandr --output VGA-1  --off


יום רביעי, 21 בנובמבר 2018

תזכורת פקודות הרשאות linux groups


Chmod for files:
chmod u=rwx,g=rx,o=r myfile

Get user and groups:
id
id www-data


Adding a user to a group:
sudo usermod www-apache --append --groups [groupname]

Removing user from group
sudo deluser username group

Change ownership:
chown {-R} [user]{:group} [file|directory]

Change group:
chgrp {-R} [group] [file|directory]

Login with www-data user (www-data is set to /usr/sbin/nologin):
sudo su -l www-data -s /bin/bash

יום שישי, 24 באוגוסט 2018

Finding all elements with z-index inside a a page

var all = document.querySelectorAll('*');
for(var i = 0; i < all.length; i++) {if(all[i].style.zIndex > 0) {console.log(all[i].style.zIndex); console.log(all[i]);}}

יום חמישי, 23 באוגוסט 2018

דף שמעדכן את חברות הביטוח וקרנות ההשתלמות לשלוח את הדוחות השנתיים בנייר

הי,
אני רוצה דו"ח בנייר.
אם גם אתכם זה מרגיז שחברות הביטוח וקרנות ההשתלמות עברו באופן חד-צדדי לשלוח את הדוחות בהודעת SMS, אז כתבתי כאן שירות קטן שמעדכן את החברות לשלוח שוב את הדו"ח בנייר כמו פעם.

יום רביעי, 22 באוגוסט 2018

יום ראשון, 22 באפריל 2018

זה למה אני לא אוהב בוטים "חכמים"






זה למה אני לא אוהב בוטים "חכמים".

הבוט של Wysa שאמור לגרום לך להרגיש טוב ....

יום ראשון, 4 במרץ 2018

איך לשמור אימוג'י בדטאבייס MySQL 😀

How To Save Emoji in MySQL Database 😝😚

כדי לשמור סימנים מיוחדים בדטאבייס לעיתים UTF8 לא מספיק ולכן נשתמש ב - Collate מתאים ל - MultiBytes

1.
ALTER DATABASE DatabaseName CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

2.
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

3.
$database_connection = new mysqli($server, $user, $password, $database_name);
  $database_connection->set_charset('utf8mb4');


https://stackoverflow.com/questions/39463134/how-to-store-emoji-character-in-my-sql-database

ותודה לאח שלי חצב !



יום ראשון, 29 באוקטובר 2017

קישורים לכמה דברים שהייתי עסוק איתם לאחרונה:

ראשית,
אפליקציית meeba. רשת חברתית למטיילים, מחברת אותך עם חברים בכל מקום אליו הגעתם.
https://www.meeba-app.com

שנית,
מערכת חכמה לרכב לניווט - המלצות נסיעה ובניית סדר יום: Make My Day.
https://www.makemydayapp.com

ועוד,
email2json.net שרות שמאפשר לבצע אוטומיזציה של אימיילים. אימייל שנשלח יגיע לכל URL שתבחרו ויועבר בפורמט JSON ב - POST.
https://www.email2json.net

זוכרים את delicious לטובה .. הקמתי שרות אשר מספק את אותן יכולות ואפילו יותר.
שרות לשמירת לינקים ובוקמרקים לאורך זמן עם יכולת חיפוש וחיתוך.
yabs.io - yet another bookmarks service.
אתם מוזמנים להתחיל לשמור קישורים
https://www.yabs.io

הפרוייקטים שלי ב - github
https://github.com/caviv

מערכת לניהול ומעקב הוצאות myexpenses
מאשרת חיבור לבנקים  - ניתוח אוטומטי וקיטלוג הוצאות
https://www.myexpenses.co.il


יום שני, 10 ביולי 2017

יום שבת, 1 ביולי 2017

תחרות סטארטאפים 2017

הי תותחים,
שני דברים מגניבים שקורים במקביל - שני מייזמים שאני מעורב בהם !

הסטארטאפ meeba, שלי ושל אחי התקבל לאקסלרטור של StartOno בקרייה האקדמאית אונו.
ביום רביעי, ה - 12 ביולי בשעה 17:00 אנחנו נציג אותו ב - Demo Day ובתחרות הסטארטאפים של המאיץ בקמפוס בקריית אונו.
אנחנו נשמח שתהיו שם ותצביעו בעבורנו !
אנחנו meeba, אפליקציה שהיא רשת חברתית לתרמילאים ומאפשרת למצוא חברים חדשים לטיול ובטיול, לוח מודעות ושמירת קשר עם חברים.
תודיעו לי אם אתם מגיעים, אנחנו מאוד נשמח וזה יעזור לנו.
לאירוע בפייסבוק:
https://www.facebook.com/events/1699599983401461

כל זה בנוסף לסטארטאפ שלי, Make My Day שמסיים את האקסלרטור הנחשב Startup Bootcamp בברלין וגם נבחר לתחרות הסטארטאפ המבטיח של 2017 ואתם מוזמנים להצביע:
https://tech.co/vote-startup-international-americas-middle-east-australia-new-zealand

https://www.flickr.com/photos/startupbootcamp/32724279064/in/photostream/
https://www.startupbootcamp.org/accelerator/smart-transportation-energy/
https://www.startupbootcamp.org/alumni/make-my-day/
דברו איתי עם תרצו משהו נוסף. תמיד.
כנען.

יום רביעי, 21 ביוני 2017

המרת pdf ל - png וחזרה png ל - pdf - כמובן ב - linux ובונוס שינוי שם לקבצים מרובה

המרת pdf ל - png וחזרה png ל - pdf - כמובן ב - linux ובונוס שינוי שם לקבצים מרובה

המרת קובץ pdf לתמונות png:
convert -density 100 filename.pdf -quality 60 output.png

שינוי שם הקבצים, הוספת 0 באמצע שם הקובץ:
for f in * ; do mv "$f" "${f:0:6}-0${f:8}" ; done

חיבור כמה png ל - pdf אחד
convert *.png t.pdf

יום חמישי, 16 בפברואר 2017

Temporary Web Server with Python and .csr file openssl generate

ייצור קבצי .csr ו - .key ל - mod_ssl על ידי openssl

openssl req -new -newkey rsa:2048 -nodes -out example.csr -keyout example.key -subj "/C=il/ST=Address/L=City/O=Organization/CN=example.co.il"

הרצת שרת web server זמני בספריה נוכחית באמצעות python:

python -m SimpleHTTPServer 80
 

יום חמישי, 24 בנובמבר 2016

שכפול אובייקטים ב- JavaScript באמצעות JSON פונקציות

Clone, Parse and Stringify JavaScript objects using JSON.parse and JSON.stringify without loosing functions in deep object:



function localStringify(obj) {
             return JSON.stringify(obj, function(key, val) { return (typeof val === 'function') ? val.toString() : val; });
}

function localParse(str) {
    return JSON.parse(str, function(key, val) { return (typeof val === 'string' && val.substring(0,8) === 'function') ? eval('(' + val + ')') : val; });
        }
 
function cloneObject(obj) {
    if (obj === null || typeof obj !== 'object') {
                return obj;
   }
       
    var temp = obj.constructor(); // give temp the original obj's constructor
    for (var key in obj) {
        temp[key] = cloneObject(obj[key]);
    }
       
   return temp;
}

יום שישי, 4 בנובמבר 2016

הרצת VNC ב - Linux לפני לוגין באמצעות x11vnc

הכדי להתחבר ב - vnc למחשב לינוקס מרוחק צריך לבצע לוגין לפני שה - VNC עולה. ולכן כדי להריץ x11vnc עבור מסך הלוגין עצמו, לפני שהתחברנו, ניתן להשתמש בפקודה:

sudo x11vnc -display :0 -auth guess


אחר כך אפשר להריץ את פקודת ה - x11vnc שתישאר לתמיד:

x11vnc -forever -usepw -xkb -nomodtweak
 

יום שלישי, 1 בנובמבר 2016

האפשרות ש - Microsoft Excel יוכל לקרוא קובץ CSV ב - UTF-8

עבודה עם אקסל יכולה להיות מאוד מרגיזה לפעמים.
לצערנו Excel עדיין עובד בברירת המחדל ב - Windows-1255 Encoding.
אבל מה אם אנחנו רוצים ליצור קובץ CSV מתקדם יותר ... נניח UTF8.
הפתרון נמצא ב - BOM:

 header("Content-Type: text/csv; charset=UTF-8");
 header("Content-Disposition: attachment; filename=$filename"); // Disable caching
 header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1
 header("Pragma: no-cache"); // HTTP 1.0
 header("Expires: 0"); // Proxies

 $out = fopen('php://output', 'w');
 $BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
 fwrite($out, $BOM);
 $headlines = array("a", "b", "c");
 fputcsv($out, $headlines);

 // loop data here

 fclose($out);