npm install ReferenceError: console is not defined

Trying to install npm with:

curl http://npmjs.org/install.sh | sh

Returns:

ReferenceError: console is not defined:

Cause:
NodeJS not properly installed.

Solution:
Goto NodeJS download and get the latest tar package and install it yourself. Usual install procedure:

tar -zxvf node-whatever.tar.gz
cd node-whatever
./configure
make
make install

Now try again and it should work 🙂

Hide images from div if they don’t fit

The title of this article is horribly lame but it’s what (after a few beers) I appear to have Google’d for..  Basically you have a div, 800px wide and you have 16 images, all 100px wide and you want to only leave 8 images in the active dom.  I bet you are thinking..  Yea just use

overflow:hidden

..  Sure..  But you can still tab to the images and that sucks if you are making a TV website where the users may be using a remote control…

So here’s how I did it..  Using javascript..

  1. Set an incremental id value on each image, IE img
    id=image1

    …  image2, image3 etc.

  2. Get width of div
  3. Divide width by amount of px.
  4. Now you have total amount of objects you can show
  5. For each of the 16 images if the amount of images available is less than 16 then set it to
    display:inline;

    else set it to

    display:none;

Display none stops the object from existing on the screen what so ever..  It’s not hidden so you can’t tab to it..  This also works with divs that can be resized..  What you do is listen for resize, when a resize event is triggered get the new div width and run the function to hide/display the images..

If you know a better/cleaner way of doing this then please let me know 🙂

Add to my calendar script

I needed a simple one click method to create a calendar event that people could put straight into google calendars and outlook, this function supports outlook, google calendars is done w/ a simple google api function/call that should be treated separately.
I need to create these calendar events dynamically when a page is requested, I was looking for a free downloadable javascript or something that would have this bundled in but I couldn’t find anything for free that did what I wanted so here it is..
You have to pass it startdate, enddate & name in the right format, it’s not that complex to figure out..
In this example I’m getting the values from mysql and creating the code from that, a loto f this code is borrowed from http://sgowtham.net/blog/2008/05/26/php-mysql-ical-ics/ – he is mostly to thank.
You will need to modify the 1203 part too to create a unique file name but that should be easy with a little bit of php knowledge. Writing to the file system then reading it back was the only way I knew to do this, feel free to enlighten me of another way.
Here goes:

<?php
$id=$_GET[‘id’];
// MODIFY THIS LINE — I get $id as a param

include ‘mysql_connect.php’;
// MODIFY THIS LINE — include any files you need for mysql to query
?>

<?php
$ics_contents = “BEGIN:VCALENDAR\n”;
$ics_contents .= “VERSION:2.0\n”;
$ics_contents .= “PRODID:PHP\n”;
$ics_contents .= “METHOD:PUBLISH\n”;
$name = “Awesome”;
$ics_contents .= “X-WR-CALNAME:$name Holiday Dates\n”;

# Change the timezone as well daylight settings if need be
$ics_contents .= “X-WR-TIMEZONE:America/New_York\n”;
$ics_contents .= “BEGIN:VTIMEZONE\n”;
$ics_contents .= “TZID:America/New_York\n”;
$ics_contents .= “BEGIN:DAYLIGHT\n”;
$ics_contents .= “TZOFFSETFROM:-0500\n”;
$ics_contents .= “TZOFFSETTO:-0400\n”;
$ics_contents .= “DTSTART:20070311T020000\n”;
$ics_contents .= “RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\n”;
$ics_contents .= “TZNAME:EDT\n”;
$ics_contents .= “END:DAYLIGHT\n”;
$ics_contents .= “BEGIN:STANDARD\n”;
$ics_contents .= “TZOFFSETFROM:-0400\n”;
$ics_contents .= “TZOFFSETTO:-0500\n”;
$ics_contents .= “DTSTART:20071104T020000\n”;
$ics_contents .= “RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\n”;
$ics_contents .= “TZNAME:EST\n”;
$ics_contents .= “END:STANDARD\n”;
$ics_contents .= “END:VTIMEZONE\n”;

$sql=”select * from sh_dates where id = ‘$id'”;
// MODIFY THIS LINE — obvious.

$result=mysql_query($sql);
while ($row=mysql_fetch_array($result))
{
$id=$row[“id”];
// MODIFY THIS LINE —

$term=$row[“term”];
// MODIFY THIS LINE —

$start_date=$row[“startdate”];
// MODIFY THIS LINE —

$end_date=$row[“enddate”];
// MODIFY THIS LINE —

$name = “Event at Awesome”;
// MODIFY THIS LINE —

// $id = $schedule_details[‘ID’];
// $start_date = $schedule_details[‘StartDate’];
// $start_time = $schedule_details[‘StartTime’];
// $end_date = $schedule_details[‘EndDate’];
// $end_time = $schedule_details[‘EndTime’];
// $category = $schedule_details[‘Category’];

// $location = $schedule_details[‘Location’];
// $description = $schedule_details[‘Description’];

# Remove ‘-‘ in $start_date and $end_date
$estart_date = str_replace(“-“, “”, $start_date);
$eend_date = str_replace(“-“, “”, $end_date);

# Remove ‘:’ in $start_time and $end_time
$estart_time = str_replace(“:”, “”, $start_time);
$eend_time = str_replace(“:”, “”, $end_time);

# Replace some HTML tags
$name = str_replace(“<br>”, “\\n”, $name);
$name = str_replace(“&”, “&”, $name);
$name = str_replace(“→”, “–>”, $name);
$name = str_replace(“←”, “<–“, $name);
$name = str_replace(“,”, “\\,”, $name);
$name = str_replace(“;”, “\\;”, $name);

$location = str_replace(“<br>”, “\\n”, $location);
$location = str_replace(“&”, “&”, $location);
$location = str_replace(“→”, “–>”, $location);
$location = str_replace(“←”, “<–“, $location);
$location = str_replace(“,”, “\\,”, $location);
$location = str_replace(“;”, “\\;”, $location);

$description = str_replace(“<br>”, “\\n”, $description);
$description = str_replace(“&”, “&”, $description);
$description = str_replace(“→”, “–>”, $description);
$description = str_replace(“←”, “<–“, $description);
$description = str_replace(“<em>”, “”, $description);
$description = str_replace(“</em>”, “”, $description);

# Change TZID if need be
$ics_contents .= “BEGIN:VEVENT\n”;
$ics_contents .= “DTSTART;TZID=America/New_York” . $estart_date . “T”. $estart_time . “\n”;
$ics_contents .= “DTEND:” . $eend_date . “T”. $eend_time . “\n”;
$ics_contents .= “DTSTAMP:” . date(‘Ymd’) . “T”. date(‘His’) . “Z\n”;
$ics_contents .= “LOCATION:” . $location . “\n”;
$ics_contents .= “DESCRIPTION:” . $description . “\n”;
$ics_contents .= “SUMMARY:” . $name . “\n”;
$ics_contents .= “UID:” . $id . “\n”;
$ics_contents .= “SEQUENCE:0\n”;
$ics_contents .= “END:VEVENT\n”;
}

$ics_contents .= “END:VCALENDAR\n”;

# File to write the contents
$ics_file = ‘/var/www/ics/1203.ics’;
// MODIFY THIS LINE —

if (is_writable($ics_file)) {
if (!$handle = fopen($ics_file, ‘w’)) {
echo “Cannot open file ($ics_file)\n\n”;
exit;
}

# Write $ics_contents to opened file
if (fwrite($handle, $ics_contents) === FALSE) {
echo “Cannot write to file ($ics_file)\n\n”;
exit;
}

# echo “Success, wrote to <b>1203.ics</b><br>\n\n”;
// MODIFY THIS LINE —

fclose($handle);

} else {
echo “The file <b>$ics_file</b> is not writable\n\n”;
}
?>

<?php
//header( ‘Location: http://mywebsite.com/ics/1203.ics’ ) ;
// MODIFY THIS LINE —

echo $ics_contents;
?>

By clicking this php page a user will be presented with a downloable/clickable .ics file which can be imoprted into an outlook calendar.