npm run dev Error: Cannot find module build/

Ran into an issue where I kept getting an ‘Error: Cannot find build/’ when trying to run ‘npm run dev’ on a Vue.js webpack project, like the following:

nalis-MacBook-Air:dashv2 nali$ npm run dev

> dashv2@1.0.0 dev /Users/nali/Downloads/test/playground/dashv2
> webpack-dev-server --inline --progress --config build/

    throw err;

Error: Cannot find module '/Users/nali/Downloads/test/playground/dashv2/build/'
    at Function.Module._resolveFilename (module.js:555:15)
    at Function.Module._load (module.js:482:25)
    at Module.require (module.js:604:17)
    at require (internal/module.js:11:18)
    at requireConfig (/Users/nali/Downloads/test/playground/dashv2/node_modules/webpack/bin/convert-argv.js:97:18)

The problem was that I was checking out a folder that had a lot of different directories, with code written in different languages, and the top level .gitignore included ‘build/’ for Python. Either add ‘!build/’ to a .gitignore in the root folder of the node project when checking it in…or do a better job separating projects and folders like a sensible person.

Alexa Skill Error: The remote endpoint could not be called, or the response it returned was invalid.

Alexa Skill Error: The remote endpoint could not be called, or the response it returned was invalid.

If you have tried building an Alexa Skill, you might have gotten the error “The remote endpoint could not be called, or the response it returned was invalid.”

For me, the error was related to uploading a zip file with the index.js and its node_modules libraries to the Lambda service. No matter what zip file I would upload, I’d get the following error:

  "errorMessage": "Cannot find module '/var/task/index'",
  "errorType": "Error",
  "stackTrace": [
    "Function.Module._load (module.js:276:25)",
    "Module.require (module.js:353:17)",
    "require (internal/module.js:12:17)"

It turns out when Amazon means zipping, they are expecting a different zip file structure than the one created by the default Mac OS X action of right click and compress the directory. When a Mac compresses a folder, the output is a folder with the files in it. Amazon wants it without that root folder.

Assume you have a source folder called TestSkill with index.js in it. Then you do a right click and Compress “TestSkill” on it. If you run this:

nali-iMacs-iMac:Downloads nali$ zipinfo | grep index.js |more

you’ll see this:

16-Dec-30 15:42 TestSkill/index.js

Pretty much what Amazon does not want. Instead, go into the folder and type this:

zip -r package.json *.js node_modules

You want the ‘-r’ so folders in node_modules get added to the zip file as well. Then let’s run the following command to look into the zip file:

nali-iMacs-iMac:Downloads nali$ zipinfo | grep index.js |more

Here is what you should see:

16-Dec-30 15:42 index.js

That is the structure Amazon wants.

Let’s turn this into an npm command. In your package.json, add a script:

  "name": "foobar",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "zip": "zip -r package.json *.js node_modules"

When in the folder, running ‘npm run zip’ will create a that can be successfully uploaded to Amazon’s Lambda service and the error “The remote endpoint could not be called, or the response it returned was invalid.” should go away.

Galaxy Nexus + Straight Talk + AT&T + MMS APN Settings

If you are using a Galaxy Nexus on Straight Talk with a AT&T provisioned SIM card and having issues with sending and receiving MMS, here are the APN settings that should work for you.

The Galaxy Nexus that I bought through Google Play had a Cingular APN already on it. Delete it. Or at least write down the settings just in case everything breaks on you. And then delete it.

Add a new APN with exactly these entries:

  • Name: straight talk (or whatever you want it to be)
  • APN: att.mvno
  • Proxy:
  • Port: 80
  • Username: Not set
  • Password: Not set
  • Server: Not set
  • MMSC:
  • MMS proxy:
  • MMS port: 80
  • MCC: 310
  • MNC: 410
  • Authentication type: Not set
  • APN type: Not set
  • APN protocol: IPv4
  • APN enable/disable: APN enabled
  • Bearer: Unspecified

That should be it.

Fixing Contact Form 7 Redirection Referrer Failure with IE

On a client WordPress site, we wanted to use Contact Form 7 to grab visitor information and redirect them to an inner page after submission. To make sure they filled out the submission form, the destination page checked the referrer to make sure they came from the form page. Now, there are other ways of doing this, like setting cookies, but this method was good enough for the client.

So this all worked in Chrome and Firefox, but not Internet Explorer.


The Contact Form 7 blog has instructions on how to redirect users to a different page after a successful submission. Under Additional Settings, simply do this:

on_sent_ok: “location=’’;”

The on_sent_ok is a Javascript hook. Inside of scripts.js in the plugin, it eventually makes this call:

if (data.onSentOk) $.each(data.onSentOk, function(i, n) { eval(n) });

So “location=’’;” gets evaluated by Javascript and the page redirects. Great.

On the destination page, we were checking the referrer to verify they were coming from the form, here is an example of how you could do it:

/* Set where they should be redirected to if user didn’t come from the form */$redirectString = “Location: “. get_site_url() . “/contactform”;

$referrer = $_SERVER[‘HTTP_REFERER’];

if ($referrer == NULL){ header($redirectString); exit();}else{ $domain = parse_url($referrer); $pos = strpos ($domain[“path”], “contactform”); if ($pos == false) { header($redirectString); exit(); }}

Now, your PHP should be cleaner, more error checking, check for XSS, don’t hard-code anything, etc, etc.

The problem was that the referrer would always be null when the visitor was using Internet Explorer. Referrer isn’t required to be set by the browser. Browsers won’t set it if you started out on a HTTPS site but click on a non-secure link.

And IE won’t set it on redirection, but it will set it if you click on a link. So if a fake a link click, IE will set the referrer.

Lets create a Javascript function to fake a link click. This code is stolen from Stack Overflow:

function goTo(url){ var a = document.createElement(“a”); if ( { // HTML5 browsers and IE support click() on <a>, early FF does not. a.setAttribute(“href”, url); = “none”; document.body.appendChild(a);; } else { // Early FF can, however, use this usual method // where IE cannot with secure links. window.location = url; }}

Ok. Remember, the Contact Form 7 redirection is a Javascript hook. So now we change the on_sent_ok to call the goTo function instead:

on_sent_ok: “goTo(‘’);”

Bam. Done. MVC: The controller for path /favicon.ico does not implement IController

One of Run Level Media’s project involves migrating a Windows application over Terminal Services, to the web. A previous programmer had started building the web app in C#, ASP.NET MVC 2. We decided to upgrade for the sake of maintainability and wanting to use some of the newer features in MVC 3 (like Razor).

After upgrading and trying to debug code, I kept running into the following error on every page load: MVC: The controller for path /favicon.ico does not implement IController

It was true that the favicon.ico was missing, but we didn’t want to make a temporary one. We just needed requests for dot files to the root directory to be ignored.

Most Global.asax have route definitions like this:

routes.MapRoute( “Default”, “{controller}/{action}/{id}”, new { controller = “Home”, action = “Index”, id = “” });

There are really two problems here. First, the controller looks for something to handle favicon.ico. More than likely, you don’t have a function to deal with favicon.ico (why should you). Second, the HttpException should be caught and dealt with. Either log it or provide a more helpful message. Otherwise you’ll see ‘HttpException was unhandled by user code’ errors.

To fix the controller, try this:

routes.MapRoute( “Default”, “{controller}/{action}/{id}”, new { controller = “Home”, action = “Index”, id = “” }, new { controller = @”[^.]*” } );

new { controller = @”[^.]*” } means ignore anything that matches that regex.