-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.json
1 lines (1 loc) · 22.7 KB
/
index.json
1
[{"authors":["admin"],"categories":null,"content":"I am a software engineer at Aptos Labs, working on a smart-contract programming language called Move. I work remotely from the scenic city of Chattanooga, TN.\nSome of my previous jobs:\nSenior Software Engineer at Consolidated Trading, where I worked on high-frequency trading (core infrastructure and research) with Andrey Ermolinskiy. While there, I worked on low-latency systems, domain-specific programming languages, applied machine learning, and fast kernel-bypass network stacks. Principal Scientist at GrammaTech, Inc. While there, I led several federally-funded cutting-edge research projects. I created CodeSentry as a Principal Investigator of a DARPA Small Businees Innovation Research grant and a DoD CIO\u0026rsquo;s Rapid Innovation Fund. Software Engineer, National Instruments R\u0026amp;D India, where I worked on the LabVIEW programming language, and developed the cleanup diagram feature. I have had the good fortune of working with several amazing interns over the past few years: Lawton Nichols, Kevin Leach, Prashast Srivastava, Sushant Dinesh, Charlie Murphy, Colin Unger, Avi Saven, Zijie Zhao.\nMy PhD advisor at UCSB was Ben Hardekopf. During the summers of 2011 and 2012, I was a research intern at Mozilla Research, working with Dave Herman.\nI have served on the PLDI 2022 Programm Committee, and as an invited reviewer for ACM Transactions on Software Engineering and Methodology, ACM Transactions on Programming Languages and Systems, ACM Transactions on Architecture and Code Optimization, and ACM Computing Surveys.\n","date":-62135596800,"expirydate":-62135596800,"kind":"taxonomy","lang":"en","lastmod":-62135596800,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"https://vineethk.github.io/authors/admin/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/authors/admin/","section":"authors","summary":"I am a software engineer at Aptos Labs, working on a smart-contract programming language called Move. I work remotely from the scenic city of Chattanooga, TN.\nSome of my previous jobs:\nSenior Software Engineer at Consolidated Trading, where I worked on high-frequency trading (core infrastructure and research) with Andrey Ermolinskiy. While there, I worked on low-latency systems, domain-specific programming languages, applied machine learning, and fast kernel-bypass network stacks. Principal Scientist at GrammaTech, Inc. While there, I led several federally-funded cutting-edge research projects. I created CodeSentry as a Principal Investigator of a DARPA Small Businees Innovation Research grant and a DoD CIO\u0026rsquo;s Rapid Innovation Fund. Software Engineer, National Instruments R\u0026amp;D India, where I worked on the LabVIEW programming language, and developed the cleanup diagram feature. I have had the good fortune of working with several amazing interns over the past few years: Lawton Nichols, Kevin Leach, Prashast Srivastava, Sushant Dinesh, Charlie Murphy, Colin Unger, Avi Saven, Zijie Zhao.\n","tags":null,"title":"Vineeth Kashyap","type":"authors"},{"authors":[],"categories":[],"content":"I have never learnt typing\u0026mdash;per se. Once I started coding, I think I did adhoc multi-finger hunt-and-peck typing, and just got better at it (only requiring an occasional hunt). As years and my youth went by, I started feeling the pain: RSI. I looked for ways to improve my posture and ergonomics: I got a sit-stand desk and the Microsoft Sculpt ergonomic keyboard. Things got better, but I was always looking to improve.\nI had been looking at various fully split ergonomic keyboards, and this August, I decided to splurge on Glove 80. It came very well reviewed by the ergo mech keyboards reddit community and elsewhere.\nWhat is Glove 80? Glove 80 is a fully split ergonomic keyboard that is:\nfully programmable (see my writeup on my layers below) backlit RGB (I have never used this) wireless and rechargeable has tenting (so that you don\u0026rsquo;t have to keep your wrist horizontally flat) columnar layout (each key belongs to a column, each column is aligned, entire columns themselves are staggered) curved columns in concave key wells expensive. If you were not a touch typist before, Glove 80 will force you to become one (if you hunt and peck with this keyboard, you negate all its benefits). Because of the columnar layout, it is intuitive to figure out which finger to use for which key. I have finally turned into a touch typist (although I need to hunt and peck when I occasionally use the QWERTY on my laptop keyboard).\nRecommendation I really like this keyboard, and would recommend it for anyone looking for an ergonomic programmable keyboard and is willing to spend a bit of time to get adjusted to it. It now comes with a travel case (not the most compact, but fits in my backpack), and I usually take it around if I need to type for work.\nHow long will it take to get adjusted to this keyboard? It depends on the person: if you have used a similar split keyboard before, then likely not much. It took me several days of intense practicing: I was also figuring out and optimizing my layouts simultaneously.\nWhere does the mouse go? Mouse placement is one of the issues with split keyboards. The reason why you want to keyboard to be split is so that you can keep you forearm orthogonal to your body (instead of having to hunker inwards, like with a traditional keyboard) and open up your chest. But if you do that, then the traditional mouse has to go farther right and can start becoming awkward to use. You could also put the mouse between the two keyboard splits, but sometimes a vigorous mouse movement might end up moving a keyboard split. My solution has been to use a Kensington Expert Trackball Mouse instead, and place it between the two keyboard splits. Because the trackball base never moves, there is very little chance of disrupting the position of the keyboard split, and I have found the trackball to be more ergonomic than a mouse for my uses.\nPractice When I started using Glove 80, my words per minute was around an abysmal 8. Now, it is around 60-70 wpm, more than it ever was in any other keyboard I have used. For several days, I regularly practiced using the following sites: monkeytype, keybr, type-fu. The variety helped, and I found each website brought something to the table.\nMy Layouts One of the things I spent a lot of time tinkering around was my layouts, as a programmable keyboard allows tons of customizations. A few highlights:\nHome row mods. I use home row keys to also act as modifiers (control ⌃, option ⌥, command ⌘, shift ⇧). Certain home row keys also act as modifiers when used in conjunction with other keys. For example, in the base layer, if I press a, and while keeping it pressed, also press l, it would emit ⌃ l. Caps word: The cw key in the base layer is the caps word key. It is a much nicer capslock: when it is pressed, it activates capslock, and it keeps on until a non-alphabet non-underscore key is pressed, after which the capslock mode automatically turns off. This key is great for screaming case variables. Thumb is used for some of the heavy lifters like space, enter, backspace (which I used very heavily in the beginning), and momentary layer switches. Base Layer I have color coded the different keys based on which finger (pinky, ring, middle, or index) is supposed to hit it. The keys with bold borders are where those fingers rest. When there are non-home-row keys with two symbols (like ; and , or : and .), they showcase the shift and non-shift versions of that key.\nAs you can see, this is not QWERTY, which is not a particularly ergonomic layout. While there have been several other proposed layouts, I also did not want to deviate too much from QWERTY. My layout here is inspired from minimak, and I was able to switch incrementally to the current layout.\nWhen I press one of the layer keys (num nav, fn, macro, or sym), the keys momentarily (as long as the layer key is pressed) have new functionality (depending on the layer).\nNumber and Navigation Layer This layer is focused on numbers and navigation.\nSymbol Layer This layer is focused on symbols.\nMacro and Function Layers The image above combines the macro and function layers. This is because currently, each of these layers has functionality assigned to only one split of the keyboard. The macro layer has a bunch of macros that emit a keyboard shortcut for VS Code\u0026mdash;which is where I spend a good chunk of my day in. For example, \u0026ldquo;next change\u0026rdquo; is a keyboard shortcut to see the next change in a diff view, when reviewing a pull request.\nParting Notes I have arrived at these layers after a lot of tinkering and figuring out what works for me, and these are likely to change. I will try to keep these updated, here is a gist link to the key map if you want to try these layers out on your Glove 80. With these layers, I pretty much never have to lift my palm from its resting position, and my pinkies are not overloaded (like they were on the Microsoft Sculpt or traditional keyboards). I also don\u0026rsquo;t use the two thumb cluster keys (not shown in these layer images, but you can see them in an image of Glove 80) on each split that are the most towards the center: I cannot reach them comfortably with my thumb unless I move my resting palm.\n","date":1703722565,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1703722565,"objectID":"2e7574c9ddf2bb30915ab57f2f9279ee","permalink":"https://vineethk.github.io/post/glove80/","publishdate":"2023-12-27T19:16:05-05:00","relpermalink":"/post/glove80/","section":"post","summary":"I have never learnt typing\u0026mdash;per se. Once I started coding, I think I did adhoc multi-finger hunt-and-peck typing, and just got better at it (only requiring an occasional hunt). As years and my youth went by, I started feeling the pain: RSI. I looked for ways to improve my posture and ergonomics: I got a sit-stand desk and the Microsoft Sculpt ergonomic keyboard. Things got better, but I was always looking to improve.\n","tags":["keyboard"],"title":"The Glove 80 Keyboard","type":"post"},{"authors":[],"categories":[],"content":"I find myself looking for or double checking certain git commands at varying frequencies. I made this list to help myself, it\u0026rsquo;s a bonus if it helps you too!\nNone of these recipes were invented by me. I\u0026rsquo;ll try to include links if I have saved them in my notes, if not, sorry but thank you internet stranger for making life a little bit better.\nCleanup commits in a feature branch I have lost code that I have written and saved but not committed, because the development server I used crashed. So, I\u0026rsquo;ve learned to commit often. But sometimes (read, most times) I want to save work that is not ready for any human to ever see. I don\u0026rsquo;t want all these intermediate commits to show up in a pull request.\nTo make it concrete: I have a branch dirty that branched-off from master, and I have possibly merged master into dirty several times, and made several commits to dirty. I want to now create a \u0026ldquo;clean\u0026rdquo; pull request by creating a branch clean that has all the commits of dirty squashed into one. Below is a pretty safe git recipe for that (there are several ways to do it, but below is the one I prefer).\nLet\u0026rsquo;s first make sure we have the latest master.\ngit checkout master git pull Let\u0026rsquo;s branch off the latest master into clean.\ngit checkout -b clean Let\u0026rsquo;s bring changes in dirty into clean, but squash them.\ngit merge --squash dirty You can now commit changes in clean, with a unified and meaningful commit message, by deleting all the intermediate commit and merge messages.\ngit commit Now, you can create a pull request from the clean branch that hides all your commit transgressions in dirty.\n","date":1679616000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679616000,"objectID":"936f347ac63f6ce9fd9a4ba0db24930e","permalink":"https://vineethk.github.io/post/git-commands/","publishdate":"2023-03-24T00:00:00Z","relpermalink":"/post/git-commands/","section":"post","summary":"I find myself looking for or double checking certain git commands at varying frequencies. I made this list to help myself, it\u0026rsquo;s a bonus if it helps you too!\nNone of these recipes were invented by me. I\u0026rsquo;ll try to include links if I have saved them in my notes, if not, sorry but thank you internet stranger for making life a little bit better.\nCleanup commits in a feature branch I have lost code that I have written and saved but not committed, because the development server I used crashed. So, I\u0026rsquo;ve learned to commit often. But sometimes (read, most times) I want to save work that is not ready for any human to ever see. I don\u0026rsquo;t want all these intermediate commits to show up in a pull request.\n","tags":[],"title":"Quick Reference: Git Commands","type":"post"},{"authors":["Vineeth Kashyap","Roger Scott","Joseph Ranieri","David Melsi","Lucja Kot"],"categories":[],"content":"","date":1605654559,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1605654559,"objectID":"1b48900c571338d015849c0ca48eff33","permalink":"https://vineethk.github.io/publication/api-analytics/","publishdate":"2020-10-04T19:09:19-04:00","relpermalink":"/publication/api-analytics/","section":"publication","summary":"","tags":[],"title":"API Analytics for Curating Static Analysis Rules","type":"publication"},{"authors":[],"categories":null,"content":"","date":1605571200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1605571200,"objectID":"575352e3eaa4cb15e81ea79065c422da","permalink":"https://vineethk.github.io/talk/api-analytics/","publishdate":"2020-10-06T16:15:33-04:00","relpermalink":"/talk/api-analytics/","section":"talk","summary":"","tags":[],"title":"API Analytics for Curating Static Analysis Rules","type":"talk"},{"authors":["Roger Scott","Joseph Ranieri","Lucja Kot","Vineeth Kashyap"],"categories":[],"content":"","date":1601334084,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1601334084,"objectID":"90b7161b7d2b5d53f549280320528b39","permalink":"https://vineethk.github.io/publication/out-of-sight-out-of-place/","publishdate":"2020-10-04T19:01:24-04:00","relpermalink":"/publication/out-of-sight-out-of-place/","section":"publication","summary":"Distinguished Paper Award","tags":[],"title":"Out of Sight, Out of Place: Detecting and Assessing Swapped Arguments","type":"publication"},{"authors":[],"categories":null,"content":"","date":1601251200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1601251200,"objectID":"93d1e3b7c46b054cb468bd4dafc90643","permalink":"https://vineethk.github.io/talk/swapd/","publishdate":"2020-10-06T16:10:57-04:00","relpermalink":"/talk/swapd/","section":"talk","summary":"","tags":[],"title":"Out of Sight, Out of Place: Detecting and Assessing Swapped Arguments","type":"talk"},{"authors":["Vineeth Kashyap","Jason Ruchti","Lucja Kot","Emma Turetsky","Rebecca Swords","Shih An Pan","Julien Henry","David Melski","Eric Schulte"],"categories":[],"content":"","date":1569888000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1569888000,"objectID":"9387ee15d0d94c526390a54669bf88cf","permalink":"https://vineethk.github.io/publication/bug-injector/","publishdate":"2019-07-01T00:00:00Z","relpermalink":"/publication/bug-injector/","section":"publication","summary":"Distinguished Paper Award","tags":[],"title":"Automated Customized Bug-Benchmark Generation","type":"publication"},{"authors":[],"categories":null,"content":"","date":1565136000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1565136000,"objectID":"8a85608d863062f3b9fc5e6b83b45713","permalink":"https://vineethk.github.io/talk/apiad/","publishdate":"2019-07-05T00:00:00Z","relpermalink":"/talk/apiad/","section":"talk","summary":"","tags":[],"title":"STAMP: Using Big Code to Learn Static Analysis Rules for Library APIs","type":"talk"},{"authors":[],"categories":null,"content":"","date":1561248000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1561248000,"objectID":"d8ffbbef6e9fa8a6faf578bd8d6433d1","permalink":"https://vineethk.github.io/talk/ddisasm/","publishdate":"2019-06-23T00:00:00Z","relpermalink":"/talk/ddisasm/","section":"talk","summary":"","tags":[],"title":"Fast and Precise Disassembly Using Datalog","type":"talk"},{"authors":[],"categories":null,"content":"","date":1560902400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1560902400,"objectID":"56755aa89df045466a2db584d72d5477","permalink":"https://vineethk.github.io/talk/js-smart/","publishdate":"2019-06-19T00:00:00Z","relpermalink":"/talk/js-smart/","section":"talk","summary":"","tags":[],"title":"JS Smart: Checking Library API Usage in JavaScript Programs","type":"talk"},{"authors":["Vineeth Kashyap","David Bingham Brown","Ben Liblit","David Melski","Thomas Reps"],"categories":[],"content":"","date":1496880000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1496880000,"objectID":"afe7bf5c9f6e5b31d347c5fa63b3f9f9","permalink":"https://vineethk.github.io/publication/source-forager/","publishdate":"2021-01-21T16:06:11-05:00","relpermalink":"/publication/source-forager/","section":"publication","summary":"","tags":[],"title":"Source Forager: A Search Engine for Similar Source Code","type":"publication"},{"authors":["Vineeth Kashyap","Rebecca Swords","Eric Schulte","David Melski"],"categories":[],"content":"","date":1496275200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1496275200,"objectID":"cbdf07e908a466d075cad74665ca6909","permalink":"https://vineethk.github.io/publication/musynth/","publishdate":"2017-06-01T00:00:00Z","relpermalink":"/publication/musynth/","section":"publication","summary":"","tags":[],"title":"MuSynth: Program Synthesis via Code Reuse and Code Manipulation","type":"publication"},{"authors":["Kyle Dewey","Vineeth Kashyap","Ben Hardekopf"],"categories":[],"content":"","date":1422748800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1422748800,"objectID":"bddb345af6f2de39c01ef52d1776fbd2","permalink":"https://vineethk.github.io/publication/parallel-ai-for-javascript/","publishdate":"2015-02-01T00:00:00Z","relpermalink":"/publication/parallel-ai-for-javascript/","section":"publication","summary":"","tags":[],"title":"A Parallel Abstract Interpreter for JavaScript","type":"publication"},{"authors":["Vineeth Kashyap","Kyle Dewey","Ethan A Kuefner","John Wagner","Kevin Gibbons","John Sarracino","Ben Wiedermann","Ben Hardekopf"],"categories":[],"content":"","date":1415664000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1415664000,"objectID":"8ad780654b3c6e53ff7608feb563b180","permalink":"https://vineethk.github.io/publication/a-static-analysis-platform-for-javascript/","publishdate":"2019-07-14T15:13:20-04:00","relpermalink":"/publication/a-static-analysis-platform-for-javascript/","section":"publication","summary":"","tags":[],"title":"JSAI: A static analysis platform for JavaScript","type":"publication"},{"authors":["Xun Li","Vineeth Kashyap","Jason Oberg","Mohit Tiwari","Vasanth Ram Rajarathinam","Ryan Kastner","Tim Sherwood","Ben Hardekopf","Frederic T. Chong"],"categories":[],"content":"","date":1393632000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1393632000,"objectID":"049f37a6a7a7d3ca7c8da00659bece22","permalink":"https://vineethk.github.io/publication/sapper-asplos/","publishdate":"2014-03-01T00:00:00Z","relpermalink":"/publication/sapper-asplos/","section":"publication","summary":"Honorable mention for IEEE Micro Top Picks","tags":[],"title":"Sapper: A Language for Hardware-Level Security Policy Enforcement","type":"publication"},{"authors":["Vineeth Kashyap","Ben Hardekopf"],"categories":[],"content":"","date":1391212800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1391212800,"objectID":"8009c3ab9b88d8300fc5e3b2f7d464b0","permalink":"https://vineethk.github.io/publication/browser-addons/","publishdate":"2014-02-01T00:00:00Z","relpermalink":"/publication/browser-addons/","section":"publication","summary":"","tags":[],"title":"Security Signature Inference for JavaScript-based Browser Addons","type":"publication"},{"authors":["Ben Hardekopf","Ben Wiedermann","Berkeley Churchill","Vineeth Kashyap"],"categories":[],"content":"","date":1388534400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1388534400,"objectID":"151c2e086ee1ce3d6be4e798e3a397e7","permalink":"https://vineethk.github.io/publication/widening-for-control-flow/","publishdate":"2014-01-01T00:00:00Z","relpermalink":"/publication/widening-for-control-flow/","section":"publication","summary":"","tags":[],"title":"Widening for Control Flow","type":"publication"},{"authors":["Xun Li","Vineeth Kashyap","Jason K. Oberg","Mohit Tiwari","Vasanth Ram Rajarathinam","Ryan Kastner","Timothy Sherwood","Ben Hardekopf","Frederic T. Chong"],"categories":[],"content":"","date":1370044800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1370044800,"objectID":"f1cda45aadf099c7c877ecaa5213b95b","permalink":"https://vineethk.github.io/publication/sapper-plas/","publishdate":"2013-06-01T00:00:00Z","relpermalink":"/publication/sapper-plas/","section":"publication","summary":"","tags":[],"title":"Sapper: a Language for Provable Hardware Policy Enforcement","type":"publication"},{"authors":["Vineeth Kashyap","John Sarracino","John Wagner","Ben Wiedermann","Ben Hardekopf"],"categories":[],"content":"","date":1370044800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1370044800,"objectID":"6d663c9f9fc32bf1bbfd5ec264e90c50","permalink":"https://vineethk.github.io/publication/type-refinement/","publishdate":"2019-07-27T16:50:36-04:00","relpermalink":"/publication/type-refinement/","section":"publication","summary":"","tags":[],"title":"Type Refinement for Static Analysis of JavaScript","type":"publication"},{"authors":["Xun Li","Mohit Tiwari","Jason K. Oberg","Vineeth Kashyap","Fred Chong","Tim Sherwood","Ben Hardekopf"],"categories":[],"content":"","date":1306886400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1306886400,"objectID":"21910ae769dedfe631bc8e7c5b8af9c1","permalink":"https://vineethk.github.io/publication/caisson/","publishdate":"2011-06-01T00:00:00Z","relpermalink":"/publication/caisson/","section":"publication","summary":"","tags":[],"title":"Caisson: a Hardware Description Language for Secure Information Flow","type":"publication"},{"authors":["Vineeth Kashyap","Ben Wiedermann","Ben Hardekopf"],"categories":[],"content":"","date":1304208000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1304208000,"objectID":"2d2bf12c7f45d5093d7a628d41d2fe47","permalink":"https://vineethk.github.io/publication/timing-and-termination/","publishdate":"2011-05-01T00:00:00Z","relpermalink":"/publication/timing-and-termination/","section":"publication","summary":"","tags":[],"title":"Timing- and Termination-Sensitive Secure Information Flow: Exploring a New Approach","type":"publication"}]