# 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('');
};
``````

# Magento – Get All Products with Categories in a Flat View

``````    SELECT
w1.website_id,
w1.name as website_name,
s1.store_id,
s1.name as store_name,
p1.entity_id as product_id,
p1.sku,
pname.value as product_name,
url.value as url_path,
small_image.value as small_image,
msrp.value as msrp_price,
price.value as price,
p1.created_at as product_created_at,
p1.updated_at as product_updated_at,
visibility.value as visibility,
pstatus.value as status,
case
when
(pstatus.value = 1
and visibility.value > 1)
then
1
else 0
end as enable_flag,
c1.entity_id as category_id,
cname.value as category_name,
c1.parent_id,
c1.created_at as category_created_at,
c1.updated_at as category_updated_at
FROM
catalog_product_entity p1
inner join
eav_attribute p_attr ON p1.entity_type_id = p_attr.entity_type_id
and p_attr.attribute_code = 'name'
inner join
catalog_product_entity_varchar pname ON pname.entity_id = p1.entity_id
and pname.attribute_id = p_attr.attribute_id
inner join
eav_attribute p_attr2 ON p1.entity_type_id = p_attr2.entity_type_id
and p_attr2.attribute_code = 'url_path'
inner join
catalog_product_entity_varchar url ON url.entity_id = p1.entity_id
and url.attribute_id = p_attr2.attribute_id
and pname.store_id = url.store_id
inner join
eav_attribute p_attr3 ON p1.entity_type_id = p_attr3.entity_type_id
and p_attr3.attribute_code = 'small_image'
inner join
catalog_product_entity_varchar small_image ON small_image.entity_id = p1.entity_id
and small_image.attribute_id = p_attr3.attribute_id
and pname.store_id = small_image.store_id
inner join
eav_attribute p_attr4 ON p1.entity_type_id = p_attr4.entity_type_id
and p_attr4.attribute_code = 'msrp'
inner join
catalog_product_entity_decimal msrp ON msrp.entity_id = p1.entity_id
and msrp.attribute_id = p_attr4.attribute_id
and pname.store_id = msrp.store_id
inner join
eav_attribute p_attr5 ON p1.entity_type_id = p_attr5.entity_type_id
and p_attr5.attribute_code = 'price'
inner join
catalog_product_entity_decimal price ON price.entity_id = p1.entity_id
and price.attribute_id = p_attr5.attribute_id
and pname.store_id = price.store_id
inner join
eav_attribute p_attr6 ON p1.entity_type_id = p_attr6.entity_type_id
and p_attr6.attribute_code = 'visibility'
inner join
catalog_product_entity_int visibility ON visibility.entity_id = p1.entity_id
and visibility.attribute_id = p_attr6.attribute_id
and pname.store_id = visibility.store_id
inner join
eav_attribute p_attr7 ON p1.entity_type_id = p_attr7.entity_type_id
and p_attr7.attribute_code = 'status'
inner join
catalog_product_entity_int pstatus ON pstatus.entity_id = p1.entity_id
and pstatus.attribute_id = p_attr7.attribute_id
and pname.store_id = pstatus.store_id
inner join
catalog_category_product ccp ON ccp.product_id = p1.entity_id
inner join
catalog_category_entity c1 ON c1.entity_id = ccp.category_id
inner join
eav_attribute c_attr ON c1.entity_type_id = c_attr.entity_type_id
and c_attr.attribute_code = 'name'
inner join
catalog_category_entity_varchar cname ON cname.entity_id = c1.entity_id
and cname.attribute_id = c_attr.attribute_id
and pname.store_id = cname.store_id
inner join
catalog_category_product_index store1 ON store1.product_id = p1.entity_id
and store1.category_id = c1.entity_id
inner join
core_store s1 ON store1.store_id = s1.store_id
inner join
core_website w1 ON s1.website_id = w1.website_id
``````

# OpenShift Error: Layer 7 Wrong Status, Invalid Response

I have been playing with OpenShift for past several hours. It looks great. But a while back I started to get 503 Internal Server error.

When I checked logs using rhc tail , I saw this error: `Layer 7 Wrong Status, Invalid Response 404.`

I spent an hour or so troubleshooting. Turns out the issue was Netbeans had added `src/main/web/app/WEB-INF/jboss-web.xml` when I ran the application locally on my machine. I committed this file, thinking I might need it. Deleting it from repo fixed the issue.

# How to Tell if a Number Is Whole in Php

``````if (\$num == (int) \$num) {
// It's whole
} else {
// It's not
}
``````

# Filter Some Keys in Multi Dimensional Arrays in Php

``````/**
* Cleans up multi-dimensional arrays.
* 1st dimension is a simple index
* 2nd dimension includes the desired keys
*
* @param mixed \$array
* @param mixed \$keysToInclude
*/
public function cleanUpArray(\$array, \$keysToInclude) {
\$returnArray = array();
\$i = 0;

foreach(\$array as \$item){
foreach(\$keysToInclude as \$key){
\$returnArray[\$i][\$key] = \$item[\$key];
}

\$i++;
}

return \$returnArray;
}
``````

# MySQL Update If Exist Else Insert Procedure

Are you tired of checking data in your code before inserting? Well MySQL procedures are here to rescue. This simple procedure shows how you can do that:

``````CREATE PROCEDURE `update_insert_user`( IN uid2 int  )
BEGIN
SELECT `last_login` INTO last_login2 FROM `user` WHERE `uid` = uid2 LIMIT 1;
INSERT INTO `user` (`uid`,`last_login`) values (uid2, now());
ELSE
UPDATE `user` SET `last_login` = now() WHERE `uid` = uid2 LIMIT 1;
END IF;
END
``````

# Codeigniter Out of Memory Error

Query Saving is a feature of CI’s database class that stores the results of every query in memory until the controller is finished executing. As it turns out, in version 1.6.0, the ability to turn this off was added. The addition of the save_queries variable is listed in the Change Log, but as of the latest release of 2.0.0 last week, it still hasn’t made the documentation.

``````\$this->db->save_queries = FALSE;
``````

One thing to note is that disabling `save_queries` would disable some other Database class functions like `last_query()`. So it is not just used by profiler.

# ssh_exchange_identification: Connection closed by remote host

I tried to login to my server tonight but kept getting following error message:

`ssh_exchange_identification: Connection closed by remote host`

The fix was simple, at least if you have access to server via cPanel. Just restart sshd service via cPanel/WHM.

# Setting Up Pentaho BI on Windows Box

I am not sure if this works anymore or not. I don’t use Pentaho now but this post seems popular, so leaving it here for now. Contact me if this is incorrect and needs to be corrected or taken down.

3. Open `C:\pentaho-demo\pentaho-solutions\system\publisher_config.xml`. Add a password for publishing reports.
4. Delete all folders except reporting under `C:\pentaho-demo\pentaho-solutions\samples`.
5. Delete all `.xaction` and `.properties` files under reporting.
6. Copy JDBC driver for your database under `C:\pentaho-demo\jboss\server\default\lib`. I used Oracle 10g driver, it is called `ojdbc.jar`.
7. Edit .jsp file to change the look of default Pentaho website under `C:\pentaho-demo\jboss\server\default\deploy\pentaho.war\jsp`.
8. Add path to your JDK in `start-pentaho.bat` located under C:\pentaho-demo. For example, `set JAVA\_HOME=C:\Program Files\Java\jdk1.5.0\_11`
9. Double click on `start-pentaho.bat`.
10. Open `C:\pentaho-demo\jboss\server\default\deploy\pentaho.war\WEB-INF\web.xml`. Search for `base-url` and add your server’s ip.
12. Once you publish report, you will need to go to `C:\pentaho-demo\jboss\server\default\deploy` and open newly created data source file named something like `???????-ds.xml`.
13. If your database is Oracle you will need to change driver class property to `oracle.jdbc.driver.OracleDriver`