[MySql] relocation error: /usr/lib64/libmyodbc5.so: symbol strmov, version libmysqlclient_16 not defined

When using myDSN and connection to remote DB(MySQL) this issue arise.

Error:

: relocation error: /usr/lib64/libmyodbc5.so: symbol strove  version libmysqlclient_16 not defined in file libmysqlclient_r.so.16 with link time reference


Cause:

this is an issue of back dated odbc-connector. You can check by systems' isql command that it's also returning same error. It's happen when there is a mismatch between the version of, 

mysql-connector-odbc-5.1.5r1144-7.el6.x86_64.rpm
&
MySQL-shared-compat-advanced-5.6.22-1.el6.x86_64


Solution:

Download and install mysql-connector-odbc-5.3.4-1.el6.x86_64.rpm by,

rpm -Uvh mysql-connector-odbc-5.3.4-1.el6.x86_64.rpm

And after that change the following file,


$ vi /etc/odbcinst.ini

[MySQL]
Description             = ODBC for MySQL
Driver          = /usr/lib64/libmyodbc5w.so
Setup           = /usr/lib64/libodbcmyS.so
Driver64                = /usr/lib64/libmyodbc5w.so
Setup64         = /usr/lib64/libodbcmyS.so
FileUsage               = 1

[MySQL ODBC 5.3 Unicode Driver]
Driver          = /usr/lib64/libmyodbc5w.so
UsageCount              = 1

[MySQL ODBC 5.3 ANSI Driver]
Driver          = /usr/lib64/libmyodbc5a.so
UsageCount              = 1

[Node.js] https connection return curl: (35) Unknown SSL protocol error

Error:

curl: (35) Unknown SSL protocol error

Cause: For node.js https connection you are using invalid certificate. Invalid certificate is because the procedure you create the certificate.

Solution: Use the following mechanism to generate certificate and key.

openssl req -x509 -sha256 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX


[Node.js] Error: EISDIR, illegal operation on a directory at Error (native)

Error:

fs.js:552  var r = binding.read(fd, buffer, offset, length, position);                  ^Error: EISDIR, illegal operation on a directory    at Error (native)    at Object.fs.readSync (fs.js:552:19)    at Object.fs.readFileSync (fs.js:384:28)    at /usr/eyeball/auth_server/js/server.js:98:15    at Socket.<anonymous> (/usr/eyeball/auth_server/js/util/process.js:11:5)    at Socket.emit (events.js:129:20)    at _stream_readable.js:908:16    at process._tickCallback (node.js:355:11)

This error happen when you use invalid file path for opening and reading using nodejs dependency library fs. 

Solution:

File must be the file path with the file name. Not the file directory.

[Node.Js] squel.js:167 throw _iteratorError2; ^ ReferenceError: Symbol is not defined

When you are using nodejs on RHEL 6.7 with the following version of default RHEL 6.7 repo,

"node":"0.10.41","npm":"1.4.29"

This is basically a version mismatch of squel library with node. So you just need to downgrade the squel version  or upgrade the nodjs version. Upgrading over 0.10.X in RHEL 6.7 is tough without custom build or some online rpm.

Error:

/usr/eyeball/auth_server/node_modules/squel/squel.js:167        throw _iteratorError2;              ^ReferenceError: Symbol is not defined    at _registerValueHandler (/usr/eyeball/auth_server/node_modules/squel/squel.js:148:36)    at Object._buildSquel.cls.registerValueHandler (/usr/eyeball/auth_server/node_modules/squel/squel.js:294:5)    at _buildSquel (/usr/eyeball/auth_server/node_modules/squel/squel.js:1222:7)    at /usr/eyeball/auth_server/node_modules/squel/squel.js:2971:13    at object (/usr/eyeball/auth_server/node_modules/squel/squel.js:5:22)    at Object.<anonymous> (/usr/eyeball/auth_server/node_modules/squel/squel.js:9:2)   at Module._compile (module.js:456:26)    at Object.Module._extensions..js (module.js:474:10)    at Module.load (module.js:356:32)    at Function.Module._load (module.js:312:12)error: Forever detected script exited with code: 8

Solution:
Remove the previous squel by,
npm uninstall squel
Then install the correct version
npm install squel@4.3.3
Thats it!

[MYSQL] relocation error: /usr/lib64/libmyodbc5.so: symbol strove, version libmysqlclient_16 not defined in file ...

Ok, this is an issue of back dated odbc-connector. You can check by systems' isql command that it's also returning same error. It's happen when there is a mismatch between the version of, 

mysql-connector-odbc-5.1.5r1144-7.el6.x86_64.rpm
&
MySQL-shared-compat-advanced-5.6.22-1.el6.x86_64

download and install mysql-connector-odbc-5.3.4-1.el6.x86_64.rpm by,

wget http://ftp.kaist.ac.kr/mysql/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.4-1.el6.x86_64.rpmrpm -Uvh mysql-connector-odbc-5.3.4-1.el6.x86_64.rpm

And after that change the following file,


cat /etc/odbcinst.ini[MySQL]Description             = ODBC for MySQLDriver          = /usr/lib64/libmyodbc5w.soSetup           = /usr/lib64/libodbcmyS.soDriver64                = /usr/lib64/libmyodbc5w.soSetup64         = /usr/lib64/libodbcmyS.soFileUsage               = 1 [MySQL ODBC 5.3 Unicode Driver]Driver          = /usr/lib64/libmyodbc5w.soUsageCount              = 1 [MySQL ODBC 5.3 ANSI Driver]Driver          = /usr/lib64/libmyodbc5a.soUsageCount              = 1

[PLAY-FRAMEWORK] UnsupportedClassVersionError: com/typesafe/config/ConfigException : Unsupported major.minor version 52.0

[PLAYFRAMEWORK] Using JRE for running java binary/application made of PLAY framework::


On production system its better not to use JDK as it has compiler on it. So only JAVA runtime installation should do the trick for running PLAY-FRAMEWORK based java application. Its basically REST service providing server.
So lets see how it is done,

code for symbolic link:
  $ export JAVA_HOME=/usr/java/jre1.8.0_91/  $ export PATH=$PATH:$JAVA_HOME/bin
  $ ./your_play_frameworkbased_app


All are done in the same console which doesn't store the JAVA HOME on the system path. 

If the specified  JRE/JDK version is not available on system path or on execution console then running PLAY framework based application will provide following error trace,


Exception in thread "main" java.lang.UnsupportedClassVersionError: com/typesafe/config/ConfigException : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at play.core.server.ProdServerStart$.readServerConfigSettings(ProdServerStart.scala:76)
    at play.core.server.ProdServerStart$.start(ProdServerStart.scala:37)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22)
    at play.core.server.ProdServerStart.main(ProdServerStart.scala)

[HACKERRANK] Problem analysis Manasa and Stone





Problem link: https://www.hackerrank.com/challenges/manasa-and-stones

Manasa is out on a hike with friends. She finds a trail of stones with numbers on them. She starts following the trail and notices that two consecutive stones have a difference of either aa or bb. Legend has it that there is a treasure trove at the end of the trail and if Manasa can guess the value of the last stone, the treasure would be hers. Given that the number on the first stone was 00, find all the possible values for the number on the last stone.
Note: The numbers on the stones are in increasing order.


Analysis: On this problem the questioner is asking for the possible combination of addition of a and b integer in an increasing series and the last number of the series. As it is an increasing series then it is must that either a or b will be added to the next number of the series. So possible combination for the n stone with 2 number (a and b) is 2^n number of solution. But as start stone is always 0, then you have 2^n-1 place. Now as your set consist of just 2 number you can get the number of solution by just increasing occurrence of a and decreasing the number of occurrence b. So at the end last number of the series is,

last num = a*num-occurrence + b * num-occurence

So for  n number of places iterate this equation for the all possible solution,

while(n--)
{
      last num = a*n + b*(max_place - 1 - n) //Where max_place is number of stone
}

N.B. Consider corner cases on input which is not added on the solution analysis.