Effortless Solutions For data a bride Examined

This year, it is estimated that an individual in five singles have got gone for a day with someone they met with the online dating site other with five singles can be found in some committed relationship with somebody they met through an online dating site. With this version of financial success for singles seeking really enjoy, an increasing number of singles are re-discovering the joys of on the internet online dating services to uncover ones own appropriate diamond necklace. Together with the availablility of web users rising on a daily basis plus more singles using online dating sites as a way to fulfill some other singles, online dating sites continue to increase with popularity for many years.

Then those young girls proceed around everyday life, become teenagers and adults. Little princess dresses left with the cupboard, in addition to most of the Barbie dolls that they just don’t valuation any longer, a persons’ vision comes with shifted from Princess to Hollywood. That’s right. Hollywood may be the typical with regard to fashion and even though aspiration continues, it can be moved places in the Disney world to your The movies glamorous world. Not that it’s bad, however the dream in addition has changed. Instead of seeking to fulfill your enchanted prince within just center of the woods and initiate music and singing love song melodies to one another, that you’re now studying assembly him from this interesting club you want to every single weekend.

After you ought to take your web relationship to reality, the first task to remain followed can be to make arrangements to pay them specifically. In advance of meeting the dater make sure that maybe there system’s befitting you together with worthy enough. Always encounter a dater that’s really considering you, responds immediately consistently and keeps touching people. Choose a proper place to pay him or her. When you meet them for first time, meet them to get a walk and for any hike. Meet them in a general public place where you find many people available you. Tend not to provide them your home address or don’t make them can come and pick you your personal property. Share your bill using your dater and will likely not find the money for the maximum amount of cash. It’s possible you’ll feel awkward but giving is a great course of action being followed after you connect with someone when. Some daters expect something in turn if you never pay out or share this check. So, it’s good to find the money for the about half bill so that nothing at all is to return. Picking Realistic Advice In mail order wife /idate-asia/

Nearly My First Date

Using a look-up website just like can allows you to look up any sort of website information. With this you can find out the united states of establishment and perhaps that address. It’s wise to follow carefully with Russian and also Ukrainian based dating institutions. Generally this can be a wise decision to help stick using those listed as operating from within your usa or even any other Western countries. This will not only lower the scam risk, it indicates them to may a little more oftimes be prosecuted and/or de-activate whenever they break what the law states. You can search for while using Bbb within just Oughout. S. for complaints filed or prosecution.

After that, really quality sites give a several assistance beside for mail shipping service. International web dating sites make available translation company overly. Product delivery is the perfect propose to be sure that the girl you’ve got selected is actually real. Just order several flowers or chocolates on her behalf and have the firm to help you transmit people the delivery picture. Visa support, telephone call interpretation, traveling tours and the like : fundamental essentials entire solutions many dating agencies produce.

Explore the Beauty of Thailand Holiday Packages – South East Asia Holiday

Best Wedding Party Gift Ideas A marriage is mostly a uncommon job and most people want to find a wonderful wedding party. It ought to be special with the lady along with the groom and the guests. You can create some sort of unforgettable occasion by serving a guests cupcakes tailor made to suit each and every aspiration of the bride to be plus the groom. Cupcakes can also be arranged and decorated in just a few solutions to match this theme inside event, the decor along with the clothing code.

  • – Classic colors are very in for summer season themed weddings like sky blue, yellow, yellow green, pink, and lavender
  • – You can go with a different color for summer like peach, teal, and green for the summertime wedding theme
  • – Wedding tokens must also springs to mind after thinking about your wedding dresses, invitations and flowers Consider the following ideas for your summer theme tokens:

For your the couples’ parents, uncomplicated gifts can definitely explain that message of “thanks” for any enjoy and support they had loaded as soon as associated with preparation with the actual marriage and reception. Simple gifts for example pill necklaces, perfume or maybe a signature bag will probably be superb with the mommies. For the fathers, a link, a couple exquisite cuff links maybe product of expensive wine will cheer them at the top of this special day.

Acer Announces Aspire M5 version of Haswell

For those who are watching the development of Acer products, may have never seen or tried Aspire M5 which was launched last year. Welcomed the presence of an Intel Core 4th generation, Acer announced the newest generation Aspire M5 which now comes with the latest Intel processors. Besides the processor, there is also some improvement in various other sectors.
acer m5 1 Acer Announces Aspire M5 version notebooklaptop computer news Haswell
Acer Announces Aspire M5 version of Haswell

Acer Announces Aspire M5 version notebooklaptop news Haswell computer Acer Announces Aspire M5 version notebooklaptop computer news Haswell
Acer Aspire M5 is equipped with an Intel Core i5-4200U, 8GB of RAM and 500GB hard disk. In terms of design, nothing has changed. Acer Aspire M5 latest version still appears with silver-colored aluminum body and stylish minimalist look with a touch screen measuring 15.6-inch HD.
In addition to upgrading the processor sector, the latest Acer Aspire M5 also features WiDi (Wireless Display) from Intel. With this feature, users can more easily to share the laptop screen to the TV only via a WiFi connection. Intel’s WiDi technology is not new, but not many laptops on the market today are equipped with Intel’s WiDi. Another improvement in the sector propagate speaker. Acer Aspire M5 presented with new speakers and a powerful 2-watt has been supported by Dolby Home Theater v4 technology for better sound results.
Acer Asprire M5-583P-6428 has been available in the U.S. market and is priced at U.S. $ 699. For a while there has been no news of when it will be available in Indonesia.

Sony Xperia Sailing Release 6.4 Inches in Indonesia

Located in Jakarta, Wednesday (24/7), Sony introduced the Xperia Z Ultra which has a 6.4-inch screen with Full HD TRILUMINOS X-Reality Engine.

This display capability is claimed to provide a better experience, especially with the screen size is much larger than the original version of the Xperia Z.

Very powerful embedded processors, the Qualcomm Snapdragon 2.2GHz quad-core 800. Xperia Z Ultra is also supported by 2GB of RAM and 16GB of internal memory plus a microSD slot.

Interestingly, despite carrying a variety of hardware on board, it is able to present the Sony Xperia Z Ultra designs become thinner. In fact, the thickness is only 6.5 mm into the MURI.

As in the previous Z series Xperia, Xperia Z Ultra smartphone is also quite tough waterproof and dust to IP55 and IP58 certification.

Unfortunately, some of the above advantages make Sony should cut the camera was 13 megapixels to 8 megapixels alone. However, Sony claims the camera is equipped with Exmor RS Mobileserta HDR is able to produce extremely sharp images.

Sony did not forget to announce the presence of Sony Music JIVE application in Xperia Z Ultra. Through these apps, users can download and streaming his favorite songs for free for 6 months. Not only that, there are also apps Path and e-reader Wayang Force which has been available since the beginning of the purchase Xperia Z Ultra.

“Xperia Z Ultra available in early August with two colors, namely Black and White,” said Ika Paramita, Marketing Manager of Sony Mobile Communications Indonesia. About the price, that puts smartphones via NFC Connectivity One Touch is priced at 7.5 million dollars worth.

Review SpeedUp Pad Phone

In addition to the support for mobile work, the tablet PC is also widely used as a means of entertainment. Just as smartphones, tablet PCs are now available in the market with a variety of prices and specifications. Like one of these tablet PC products from following SpeedUp present for tablet PC users in the entry level segment.
Concept & Design
Speedup Phone Pad is a tablet PC with 7-inch screen. The design is quite average and quite like tablet PCs in its class with aluminum alloy and plastic body and frame design of the screen is quite thick. Indoors, the display screen itself is quite good and still comfortably viewed with a screen resolution of 1024 × 600 pixels. However, like most local screen tablet PC is rather difficult to see under a blazing lighting conditions. For the body, Speedup Pad Phone has brought unibodi design that makes users can not remove the plastic cover on the back to remove the battery. Overall, light weight, the thickness of the body is quite fit and do not look cheap.
Although it can be used in portrait position, Speedup Pad Phone seems designed to be used in a horizontal position / landscape. This is evident from the presence of a resolution 2-megapixel secondary camera on the top of the screen (in horizontal position) and two speakers are located on the left side of the screen.
For port connectivity, SIM card slot, audio jack port, SD memory card slot and a mini USB port, everything is placed in the left side of the body. All ports and slots are placed pretty well there. But unfortunately, when a memory card slot for a memory card inserted, the memory card is not fully inserted into the body and look a bit obtrusive. Although not a little disturbing but this reduces the aesthetic value of the packaging and less unsightly.
Phone Pad detail speedup 1 Review SpeedUp Pad Phone tablet pc computer review
Review SpeedUp Pad Phone
Interface
Speedup Pad Phone running the Android operating system Ice Cream Sandwich 4.0.4. The interface is relatively simple with the standard launcher without any touch or customization of the factory. This is a positive value in itself, because this performance with a simple interface feels relatively quickly because it is not burdened with a custom homescreen launcher used by tablet PCs in its class. But, if you are bored with the zoom you can still use another launcher that can be downloaded through PlayStore.
3 Review Speedup Speedup Pad Phone Pad Phone tablet pc computer review
Review SpeedUp Pad Phone
Applications and Features
For applications and innate feature of SpeedUp Pad Phone also relatively minimal. In it you can find SpeedUp Studio which is a speedup store digital content that provide content such as music, magazines, apps, games and news feeds. For applications, in addition to relying on Google PlayStore SpeedUp you can also rely on the AppStore. While it is a list of applications available in PlayStore not much, but at least it is also a plus because the application is available to download for free.
If you have a security camera of SpeedUp, Speedup Pad Phone is also equipped SpeedUp Camera app to connect with your security cameras in order to monitor remotely. And for office, has been available Kingsoft Office applications, Notepad and Adobe Reader to open the file. Pdf.
And the last is the telephony features. In addition to being a tablet PC, Phone Speedup Pad can also be used to answer calls and sms as smartphones in general.
Performance
Spur the kitchen sector, Speedup Pad Phone equipped with a single core processor ARM Cortex-A9 running at a speed of 1 GHz, 512MB RAM, and graphics sectors of PowerVRSGX 531 graphics chip. With these specifications, the value benchamark Quadrant that were achieved by SpeedUp Pad Phone is 2189 points which is in the bottom position 3. While the app AnTuTu benchmark test, the tablet PC won 3656 points, which put him at the bottom. To test the touch screen, with AnTuTu Screen test detected the screen can only accept input 5 fingers at the same time. Here are the results benchmarknya ..
spec 1 Review SpeedUp Pad Phone tablet pc computer review
Review SpeedUp Pad Phone
Antutu benchmark 1 Review SpeedUp Pad Phone tablet pc computer review
Review SpeedUp Pad Phone
Benchmark 2 Review SpeedUp Pad Phone tablet pc computer review
Review SpeedUp Pad Phone
Despite reaching the benchmark value was minimal does not mean the tablet PC is lousy loh. For testing we use everyday is quite impressed with its performance fairly okay. The screen is quite responsive compared to tablet PCs in its class. Switching between pages on the menu and homescreen feels smooth and does not feel significant lag. Even so, there are enough to make us wonder at the launcher SpeedUp Pad Phone. Every time you access a menu that contains a row of application performance is noticeably slow and visible lag. Whereas when pressing the home icon to return to the homescreen all running smoothly. Hopefully edepannya k SpeedUp can provide updates to address bugs like this.
Multimedia and Gaming
For multimedia needs SpeedUp Phone has come up with music app, video player and radio. To watch a movie, we tried HD720p quality movies and 1080p. The default video player application is only able to play a video file format HD720p pretty well. And when running 1080p video file format image can not be displayed. If you want to watch movies in Full HD tablet PC, alternatfinya is using another video app that can be downloaded at Google PlayStore. But you also must be quite satisfied with the performance of the frame rate a bit slow and the battery certainly be more extravagant when playing Full HD content.
In addition to watching movies, Speedup Pad Phone can also be used for listening to music. But unfortunately, good for watching movies, listening to music, or playing games, performing voice though it is set at the maximum level still feels underpowered. Not only that, the capacity of internal storage space is only 4GB is also noticeably less if you save the video files in HD format, and music file format. FLAC or. WAV file size is generally large. But luckily still available memory card slot that can be used to increase the storage space up to a maximum capacity of 32GB.
And as an alternative to your current mobile entertainment, this tablet PC can still be relied upon to play the game. To play the games lightly with a simple display such as Angry Birds and Tiny Thief is a very capable tablet PC to play it. And what about the 3D games that require heavy graphics performance? We try to play racing game Real Racing 3. The result? Speedup Pad Phone can still be counted on to play a decent 3D game Real Racing 3 weight class pretty well.

Take advantage of travelers Google Google Maps

Jakarta – Indonesia invites the travelers Google using Google Maps on your phone. Rudy Ramawy, Country Head of Google Indonesia, said Google Maps on your phone makes it easy to plan the travelers a safe and comfortable journey.
“Some of it’s ease of search as the most convenient path to the destination,” said Rudy. “You can also find important information regarding the need for travel. Example, the nearest gas station or ATM.”
The travelers can also record all findings during the course of the digital device. “So, when I travel the same route, you can easily find the places you’ve visited,” Rudy explained.
When stuck in traffic, Google Maps users can find an alternative way. This online map applications presents several alternative options that can help road users avoid severe congestion at homecoming.
Google Maps to apply different color lines for different traffic conditions. For example, if there is a congested line, the red line. Yellow to crowded conditions and solid edging, while green for road conditions smoothly.
In addition, Google Maps provides information on the long journey from the user’s location to the destination or hometown. Google Maps even provide mileage information is based on the means of transportation used. For example, driving alone, walking, or using public transportation. Google Maps also provides information public transport fares.
With features and conveniences that exist, Rudy wish Google Maps users can be helped in planning trips back and forth.

Boffin Advises Consumers On The Best Typing Tutor Software This Year, eReflect Announces

Ultimate Typing™ software developer eReflect announced today that the software review website Boffin has published extensive reviews on the best typing tutor software for 2013. As the eReflect representative noted in today’s statement, the company is proud to learn of the high rating given to its product, and appreciates the suggestions and comments provided by this and other reviewers and customers. eReflect states that its goal is to provide the best possible product to users, and relies on such feedback to continually refine and improve its software.

In this most recent review, the Boffin team of reviewers examined four typing improvement software products and concluded that Ultimate Typing™ is the top choice for the review team, as the software includes features and technologies the other products lacked.

The Boffin software review team evaluated all typing tutor software products in terms of efficiency, help and support for users, instruction quality, user friendliness, and several other parameters. While each of the other software products reviewed lacked strength in one or more of these categories, Ultimate Typing™ had all these features and more, making the team’s decision as to the best typing software an easy one. The SoftwareReviewBoffin.com website illustrates the pros and cons of each typing software product in great detail so that interested users can get an accurate idea on how each software works and how it can improve their typing skills.

According to the Boffin website, Ultimate Typing™ was a clear winner as the top 2013 typing tutor software in view of its cutting-edge tools, impressive integrated technologies and its scientifically informed design and overall interface. The review team also highlighted that the software offers a great variety of activities, games, and practice difficulty levels, making it an appealing choice for people of all ages, needs, and learning styles. The Boffin team of reviewers also emphasized that unlike other software, in addition to its extensive practice material Ultimate Typing™ also has the most user-friendly interface making navigation easy, thus allowing users to focus on what really matters, improving their typing speed and accuracy. In today’s statement, the representative from eReflect remarked that the development team is quite pleased with this aspect of the review, as the interface was one area of product development that the software company put a great deal of time into.

The Boffin review concluded by mentioning that all top software products listed on the website are frequently reevaluated in order for visitors to have up to date information on the most efficient software products on the market. It was also stated that the actual differences between the top three software products selected were often rather minute and that once new releases or versions are published, the current ratings are likely to change.

About Ultimate Typing™

Ultimate Typing™ software is designed specifically for the improvement of typing skills. Created by eReflect, a world leader in e-learning and self-development software, Ultimate Typing™ has been informed by the latest developments in the science of touch typing.

Since its creation in 2006 by Marc Slater, the company has already catered to over 112 countries all over the world, offering products with the latest cutting-edge technology, some of which are among the world’s most recognized and awarded in the industry.

Rocket Software Releases Rocket z/SQL

Rocket Software, Inc. (www.rocketsoftware.com) today announced the general availability of Rocket z/SQL for IBM System z customers who are ready to turn their valuable petabytes of non-relational data into actionable intelligence. Rocket z/SQL is a new product that allows mainframe data to better integrate with enterprise business intelligence and analytics initiatives while reducing cost and complexity.

“We recognize that data is a huge challenge, and a huge opportunity, for our customers,” says Sam Elias, Rocket Vice President and General Manager. “Our customers see real value in accessing their data in place with standard off the shelf tools that speak SQL. Rocket z/SQL makes non-relational data as simple to access as an Excel spreadsheet.”

“We are rapidly heading towards a world of analytics everywhere,” said Dan Sommer principal research analyst at Gartner. “Gartner predicts that analytics will reach 50 percent of potential users by 2014. By 2020, that figure will be 75 percent, and we will be in a world where systems of record, systems of differentiation and systems of innovation are enabling IT, business and individuals to analyze data in a much denser fashion than before.”

Rocket z/SQL gives organizations industry-standard access to non-relational mainframe data without moving data off the mainframe. Traditional approaches require complex techniques, steps, and processes that move, copy, and transfer mainframe data before information can be used by applications and decision makers. With Rocket z/SQL, data is accessible in place through any SQL tool. Rocket z/SQL utilizes patent-pending integration architecture to perform all data transformations and joins in place – on the mainframe – with significantly reduced processing costs.

About Rocket Software

Rocket Software (www.rocketsoftware.com) is a global software development firm that builds enterprise products and delivers enterprise solutions in the following segments: Business Intelligence and Analytics; Storage, Networks, and Compliance; Application Development, Integration, and Modernization; and Database Servers and Tools

Cisco’s acquisition of Sourcefire Rp 27 Trillion

California – The company manufactures and network equipment Cisco Systems Inc. will buy security firm Sourcefire. Companies based in San Jose, California that want to expand their business network security sector.
According to the Head of Business Development Cisco, Hilton Romanski, the company wanted to find a target security firm to grow its business. “We look at the major players security business, Sourcefire apparently the most fitting,” she said on Tuesday (23/7) local time.
With this purchase, the shares of each Sourcefire will be priced at U.S. $ 76. Sourcefire’s stock price jumped 28 percent from Monday’s closing price, U.S. $ 59.08.
Cisco is now focused on the security sector. They will mengenjot safety factor in the hardware, software and cloud. Sourcefire is strong in the security sector, especially the matter of detecting and protecting against any attacks.
According to analysts, this penjuala is expensive but worth it. Because in the security market, the market pie Cisco rivals such as Juniper Networks seized Inc., Check Point Software Technologies, and Palo Alto Networks Inc.. But Cisco reluctant to let market. Cisco Security Head Chris Young said the company will not stop until I can be a pioneer in the field of security.
With this acquisition, research firm IDC rate, Cisco should reach growth of as much as 7.8 percent. Brian White, analyst at Topeka Capital Markets judge, with this acquisition, the kinds of large competitors Dell and Hewlett Packard will also provide bid security for their clients.

NSA intercepted, Apple, Google, Microsoft alliance

Jakarta – A giant technology company formed an alliance to demand transparency from the U.S. government related information monitoring program of the National Security Agency (NSA) called PRISM.
The alliance involves companies such as Apple, Google, Facebook, and Microsoft. In alliance was also a number of civic groups. In a letter that will be announced in a few hours, the alliance which amounts to 63 companies, investors, and non-profit organizations is asking for clearer rules about such things.
“Basic information about the way the government enforce laws related activities have been published during this investigation does not interfere with the investigation,” read one of the points in the letter obtained by AllThingsD on Wednesday, July 17, 2013.
The Alliance requested that they be allowed the right to announce the number of government requests for data on the users of their services. They also requested that the number of users, accounts, and information held gadget that can be announced.
Alliance also assess the amount of requests basic information about the content and the user, could be made public as part of their transparency.
At the same time, the alliance will also ask the government to announce a number of requests and the number of individuals whose data is requested from the technology companies.
This letter will be addressed to President Barack Obama and congressional leaders. Here are some names of firms and associations involved in this alliance:
Yahoo, AOL, Apple, Digg, Dropbox, Evoca, Facebook, Google, HeyZap, LinkedIn, Meetup, Microsoft, Mozilla, Reddit, salesforce.com, Tumblr, and Twitter.
Also there younow, Union Square Ventures, Y Combinator, New Atlantic Ventures, The Electronic Frontier Foundation, Human Rights Watch, the American Civil Liberties Union, the Center for Democracy & Technology.
In addition, there are elements of the press and advocacy organizations such as Reporters Committee for Freedom of the Press, Public Knowledge, the Computer & Communications Industry Association, Reporters Without Borders, and the Wikimedia Foundation.

It’s a Mad, Mad, Mad, Mad World: Scoping in CoffeeScript and JavaScript

CoffeeScript, as many people know, is a transpile-to-JavaScript language.1 For the most part, it does not introduce major changes in semantics. For example, this:

-> 'Hello, world'

Transpiles directly to:

function () { return 'Hello, world'; }

This is convenient syntactic sugar, and by removing what some folks call the “syntactic vinegar” of extraneous symbols, it encourages the use of constructs that would otherwise make the code noisy and obscure the important meaning. The vast majority of features introduced by CoffeeScript are of this nature: They introduce local changes that transpile directly to JavaScript.2

CoffeeScript also introduces features that don’t exist in JavaScript, such as destructuring assignment and comprehensions. In each case, the features compile directly to JavaScript without introducing changes elsewhere in the program. And since they don’t look like existing JavaScript features, little confusion is created.

equals doesn’t equal equals

One CoffeeScript feature does introduce confusion, and the more you know JavaScript the more confusion it introduces. This is the behaviour of the assignment operator, the lowly (and prevalent!) equals sign:

foo = 'bar'

Although it looks almost identical to assignment in JavaScript:

foo = 'bar';

It has different semantics. That’s confusing. Oh wait, it’s worse than that: Sometimes it has different semantics. Sometimes it doesn’t.

So what’s the deal with that?

Well, let’s review the wonderful world of JavaScript. We’ll pretend we’re in a browser application, and we write:

foo = 'bar';

What does this mean? Well, it depends: If this is in the top level of a file, and not inside of a function, then foo is a global variable. In JavaScript, global means global across all files, so you are now writing code that is coupled with every other file in your application or any vendored code you are loading.

But what if it’s inside a function?

function fiddleSticks (bar) {
  foo = bar;
  // ...
}

For another example, many people enclose file code in an Immediately Invoked Function Expression (“IIFE”) like this:

;(function () {
  foo = 'bar'
  // more code...
})();

What do foo = 'bar'; or foo = bar; mean in these cases? Well, it depends as we say. It depends on whether foo is declared somewhere else in the same scope. For example:

function fiddleSticks (bar) {
  var foo;
  foo = bar;
  // ...
}

Or:

function fiddleSticks (bar) {
  foo = bar;
  // ...
  var foo = batzIndaBelfrie;
  // ...
} 

Or even:

function fiddleSticks (bar) {
  foo = bar;
  // ...
  function foo () {
    // ...
  }
  // ...
}

Because of something called hoisting,3 these all mean the same this: foo is local to function fiddleSticks, and therefore it is NOT global and ISN’T magically coupled to every other file loaded whether written by yourself or someone else.

nested scope

JavaScript permits scope nesting. If you write this:

function foo () {
  var bar = 1;
  var bar = 2;
  return bar;
}

Then bar will be 2. Declaring bar twice makes no difference, since both declarations are in the same scope. However, if you nest functions, you can nest scopes:

function foo () {
  var bar = 1;
  function foofoo () {
    var bar = 2;
  }
  return bar;
}

Now function foo will return 1 because the second declaration of bar is inside a nested function, and therefore inside a nested scope, and therefore it’s a completely different variable that happens to share the same name. This is called shadowing: The variablebar inside foofoo shadows the variable bar inside foo.

javascript failure modes

Now over time people have discovered that global variables are generally a very bad idea, and accidental global variables doubly so. Here’s an example of why:

function row (numberOfCells) {
  var str = '';
  for (i = 0; i < numberOfCells; ++i) {
    str = str + '<td></td>';
  }
  return '<tr>' + str + '</tr>';
}

function table (numberOfRows, numberOfColumns) {
  var str = '';
  for (i = 0; i < numberOfRows; ++i) {
    str = str + row(numberOfColumns);
  }
  return '<table>' + str + '</table>';
}

Let’s try it:

table(3, 3)
  //=> "<table><tr><td></td><td></td><td></td></tr></table>"

We only get one row, because the variable i in the function row is global, and so is the variable i in the function table, so they’re the exact same global variable. Therefore, after counting out three columns, i is 3 and the for loop in table finishes. Oops!

And this is especially bad because the two functions could be anywhere in the code. If you accidentally use a global variable and call a function elsewhere that accidentally uses the same global variable, pfft, you have a bug. This is nasty because there’s this weird action-at-a-distance where a bug in one file reaches out and breaks some code in another file.

Now, this isn’t a bug in JavaScript the language, just a feature that permits the creation of very nasty bugs. So I call it a failure mode, not a language bug.

coffeescript to the rescue

CoffeeScript addresses this failure mode in two ways. First, all variables are local to functions. If you wish to do something in the global environment, you must do it explicitly. So in JavaScript:

UserModel = Backbone.Model.extend({ ... });
var user = new UserModel(...);

While in CoffeeScript:

window.UserModel = window.Backbone.Model.extend({ ... })
user = new window.UserModel(...)

Likewise, CoffeeScript bakes the IIFE enclosing every file in by default. So instead of:

;(function () {
  // ...
})();

You can just write your code.4

The net result is that it is almost impossible to replicate the JavaScript failure mode of creating or clobbering a global variable by accident. That is a benefit.

what would coffeescript do?

This sounds great, but CoffeeScript can be surprising to JavaScript programmers. Let’s revisit our table function. First, we’ll fix it:

function row (numberOfCells) {
  var i,
      str = '';
  for (i = 0; i < numberOfCells; ++i) {
    str = str + '<td></td>';
  }
  return '<tr>' + str + '</tr>';
}

function table (numberOfRows, numberOfColumns) {
  var i,
      str = '';
  for (i = 0; i < numberOfRows; ++i) {
    str = str + row(numberOfColumns);
  }
  return '<table>' + str + '</table>';
}

table(3, 3)
  //=> "<table><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr></table>"

Good! Now suppose we notice that no function calls row other than table. Although there is a slightly more “performant” way to do this, we decide that the clearest and simplest way to indicate this relationship is to nest row inside table Pascal-style:

function table (numberOfRows, numberOfColumns) {
  var i,
      str = '';
  for (i = 0; i < numberOfRows; ++i) {
    str = str + row(numberOfColumns);
  }
  return '<table>' + str + '</table>';

  function row (numberOfCells) {
    var i,
        str = '';
    for (i = 0; i < numberOfCells; ++i) {
      str = str + '<td></td>';
    }
    return '<tr>' + str + '</tr>';
  }
}

It still works like a charm, because the i in row shadows the i in table, so there’s no conflict. Okay. Now how does it work in CoffeeScript?

Here’s one possible translation to CoffeeScript:

table = (numberOfRows, numberOfColumns) ->
  row = (numberOfCells) ->
    str = ""
    i = 0
    while i < numberOfCells
      str = str + "<td></td>"
      ++i
    "<tr>" + str + "</tr>"
  str = ""
  i = 0
  while i < numberOfRows
    str = str + row(numberOfColumns)
    ++i
  return "<table>" + str + "</table>"

table(3,3)
  #=> "<table><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr></table>"

It works just fine. Here’s another:

table = (numberOfRows, numberOfColumns) ->
  str = ""
  i = 0
  row = (numberOfCells) ->
    str = ""
    i = 0
    while i < numberOfCells
      str = str + "<td></td>"
      ++i
    "<tr>" + str + "</tr>"
  str = ""
  i = 0
  while i < numberOfRows
    str = str + row(numberOfColumns)
    ++i
  return "<table>" + str + "</table>"

table(3,3)
  #=> "<table><tr><td></td><td></td><td></td></tr></table>"

Broken! And a third:

str = ""
i = 0
table = (numberOfRows, numberOfColumns) ->
  row = (numberOfCells) ->
    str = ""
    i = 0
    while i < numberOfCells
      str = str + "<td></td>"
      ++i
    "<tr>" + str + "</tr>"
  str = ""
  i = 0
  while i < numberOfRows
    str = str + row(numberOfColumns)
    ++i
  return "<table>" + str + "</table>"

table(3,3)
  #=> "<table><tr><td></td><td></td><td></td></tr></table>"

Also broken! Although the three examples look similar, the first gives us what we expect but the second and third do not. What gives?

Well, CoffeeScript doesn’t allow us to “declare” that variables are local with var. They’re always local. But local to what? In CoffeeScript, they’re local to the function that either declares the variable as a parameter or that contains the first assignment to the variable.5 So in our first example, reading from the top, the first use of str and i is inside the row function, so CoffeeScript makes them local to row.

A little later on, the code makes an assignment to i and str within the table function. This scope happens to enclose row’s scope, but it is different so it can’t share the strand i variables. CoffeeScript thus makes the i and str in table variables local totable. As a result, the i and str in row end up shadowing the i and str in table.

The second example is different. The first i encountered by CoffeeScript is in table, so CoffeeScript makes it local to table as we’d expect. The second i is local to row. But since row in enclosed by table, it’s possible to make that i refer to the i already defined, and thus CoffeeScript does not shadow the variable. The i inside row is the same variable as the i inside table.

In the third example, i (and str) are declared outside of both table and row, and thus again they all end up being the same variable with no shadowing.

Now, CoffeeScript could scan an entire function before deciding what variables belong where, but it doesn’t. That simplifies things, because you don’t have to worry about a variable being declared later that affects your code. Everything you need to understand is in the same file and above your code.

In many cases, it also allows you to manipulate whether a variable is shadowed or not by carefully controlling the order of assignments. That’s good, right?

all those against the bill, say “nay nay!”

Detractors of this behaviour say this is not good. When JavaScript is written using var, the meaning of a function is not changed by what is written elsewhere in the file before the code in question. Although you can use this feature to control shadowing by deliberately ordering your code to get the desired result, a simple refactoring can break what you’ve already written.

For example, if you write:

table = (numberOfRows, numberOfColumns) ->
  row = (numberOfCells) ->
    str = ""
    i = 0
    while i < numberOfCells
      str = str + "<td></td>"
      ++i
    "<tr>" + str + "</tr>"
  str = ""
  i = 0
  while i < numberOfRows
    str = str + row(numberOfColumns)
    ++i
  return "<table>" + str + "</table>"

table(3,3)
  #=> "<table><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr></table>"

All will be well, until you are debugging late one night, and you add:

console.log('Hello!') for i in [1..5]

table = (numberOfRows, numberOfColumns) ->
  row = (numberOfCells) ->
    str = ""
    i = 0
    while i < numberOfCells
      str = str + "<td></td>"
      ++i
    "<tr>" + str + "</tr>"
  str = ""
  i = 0
  while i < numberOfRows
    str = str + row(numberOfColumns)
    ++i
  return "<table>" + str + "</table>"

table(3,3)
  #=> "table><tr><td></td><td></td><td></td></tr></table>"

This breaks your code because the i you used at the top “captures” the other variables so they are now all the same thing. To someone used to JavaScript, this is a Very Bad Thing™. When you write this in JavaScript:

function row (numberOfCells) {
  var i,
      str = '';
  for (i = 0; i < numberOfCells; ++i) {
    str = str + '<td></td>';
  }
  return '<tr>' + str + '</tr>';
}

It will always mean the same thing no matter where it is in a file, and no matter what comes before it or after it. There is no spooky “action-at-a-distance” where code somewhere else changes what this code means. Whereas in CoffeeScript, you don’t know whether the iin row is local to row or not without scanning the code that comes before it in the same or enclosing scopes.

coffeescript’s failure mode

In this case, CoffeeScript has a failure mode: The meaning of a function seems to be changed by altering its position within a file or (in what amounts to the same thing) by altering code that appears before it in a file in the same or enclosing scopes. In contrast, JavaScript’s var declaration never exhibits this failure mode. JavaScript has a different action-at-a-distance failure mode, where neglecting var causes action at a much further distance: The meaning of code can be affected by code written in an entirely different file.

Mind you, the result of calling our row function is not affected by declaring an i in an enclosing scope. Our function always did what it was expected to do and always will. Although you and I know why the change breaks the table function is that row now uses an enclosed variable, imagine that we were writing unit tests. All of our tests for row would continue to pass, it’s the tests for table that break. So in an evidence-based programming sense, when we maintain the habit of always initializing variables we expect to use locally, changing code outside of those functions only changes the evidence that the enclosing code produces.

So one way to look at this is that row is fine, but moving i around changes the meaning of the code where you move i. And why wouldn’t you expect making changes to tableto change its meaning?

so which way to the asylum?

If you ask around, you can find people who dislike JavaScript’s behaviour, and others who dislike CoffeeScript’s behaviour. Accidentally getting global variables when you neglectvar is brutal, and action-at-a-distance affecting the meaning of a function (even if it is always within the same file) flies against everything we have learned about the importance of writing small chunks of code that completely encapsulate their behaviour.

Of course, programmers tend to internalize the languages they learn to use. If you write a lot of JavaScript, you habitually use var and may have tools that slap your wrist when you don’t. You’re bewildered by all this talk of action-at-a-distance. It will seems to you to be one of those rookie mistake problems that quickly goes away and is not a practical concern.

Likewise, if you write twenty thousand lines of CoffeeScript, you may never be bitten by its first-use-is-a-declaration behaviour. You may be in the habit of using variable names likeiRow and iColumn out of habit. You may find that your files never get so large and your functions so deeply nested that a “capture” problem takes longer than three seconds to diagnose and fix.

It’s a bit of a cop-out, but I suggest that this issue resembles the debate over strong, manifest typing vs. dynamic typing. In theory, one is vastly preferable to the other. But in practice, large stable codebases are written with both kinds of languages, and programmers seem to adjust to overcome the failure modes of their tools unconsciously while harvesting the benefits that each language provides.


  1. Yes, “transpile” is a real word, or at least, a real piece of jargon. It’s a contraction of “transcompiler,” which is a compiler that translates one language to another language at a similar level of abstraction. There’s room for debate over what constitutes a “similar level of abstraction.” https://en.wikipedia.org/wiki/Source-to-source_compiler

  2. There are other possibilities: You could write a Tail-Call Optimized language that transpiles to JavaScript, however its changes wouldn’t always be local: Some function calls would be rewritten substantially to use trampolining. Or adding continuations to a language might cause everything to be rewritten in continuation-passing style.

  3. Scanning all of the code first is called “hoisting,” in part because some declarations nested in blocks are “hoisted” up to the level of the function, and all declarations are “hoisted” to the top of the function. This is a source of confusion for some programmers, but it isn’t germane to this essay.

  4. If you don’t want the file enclosed in an IIFE, you can compile your CoffeeScript with the--bare command-line switch.