tag:blogger.com,1999:blog-39255924026981629782024-03-05T11:10:51.380-08:00Hollywood JSAnonymoushttp://www.blogger.com/profile/06199299323548501064noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-3925592402698162978.post-47792468054775422692018-11-25T14:19:00.001-08:002018-11-25T14:19:34.448-08:00First look at terraformTerraform is client based like Ansible (which is good). Very cloud focussed and relies on Cloud API's to manage the infrastructure. This is good as it means you dont have to worry about authentication and ports etc but it does need to be a supported cloud vendor. You couldn't use it manage your own on-premise servers (presumably).<br />
<div>
<br /></div>
<div>
Example config file:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">provider "aws" {</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"> access_key = "AKIAIFZVQTBBG3YF46LQ"</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"> secret_key = "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"</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"> region = "us-east-1"</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">}</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">resource "aws_instance" "example" {</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"> ami = "ami-2757f631"</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"> instance_type = "t2.micro"</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">}</span></div>
</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">> terraform init</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">> terraform apply</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">> terraform show </span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div>
Terraform is purely declarative. Ansible IS declarative but you need to be disciplined as it can be used imperatively.</div>
<div>
<br /></div>
<div>
One blog calls Terraform an 'orchestration' tool with ansible being a more traditional configuration management tool.</div>
<div>
<br /></div>
<div>
Some changes can be done in-place (~) but others, an obvious one being an image change, require a replacement (+/-).</div>
<div>
<br /></div>
<div>
> terraform destroy</div>
<div>
<br /></div>
<div>
Implicit dependencies are used to determine the order in which resources are created, eg, a ref from an elastic IP to a machine. That is, Terraform will infer that the machine needs to be created first and then the EIP. This is in fact the preferred way, for other case an explicit 'depends_on' property can be used.<br />
<br />
PROVISIONERS are custom scripts that are run once when the resource is created, they are therefore only suited bootstrapping a server and NOT suited to config management. If CM is needed, then it should be bootstrapped here. If provisioning fails, the resource is marked as TAINTED, not rollback but will be destroyed and recreated on the next execution plan.</div>
<div>
<br />
Variables can be used for inputs and outputs.</div>
Anonymoushttp://www.blogger.com/profile/06199299323548501064noreply@blogger.com0tag:blogger.com,1999:blog-3925592402698162978.post-41494743586988223972018-11-18T03:05:00.001-08:002018-11-18T04:18:22.270-08:00A brief look into CloudformationIn this blog, i just wanted to record details and my thoughts on following a first tutorial on Cloudformation. This is the free AWS offering for managing and provisioning infrastructure resources within a cloud environment - effectively their IaC service.<br />
<br />
A cloud formation template describes a group of resources that form a stack. Resources can references resources within the template or outside of the stack entirely. Template can be written in JSON or YAML.<br />
<br />
A stack is free in AWS but the resources within are priced as normal.<br />
<br />
Templates have several useful features:<br />
* Parameters<br />
* Mappings for conditional values (eg AMI ID's differ between regions)<br />
<a href="https://www.blogger.com/blogger.g?blogID=3925592402698162978" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=3925592402698162978" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=3925592402698162978" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>* Functions can be used to join values etc<br />
* Output values<br />
<br />
Ultimately i would like to compare and contrast with Terraformer.<br />
<h3>
Updating a stack</h3>
This tutorial describes how to update a stack implementing a sample PHP app on apache.<br />
<br />
MetaData/Init section for an EC2 instance allows you to specify things like which packages are needed and config files (eg index.php) including file content. This is definitely in an area similar to other IaC tools now like ansible/puppet. In comparison it feels a bit clunky with everything so far being 'in-line'. It does provide a nice interface for ensuring services are running. 'cfn-init' added to the UserData section to install file and packages from MetaData section. cfn-hup is then installed and used to listen to changes in the MetaData section.<br />
<br />
Stack can be updated via the AWS console or using the update-stack command. Again, the template file can be uploaded to S3 or referenced to S3 in the command. It can take up to 15 mins to take effect (since cfn-hup runs every 15 mins).<br />
<h3>
Bootstrapping applications</h3>
1) Cloudformation template. CloudInit/UserData contains executable items that fire at launch time. They form part of a common base for the AMI, There is a trade-off in launch time and flexibility here - as to whether you build a new customised AMI. UserData has a 16K limit. Generally more stuff is placed into the MetaData part.<br />
<br />
2) Bake application into an Amazon Machine Image (AMI)<br />
<br />
3) Integration with Chef and Puppet<br />
<br />
Generally bootstrap the EC2 instance with the client software and separately deploy and configure a Chef server or Puppet master.<br />
<h3>
Comments</h3>
<div>
There is an obvious issue with the cfn-hup delay which may or may not be an issue</div>
<div>
<br /></div>
<div>
Previous experience has showed compatibility issues with installing cfn-hup and reliability issues which it is installed.</div>
<br />
<br />
<br />
<br />
<img alt="Image result for cloudformation" src="data:image/png;base64,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" /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=3925592402698162978" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Anonymoushttp://www.blogger.com/profile/06199299323548501064noreply@blogger.com0tag:blogger.com,1999:blog-3925592402698162978.post-15025527667909547282017-11-27T11:52:00.003-08:002017-11-27T11:52:41.106-08:00<h2>
<span style="background-color: white; font-family: sans-serif; font-size: x-small;">Factory functions</span></h2>
<h3>
<span style="background-color: white; font-family: sans-serif; font-size: x-small;">New keyword</span></h3>
<div style="background-color: white; font-family: sans-serif; font-size: small;">
<ul>
<li>creates a new object</li>
<li>sets the this context to the new object</li>
<li>good examples at <a data-saferedirecturl="https://www.google.com/url?q=https://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript&source=gmail&ust=1511898093221000&usg=AFQjCNGwwXD992qTQ_mfmQbE-M76laisxA" href="https://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript" style="color: #7e57c2; position: relative; z-index: 0;" target="_blank">https://stackoverflow.com/<wbr></wbr>questions/1646698/what-is-the-<wbr></wbr>new-keyword-in-javascript</a> </li>
</ul>
</div>
<h3 style="background-color: white; font-family: sans-serif; font-size: small;">
Factory function</h3>
<div style="background-color: white; font-size: small;">
<ul style="font-family: sans-serif;">
<li>any function that returns a new object (just done manually)</li>
</ul>
<div>
<span style="font-family: Courier New, Courier, monospace;">createUser : function(username) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> return {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> name: username</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> }</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">}</span></div>
</div>
Anonymoushttp://www.blogger.com/profile/06199299323548501064noreply@blogger.com0tag:blogger.com,1999:blog-3925592402698162978.post-13338415052047962932017-11-27T10:55:00.000-08:002017-11-27T11:36:30.882-08:00<b><u><a href="https://simonsmith.io/dipping-a-toe-into-functional-js-with-lodash-fp/">https://simonsmith.io/dipping-a-toe-into-functional-js-with-lodash-fp/</a></u></b><br />
<br />
Great blog on Functional programming. For me does an excellent job of highlighting the difference between pure functions and bonified functional programming. lodash fp is a wrapper around lodash to provide immutable, auto curried, iteratee first data last functions.<br />
<br />
Currying seems to make sense here, just functions that return a function. The data param is often omitted at the end to make the function more re-usable.<br />
<br />
Currying, just keeps returning a function until it has all the arguments. This is why it makes sense to have the data arg last so it can be provided last.<br />
<br />
I still can't see the functional programming being realistically easier to use but pure functions definitely make a lot of sense.Anonymoushttp://www.blogger.com/profile/06199299323548501064noreply@blogger.com0tag:blogger.com,1999:blog-3925592402698162978.post-64206765406007762602017-04-25T14:50:00.000-07:002017-04-25T14:54:32.386-07:00Stubbing constructors in JSIf a constructor is exported directly from a module, it cannot be stubbed in any module that requires it directly.<br />
<br />
For instance<br />
<br />
<div style="background-color: white; border: 0px; color: #222222; font-family: arial, helvetica, sans-serif; margin: 0px; padding: 0px;">
========= MyConstructor.js =========</div>
<div style="background-color: white; border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">module.exports = function(){ </span></div>
<div style="background-color: white; border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;"> console.log('MyConstructor called'); </span></div>
<div style="background-color: white; border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">};</span></div>
<div style="background-color: white; border: 0px; color: #222222; font-family: arial, helvetica, sans-serif; margin: 0px; padding: 0px;">
<br /></div>
<div style="background-color: white; border: 0px; color: #222222; font-family: arial, helvetica, sans-serif; margin: 0px; padding: 0px;">
and a SUT</div>
<div style="background-color: white; border: 0px; color: #222222; font-family: arial, helvetica, sans-serif; margin: 0px; padding: 0px;">
<br /></div>
<div style="background-color: white; border: 0px; color: #222222; font-family: arial, helvetica, sans-serif; margin: 0px; padding: 0px;">
========= MyConsumer.js =========</div>
<div style="background-color: white; border: 0px; margin: 0px; padding: 0px;">
<div style="border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">var MyConstructor = require('./MyConstructor');</span></div>
<div style="border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">function MyConsumer(){</span></div>
<div style="border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;"> this.useful = new MyConstructor();</span></div>
<div style="border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">};</span></div>
<div style="border: 0px; color: #222222; margin: 0px; padding: 0px;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">module.exports = MyConsumer;</span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;"><br /></span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;">You cannot stub the constructor. From my understanding the ECMAScript spec doesnt provide hooks for the new() operator. </span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;"><br /></span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;">Lets look at some workarounds.</span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;"><br /></span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;">1) Use an init method. This involves using a constructor which calls an init() method. The init() method can then be stubbed out in the usual way. </span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;"><br /></span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: xx-small;">2) Stub the constructor using rewire</span></div>
<div style="border: 0px; color: #222222; font-family: Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">
<span style="font-size: x-small;"><br /></span></div>
<pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">// in "dependency.js"</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
module</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">exports</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">function</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">args</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">return</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">new</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Dependency</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">args</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">// in "foo.js"</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">var</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> dependency </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> require</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="str" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">'</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">./</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">dependency</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">function</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> foo</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">()</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">var</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> dep </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> dependency</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">args</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">// do stuff with dependency</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
exports</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">module</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">foo </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> foo</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span></code></pre>
<div style="border: 0px; margin: 0px; padding: 0px;">
<span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif; font-size: xx-small;">and in your test:</span></div>
<div style="border: 0px; margin: 0px; padding: 0px;">
<span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif; font-size: xx-small;"><br /></span></div>
<pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: consolas, menlo, monaco, "lucida console", "liberation mono", "dejavu sans mono", "bitstream vera sans mono", "courier new", monospace, sans-serif; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span style="font-size: x-small;"><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">var</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> rewire </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> require</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="str" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">"rewire"</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">),</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
foo </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> rewire</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="str" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">"../lib/foo.js"</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
it</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="str" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">'should call dependency... '</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">,</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">function</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">()</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
foo</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">__set__</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="str" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">"dependency"</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">,</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">/* some spy */</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">);</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
foo</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">();</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">});</span></span></code></pre>
<div style="border: 0px; margin: 0px; padding: 0px;">
<span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif; font-size: xx-small;"><br /></span></div>
<div style="border: 0px; margin: 0px; padding: 0px;">
<span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif; font-size: xx-small;">3) Dependency injection</span></div>
<div style="border: 0px; margin: 0px; padding: 0px;">
<span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif; font-size: xx-small;"><br /></span></div>
<div style="border: 0px; margin: 0px; padding: 0px;">
<span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif; font-size: xx-small;">http://stackoverflow.com/questions/33702588/mocking-constructor-functions-in-node</span></div>
<div style="border: 0px; margin: 0px; padding: 0px;">
<span style="color: #222222; font-family: "arial" , "helvetica" , sans-serif; font-size: x-small;"><br /></span></div>
<pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">// in "foo.js"</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">function</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> foo</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">dependency</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">)</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">{</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">// do stuff with dependency</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">}</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
exports</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">module</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">.</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">foo </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> foo</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">;</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="com" style="border: 0px; color: #858c93; margin: 0px; padding: 0px;">// in "bar.js"</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">
</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">var</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> foo </span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">=</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> require</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="str" style="border: 0px; color: #7d2727; margin: 0px; padding: 0px;">'./foo.js'</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">)(</span><span class="kwd" style="border: 0px; color: #101094; margin: 0px; padding: 0px;">new</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;"> </span><span class="typ" style="border: 0px; color: #2b91af; margin: 0px; padding: 0px;">Dependency</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">(</span><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">args</span><span class="pun" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">));</span></code></pre>
<div style="border: 0px; margin: 0px; padding: 0px;">
<br /></div>
</div>
Anonymoushttp://www.blogger.com/profile/06199299323548501064noreply@blogger.com0tag:blogger.com,1999:blog-3925592402698162978.post-38018955804855048712016-07-13T03:14:00.001-07:002018-11-18T02:21:49.402-08:00Measuring execution timeTo measure the time take to run a section of code:
<br />
<br />
> console.time("toggleSeries");<br />
<br />
...<br />
<br />
> console.timeEnd("toggleSeries");<br />
<br />
Where the parameter is any label you want.<br />
<br />
Gives the following output:<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM84XDkH85yO1o_TA_ojLdxhcQ2MaFfbPrdMnSLVUvSegRkzGYqhImYHmcX0rowtLYNthu1n-qJ1snLdgrmxbFnAeMTnAiM9YT1N8mtBgry3s3zeJbIyT9ZhGKEhAhvxRJO1lk1W3i_BU/s1600/Screen+Shot+2016-07-13+at+11.11.55.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM84XDkH85yO1o_TA_ojLdxhcQ2MaFfbPrdMnSLVUvSegRkzGYqhImYHmcX0rowtLYNthu1n-qJ1snLdgrmxbFnAeMTnAiM9YT1N8mtBgry3s3zeJbIyT9ZhGKEhAhvxRJO1lk1W3i_BU/s400/Screen+Shot+2016-07-13+at+11.11.55.png" /></a>Anonymoushttp://www.blogger.com/profile/06199299323548501064noreply@blogger.com0