Showing posts with label sublime. Show all posts
Showing posts with label sublime. Show all posts

Thursday, 12 June 2025

The Sheepshank Analogy

In seamanship, there are various shortening knots, in what I like to call the "shank family". These are used to take up slack in ropes, and only hold up under a certain amount of tension (too little or too much tension, and they collapse). Here are some of them...

The Catshank.




The Dogshank.



And arguably the most famous and basic, the Sheepshank, upon which the previous two were based. I know all this sounds deliciously violent (shanking various animals, really?!) but bear with me, a point is being made here.

The Sheepshank, loosely tied for illustration.

When the knot is tied, the rope is shortened. Once untied, we see that the rope is really a lot longer than we initially gave it credit for. And that leads us to...

Code editors!

Let's just use Sublime Text as an example. Sometimes the code can get really long, but Sublime Text (indeed, many other Code Editors) has this feature where you can visually compress the code.

A HTML example.

Before.

After.


A JavaScript example.

Before.

After.


Kind of like a Sheepshank! The code is still there, but the presentation hides it. And then it can be revealed again, easily.

Final words

I know this doesn't seem like much of an analogy. As analogies go, admittedly, it's pretty tame. But honestly, that was exactly what I was thinking of one day when I was expanding some code in Sublime Text - wow, this is kind of like untying a Sheepshank!

Shanks for reading,
T___T

Tuesday, 26 March 2024

Separating Text Editors from IDEs

The acronym "IDE" stands for Integrated Development Environment. There is a little bit of confusion as to what IDEs are, leading to questions like "Is TextPad an IDE?" (Spoiler: The answer is No).

TextPad is a text editor. There are distinct differences between a text editor and an IDE, even though they may look similar to a layperson. Chief of which, a text editor is part of an IDE. An IDE comprises of many components, one of which is a code editor of some sort.

What Text Editors do

Text editors edit text. It could be a block of code, a poem about dinosaurs or a dissertation about why dolphins are such jerks. Think of your text editor as a drum. The thing you beat with a stick so it makes sounds? Yeah, I know, that sounds wrong. But anyway...

Now a text editor isn't exactly a code editor, but it's awfully close. A code editor edits code, which is basically text. It's essentially a specialized kind of text editor, highlighting code structures and syntax errors, autocomplete suggestions and maybe even beautifying it for human eyes.

Now if you think of your text editor as a drum, think of your code editor as a full drum set with cymbals.

Full drum set.

Technically, not all code is text, but for most high-level programming languages, they are. Sublime Text, for example, can edit code for PHP, HTML, Python and a host of other languages. Notepad will edit the text just fine, but won't highlight syntax. That's pretty much the difference between editing code and editing text. Most text editors can edit code in a pinch, and vice versa.

As a web developer, I've had to use text editors to edit HTML, JavaScript and CSS code. And generally didn't encounter many problems. You could still do that for code that needs to be compiled, such as Java or C#, but that would make the process of development way harder than it needs to be.

What IDEs do

IDEs consolidate common developer tools onto one interface, so this potentially eliminates the need to individually configure separate software packages. At the very least, an IDE provides a code editor and an environment for running the code.

Now if following the earlier analogies, think of your IDE as a rock band setup with drums, keyboard, bass guitar and drum set, all in one place!

A full rock band setup.

Some IDEs provide other features, such as:
- file versioning.
- deployment management for DevOps.
- workflow and project management features.
- build automation
- specialized interfaces for mobile development, such as Android Studio.

An example of an IDE would be Eclipse (for Java and Python, among others) and Visual Studio (which handles C#, HTML and so on). They are called IDEs because they also run the code in addition to editing it. They can debug the code and point out syntax and (some) logical errors.

In a Nutshell

Text editors basically process and format text. IDEs almost always include a text editor of some sort, but the function of an IDE goes beyond text editing.

Text you later,
T___T

Tuesday, 11 June 2019

Film Review: Silicon Valley Season 4

We're back for Silicon Valley Season 4, and I promise you this is one firecracker of an installment! Though I watched it with mixed feelings (you'll see why by the end of this review), it was a thrilling ride.



It's a Season that more than lives up to the standards set by the previous Seasons, and this is also the Season that Erlich exits the show.

Warning - spoilers ahead, plenty of profanity ahead...

...but surprisingly tame by Silicon Valley standards. Really. I've become used to worse. It's like the scriptwriters decided to tone down the vulgarity and up the number of plot twists.

Also, I don't own the screenshots.

The Premise

Pied Piper has pivoted to a new product after a time skip - video chat. Richard gets an idea for a much better use for his algorithm and leaves the company to pursue that vision while the others focus on making the video chat a success. Meanwhile, their old nemesis Gavin Belson is ousted by none other than Jack Barker, leaving our intrepid band of tech geeks to be their own worst enemies.

The ubiquity of Internet devices is going to play a very big part in this Season as Richard hits his stride...

The Characters

Thomas Middleditch (last seen in a small but precious role as Sam Coleman in Godzilla: King of the Monsters) as tech geek extraordinaire Richard Hendricks. When he's talking to Russ about his ideas for a new decentralized Internet, you can see the gradual change as he grows more confident, more assertive. It's marvelous to watch.

Richard also undergoes a change in character, straying down a darker path. It comes early in the Season when he rejects Big Head's offer to give him unauthorized access out of principle, but goes "fuck it" once Dinesh pisses him off (to be fair, CEO Dinesh has that effect on quite a few people).

"You know when I was CEO, I found that it was more about choosing the one wrong answer that you can live with."

Later, his actions - and self-justifications for those actions - grow more extreme and less ethical as desperation propels him to perpetuate acts he would otherwise never have even contemplated. It's a fascinating sight and Middleditch does credit to the skill this requires.

TJ Miller as Erlich Bachmann. An astute political animal who can immediately tell right off that Laurie Bream is about to get ousted just by simple observation at a baby shower, and great at reading sexual vibes from women. This Season is Miller's last, and the writers have decided to highlight Erlich's fading relevance to the team... by throwing setback after setback at Erlich. It makes for great TV and Miller handles it like a champ, eliciting laughs all round as Erlich handles each and every occurrence with hubris and bombast. In fact, that scene of Erlich sitting in his palapa as it burns down all around him, seems to refer to the smoking ruins of his dreams.


It's pretty sad that Miller has decided to leave after all he's contributed to the past few Seasons, but exit he does, and in rip-roaring fashion.

Zach Woods as Jared Dunn. This Season has opened my eyes as to just how phenomenal an actor Woods is. Sure, he doesn't have that movie-star look or physique, but damn, that man can act. Watching his face transform is a study unto itself. From the times Jared goes from loyal, nurturing milquetoast employee to enraged warrior in just one heartbeat... it's terrifying and glorious. There's that scene where he and Richard express their exuberance while investigating Peter Gregory's notes. There's that little sideplot where he poses as a frat bro douchebag Ed Chambers on the phone. And that heart-stopping moment in Hoolicon where his befuddlement at Richard is finally, after almost four Seasons, replaced by rage, not just disappointment.




Jared really comes into his own this Season. No doubts about it. Despite having no tech skills to speak of, he's become indispensable to the Pied Piper team. Not just in organization and business, but as their conscience. Richard's conscience in particular.

Kumail Nanjiani has an interesting turn as Dinesh Chugtai. He starts off being self-centered, awkward and insecure as we've seen him in the last few Seasons, but once he becomes CEO, the transformation is remarkable. As in, he turns drastically more arrogant and smarmy, undergoes a wardrobe change and occasionally gets really sinister in tone. We see the effect of power and authority on him, and it's both sad and fascinating. And because it's Dinesh, just damn funny. Kumail Nanjiani does a great job of making Dinesh unlikeable. He's all of that, and then gets cut back down to size within the next episode, and becomes the sweet vulnerable Dinesh we've come to know (and detest a lot less).

Martin Starr as Bertram Gilfoyle. Just about everyone gets character development this Season except for Gilfoyle. Martin Starr plays him with the same amount of deadpan snark and nihilism as always, and he seems to have become the constant in a sea of change.

Matt Ross plays Gavin Belson with as much venom, megalomania and vindictiveness as with the past few Seasons, and this time Gavin takes his pettiness and opportunism to a whole new low. Jack Barker is among his first victims, and all due to something innocuous. But Gavin finally does himself in when he attempts to screw Dinesh over.

Still, all said and done, Gavin Belson is not only a trained tech but also a brilliant businessman, and when he finally puts his pettiness aside, one can see hints of what he's truly capable of. The exit he makes midway to find himself is bereft of his usual pretensions (even if that exit is made using his personal jet) and one senses he's truly had an epiphany as to how his pettiness has been holding him back.

Stephen Tobolowsky as "Action" Jack Barker. This Season, his sneaky side comes out to play as he stabs Gavin in the back after a few episodes of kissing his ass. Tries too hard to be more successful than Gavin once he occupies the CEO seat, and ends up alienating Hoover. Toblowsky chews the scenery in the few scenes he's in, in the later episodes.

Josh Brener is the befuddled Nelson "Big Head" Bighetti. As usual, Josh Brener plays the dimwit well, perhaps a little too well. But now there's an interesting twist - whenever Big Head fails to read the mood in the room and asks some dumb questions, his observations hit really close to home. He's like the Court Jester who acts like a fool, but whose tomfoolery contains uncomfortable truths. Again, his habit of lucking out continues in this Season and he gets opportunities he otherwise would not get if he were a bit more savvy.

Big Head is the quintessential programming everyman. He is onscreen proof against the perception that people who can code, are smart. Seriously, his id is "password" and his password is "password"?

Amanda Crew as Monica Hall. She acts as the voice of reason here, as opposed to the manic ball of energy that is Russ Hannamen. We get to see her slippery side when she attempts to screw Ed Chen over. Though, this is a period of trials for Monica. Woman can't seem to catch a break right up until the middle of the Season.

Comedian Jimmy O. Yang as Jian Yang. His presence acts as a foil to Erlich's, now giving him verbal beatdowns as opposed to simply baleful glares.

Jake Broder as Dan Melcher. He's been missing since Season One, and the man twice-cuckolded by Erlich is soon to be cuckolded by... Richard. You got to feel a bit sorry for the guy there. He's a boring and klutzy dude, but that's not a crime deserving of that kind of punishment.

Phoebe Neidhardt as Mia, or "MI4". Does the psycho hacker bit really well. She's not even hamming it up and is pretty much this side of believable.

Chris Williams as Hoover. Loyal and eager to please. Unlike Denpok, his loyalty to Gavin Belson does not go away that easily and is even the cause of Pied Piper getting bailed out of trouble later on.

Matt McCoy makes a welcome appearance as Pete Monahan the attorney. Jared and Dinesh consult him on a legal matter, and the dead-serious manner in which he treats the case (and to be honest, it's a very serious matter) just makes it all the more hilarious. I last saw him in a minor role in True Detective Season 2, and it was jarring because that's not a comedy.

Leisha Hailey as Liz Tinsdale. Not overly pretty but very pleasant. Does a passable portrayal of a woman fed up with the structure of her life and craving a little danger.

Haley Joel Osment as Keenan Feldspar. The fat grown-up version of the little kid from The Sixth Sense sells the role as a tech entrepreneur who has the gift of selling. His enthusiasm is infectious even as he's selling dog shit tech. Osment does a fabulous job here bringing that character to life. That is one hell of a talented actor.

Tim Chiou as Ed Chen. Smug (like almost everyone in Silicon Valley) and jovial, and I couldn't help noticing, pretty well-built. Turns out to be even more slippery than Monica.

Suzanne Cryer as Laurie Bream. Laurie is pregnant this Season, and treats it as business as usual. In fact, her baffled expression when Monica congratulates her, really sells it. Laurie's less of an antagonist this Season and her main role is to help move plot points along.

Ben Feldman as Ron LaFlamme. They found a way to include my favorite Silicon Valley lawyer midway through the Season, and boy does he deliver!
 
Bernard White is Denpok, Gavin's spiritual advisor. Weaselly fellow who tries all means and ways to latch back on to Gavin. Comes up against Hoover, who uses practical tech and security to serve Gavin, as opposed to Denpok's new-agey scamminess.

Allan Miller as Stuart Burke, a crotchety old dude that, despite knowing jack-all about tech, manages to parlay that into patent blackmail.

Andy Daly is the unnamed doctor. He gets a bit less time this Season, but handles his role deftly as always with expertly-delivered good-natured verbal jabs at Richard..

Chris Diamantopoulos has a couple cameos as Russ Hannamen. Crass, loud and vulgar, gives Erlich a serious run for his money. And surprisingly insightful. He tells right away that Richard isn't into the whole video chat platform despite Richard doing his damn best to sound enthusiastic. He's certainly a sight for sore eyes, right from the first episode. It's especially hilarious, if juvenile, just how many terms he knows for the word "gay".

Graham Rogers as Bryce, Gavin's "Transfusion Associate". Surprise, he's actually one of the few who remember Jared's real name, Donald. Despite that, he's an opportunistic dick, a tech wannabe and his relationship with Gavin is more than a little bit creepy.

Bridey Elliott as Winnie. Richard's ex makes an appearance near the end of the Season and proves to contribute to his downfall. To be fair, it's mostly Richard sabotaging himself due to being almost as petty as Gavin Belson. Still, I don't like the character much and don't think she contributes a lot by herself, so her appearance is thankfully short.

Flula Borg as Joel, CEO of PeaceFare and Winnie's new boyfriend. Idealistic and well-intentioned, comes off as an all-round good guy. So Richard looks like a dick for trying to sabotage him.

Patrick O'Connor as Nelson Bighetti Sr, Big Head's dad. We don't see much of him, but there's nice interaction between him and his dim-witted son Big Head, and his antagonism towards Erlich.

Henry Phillips as John the server guy. We see him once, as a running gag at the end of the first episode. Damn, that level of deadpan is astonishing!

Emily Chang as herself. We only see her in a couple interview segments, but her inclusion adds a certain level of real-world presence in the show.

The Mood

Things are starting to heat up this time round, and the occurrences come at you fast and furious. Things happen and then revert in the course of one or two episodes, though ultimately a lot of these sideplots, as in the previous Seasons, actually do contribute to the main arc. There are crisis mode tech moments too. Ultimately, it's a lot of drama interspersed with comedy.

What I liked

This scene where Richard poses as an Uber driver to sell Pied Piper chat to a venture capitalist is already funny enough on its own due to how obviously forced the impromptu sales pitch sounds, but when the part comes for him to demo the Add Friends feature, Martin Starr's deadpan "hello... friend" delivery really seals it. You can just imagine Gilfoyle thinking, no, we're not friends.


Although many characters, especially the main ones, go through some interesting developments this Season, they are comfortingly consistent in the way they act. The changes aren't just sprung on the viewers - they're logically presented as the way those characters would become after undergoing three Seasons of whatever they had to go through.

The little game of one-upmanship between Hoover and Denpok was great. What made it sweeter was that these two are minor characters at best, and finally given the chance to really shine after so many Seasons.

The creepy music that plays when Richard goes to visit Gavin Belson at his home. Also, the entire scene of Richard and Gavin having an earnest moment about the potential of Decentralized Internet. Because at heart, Gavin Belson isn't just a ruthless corprorate suit - he's also a tech geek in his own right just like Richard. Bonus points for Richard drawing formulas on the very expansive forehead of Gavin's portrait!



Gilfoyle says this... while drinking a beer.
Jared: It's 10AM. Why is he drinking beer?
Gilfoyle: Because he sucks.


Seriously though, this is a great segment for our favorite Satanist geek. When Richard and Gavin join forces, Gilfoyle wants in but he's too proud to sell himself to them, so he resorts to snarking at their shortlist of tech candidates... hard. Richard, Jared and even Dinesh all see right through him! It's a moment that makes Gilfoyle startlingly human.



The episode with the Patent Troll, not least because it includes an appearance by Ron LaFlamme! But it does give insights to the opportunism in Silicon Valley, disgusting frat bro rituals and a heartwaring sight of Richard refusing to bow out of principle. And also, this episode ends with Gilfoyle hacking Jian Yang's smart fridge (and misspelling his name).



I'm in two minds about the scene where Richard puts a "pineapple" in Dinesh's backpack and tells him to hit the killswitch in the most densely populated area he can find. Dinesh being a Pakistani and all, this is a parody of a suicide bombing and is in extremely poor taste. And yet... it might just be so bad that it's good.

In the final episode, Jack Barker starts rambling on about the Cojoined Triangles of Success to a bunch of China factory employees and next moment we see that he's been taken hostage. These Chinese sure take no shit!

What I didn't

That open-door-to-men-using-the-urinal running gag was cute... but got tiresome quickly. Wasn't that great a joke to begin with and they could have just skipped it.



Generally, the frenetic pace of this Season. A lot happens within an episode. Sure, they somehow make this work, but I'm not sure I'm comfortable with the rate of twists in the story. Something starts to happen, and then it all comes undone by the next couple episodes, sometimes even within the current episode in which it happens. Though, if the show creators are trying to make a case for just how hectic tech life is in Silicon Valley, they're certainly succeeding.

The Mandarin spoken between Ed Chen and Jian Yang is horrible.

In fact, the entire thread about Jian Yang's See Food app seems pretty pointless except maybe to illustrate Erlich's decline. Though I like the fact that Jian Yang seems to be using Sublime Text Editor as a code platform while demoing the app.



Speaking of "pointless", so is the entire sideplot of Dinesh and Gilfoyle when their phones are accidentally merged with each other. Fisticuffs occur and even Jarrod is caught up in it... so unnecessary.

The one-night stand between Liz and Richard feels really sudden. The fallout is funny, but not entirely credible.

OK, what was the point of this little gag again? Gilfoyle having cat eyes. Fine. So what?



Conclusion

This is a really good installment of the Silicon Valley show, and I thoroughly enjoyed it. Though I enjoyed it way more than I did the preceding Seasons, I realize that this Season was so good only because of the foundation laid by the previous Seasons. The characters are consistent with how they've always been portrayed. Things move a little too fast for my liking, but ultimately this Season feels more weighty, more... substantial. There's still a lot of comedy, but now the drama quotient has been upped a great deal.

My Rating

9 / 10

4-ever yours,
T___T

Tuesday, 1 January 2019

Five Code Practices to Observe Starting From 2019

Hi, guys. 2019 is here. Time for more resolutions!

Back in 2016, I made a short list of things to keep to, and to my chagrin, by mid-2017, I'd slacked off on a couple items. Still, I think I made a good go of it. This time round, my resolutions are all code-based.

1. Spacing

I'm absolutely terrible with this. And in 2019, I'd like to sternly remind myself to keep my code readable by putting in spaces where it's warranted. Sure, it makes not a lick of difference to the compiler or interpreter. But this isn't for the benefit of the machine - it's for the benefit of the poor human eyes that have to read my code.

From crap like this...
var x=(y<obj.average?obj.average+y:(obj.average+y)/(obj.items.length+1));


To this!
var x = (y < obj.average ? obj.average + y : (obj.average + y) / (obj.items.length + 1));


2. Naming Conventions

Another thing I'm really bad at. I tend to name variables either with very vague meanings such as temp or str. Worse, I might even use Hungarian Notation like strTemperature or varX. See, this is pointless. Like in the case of varX, no shit it's a variable, right? Barring constants which I don't use much of, most declared elements are variables.

Here, I resolve to reserve Hungarian Notation only for naming HTML elements, such as txtFullName for a text field or rbOptions for a radio button. It's a habit I carried over from my days using Visual Basic, and it's a hard one to break.

A good practice would be to go from...
String txtName;
Int intId;


... to longer, more meaningful Camel Case names.
String previousTransitionAuditorFullName;
Int previousTransitionAuditorId;


3. Readmes

There's a lot of code in my GitHub account. Unfortunately, not all of it is documented with nicely formattered markdown readme files. I'm making the effort to at least make a note of how the code is written, how it should be run, and so on. Specifically, the idea behind the code.

## Functions

**getAverageStat(statType)**
This function accepts a string, *statType* as a parameter and uses its value to iterate through the corresponding array and determine the average value.

**getTotalStat(statType)**
This function accepts a string, *statType* as a parameter and uses its value to iterate through the corresponding array and determine the total value.


I like to think my code is simple enough to read, but a short note in the repository is responsible coding. No one should have to read through my code without first having an idea of what they're reading. At this point in time, I'm trying to make up for my laxness in the past by documenting repositories as and when I find the time.


4. CSS cross browser

Now, if anyone has any experience with cross-browser CSS, it's using browser prefixes such as -moz- or -webkit-. I tended to do the below, thinking that it didn't really matter, which is wrong. The effect may be less than desired depending on what browse the code is running in, and what styling is being used.

.shootingStar
{
    transition: all 4s ease;
    -webkit-transition: all 4s ease;
    -moz-transition: all 4s ease;
    -ms-transition: all 4s ease;
    -o-transition: all 4s ease;    
}


The correct way is this, and it needs to be hammered home. The standard non-prefixed line has to be last.
.shootingStar
{
    -webkit-transition: all 4s ease;
    -moz-transition: all 4s ease;
    -ms-transition: all 4s ease;
    -o-transition: all 4s ease;
    transition: all 4s ease;
}

Editor's Note: The other prefixes are being included as examples. Some of them are no longer in use for the purposes of the transition property.

5. Doctype declaration

Web pages these days start out like this. Would you believe I sometimes miss out the very first line?!
!DOCTYPE html
<html>
    <head>
        <title>Test Title</title>
    </head>

    <body>
    </body>
</html>


It's easy to blame Sublime Text Editor, which I'm using, for this, since it doesn't include the doctype declaration as part of the shortcuts. However, like any professional, the buck stops with me. Missing the doctype potentially causes a whole host of problems that may cause the page to appear incorrectly. I won't go into those here; suffice to say, every time I catch myself doing this, any code I've written will need to be re-tested.

That's it!

There are a lot more code practices I should be picking up, but these should go a long way. Happy 2019, geeks!

echo strStandardSignOffMessage;
T___T

Monday, 28 March 2016

Software Review: Sublime Text

Sublime Text is a tool created by Jon Skinner using Python. Sublime is used primarily by coders, the bulk of which are web developers who write scripts in HTML, JavaScript, CSS, PHP, Python and Scalar. At the time of this writing, Sublime is at version 2.0 with the next stable version, 3.0, up and coming. While the trial version is free for use indefinitely (with the odd message encouraging you to cough up for a license), the licensed version is a hefty 70 USD. Purchasing the license also entitles you to an upgrade to 3.0 when it comes out.

Buy now!

The Premise

On the surface, Sublime is a fairly lightweight text editing tool in the realm of Notepad ++, but via its extensibility through the use of numerous plugins, it can also be a decent IDE. I've been using Sublime over a year now, and have yet to use any plugins. Sublime, on its own, is more than adequate for my purposes.

The Aesthetics

The default color scheme, Monokai, is that of a soothing dark grey background with color-coded text. In that vein, it's similar to other tools such as VIM. When Skinner created Sublime, his main purpose was to ensure that the text never got cluttered by toolbars and whatnot, and you can see the results here. This is my standard operating layout, and if this isn't minimal enough, there's still the distraction-free option.

Distraction-free

My usual layout

Multiple-screen layout

The Experience

Sublime loads up fast. And has never crashed on me. Controls are responsive enough, and fairly intuitive.

The Interface

Plenty of standard text-editing tools such as search-and-replace, go to line, zoom in/out, autocomplete, and web snippets. These features are available via shortcut keys as well. If you're a Python nerd, you can even customize these features.

What I liked

Pressing Ctrl P brings up the Go To Anything feature, which takes a little getting used to, but grows on you like moss on lichen.
Go To Anything


Web Snippets are shortcuts used to instantly produce standard code segments. While I can type any of these with my eyes closed, undeniably it's a great pleasure not to have to do it. Just showing two of these.
Type "html"...

And you get a standard HTML snippet!

Type "lorem"...

And you get lorem ipsum text.


The Mini-map gives you a bird's eye view of your code in its entirety, useful if you're a neat freak whose code is identifiable by indentations and placed in well-defined sections. So instead of scrolling painstakingly to the required line, zoom right in on the area.

Mini-map


Simplicity. The required learning curve for this application isn't very steep - if you just want to type code, you can hop right in and feel your way out as you go. Easier as compared to, say, Emacs.

Persisting windows. If I forget to save a file before closing Sublime, the file is still there when I next start it up, right where I left it, in all its unsaved glory.

What I didn't

Some of the autocomplete functions are downright irritating. When, for example, I highlight a row of text and hit the quote key, I expect the line of text to be replaced by quotations, not encircled by them. But this is a minor quibble and your mileage may vary.

Documentation seems woefully inadequate. On the bright side, you probably won't need it.

Also, if you're just using it as a text editor and aren't really interested in the bells and whistles, 70 USD is a heck of a high price to pay considering you can get many of these features for free on other software.

Conclusion

Sublime is a joy to use and is free for life if you don't mind the occasional guilt trip the trial version lays on you. Me? I intend to pay once I've raised the cash - dollar by dollar. The license is by user, not by machine, so you can port it anywhere you want!

My Rating

8.5 / 10


Try Sublime today. It's better than text.
T___T