Category Archives: code

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.

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
DECLARE last_login2 DATETIME;
SELECT `last_login` INTO last_login2 FROM `user` WHERE `uid` = uid2 LIMIT 1;
IF last_login2 IS NULL THEN
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;

via Undocumented CodeIgniter | Green Egg Media.

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.

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.

  1. Download Pentaho BI Pre-Configured Installation from [http://www.pentaho.org/download/ga.php]
  2. Install JDK5.
  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.
  11. Now you should be able to publish reports to Pentaho using Report Wizard or Report Designer.
  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
  14. And your newly published report should be accessible via Pentaho now.