Sorry, most links in the "Bookshelves" and "Narrow Search By" features don't actually work yet, they are just there to show you what's coming.
The 'Featured' link works, and you can also enter key words into the search box to match words in titles and tags.


WATCH: Vietnam’s Dang van Lam makes brilliant penalty save against Thailand in 2022 FIFA World Cup Qualifier
by HarigovindOn Tuesday, the My Dinh National Stadium in Hanoi played host to the 2022 FIFA World Cup Qualifier match between Vietnam and Thailand. At the time of writing, the scoreline read 0-0 at half-time – and Vietnam have their goalkeeper Dang van Lam to thank for it.
The Muangthong United star saved a penalty taken by Thailand’s Theerathon Bunmathan in the 28th minute, and thereby saved the hosts’ blushes in the first half.
Watch the video of the penalty save right here:
As of right now, Vietnam sit firmly at the top of Group G with 11 points from five matches. A win against Thailand on Tuesday will further extend their lead against Malaysia, who is placed second on the table with nine points from five matches.
Thailand, who are currently at the third spot on the table, have eight points from five matches. Tuesday’s game is hence a must-win match for them, provided they want to overtake Malaysia and climb to the second place.
In case you did not know, Vietnam are the favourites to win as they are yet to be defeated in the ongoing 2022 FIFA World Cup Qualifiers. However, the War Elephants have often proved that they are not a team that can be dismissed as easily, and are sure to put up a fight against their ASEAN rivals in the second half.


Wild weather in New Zealand leaves 1,000 tourists stranded
by David O RoyalAlmost 1,000 tourists were stuck in the New Zealand tourist town of Franz Josef on Monday after torrential rains closed roads.
Several washouts and landslides north and south of the township, located near the Franz Josef glacier, have blocked roads in both directions and the only way in or out is by helicopter.
The civil defence said it was likely that the road would not open before Friday.
In the meantime they would fly in enough food and supplies for those who are trapped in the town.
READ ALSO: New Zealand police say at least five dead in volcano eruption
“We’re a bit stunned today and it’s fair to say it’s extremely bad news for our tourism sector,” Westland District Council Mayor Bruce Smith told local media outlet Stuff, confirming that about 970 tourists were stuck in Franz Josef.
Elsewhere the South Island, flood damage on the Rangitata Bridge, on State Highway 1, cut off Christchurch from Timaru.
Lakes at tourist hotspots Queenstown and Wanaka burst their banks earlier in the week, causing road closures and businesses to shut.
In the first week of the month the South Island already received three times December’s average monthly rainfall.
The National Institute of Water and Atmospheric Research recorded 872,000 lightning strikes around the country and in the waters offshore since Friday.


Connecting the Arduino Nano 2.2 to a computer with a Mini-B USB cable. Note the blue power LED underneath the board.
To connect the Arduino Nano to your computer, you'll need a Mini-B USB cable. This also provides power to the board, as indicated by the blue LED (which is on the bottom of the Arduino Nano 2.x and the top of the Arduino Nano 3.0).
If you have an Arduino Nano 3.0, you'll need to select Arduino Duemilanove or Nano w/ ATmega32 from the Tools > Board menu. If you have an Arduino Nano 2.x, select Arduino Diecimila, Duemilanove, or Nano w/ ATmega168. Select the correct serial port selected from the Tools > Serial Port menu. Then simply press the upload button in the Arduino environment. The board will automatically reset and the sketch will be uploaded. If you have any problems, see the troubleshooting guide.
For more details on the Arduino Nano, see the hardware page.
The text of the Arduino getting started guide is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the guide are released into the public domain.


|
|
-
The Design of Assistive Location-based Technologies for People with Ambulatory Disabilities: A Formative Study
-
Hara, K., Chen, C and Froehlich, J.
-
Proceedings of CHI 2016, San Jose, California, USA
-
In this paper, we investigate how people with mobility impairments assess and evaluate accessibility
in the built environment and the role of current and emerging location- based technologies therein.
We conducted a three-part formative study with 20 mobility impaired participants: a semi-structured
interview (Part 1), a participatory design activity (Part 2), and a design probe activity (Part 3).
Part 2 and 3 actively engaged our participants in exploring and designing the future of what we call
assistive location- based technologies (ALTs)—location-based technologies that specifically incorporate
accessibility features to support navigating, searching, and exploring the physical world.
Our Part 1 findings highlight how existing mapping tools provide accessibility benefits—even though
often not explicitly designed for such uses. Findings in Part 2 and 3 help identify and uncover useful
features of future ALTs. In particular, we synthesize 10 key features and 6 key data qualities.
We conclude with ALT design recommendations.
|
|
|
-
Characterizing and Visualizing Physical World Accessibility at Scale Using Crowdsourcing, Computer Vision, and Machine Learning
-
Hara, K. and Froehlich, J.
-
SIGACCESS Newsletter, Issue 113. 2015
-
Imagine a mobile phone application that allows users to indicate their ambulatory ability
(e.g., motorized wheelchair, walker) and then receive personalized, interactive accessible route
recommendations to their destination. In the following article, Kotaro Hara and Jon Froehlich talk
about their research work aimed at developing scalable data collection methods for remotely acquiring street-level
accessibility information and novel mobile navigation and map tools.
|
|
|
-
Improving Public Transit Accessibility for Blind Riders by Crowdsourcing Bus Stop Landmark Locations with Google Street View: An Extended Analysis
-
Hara, K., Azenkot, S., Campbell, M., Bennett, C., Le, V., Pannella, S., Moore, R., Minckler, K., Ng, R., and Froehlich, J.
-
ACM Transactions on Accessibility 2015
-
Low-vision and blind bus riders often rely on known physical landmarks to help locate and
verify bus stop locations (e.g., by searching for an expected shelter, bench, or newspaper bin).
However, there are currently few, if any, methods to determine this information a priori via
computational tools or services. In this article, we introduce and evaluate a new scalable method
for collecting bus stop location and landmark descriptions by combining online crowdsourcing and
Google Street View (GSV). We conduct and report on three studies: (i) a formative interview study
of 18 people with visual impairments to inform the design of our crowdsourcing tool, (ii) a comparative
study examining differences between physical bus stop audit data and audits conducted virtually with GSV,
and (iii) an online study of 153 crowd workers on Amazon Mechanical Turk to examine the feasibility of
crowdsourcing bus stop audits using our custom tool with GSV. Our findings reemphasize the importance of
landmarks in nonvisual navigation, demonstrate that GSV is a viable bus stop audit dataset, and show that
minimally trained crowd workers can find and identify bus stop landmarks with 82.5% accuracy across
150 bus stop locations (87.3% with simple quality control).
|
|
|
-
Tohme: Detecting Curb Ramps in Google Street View Using Crowdsourcing, Computer Vision, and Machine Learning
-
Hara, K., Sun, J., Moore, R., Jacobs, D., and Froehlich, J.
-
Proceedings of UIST 2014, Honolulu, Hawaii, USA
-
Building on recent prior work that combines Google Street View (GSV) and crowdsourcing to remotely collect
information on physical world accessibility, we present the first “smart” system, Tohme, that combines machine learning,
computer vision (CV), and custom crowd interfaces to find curb ramps remotely in GSV scenes.
Tohme consists of two workflows, a human labeling pipeline and a CV pipeline with human verification,
which are scheduled dynamically based on predicted performance. Using 1,086 GSV scenes (street intersections)
from four North American cities and data from 403 crowd workers, we show that Tohme performs similarly in
detecting curb ramps compared to a manual labeling approach alone (F- measure: 84% vs. 86% baseline) but at a 13%
reduction in time cost. Our work contributes the first CV-based curb ramp detection system, a custom machine-learning
based workflow controller, a validation of GSV as a viable curb ramp data source, and a detailed examination of
why curb ramp detection is a hard problem along with steps forward.
|
|
|
-
Improving Public Transit Accessibility for Blind Riders by Crowdsourcing Bus Stop Landmark Locations with Google Street View
-
Hara, K., Azenkot, S., Campbell, M., Bennett, C., Le, V., Pannella, S., Moore, R., Minckler, K., Ng, R., and
Froehlich, J
-
Proceedings of ASSETS 2013, Bellevue, Washington, USA
-
Low-vision and blind bus riders often rely on known physical landmarks to help locate and verify
bus stop locations (e.g., by searching for a shelter, bench, newspaper bin). However, there are currently few,
if any, methods to determine this information a priori via computational tools or services.
In this paper, we introduce and evaluate a new scalable method for collecting bus stop location and
landmark descriptions by combining online crowdsourcing and Google Street View (GSV). We conduct and
report on three studies in particular: (i) a formative interview study of 18 people with visual impairments
to inform the design of our crowdsourcing tool; (ii) a comparative study examining differences between physical
bus stop audit data and audits conducted virtually with GSV; and (iii) an online study of 153 crowd workers on
Amazon Mechanical Turk to examine the feasibility of crowdsourcing bus stop audits using our custom tool with GSV.
Our findings reemphasize the importance of landmarks in non-visual navigation, demonstrate that GSV is a viable bus
stop audit dataset, and show that minimally trained crowd workers can find and identify bus stop landmarks with 82.5%
accuracy across 150 bus stop locations (87.3% with simple quality control).
|
|
|
-
An Initial Study of Automatic Curb Ramp Detection with Crowdsource Verification using Google Street View Images
-
Hara, K., Sun, J., Chazan, J., Jacobs, D., and Froehlich, J.
-
Poster Proceedings of HCOMP 2013, Palm Springs, California, USA
-
In our previous research, we examined whether minimally trained crowd workers could find,
categorize, and assess sidewalk accessibility problems using Google Street View (GSV) images.
This poster paper presents a first step towards combining automated methods (e.g., machine vision-based curb ramp detectors)
in concert with human computation to improve the overall scalability of our approach.
|
|
|
-
Combining Crowdsourcing and Google Street View to Identify Street-level Accessibility Problems
-
Hara, K., Le, V., Froehlich, J.
-
Proceedings of CHI 2013, Paris, France
-
Poorly maintained sidewalks, missing curb ramps, and other obstacles pose considerable accessibility challenges;
however, there are currently few, if any, mechanisms to determine accessible areas of a city a priori.
In this paper, we investigate the feasibility of using untrained crowd workers from Amazon Mechanical Turk (turkers)
to find, label, and assess sidewalk accessibility problems in Google Street View imagery. We report on two studies:
Study 1 examines the feasibility of this labeling task with six dedicated labelers including three wheelchair users;
Study 2 investigates the comparative performance of turkers. In all, we collected 13,379 labels and 19,189 verification
labels from a total of 402 turkers. We show that turkers are capable of determining the presence of
an accessibility problem with 81% accuracy. With simple quality control methods, this number increases to 93%.
Our work demonstrates a promising new, highly scalable method for acquiring knowledge about sidewalk accessibility.
|
|
|
-
A Feasibility Study of Crowdsourcing and Google Street View to Determine Sidewalk Accessibility
-
Hara, K., Le, V., Froehlich, J.
-
Poster Proceedings of ASSETS 2012, Boulder, Colorado, USA
-
We explore the feasibility of using crowd workers from Amazon Mechanical Turk to identify and
rank sidewalk accessibility issues from a manually curated database of 100 Google Street View images.
We examine the effect of three different interactive labeling interfaces (Point, Rectangle, and Outline)
on task accuracy and duration. We close the paper by discussing limitations and opportunities for future work.
|


Security, the term itself defines its importance when this word strikes in our mind. Security and Privacy are the two such things which are being valued beyond the level in any industry or sector. This is always been a serious concern especially for Electronic communication and e-Business. It is quite surprising to know that about 2.5 quintillion bytes of data created rip-roaringly each day on web. And it is also estimated that by 2025, about 463 exabytes of data will be created each day globally, i.e, 212,765,957 DVDs per day. Therefore there is no doubt that the Network security measures are very much required to protect data during its transmission. Industries try all the possible ways to accomplish the security in their business. Hackers always stay active to breach the secure barrier and steal the data to make fraudulent acts. Despite these criticisms, there were solutions for securing the data. And one of them is Imbricate Cryptography.
But Before diving into the core subject, we should be familiar with what is cryptography.
Cryptography is a process of encoding the actual data into unreadable format to achieve security. Basically Cryptography involves two processes namely Encoding/Encryption and Decoding/Decryption the data.
There are basically two types of Cryptography:
Inorder to communicate more securely, the sender and receiver use keys during encryption and decryption. If a sender and receiver use different keys or multiple keys then it is called as Asymmentric cryptography or Public key encryption. Whereas if a sender and receiver use single or same key, then it is called as Symmetric cryptography or secret key encryption.
Imbricate Cryptography is a new technique of encrypting the data on the channel by using layered approach. That means it involves 3 layers of encryption and decryption which perplexes the cracker. This is a Symmetric type of cryptography in which the key is implanted in the message. Therefore the message cannot be recovered without placing the correct key at the end point.
Before diving into it, it is suggested that you should have the basic knowledge of:
The process involves three phases, each of these have their own importance.
Layer-1:This layer is called Mapping Layer. Here the characters get jumbled with other characters present in the same set. In general, we have two types of sets here: repeated characters set and non-repeated characters set. English words usually consist of alphabets in which the probability of few characters like a,e,i,o,s,t occur maximum times. These characters are called repeated characters. And the remaining alphabets comes under non-repeated characters which occur occassionally. Likewise all the characters, numbers are jumbled and mapped in their own set, which eventually completes the first layer.
One thing to note here is that the password or key doesnot include in this layer.
This layer is called as the core-encoding layer because this layer makes use of bitwise logics and ASCII format for encoding purpose. The characters which are formed from layer-1, are then transmuted to ASCII format. Now the first character of the message is XORed with negated ASCII character of the first character of the password. Same process is done for rest of the message.
The formula for this encoding is: newChar = (oldChar) XOR (~key[i]).
In this layer the ASCII characters formed in Layer-2 are converted into equivalent Binary format and the output is stored as a bitmap file. Hence this layer is called as "Bitmap-conversion layer".
Let us practically understand the above layers with a simple example.
Suppose we have a message X ={hello};
Key K={hai};Consider the following table for mapping the characters:
From the table the characters are jumbled as follows:
X1={ltjji};X2 = X1 ^(~K);
X2 = {l^~h, t^~a, j^~i, j^~h, i^~a};
The binary values for above set is X2 = {11111011, 11101010, 11111100, 11111101, 11101111}.
Now finally these are transmuted into character format in the form of Bitmap file.
Note: Here XOR operation is denoted by ^ symbol. 1s compliment operation is denoted by '~' symbol.
Moreover, the important thing to note here is that during encryption and decryption processes, the layer 1 is not dependent on the user Key, however the remaining two layers totally dependent on the Key.
The process of decryption is exactly the reverse of the above encryption process.
In this layer the bits of bitmap file are regrouped and restructured to form ASCII characters. Because of this, it is called character-restructuring layer.
This layer is known as core-decoding layer. Here the above ASCII characters are decoded using the same XOR logic used in encryption. Remember the message can be retrieved only if you use the same key as used in encryption.
This layer is known as re-mapping layer. Here the resultant characters are replaced with equivalent character present in column 1 of the Table. And finally the Original message is retrieved.


Christina Aguilera And A Great Big World Reunite At AMAs For Powerful Performance Of New Single
by Katie ColleyReunited and it feels so good!
Six years after performing their hit song “Say Something” at the 2013 American Music Awards, Christina Aguilera and musical duo A Great Big World joined forces again to perform their new single “Fall On Me”.
In true Xtina fashion, she took centre stage in a dramatic white gown as she put her flawless vocals on display while belting out the track.
Their performance had the crowd on their feet for a standing ovation after the performance.
Social media could not get enough of the powerful show:


Product Price Location App
We make it easy to find the cheapest product near you!
Walking
Transit
Driving


Posted on July 17, 2016 at 5:30 PM
In our third week at the Fanwood Library, we finished transitioning to programming in Python from the block programming we were using in trinket.io!
Read MorePosted on July 10, 2016 at 10:00 PM
In week two of Camp KidsCode at the Fanwood Library, the focus was on the interdisciplinary applications of computer science in art as well as beginning to apply the beginner concepts the students had learned in the popular programming language Python.
Read Moreby Nithya N
Posted on July 3, 2016 at 2:06 PM
This week was the first week of Camp KidsCode at the Fanwood Memorial Library, NJ. Eighteen students, ranging from 5th to 9th grade, started learning introductory programming concepts. Most of the students had no prior experience coding and Tuesday was the first time they had every programmed!
Read MoreWhere you hear the latest about Camp KidsCode!


ballotbox is a Python library that attempts to implement useful voting methodologies.
This project started as a result of conversations and experimentation that took place on the ULS-SIG when discussing self-organizing object meshes.
The current implementation depends upon the following additional software and/or libraries:
- Python
- zope.interface
- sphinx
- repoze.sphinx.autointerface
- distutils2
For information on the following, please see the sections (or, if reading this file in a working directory, the ./docs subdir):
- Installation
- Usage


Score for {{key}}: {{val}}
Score for {{errorCtrl.selected.actual}}: {{errorCtrl.selected.score[errorCtrl.selected.actual]}}
was determined to be {{errorCtrl.selected.pred}}, should be {{errorCtrl.selected.actual}}
was determined to be {{errorCtrl.selected.pred}}
Sentence Score:
{{key}}: {{val}}
Name: {{match.name}}
Pattern: {{match.pattern}}
Score: {{match.score}}
Aggregate Score: {{match.aggregate_score}}
Effect: {{match.effect}}
Matched String: {{match.matched_string}}


FIND NOTES
{% csrf_token %}
Visit
lecturenotes.in
to choose notes you want to download.
Notes ID can we found in the URL of notes for example
lecturenotes.in/notes/18052-note-for-database-engineering-de-by-punyatoya-panigrahi
has 18052 as NOTES ID
Notes ID is 2 to 7 digit number.
Submit
Please go through these points -
1. Scarpper can take 5-10 minutes to Scrap
2. We are using free server so we appreciate your patience


--- title: snkrfinder.core keywords: fastai sidebar: home_sidebar summary: "API details:" description: "API details:" nb_path: "nbs/00_core.ipynb" ---
pretrained architectures
feature extractor
light visualization / plotting
UMAP
transfer learning methods
VAE datablocks
- instantiate Sneaker Finder 2.0
- following the fastai wiget model
- datacleaner GUI (WIP)
- latent explorer (WIP)
Change
160*160*3/128


Hybridizer: High-Performance C# on GPUs | NVIDIA Developer Blog Learn how to use the Hybridizer compiler from Altimesh to program GPUs and other accelerators using C# code or .NET Assembly.
Let's Stop the 5G Hysteria: Understanding Hoaxes and Disinformation Campaigns Hey, did you hear that Facebook are going to start using your personal photos in whatever way they see fit? For real, it's going to start tomorrow unless you act quickly! All you have to do is copy and paste this message onto your own Facebook page and wa...
Messaging App Signal Threatens to Dump US Market if Anti-Encryption Bill Passes Signal is calling on its users to oppose the EARN IT Act, which it fears will be used to undermine end-to-end encryption, forcing it to leave the US market.
ICQ New – stay connected Convert audio messages to text, use smart replies, stay online even with bad internet connection
Planning for Yelp’s Future - Yelp In an internal email this morning, Yelp co-founder and CEO Jeremy Stoppelman shared with all employees that due to the impact of COVID-19 on our business, the company is taking the painful but necessary step to reduce the size of our workforce through a c...
Why I’m leaving Elm - lukeplant.me.uk Over the past year or so, I’ve reluctantly come to the conclusion I need to leave Elm and migrate to some other language (most likely Bucklescript via philip2), and I definitely cannot recommend it to anyone else. This post is about my reasons for that, w...
I Graduated Into the Dot Com Bust as a Programmer and Made It. You Will Too. To all the young programmers worrying about this uncertain job market, I promise things will get better.
The Unfriendly Robot: Automatically flagging unwelcoming comments - Stack Overflow Blog Unfriendly comments are an issue in our system because of the effect that their tone has on their recipient’s and future readers’ willingness to contribute to Stack Overflow. The solution to these issues isn’t to argue about circumstance or intent. The on...
WebSockets for fun and profit - Stack Overflow Blog Seamless communication is a must on the modern web. As internet speeds increase, we expect our data in real time. To address this need, WebSocket, a popular communication protocol finalized in 2011, enables websites to send and receive data without delay....
Swift: Google’s bet on differentiable programming | Tryolabs Blog Google's plans on making Swift the first mainstream language with first-class language-integrated differentiable programming capabilities. What's so cool about Swift?
Cloudflare dumps reCAPTCHA as Google intends to charge for its use | ZDNet Cloudflare says its moving to hCaptcha, an alternative CAPTCHA service, more private than reCAPTCHA.
I can't keep up with idiomatic Rust Recently withoutboats posted a series of blog posts about some syntax sugar he would like added to Rust.
Briggs & Tim Minchin - HouseFyre (Lockdown Video) #StayHome Sales and Streams of this song are being donated to the #FNC19Appeal. https://covid19-first-nations-community-impacts.raisely.com/ 🏠🔥 #HouseFyre Listen to mo...
Learn dbatools in a Month of Lunches An effective DBA is an efficient DBA. And if you work with SQL Server, dbatools is a lifesaver. With over 500 commands, this free and open source PowerShell module has the horsepower to automate just about every task you can imagine—and then some! W...
When in doubt, add more indirection - Clip of davidwengier - Twitch Clips Clip of davidwengier Playing Science & Technology - Clipped by davidwengier
Executing your configuration I run into this blog post talking about using a real programming language for defining your configuration. I couldn’t agree more, I wrote about it 15 years a...
Write Regular Expressions Easily with Rider - .NET Tools Blog Regular expressions enable people to locate data inside of strings based on pattern matching. Regardless of the programming language, regular expressions (RegEx), are quite useful and powerful, though often disliked. That’s because they have a reputation ...
A guide to remote development with Live Share | Visual Studio Blog Working in a fully distributed, remote team requires sophisticated collaboration technology, which needs to be both supercharged and frictionless. Visual Studio Live Share was built on the bold principle of making remote developer collaboration as powerfu...
Azure Friday | Channel 9 Join Scott Hanselman, Donovan Brown, or Lara Rubbelke as they host the engineers who build Azure, demo it, answer questions, and share insights.
Strangling .NET Framework App to .NET Core - Kamil Grzybek The incremental approach to migrate from .NET Framework legacy system to the new .NET Core system using Strangler Pattern.
Using Oakton for Development-Time Commands in .Net Core Applications All of the sample code in this blog post is on GitHub in the OaktonDevelopmentCommands project. Last year I released the Oakton.AspNetCore library that provides an expanded command line experience …
On architecture, urban planning and software construction Like software construction, architecture and urban planning often deal with complex systems that evolve over a long period of time. Some of the successful systems are also quite messy despite theories telling us that such systems should not work. These a...
Intro to quantum computing with Q# – Part 2, Superposition In the previous post in this series we mentioned the concept of superposition briefly. Let's use this second part to dive deeper into the mathematics of it, meet the cat of Schrödinger and try to find some simple quantum computing use cases for it.
Uno Platform 2.1 available now - x:Bind, TwoPaneView and more - Uno Platform Uno Platform 2.1 release is packed with over 50 new features allowing for increased productivity as well as getting you up and running with Surface Duo. In addition to bigger milestones such as x:Bind, the TwoPaneView and NumberBox controls we also shippe...
Thank you, Visual Studio docs contributors | Visual Studio Blog Thank you to everyone who contributed pull requests and GitHub issues to the Visual Studio docs in March of 2020!
A Fast and Lightweight Solution for CQRS and Event Sourcing Describes a fast, lightweight implementation of the CQRS+ES pattern using C#
Microsoft Tye - Parte 2 | DevDicas em 10 Minutes A nova ferramenta da Microsoft para build, run, debug e deploy de microservicos.
Krisp | Noise Cancelling App With a single button, Krisp removes all background noises for incoming and outgoing calls. Increase your productivity by having professional and noiseless conference calls from anywhere.
Why you should stop using Google Analytics on your website Here’s a look at why you should remove Google Analytics from your website and help create a more open, independent web that’s more friendly to the visitors.
Does a memory barrier ensure that the cache coherence has been completed? Say I have two threads that manipulate the global variable x. Each thread (or each core I suppose) will have a cached copy of x. Now say that Thread A executes the following instructions: set x t...
Depending on the right PowerShell NuGet package in your .NET project | PowerShell Alongside the pwsh executable packages published with each PowerShell release, the PowerShell team also maintain several NuGet packages that are available on NuGet to allow targeting PowerShell as an API platform in .NET. As a .NET application that both p...
Virtual: What's new in Visual Studio for Mac for .NET Developers Wed, Apr 8, 2020, 5:00 PM: The user group is going Virtual during the current stay-at-home order. We are really excited to have Jon Galloway (https://twitter.com/jongalloway), Sr. PM for VS & .NET at
Migrating Duolingo’s Android app to 100% Kotlin Duolingo for Android was a Java app for its first five years of existence. Two years later, it’s now 100% Kotlin! This migration proved to be a huge success for us in terms of code maintainability and developer happiness. There are already plenty of reso...
Google - Site Reliability Engineering Can a system be considered truly reliable if it isn't fundamentally secure? Or can it be considered secure if it's unreliable? Security is crucial to the design and operation of scalable systems in production, as it plays an important part in product qual...
Himalayas visible for first time in 30 years as pollution levels in India drop As the lockdown to stop the spread of coronavirus in India continues, pollution levels across much of the country have dropped sharply. Now some residents in northern India say they can see the snow-capped Himalayas 200 kilometres away for the first time...
Mobile Blazor Bindings - Getting Started In this post, I get started with Mobile Blazor Bindings. I introduce MBB, what it is and why you might want to try it. Then I show how to get setup and run a MBB app.
Building End-to-End Diagnostics and Tracing: Trace Context Posts in this series: An IntroTrace ContextIn the last post, I walked through the overall problem we run into with diagnosing issues in distributed systems - mainly that it can be difficult to determine causality because we don't have that "stack trace" w...
.NET 5.0, VS2019 Preview and C# 9.0 for ASP .NET Core developers This is the fourteenth of a new series of posts on ASP .NET Core 3.1 for 2020. In this series, we’ll cover 26 topics over a span of 26 weeks from January through June 2020, titled ASP .NET
Going React to React Native w/ Jenn Creighton on Real Talk Javascript Jenn Creighton talks with Craig Shoemaker about going from React to React Native and some of the issues she encountered and what she learned along the way.
Edouard Klein / falsisign For bureaucratic reasons, a colleague of mine had to print, sign, scan and send by email a high number of pages. To save trees, ink, time, and to stick it...
Free April Month Build in-demand tech skills without leaving your house. Get free access to 7,000+ expert-led video courses and more all month long.
Moving from reCAPTCHA to hCaptcha We recently migrated the CAPTCHA provider we use from Google's reCAPTCHA to a service provided by the independent hCaptcha. Since this change potentially impacts all Cloudflare customers, we wanted to walk through the rationale in more detail.
How to Invert a Machine Learning Matrix Using C# -- Visual Studio Magazine <i>VSM</i> Senior Technical Editor Dr. James McCaffrey, of Microsoft Research, explains why inverting a matrix -- one of the more common tasks in data science and machine learning -- is difficult and presents code that you can use as-is, or as a starting...
ASP.NET Core 5 – Enabling Razor runtime compilation #dotnetcore #aspnetcore ASP.NET Core 5 changes the experience of enabling Razor runtime compilation. This is now available as an option while creating the project.
Move OData to .NET 5 | OData Introduction Along with the Announcing .NET 5 preview 1, it’s time to move OData to .NET 5. This blog is intended to describe how easy to move the BookStore sample introduced in ASP.NET Core OData now Available onto .NET 5. Let’s get started.
Home - /dev/null as a Service In modern days everything is a service. You create documents, upload photos, deploy computers, but what’s happening to your trash? That’s why we’re launching /dev/null to the cloud.
SQL Server Management Studio 18.5 is now generally available - SQL Server Blog Today, we’re sharing the release of SQL Server Management Studio (SSMS) 18.5. We have some feature updates as well as important behind the scenes updates. You can download SQL Server Management Studio 18.5 today and review SSMS Release Notes for full det...
Oceanware.Ocean.Blazor 2.0.0 Provides the OceanValidator that is the Blazor middleware between the Ocean validation and case correction library and the Blazor UI. This NuGet package provides the OceanValidator that is used on Blazor Razor pages. This replaces the default DataAnnotati...
Using GraphQL in Azure Functions to Access Cosmos DB | LINQ to Fail A quick start on how to create a GraphQL endpoint on an Azure Function
Meet Visual Studio for Mac’s New Integrated Terminal! | Visual Studio Blog Our users tell us they frequently use a terminal for a variety of tasks – running front-end tasks (e.g. npm, ng, or vue), managing containers, running advanced git commands, scaffolding, automating builds , executing Entity Framework commands, viewing dot...
Muscle Simulation...Now In Real Time! 💪 ❤ Check out Lambda here and sign up for their GPU Cloud: https://lambdalabs.com/papers 📝 The paper "VIPER: Volume Invariant Position-based Elastic Rods" is available here: https://arxiv.org/abs/1906.05260 https://github.com/vcg-uvic/viper ❤ Watch th...
Jitsi Meet features update, April 2020 - Jitsi Hello Fellow Jitsters! While we work on making sure our infrastructure is able to cope with the recent surge in traffic, we have managed to ship some features we think you may like, let’s go! System audio sharing Sharing our screen while in a meeting has ...
Announcing Windows 10 Insider Preview Build 19603 | Windows Experience Blog Hello Windows Insiders, today we’re releasing Windows 10 Insider Preview Build 19603 to Windows Insiders in the Fast ring. You can check out our Windows Insider Program documentation here, including a list of all the new features and updates released in b...


Toggle the visibility of content across your project with a few classes and our JavaScript plugins.
How it works
The collapse JavaScript plugin is used to show and hide content. Buttons or anchors are used as triggers that are mapped to specific elements you toggle. Collapsing an element will animate the height from it’s current value to 0. Given how CSS handles animations, you cannot use padding on a .collapse element. Instead, use the class as an independent wrapping element.


{{define "main"}} {{partial "webservicesnav"}} Let's Keep Things Simple Domains. Web Hosting. Website Builder. Domains (Disabled) Web Builder (Disabled) Web Hosting {{end}}


SweetFreeStuff.com
///////////////////////////////////////////
Free Subscription to Diabetic Living
Posted: 19 Nov 2015 11:00 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Subscription to Diabetic Living
The post Free Subscription to Diabetic Living appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free 15oz Can of 100% Pure Pumpkin at Ralphs
Posted: 19 Nov 2015 08:59 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Load the coupon to your Ralphs card. Expires 11/23. Free 15oz Can of 100%
Pure Pumpkin at Ralphs
The post Free 15oz Can of 100% Pure Pumpkin at Ralphs appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Boppy Bloom Stretch Mark Cream Sample
Posted: 19 Nov 2015 08:56 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Boppy Bloom Stretch Mark Cream Sample
The post Free Boppy Bloom Stretch Mark Cream Sample appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Number 4 Hair Care Sample
Posted: 19 Nov 2015 08:55 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Number 4 Hair Care Sample
The post Free Number 4 Hair Care Sample appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Abs of Steel Maximum Definition Cream Sample
Posted: 19 Nov 2015 08:03 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Abs of Steel Maximum Definition Cream Sample
The post Free Abs of Steel Maximum Definition Cream Sample appeared first
on SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Autoweek Magazine
Posted: 19 Nov 2015 05:30 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
The post Free Subscription to Autoweek Magazine appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Schwarzkopf essence ULTME Diamond Color & Radiance Shampoo and
Conditioner Samples
Posted: 18 Nov 2015 02:35 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Fill out the form to receive free shampoo and conditioner samples and a $2
off coupon. First 100k. Free Schwarzkopf essence ULTÎME Diamond Color
Radiance Shampoo and Conditioner Samples
The post Free Schwarzkopf essence ULTÎME Diamond Color Radiance Shampoo
and Conditioner Samples appeared first on SweetFreeStuff.com.


2908 Ringneck Dr, Fort Collins, CO 80526 •<PHONE_NUMBER> •<EMAIL_ADDRESS>• www.caseypore.com
SUMMARY
I am a Software Engineer with ample industry and post-graduate academic experience who is available to create innovative and powerful, yet simple and elegant software solutions. Seeking employment opportunities that encourage and enable personal development and allow the creative freedom to design software solutions to solve complex problems.
SKILLS
Languages: Java, Python, C, C++, Bash scripting
Tools: Eclipse, IntelliJ IDEA, Android Studio, Spring Tool Suite, Gradle, Ant, Maven, Jenkins, Wireshark, Vim, Git, Subversion, GCC, GDB, Make, Valgrind
Misc: Microservice Architecture, API Design, Spring Platform, Android Development, Relational Databases (MySQL, PostgreSQL, SQLite), CompTIA A+ Certified PC Technician, Linux, Software Engineering, Artificial Intelligence, Machine Learning, ReST, SOAP, JSON, XML, HTML/CSS, LaTeX, HTTP(S), mDNS, NFC, Networking, Wi-Fi Direct
EXPERIENCE
|
Software Engineer/Software Designer V HP Inc.
|
Aug 2015 - Present Fort Collins, CO |
|
Software Engineer/Software Designer II HP Inc.
|
May 2014 - Aug 2015 Fort Collins, CO
|
|
Software Developer Engineer Intern Hewlett-Packard
|
May 2013 - May 2014 Fort Collins, CO
|
EDUCATION
|
Colorado State University Master of Computer Science |
Fort Collins, CO: Aug 2014 to Dec 2016 Overall GPA: 3.777/4.0 |
|
Colorado State University Bachelor of Science in Computer Science, Minor in Mathematics |
Fort Collins, CO: Aug 2011 to May 2014 Overall GPA: 3.547/4.0 |
HONORS
Upsilon Pi Epsilon Honor Society for Computing Disciplines, Aims Scholars Scholarship recipient, President's/Dean's list 5 semesters, Phi Theta Kappa Honor Society, Sigma Kappa Delta English Honor Society, Tau Sigma Honor Society, Sigma Alpha Lambda National Leadership & Honors Organization, Golden Key Honor Society


Re: @brixen’s "Is Node Better"
Update: The talk is online at http://blip.tv/jsconf/jsconf2012-brian-ford-6091521. If you weren’t there, you should go watch it before reading this.
As usual, this year’s JSConf did not fail to deliver. The parties, the location, the talks, the food, it was incredible. Chris Williams (and the rest of the JSConf family) really put together an incredible event.
By far, the most controversial talk was Brian Ford’s “Is Node.js Better”. I must admit, I walked in skeptical. Brian Ford seems like a bright and reasonable guy, but is clearly not a noder.
I’m not going to transcribe what he said. If you want that, read his slides and watch the video when it comes out. This is my reaction and response, and says more about me than it does about Brian.
This is based mostly on my meat-brain memory, and some notes that I scribbled. It’s quite possible that I may get some of the particulars wrong. However, rather than wait for the video to come out, I’d like to write this now, since the errors in perception are themselves useful information. If you notice any such error, please let me know.
Of course, there are limits to how deep a speaker can go into a topic in a 30 minute talk, and those limits are much shallower than how deep I can go in this blog post. So, I’d like to frame this response not so much as me-vs-Brian, but rather as just another public part of a longer multi-format conversation. My goal is not to produce more controversy than is useful, but to perhaps produce enough to keep things interesting.
Fair warning, this is a much longer post than most things I write. If you’re reading it, you’re probably interested mostly in the specific node stuff at the end. I’ve opted not to shorten it too drastically, because the topics are in my opinion best served by a thorough exploration.
[citation needed]
A lot of what I’m talking about is discussed in much more rigor elsewhere. This blog post is a synthesis, not a research paper. In addition to Thinking Fast and Slow which Brian mentioned, these are about the most approachable and informative discussions of the subjects that I’ve found:
- Influence
- Predictably Irrational
- Less Wrong: Fun Theory
- Less Wrong: How to Actually Change Your Mind
The Right
Brian started his talk with a very insightful exploration of the nature of controversy. He talked about our fast brain and slow brain, and guaranteed that reading Thinking Fast and Slow would change your life for the better, or he’d refund the cost of the book.
In discussing the title of the talk, he made the point that every value judgement implies a comparison, and invites controversy. If presented with a choice of apples and oranges, and you remark that “oranges are healthy”, then the implication is that apples are not (or at least less) healthy. So, the question “Is Node.js Better” raises the question, “Better than what?”
Storming Brains
He went on to stress the importance of the scientific method, especially in cases where groupthink can grab ahold of a popular intuition. A powerful example of this is the idea of brainstorming, which has come under criticism in recent studies.
Of course, another fascinating point worth mentioning (which was not covered in Brian’s talk) is that the primary source of the criticism is a survey of the results of 22 different studies with different methodologies, done in different environments, on different subjects.
I’m wondering what the differences are between the 4 where brainstorming worked, and the 18 where it didn’t. It’s especially worth noting that 18 instances of brainstorming’s failure vs 4 instances where it was successful, does not imply that brainstorming is “usually” less effective: only that it’s usually less effective in the studies surveyed. If you check the weather in Wisconsin 18 times in the summer, and 4 times in the winter, you might conclude it’s usually tropical.
This survey was reported several times in the Journal of Personality and Social Psychology. More recently, these journal articles were summarized in the New Yorker and other popular magazines. To me, this smacks of “turns out”-ism. It might be that the popular intuition about brainstorming is wrong. It might also be that it’s just incomplete.
Organization
Brian discussed the concept that organizations tend to perpetuate the problems that they were designed to solve. To my mind, this implies that we ought not to try to solve our problems with organizations, but rather, to solve them with chaos and disruption instead, wherever possible. Since it is often not possible, and because “disruption” becomes just another buzzword meaning a specific sort of organization, we should make it our goal not to “solve problems”, but rather to find the problems that are hidden by our current assumptions.
“Solving” a problem, then, becomes more an exploration than a “fix this thing” exercise. An exploratory expedition stops exploring when it returns with an answer. Similarly, organizations that are designed to solve a specific problem (as opposed to organizations that are designed to, say, throw parties or make buttons) should have their own destruction built into their core constitution.
This principle of minimum institution has guided the choices we’ve made in npm and in Node.js, technologically as well as socially. It has shaped the community in subtle ways that are difficult to recognize from the outside. It’s a principle that is close to my heart, and it’s why Node and I have gotten along so well.
Behavioral Science
“Programming is a behavioral science.” Couldn’t agree more. However, the transition from “behavioral science” to concurrency as a way to deal with scarcity of compute resources felt a bit forced to me. From that point of view, everything is behavioral science, because everything we do is done out of some human need (or else we wouldn’t do it.)
I think it’s more precise to say that software development is behavioral science, because every interface is a human interface, and humans are even more unreasonable in their behavior than hard disk platters.
The Wrong
There were a few points where I believe that Brian simply was either incorrect, misinformed, or perpetuating and reacting to the very groupthink that he is ostensibly setting out to move past.
Justifications for Using Node.js
There were a few justifications for using Node that Brian listed:
- same language on the client and server
- there are many JavaScript programmers
- Node.js is more fun
These are all interesting justifications, though really, the first two are rationalizations for the third. For a talk that started out by diving into the science of hedonics and decision theory (albeit a somewhat Gladwell-esque popularization of it), I was a bit disappointed to see that he didn’t go into more depth on this point.
He said that users call themselves polyglots, so he rejects the claim that a single language is actually relevant. This is a highly specious rebuttal. I can stand, but I still often find it pleasant to sit. It doesn’t have to be necessary in order to be valid in this case, it only needs to be comfortable. If you’ve never worked in a single-language stack, I highly recommend it. Even though you can’t share a lot of code in most situations, it does reduce the cognitive load switching between different parts of the application. This is the same reason that I’ve suggested using semicolons in JavaScript programs that include other non-ASI languages: reducing switching cost is reducing cost.
Brian claimed that the “many JavaScript programmers” argument is invalid, or at least, not very compelling. We ought to figure out the ideal platform, he said, and then provide advocacy, education, and resources to help people adopt it. This also strikes me as a bit weird. I’m not claiming that one should make all their technical decisions based solely on popularity, of course, but it certainly is not irrelevant. There’s something to be said for pragmatism.
People don’t use Node.js because it’s the same language on the client and server. They use Node.js because that language is JavaScript, and JavaScript is fun.
There aren’t more JavaScript programmers because of a lack of education or advocacy in other languages. JavaScript is fun (and unavoidable), and so all programmers use it.
“Node.js is more fun.” This reminds Brian of Ruby a few years ago. It’s important to remember, in the context of hedonics especially, that “fun” is a highly subtle term worthy of study on its own.
The problem with “Justifications for doing X” is that we do things primarily because of our emotions. Even the action of “being rational” is a thing that we choose to do because of a positive feeling attached to our self-image as a “rational person who does smart things”, and the assumption that we’ll get some pleasantly winful reward that feels good. When we really want to do something irrational, we usually have no problem reconciling the conflict with our preferred self-image as a rational individual.
Emotions are not just part of motivation, they are motivation. If you want to know why a person does something, don’t ask them to explain why they do it; try instead to figure out how they feel. It’s a much more challenging question, but it leads to much more interesting information.
About the word “hype”
When we have a good feeling about something (or even, when we just make any choice at all, and don’t quite understand why), our brain begins inventing rationalizations right away. The first one to pattern-match against “X because Y” is likely accepted as the “reason” we’re doing something, regardless of how much the truth of “Y” actually affects the likelihood of “X”.
Try asking a compulsive gambler why he goes to the casino. He might tell you about his “strategy” for roulette.  Roulette is a deterministically losing game; the more you play, the more you lose. Same with craps, slots, and (unless you’re the best at the table) poker. It’s the feeling of winning that he’s chasing, and the feeling of the chase. If he was truly motivated by the desire for money, there are obviously much better ways of getting it.
When a person shares their justifications for doing something, one of two things typically happens, in the “fast-brain”:
- You feel the same way about the thing. The justification pattern-matches against “I should X-that-I-do because Y”, and so you accept the justification as rational, wise, and well-informed. After all, you already do it, so you must agree.
- You feel differently about the thing. Or, at least, it’s not a thing you do, and so you have invented some justifications for not doing it. Your brain pattern-matches against “I should X-that-is-stupid because of Y”, and so you reject the justification as irrational, foolish, and ignorant.
If you have some vegan friends, and some friends on the paleo diet, and feel like watching some fireworks, ask them in each others company why they eat the way that they do. No matter how polite they try to be, each will subconsiously perceive the statements of the other as an attack, and feel the need to defend their position. If they are wise enough to retreat from needing to convince the other, they’ll most likely at least make a big show about “agreeing to disagree”. (Of course, if they’ve been on this diet for a while, they may have enough practice at these sorts of situations to handle them quite gracefully.)
If X is not just “do this action”, but rather “feel this way”, and you do not already feel that way, and the justification is not enough to incite this feeling (as justifications almost never are), then we label it “hype”, and it raises the bar that we now require to take the thing seriously next time.
Like so many cognitive shortcuts, this is a really good move much of the time. After all, people’s justifications are usually self-delusions as often as well-informed and rational reasons for doing or thinking anything. It makes perfect sense to be extra skeptical when we are at the risk of being influenced by it. If we have to be extra skeptical over and over again, we start to pattern match “X is good” into the hype category. Suddenly, it’s not just that veganism or paleo is not for me, it’s that the diet is a mark of a foolish person.
The net result is that anyone saying anything positive is likely to be labelled a “fanboi”, and their statement called “hype”, no matter what they say. This is a dangerous feedback loop that leads technology communities to stagnation, bitterness, and chest-beating.
Yo Dawg! I heard you like cognitive distortions, so I distorted your cognition so you can distort while you cognit!
The mind is such a wonderful thing! Mistakes in the mistake detection lead to potentially valid statements being discounted because they are presented along with invalid justifications, or presented by a low-status speaker, or are in conflict with already-held beliefs, especially when those already-held beliefs are a part of our Tribal Story.
Even worse, you have situations where we see a few “X is good because Y” justifications, deem them false, and then subconsciously internalize the fact that we gain status in our tribe by applying the “hype” label and discounting it, resulting in spiraling down into the toilet. Politicians and marketers have made a science of getting us to elevate arbitrary ideas into this Tribal Story, blinding us to any disagreement.
Birds fly. Fish swim. Humans make mistakes. It is our Super Power. We all do this.
We almost never change our minds. We are influenced in ways we are incapable of detecting (and will deny!) We are motivated by the behavior of people who look like us superficially, and believe (at least temporarily) literally everything we hear.
There is virtually no limit to the ability of the human mind to find new and creative ways to get out of touch with reality. I don’t want to give the impression that I (or anyone) could delineate all the many subtleties of human cognitive error. Every one is so rich and complicated. Even this discussion of pattern-matching “X-because-Y” is a serious oversimplification.
In the ancestral environment of adaptation, disagreement was often fatal. We’ve gotten a bit better at intelligent disagreement, but we still try unconsciously to come to an all-or-nothing agreement within our own heads, annihilating any “bad” idea entirely, and shrowding any “good” idea in a halo.
Whenever tempted to call something “hype” (or, even, “anti-hype”), I try to remember to ask the following questions:
- Is the provided justification evidence, data, or an expression of a feeling? What is the speaker’s experience of the thing being discussed? If it’s evidence, is it reproducible? If it’s data, is it relevant?
- How do I feel about the subject? How did I feel about it yesterday? What are my justifications?
- Am I tempted to dismiss this? Is it because of bad evidence,
a speaker who holds low status in my tribe,
or because I disagree with the feeling? If it’s a lack of evidence,
what evidence would make me feel the same way? If it’s a feeling I
don’t share, what other things do I feel that way about? If it’s a
low-status speaker, how would I feel if
<person I respect>
was saying it? - Am I tempted to accept this? Is it because it agrees with something I already think? What new information does it actually contain?
This is part of the reason why I try to criticise Node.js and npm as harshly and often and publicly as I can. I do think that they’re tremendously useful tools… but how can you believe me if I tell you that they’re perfect, when I clearly know better? And if you can’t believe me when I talk about Node.js, then what good am I?
Better justifications to use Node.js
- The IO paradigm is a good fit for your problem, and V8 is fast enough. This is the case for a lot of web software, but definitely not every program. Node.js really does make it pretty easy to write things like IRC bots and crawlers and websites, and is probably not ideal for many compute-intensive applications.
- It’s fun to write programs in this fashion. There are time-honored traditions of thinking of data as streams of bytes, and JavaScript is a relatively simple and expressive language for doing this in creative ways.
- It’s fun to be a part of making a popular platform better. The community is active and still pretty friendly, and that feels good to be a part of. Newcomers turn into regulars and then celebrities very swiftly. All it takes is a bit of persistence and enthusiasm.
- You prefer the simpler approach to asynchronous programming, using a callback/observer model (or actor model for child processes), rather than something like green threads or coroutines that “look” synchronous.
If you’re not writing systems that are well served by nonblocking IO, or an event loop/observer pattern approach, or if you don’t think it’s fun to make programs this way, then you probably shouldn’t use it.
But, even that aversion is worth looking carefully at that, no matter what you decide. V8 is an extremely fast virtual machine, and these days, a lot of programs are IO-bound.
And even if it’s not, we tend to focus on “the right tool for the job”, at the exclusion of “an awesome tool for the job”. The opposite of “right” is “wrong”, but the opposite of “awesome” is “boring”, which is sometimes worse, especially if you’re trying to maximize creativity.
I’m not sure how much research Brian did when he went out looking for justifications for using Node.js, but I don’t think he really got at what actually is driving so many people interested in this thing.
Controversy
So far, I felt like the setup was nice, but the criticism itself was kind of lackluster. We’ve heard it before. Node is hyped. The single-language stack isn’t all it’s cracked up to be. Etc. I was eager for the meat.
No sooner had I thought this, than the next slide said:
Node.js rejects reality
Aha! There it is. That primal “under attack” feeling, the visceral tension in my lower abdomen, the warmth on my face.
When I was younger (and still today when I’m not at my best, I must admit) the temptation was to hit back, or dismiss the message. Fight or flight. I think Brian probably lost a bunch of the audience with this slide. It sure did get my attention.
These days, when I feel that reaction, I try to leverage the added awareness that comes with the adrenaline, to be on the lookout for whatever comes next, because it is full of valuable information, especially if it is highly disagreeable. Beware of the moments when rationality tries to slip away: those are the times you most need it.
As I am somewhat dogmatic about endeavoring to reject reality less, I was very excited to hear what we might be missing.
Sadly, the justification for the “ignores reality” claim was not as pointed as I would have liked. It amounted to:
- JavaScript is a garbage collected language. Garbage collection pretends that you have infinite memory, and you don’t.
- IO always “actually” blocks somewhere, so the comparison between events and blocking is not valid, since it has to block somewhere.
For sure, garbage collection is tricky, and the interaction between
Node.js and the V8 garbage collector could probably be improved. But to
call it a lie is a bit silly. Garbage collection doesn’t pretend that
you have infinite memory; that’s virtual memory. Garbage collection
pretends that you don’t have to free
memory in order for it to be
re-used.
One of the biggest pain points of non-managed languages is having to explicitly free memory.  There may be some sort of approach to memory management that isn’t collected or manual, but better than either. If so, I don’t know of it, and it doesn’t matter anyway, because that is a language design problem, and Node.js is not about designing a language. If you have a beef with garbage collection, take it up with V8 and TC-39.
As for node being single-threaded, and IO always blocking, that’s kind of confusing to me. Of course, you don’t actually have application-level processing of IO in parallel, since there’s only a single JavaScript thread, but IO definitely is performed in parallel to the degree that the machine can provide, and “nonblocking” is the technical term for the type of IO that node does on sockets. (Nonblocking IO on files is simulated using threads.)
I’d really like more details about what exactly Brian was referring to on this point about IO “always blocking somewhere” and in what way Node.js rejects that reality.
entire ecosystem of tools and libraries must be built
This was a valid concern in 2010. I said at the time that it would not be an issue in a few years. It’s not an issue today.
To an extent, this was by design. A large part of Ryan’s reason for choosing JavaScript was that it is the only popular interpreted language with a suitably powerful VM and no existing IO paradigm. Additionally, to the extent that JavaScript does have a tradition of IO, it’s XHR and the DOM, which are event-based and asynchronous.
Since the birth of Node.js, a lot of libraries have been built. There are 8500 modules on npm. There are bindings to every popular database, sophisticated test frameworks, template libraries, HTTP routers, and so on. It’s easy and fun to write modules, and so people have written modules. This approach is remarkably valuable.
That being said, module discovery and visibility leaves a lot to be desired. npm has grown much faster than Rubyforge or PyPI, much earlier in the life of Node, and so we have hit these problems earlier.
Regarding tools, things are coming along quite nicely.
Post-mortem debugging with MDB just landed in the master branch, and will be in node 0.7.8. (Node v0.6 has had this for a while already.) Mad props to Dave Pacheco for that. Seriously, if you’ve never seen it in action, it’s amazing. In all my years using PHP, I can’t even count the number of times I’d desparately wanted this sort of thing. The zend IDE had some pretty good debugging capabilities, but Dap’s jsstack stuff is truly magical. Call me a fanboi, I don’t care: believe the hype. It’s fantastic. The only sad point is that it’s only available in SmartOS, but it’s not exactly surprising that the OS made by Joyent has some special love for Node.js ;)
The DTrace support in Node is also impressive. Again, not surprising, given the fact that so many DTrace heavyweights work at Joyent, but the go-to DTrace library for node is not written by a Joyent employee. It’s Chris Andrews’ node-dtrace-provider module. Anarchy > curation, yet again.
The depth and breadth of information that can be provided by DTrace, and the great work by Brendan Gregg and others at Joyent to actually massage that data into a format that humans can easily consume, is absolutely phenomenal.
Similar work on run-time analytics and post-mortem debugging is underway at Microsoft, I’m told. Windows users: stay tuned.
As a long-time text-editor-and-shell guy (moved from TextMate to vim a while ago), I don’t really follow the IDE stuff too closely. But, Microsoft, Cloud9, and many others are iterating furiously in this space. Many of them are leveraging their existing work on other JavaScript tooling, so it’s moving quite fast.
The built-in node debugger client is more my style, but node-inspector hooks into the Chrome debug tools, which imo blow away most visual debuggers available. (They even have heap analysis tools!) There are also plugins for Eclipse to provide stepwise debugging and analysis, and a lot of existing Eclipse users are more at home there.
So, it’s not so much that the ecosystem of tools “must be built”, as much as that it is being built, and leverages the existing JavaScript, V8, and system tools that already existed before Node showed up. In many ways, Node.js provides one of the first server-side systems that can fully take advantage of these things in a mostly cross-platform fashion.
Node.js will reproduce the last 15 years of ruby mistakes
Bold claim. One that I was excited to see ample justification for. What are the last 15 years of Ruby mistakes? How can we avoid making those same mistakes? How did ruby fix them? What can we learn from ruby’s experience?
Brian’s main justification of this point was that the cluster module is a repeat of Phusion Passenger.
It’s not entirely clear whether he was referring to TJ’s “cluster” package, or the built-in “cluster” module in v0.6, or the much improved “cluster” module in node v0.7. None of them are a particularly close reproduction of passenger, though I suppose that TJ’s is probably the closest. But it’s not as if any of these are an Apache plugin, or tied to a specific web framework. The analogy is a stretch, to say the least.
What’s even less clear is how Phusion Passenger, a program written in 2009, and widely recognized as the most effective and popular way to deploy the most effective and popular Ruby application framework, can possibly represent a “mistake”, let alone 15 years of mistakes.
I can only conclude that I do not understand what he was trying to say, because otherwise, I cannot make sense of it. Maybe there was something else called “passenger” in the Ruby world once upon a time, which did kernel load balancing, IPC, and not much else. Perhaps this “passenger” was deemed a mistake, and is now gone.
Show me a ruby mistake we’re reproducing, and I’ll make sure it gets fixed.
process concurrency is doomed
Brian declared that process concurrency will never be able to scale adequately. I cannot accept this without data.
I’ll assume that he was running low on time, and perhaps had to cut out the histograms and demonstrations. So let’s leave that question open.
Of course, spawning one process per request, or one process per IO or timer, is completely unreasonable. That’s why CGI was not adequate, and no one runs a real web platform on bash. However, running a single process per core, and having multiple HTTP servers share the open socket, and then using an event loop for IO and timers, is remarkably effective.
If there is doom on the horizon, don’t hint about it. Show me the evidence.
symmetric errors, chain of evidence
Finally! Something that genuinely sucks a lot in Node.js!
Domains is on the list for v0.8. I don’t know that the first pass at domains will be the final and ultimate fix for this, but it’ll be something to iterate on. This will make errors much more symmetric, and provide a much clearer chain of evidence.
The chain of evidence is also much improved by having post-mortem debugging of production systems. If you haven’t yet, check out Bryan Cantrill’s talk And It All Went Horribly Wrong.
So, this is important to me, it’s important to Node.js users, it’s important to the various companies paying the salaries of the node core team. It’s reasonable to trust it’s high priority.
Problems I Wish He’d Mentioned
If you want to know what’s wrong with node, ask a node-core developer.
These are some of the things that are really problematic, some of them in a pretty deep way. Of course, these are the things I know about, so they’re things that we’re working on for future releases of Node.js. If there are things that you think belong on this list, let us know.
Some of them are very hard, and will require iteration. Some of them are pretty straightforward, and will be addressed soon. Some of them are not super difficult, but just lower priority, and won’t get addressed for a while.
- Debugging. See above. It’s our top issue, and it’s coming along. It was mentioned, but less strongly than I would have liked to see.
- It is very hard to get visibility into which pending actions are keeping the event loop running. This is a source of subtle errors. The libuv refcount behavior is in the process of being cleaned up, and v0.8 will include a mechanism for seeing exactly which handles are in an open state.
- The Stream API, which is by all accounts the core use-case for node, is remarkably inconsistent and hard to extend. It’s a lot nicer in v0.4 and v0.6 than it was in v0.2 and before, but it’s got a ways to go yet. We paper over a lot of the inconsistency in the Stream.pipe() method, but it’s a source of many subtle issues. Node v0.9 will focus primarily on this issue.
- It’s hard to find good node modules. Reducing the barrier to entry for node package creation has made it a lot easier for more people to take advantage of. However, when you solve a problem, you open the door for new ones that were hiding behind it. We’ve grown faster than most platforms, which means that we’re encountering the discovery issues sooner. This will be addressed in the coming months with a new npmjs.org website.
- The Node.js project lacks a consistent and visible continuous integration system, so performance degradations can occur silently.
- Using binary modules is overly difficult, and requires a build toolchain on the install target. Work is underway to improve this, but it’s tricky.
And of course, just the fact that Node.js is very young, and has some bugs. It’ll no doubt get more, as we continue to work on it, but the goal is to change things in ways that make these bugs easier to spot and easier to fix.
It is not sufficient for Node.js to be better than any other platform. It must be so good that it permanently raises expectations in this space. It must continue to impress and delight users. There is so much work yet to do, it’s mind boggling.
Laurels are not very comfortable to rest on.
And finally…
If you’ve gotten this far, congratulations. I try to keep blog posts much shorter than this, but there was a lot to respond to here, and touched on several issues that are very close to my interests.
Brian’s talk was fascinating. Even the mistakes were interesting. When the video comes out, I highly recommend watching it. Go get Thinking, Fast and Slow. I haven’t read it, but I’m familiar with some of Kahneman’s other work in behavioral economics, and I suspect it’s every bit as fantastic as Brian claims.
I got a chance to talk to Brian after the talk, and so hopefully a lot of these points (at least, the specific technical details of what sucks in Node.js and what we’re doing about it) doesn’t come as a surprise to him. He seems like a genuinely nice and thoughtful person.
For a talk that started off with a request that we use science and make conflict useful, I was disappointed that his criticisms of Node were lacking in scientific rigor or constructive calls to action. But as I mentioned earlier, it’s hard to fit it all into a 30 minute talk. I hope this conversation will not end here.
We’re all humans. We all think wrong. We all love, and worry, and try to do interesting things. We all fail, and feel shitty, and try to explain why we’re not a bad person for it. We all succeed, and want to brag about it. We tell ourselves stories, and sometimes those stories are true, but usually they’re only just true enough to get by.
 They are just trying to protect something, as are you, and in the course of this protection, our instincts will cause us to fail.
  If you don’t learn what motivates them, how can you ever join forces?


|
Wash
Away Those Years
(Tremonti/Stapp) |
|
She
came calling
One early morning She showed her crown of thorns She whispered softly To tell a story About how she had been wronged As she lay lifeless He stole her innocence And this is how she carried on Well I guess she closed her eyes And just imagined everything's alright But she could not hide her tears 'Cause they were sent to wash away those years They were sent to wash away those years My anger's violent But still I'm silent When tragedy strikes at home I know this decadence Is shared by millions Remember you're not alone For we have crossed many oceans And we labor in between In life there are many quotients And I hope I find the mean |
|
|


Dutch
Help File
Table of Contents:
Ditto - Getting Started
Ditto -
Configuration
Right Click
Menu -> Quick Options
Right Click Menu -> Send To
Options ->
General
Options ->
Supported Types
Options ->
Keyboard Shortcuts
Options ->
Quick Paste
Options ->
Friends
Options ->
Stats
Ditto - FAQ
Ditto
- Custom Key Strokes
Right Click Menu -> Quick Options
- View
Caption bar on – Shows the title bar on the top, left, bottom or
right.
- Always
on Top – Ditto is always the top most window.
- Auto
Roll up – Only works if Always on Top is set. Will hide the main
list and only show the header when focus leaves ditto. The list will
be shown again if the mouse if moved over the header.
- Always
show description – If set it will show the full text in a tool tip of
the currently selected item.
- Prompt
for new Group names – If you create a new group it will prompt you for
the name.
-
Paste HTML as Plain Text - If html format is on the clipboard then the
actual html code will be pasted as text.
- Double
Clicking on the Caption bar – Controls the action ditto will take when
you double click on its header:
Toggles Always on Top
Rolls up the window
Toggles Always Show Description
Right Click Menu ->
Send To
- Send
To – List all friends (set up in config - friends tab), when selected the
selected clips will be sent to that friend
Options -> General
- Start
ditto on System Startup – When windows starts up, Ditto will
automatically be started.
- Display
Icon in the System Tray – Shows the icon in the system tray (or not).
Ditto can be activated by clicking its icon in the system tray. If
the icon is not shown, you can activate Ditto using its hot key.
- Maximum
number of Saved Copies – The maximum number of
saved copies that can be in the database. After the maximum has been
reached, the oldest item will be removed. Items that are marked as
“Never Delete” do not count toward this total.
- Paste
Entries Expire after X Days – After X days have past, items older than
that will be removed. Items that are marked as “Never Delete” will
not be deleted.
- Compact
and Repair Database on Exit – Ditto uses an Access Database to store
data. If you delete many entries and the database is still large in
size, this will reduce the size. Or if there is slowness in the
database it could be because of errors in the database, then run this.
If this is checked it will compact and repair on exit.
- Set
Database Path – Use this if you want to put the database in a
different location. If this is checked it will let you select a
database in a different location.
- Automatically
check for updates online – Every 15 days Ditto downloads a file from
“ditto-cp.sourceforge.net/Update/DittoVersion.txt”. This contains
the version of the current Ditto. If this version is greater than
the running version you will be prompted to download the current version from
“ditto-cp.sourceforge.net/Update/DittoSetup.exe”. Absolutely no
data is sent back.
- Allow
Duplicates – If this is checked it does not check previous entries to
see if it was already added to the database. If it is not checked
ditto searches previous entries: if the exact same data is found, the copy
date is updated so it will show up first in the list.
- Update
Clip Time on Paste – If checked when you paste an item, it will set
the date to the current time then show up first in the list.
Otherwise the clip stays at the same position in the list.
- Save
Multi-Pastes – If checked and you select multiple items and paste them
it will create a new entry with the concatenated data in it.
- Hide
Ditto on Hot Key if Ditto is Visible – If checked, the hot key toggles
the Ditto Window. i.e. if you activate Ditto with the hot key then
hit the hot key again it will hide ditto.
- Amount
of text to save for description – This is the amount of text that
shows in the list of past copies. This is also the text that is
searched in the edit box filter. Data from a copy is stored in
binary format (not easily searched). Ditto stores a subset of
the data (the default is 250 bytes) in plain text to allow for easy
searching.
- On
copy play the sound - When ditto saves a clip it will play the sound
specified here.
-
Paste Clip in active window after selection - If this is unselected then
when you select a clip in the main list it will just place the clip on the
clipboard, it will NOT paste the clip. If this is selected then it will
paste the clip in the active window.
Options -> Supported Types
When you copy something to the clipboard, the active program
can place multiple Formats on the clipboard, including: text, rich text,
pictures, xml, links, etc. Ditto only saves the Format Types you tell it
to.
Click “Add” to add more types using the “Add Supported
Types” dialog: the built-in Types are listed on the left, Types currently on
the clipboard are on the right. Click the small “Add” button below each
list to add the selected Types from that list. To add a custom Format
Type, enter the text name in the Custom Type edit box and click the “Add”
button next to it.
By default, Ditto saves text (CF_TEXT) and rich text (“Rich
Text Format”).
Options -> Keyboard Shortcuts
- Activate
Ditto – Shows the main list of past copies, same as clicking on the
taskbar icon.
- Named
Copy – Copies the currently selected data then pops up the item
properties window so you can set a hot key or set it to “Never
Delete”. This is the same as hitting Ctrl-C, but it also shows the
copy properties window of the copied data.
- Global
Hot Keys for last Ten items – These are global hot keys that can be
assigned to the last ten copies. Because these are global keys, the
main Ditto window does not need to be shown to use these hot keys.
Note: The "Win" check box next to each indicates that the Windows key
will be included in the short cut.
Options -> Quick Paste
These can also be set from the right click menu in the main
copy list.
- History
Starts at the Top of the list (vs. Bottom) – If checked, new entries
will be at the top, otherwise new entries will show at the bottom of the
window.
- Use
Ctrl – Num for first ten copy hot keys – When the list of past copies
is shown the last ten entries can be pasted by the number 1 – 10(0).
If checked, the Ctrl key must be down for this to work.
- Shows
text for first ten copy hot keys – Shows the numbers 1 – 10 in the
main list (or not).
- Show
Leading whitespace – If checked, the text will be shown as it was
copied, otherwise the leading white space of each line will be removed.
- Text
Lines per Row – Number of rows of text to show per row in the list
box.
- Enable
Quick Paste Transparency – Shows the list window as transparent at the
percent entered.
- Show
thumbnails - If checked then when the clipboard type CF_DIB is saved then a
thumbnail of the bitmap will be drawn in the list.
- Draw
RTF text in List - If checked then if RFT text is in a saved clip then the
rich text will be drawn in the list.
- Find
As You Type - If checked then when you start typing then it will filter the
list as you type, if it is not checked then it will not filter the list until
you hit the enter key.
-
Ensure Entire Window is Visible - If checked then when ditto is shown it
will ensure that the entire window is visible.
- Show
Clips that are in Groups in Main List - If checked then when a clip is in a
group it will be shown in the main list. If not checked then the clip
will ONLY be shown in the group it is assigned to.
- Popup
Positioning
At Caret – Ditto will pop up at the blinking caret.
At Cursor – Ditto will pop up at the current position of the mouse cursor.
At Previous Position – Ditto will pop up at the last position it was
closed.
- List
Item Prefix – Legend of what the leading text means in the list of
past copies.
Options -> Friends
Friends Table - Ditto can automatically send any or
all copies to up to 15 other computers. Double-Click an entry in the to
open the “Friend Details” dialog box. Enter in the IP/name of the
computer you want to send copies to. If “Send All Copies” is set then
every copy will be sent. Otherwise the Friend will be listed in the right
click menu to send them copies individually.
IP/Computer Names Text Edit Box - When a copy is
received over the network and the source’s IP or computer name is in this list
then the copy will be put directly onto the clipboard. Otherwise it will
only be in the Saved Clips List to use at a later time. Enter the IP or
Computer Names separated by commas into the edit box.
Network Password - When clips are sent over the
network the data is encrypted using this password. On the receiving side
the data is unencrypted using their network password. So when sending a
clip across the network, both sides Network Password must be the same. If
this you want to receive clips from multiple people with different passwords
then you can enter the registry keys
Receive Passwords - If you are receiving clips from
computers where your network password does not match, enter additional network
passwords separated by commas. When a clip is received the network
password will be tried first, if that doesn't work the list of "Receive
Passwords" will be used to decrypt the clip.
NB: When a clip is received from a Friend, the Friend’s
computer name is appended to the end of the Description text.
- Log
Send Receive Commands – is used to view what is happing with the send
and receive code. This is to only be used if there are problems and
the Ditto team asks for the file to debug.
- Disable
Receiving Clips – This will prevent the server thread from starting
and the socket from listening for clips over the network. If other
people send you data you will NOT receive the clips!
By Default Ditto opens port 23443, to change this add a DWORD registry entry
"SendRecvPort" to "HKCU\Programs\Ditto"
Options -> Status
- Odometer
– Date and the number of copies and pastes you have made since you
installed Ditto.
- Trip
Odometer – Same as the odometer but you can reset this to track how
much you are using Ditto.
- Saved
Copies, Save Copy Data – This is the number of tables in the database.
- Remove
All button – WARNING! This will delete ALL data in the
database.
- Last
Started – Shows the date Ditto was last started along with the length
of time Ditto has been running.
- Database
Size – Shows the Database size. Choose Compact and Repair
database on the General tab to reduce this size.
- Clips
Sent – Total clips sent to the people listed in the Friends tab.
- Clips
Received – Total clips received from others


No more peaks and troughs
Tired of your green lawn only lasting a few weeks? Our plan uses liquified nutrients to keep your lawn perfect all year.
-
@@loop('./components/tick-bullet-light-text.html', [
{"text": "6 applications per year, perfectly timed for consistently green results"},
{"text": "Join anytime, every feed has the perfect nutrients your lawn needs for a given season"},
{"text": "Professionally designed plan, created by industry-leading experts who look after lawns "}
])
Precision application liquid feed
Fed up with granular feed spreaders making a mess? Our liquid lawn feed keeps waste to a minimum and gives you complete control on where your feed goes.
-
@@loop('./components/tick-bullet-light-text.html', [
{"text": "No mess, our sprayers use flat fan nozzles for precision application"},
{"text": "No waste, keep any feed you don’t use for your next application"},
{"text": "No hassel, store our feed outside without damage"}
])
All the feed you need in 1 delivery
Care about the environment? So do we. Get your full So & Mo™ plan in 1 box, made from 100% recyclable packaging.
-
@@loop('./components/tick-bullet-light-text.html', [
{"text": "No waiting around, already have your feed when your lawn needs it"},
{"text": "Less deliveries, saving you time, money and reducing emissions"},
{"text": "Less packaging, reducing waste"}
])