a blog about nothing
Files Empty in html form?
Put enctype="multipart/form-data" in your form tag.
hsts Neterr_cert_common_name_invalid
Without full understanding, I had enabled HSTS on amerkhalid.com with option includeSubDomains. I had a subdomain that was used as “Custom Domain” to SmugMug site. After enabling HSTS, these subdomains started to throw NET::ERR_CERT_COMMON_NAME_INVALID.
The fix is of course simple, don’t use includeSubDomains. But that opens up your top level domain to man in middle attacks.
For now, I decided to follow the best practices and leave includeSubDomains enabled. And decided to not use custom domain for my SmugMug site.
TypeError: require.extensions.hasOwnProperty is not a function
While playing with https://github.com/alexa/interactive-adventure-game-tool, I ran into following error:
> interactive-adventure-game-tool@1.0.0 start /Users/amer/alexa/interactive-adventure-game-tool
> node node_modules/gulp/bin/gulp.js
/Users/amer/alexa/interactive-adventure-game-tool/node_modules/require-dir/index.js:97
if (!require.extensions.hasOwnProperty(ext)) {
^
TypeError: require.extensions.hasOwnProperty is not a function
at requireDir (/Users/amer/alexa/interactive-adventure-game-tool/node_modules/require-dir/index.js:97:37)
at Object.<anonymous> (/Users/amer/alexa/interactive-adventure-game-tool/gulpfile.js:1:85)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
at Function.Module._load (module.js:505:3)
at Module.require (module.js:604:17)
at require (internal/module.js:11:18)
at Liftoff.handleArguments (/Users/amer/alexa/interactive-adventure-game-tool/node_modules/gulp/bin/gulp.js:116:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! interactive-adventure-game-tool@1.0.0 start: `node node_modules/gulp/bin/gulp.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the interactive-adventure-game-tool@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/amer/.npm/_logs/2018-01-02T05_12_24_832Z-debug.log
The solution was to update require-dir to version 0.3.2 in package.json and run npm install again.
Disable Ping in Linux
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
…
LeetCode 1664: Ways to Make a Fair Array
I tried to do this all by myself but got stuck, ended up transpiling this solution in PHP.
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function waysToMakeFair($nums) {
$len = count($nums);
$ans = 0;
$leftOdd = 0;
$rightOdd = 0;
$leftEven = 0;
$rightEven = 0;
for ($i=0; $i<$len; $i++) {
if ($i%2 === 0)
$rightEven += $nums[$i];
else
$rightOdd += $nums[$i];
}
for ($i=0; $i<$len; $i++) {
if ($i%2 === 0)
$rightEven -= $nums[$i];
else
$rightOdd -= $nums[$i];
if ($leftEven + $rightOdd === $rightEven + $leftOdd) $ans++;
if ($i%2 === 0)
$leftEven += $nums[$i];
else
$leftOdd += $nums[$i];
}
return $ans;
}
}
LeetCode 20: Valid Parentheses
Here is my solution to this problem in PHP:
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const stack = [];
const brackets = {
'(': ')',
'{': '}',
'[': ']'
};
for (i=0; i<s.length; i++) {
if (s.length === 0) return true;
const c = s[i];
if (brackets[c]) {
stack.push(c);
} else {
const lastBracket = stack.pop();
if (brackets[lastBracket] !== c) return false;
}
}
if (stack.length > 0) return false;
return true;
};
LeetCode 844. Backspace String Compare
Here is my solution Backspace String Compare problem.
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var backspaceCompare = function(s, t) {
s = processString(s);
t = processString(t);
//console.log({s, t})
return s===t;
};
let processString = function(s) {
const a = [];
let skip = 0;
for (let i = s.length-1; i >= 0; i--) {
if (s[i] === '#') {
skip++;
} else if (skip > 0) {
skip--;
} else {
a.push(s[i]);
}
//console.log({a, skip, i})
}
let re = '';
//console.log({ a: a.length})
while (a.length > 0) {
re += a.pop();
//console.log({i, re, a: a.length})
}
return re;
}
Results:
Runtime: 80 ms, faster than 73.76% of JavaScript online submissions for Backspace String Compare.
…Leetcode 690: Employee Importance Solution
Here is another LeetCode solution for Employee Importance Problem.
/**
* Definition for Employee.
* class Employee {
* public $id = null;
* public $importance = null;
* public $subordinates = array();
* function __construct($id, $importance, $subordinates) {
* $this->id = $id;
* $this->importance = $importance;
* $this->subordinates = $subordinates;
* }
* }
*/
class Solution {
/**
* @param Employee[] $employees
* @param Integer $id
* @return Integer
*/
function getImportance($employees, $id) {
if (empty($employees)) return 0;
$emap = [];
foreach ($employees as $e) {
$emap[$e->id] = $e;
}
return $this->recurse($emap, $id);
}
function recurse($emap, $id) {
$e = $emap[$id];
$ans = $e->importance;
foreach ($e->subordinates as $sub) {
$ans += $this->recurse($emap, $sub);
}
return $ans;
}
}
LeetCode 1249. Minimum Remove to Make Valid Parentheses
Here is my solution to this problem:
/**
* @param {string} s
* @return {string}
*/
var minRemoveToMakeValid = function(s) {
const stack = [];
const charArray = s.split("");
const rightBracketsToRemove = [];
for (let i=0;i<charArray.length;i++) {
if (charArray[i] === '(') {
stack.push(i);
} else if (charArray[i] === ')' && stack.length > 0) {
stack.pop();
} else if (charArray[i] === ')') {
charArray[i] = '';
}
}
while (stack.length > 0) {
const i = stack.pop();
charArray[i] = '';
}
return charArray.join('');
};
Leetcode 13: Roman to Integers
Here is my solution to this problem in PHP:
private $v = ['M' = > 1000, 'D' = > 500, 'C' = > 100, 'L' = > 50, 'X' = > 10, 'V' = > 5, 'I' = > 1];
/**
* @param String $s
* @return Integer
*/
function romanToInt($s) {
$n = 0;
$last = '';
for ($i=0;$i < strlen ($s ); $i++) {
$n += $this- >v[$s[$i]];
if (($s[$i] == 'V' || $s[$i] == 'X') && $last == 'I') {
$n = $n - 2;
} elseif (($s[$i] == 'L' || $s[$i] == 'C') && $last == 'X') {
$n -= 20;
} elseif (($s[$i] == 'D' || $s[$i] == 'M') && $last == 'C') {
$n -= 200;
}
$last = $s[$i];
}
return $n;
}
}