INSERT INTO sites(host) VALUES('damienkatz.net') 1045: Access denied for user 'www-data'@'localhost' (using password: NO) damienkatz.net Estimated Worth $241,958 - MYIP.NET Website Information
Welcome to MyIP.net!
 Set MYIP as homepage      

  
           

Web Page Information

Title:
Meta Description:
Meta Keywords:
sponsored links:
Links:
Images:
Age:
sponsored links:

Traffic and Estimation

Traffic:
Estimation:

Website Ranks

Alexa Rank:
Google Page Rank:
Sogou Rank:
Baidu Cache:

Search Engine Indexed

Search EngineIndexedLinks
 Google:
 Bing:
 Yahoo!:
 Baidu:
 Sogou:
 Youdao:
 Soso:

Server Data

Web Server:
IP address:    
Location:

Registry information

Registrant:
Email:
ICANN Registrar:
Created:
Updated:
Expires:
Status:
Name Server:
Whois Server:

Alexa Rank and trends

Traffic: Today One Week Avg. Three Mon. Avg.
Rank:
PV:
Unique IP:

More ranks in the world

Users from these countries/regions

Where people go on this site

Alexa Charts

Alexa Reach and Rank

Whois data

Who is damienkatz.net at net.whois-servers.net

Domain Name: DAMIENKATZ.NET

Registry Domain ID: 128625310_DOMAIN_NET-VRSN

Registrar WHOIS Server: whois.pairnic.com

Registrar URL:
http://www.pairnic.com

Updated Date: 2017-05-05T20:32:46Z

Creation Date: 2004-08-29T07:22:29Z

Registry Expiry Date: 2022-08-29T07:22:29Z

Registrar: Pair Networks Inc.d/b/a pairNIC

Registrar IANA ID: 99

Registrar Abuse Contact Email:

Registrar Abuse Contact Phone:

Domain Status: ok
https://icann.org/epp#ok

Name Server:
ns5.ns0.com

Name Server:
ns99.pair.com

DNSSEC: unsigned

URL of the ICANN Whois Inaccuracy Complaint Form:
https://www.icann.org/wicf/

>>> Last update of whois database: 2017-09-25T00:37:30Z <<<



For more information on Whois status codes, please visit
https://icann.org/epp



NOTICE:
The expiration date displayed in this record is the date the

registrar's sponsorship of the domain name registration in the registry is

currently set to expire. This date does not necessarily reflect the expiration

date of the domain name registrant's agreement with the sponsoring

registrar. Users may consult the sponsoring registrar's Whois database to

view the registrar's reported date of expiration for this registration.



TERMS OF USE:
You are not authorized to access or query our Whois

database through the use of electronic processes that are high-volume and

automated except as reasonably necessary to register domain names or

modify existing registrations; the Data in VeriSign Global Registry

Services' ("VeriSign") Whois database is provided by VeriSign for

information purposes only, and to assist persons in obtaining information

about or related to a domain name registration record. VeriSign does not

guarantee its accuracy. By submitting a Whois query, you agree to abide

by the following terms of use: You agree that you may use this Data only

for lawful purposes and that under no circumstances will you use this Data

to:
(1) allow, enable, or otherwise support the transmission of mass

unsolicited, commercial advertising or solicitations via e-mail, telephone,

or facsimile; or (2) enable high volume, automated, electronic processes

that apply to VeriSign (or its computer systems). The compilation,

repackaging, dissemination or other use of this Data is expressly

prohibited without the prior written consent of VeriSign. You agree not to

use electronic processes that are automated and high-volume to access or

query the Whois database except as reasonably necessary to register

domain names or modify existing registrations. VeriSign reserves the right

to restrict your access to the Whois database in its sole discretion to ensure

operational stability. VeriSign may restrict or terminate your access to the

Whois database for failure to abide by these terms of use. VeriSign

reserves the right to modify these terms at any time.



The Registry database contains ONLY .COM, .NET, .EDU domains and

Registrars.

Front Page Thumbnail

sponsored links:

Front Page Loading Time

Keyword Hits (Biger,better)

Other TLDs of damienkatz

TLDs Created Expires Registered
.com
.net
.org
.cn
.com.cn
.asia
.mobi

Similar Websites

More...

Search Engine Spider Emulation

Title:Damien Katz – Relax. Nothing is Under Control.
Description:condary-toggle:before { color: #000000; } .site-title a:hover, .site-title a:focus { color: #000000; * Fallback for IE7 and IE8 * color: rgba( 0, 0, 0, 0.7); } .secondary-toggle { border-color: #000000; * Fallback for IE7 and IE8 * border-color: rgba( 0, 0, 0, 0.1); } .secondary-toggle:hover, .secondary-toggle:focus { border-color: #000000; * Fallback for IE7 and IE8 * border-color: rgba( 0, 0, 0, 0.3); } .site-title a { outline-color: #000000; * Fallback for IE7 and IE8 * outline-color: rgba( 0, 0, 0, 0.3); } @media screen and (min-width: 59.6875em) { .secondary a, .dropdown-toggle:after, .widget-title, .widget blockquote cite, .widget blockquote small { color: #000000; } .widget button, .widget input[typebutton], .widget input[typereset], .widget input[typesubmit], .widget_calendar tbody a { background-color: #000000; } .textwidget a { border-color: #000000; } .secondary a:hover, .secondary a:focus, .main-navigation .menu-item-description, .widget, .widget blockquote, .widget .wp-caption-text, .widget .gallery-caption { color: rgba( 0, 0, 0, 0.7); } .widget button:hover, .widget button:focus, .widget input[typebutton]:hover, .widget input[typebutton]:focus, .widget input[typereset]:hover, .widget input[typereset]:focus, .widget input[typesubmit]:hover, .widget input[typesubmit]:focus, .widget_calendar tbody a:hover, .widget_calendar tbody a:focus { background-color: rgba( 0, 0, 0, 0.7); } .widget blockquote { border-color: rgba( 0, 0, 0, 0.7); } .main-navigation ul, .main-navigation li, .secondary-toggle, .widget input, .widget textarea, .widget table, .widget th, .widget td, .widget pre, .widget li, .widget_categories .children, .widget_nav_menu .sub-menu, .widget_pages .children, .widget abbr[title] { border-color: rgba( 0, 0, 0, 0.1); } .dropdown-toggle:hover, .dropdown-toggle:focus, .widget hr { background-color: rgba( 0, 0, 0, 0.1); } .widget input:focus, .widget textarea:focus { border-color: rgba( 0, 0, 0, 0.3); } .sidebar a:focus, .dropdown-toggle:focus { outline-color: rgba( 0, 0, 0, 0.3); } }
Keywords:
Body:
Damien Katz #8211; Relax. Nothing is Under Control.
Skip to content
Damien Katz
Relax. Nothing is Under Control.
Menu and widgets
Search for:
Recent Posts
Notes on Building Noise: a JSON Search Engine written in Rust
Finally Got A Rust Editor
Setting Up Rust Environment
Learn Rust by Building
A lot of walking
Recent CommentsLilian on Notes on Building Noise: a JSON Search Engine written in RustJohn on Notes on Building Noise: a JSON Search Engine written in RustJens Alfke on Learn Rust by BuildingJens Alfke on 30 posts in 30 Daysfoo on Focus and Drive, Episode 2Archives
May 2017
June 2016
July 2015
Categories
Uncategorized
Meta
Log in
Entries RSS
Comments RSS
WordPress.org
Notes on Building Noise: a JSON Search Engine written in Rust
In 2008 I was getting paid to work on my creation, Apache CouchDB. IBM had hired me early that year to put it into the Apache Incubator and by then it was a top level project. I was living in Asheville NC with my wife and kids, in the house 23hrs a day working or taking care of kids or goofing off (a lot). Code, change diapers, exercise, play Guitar Hero, code, argue on the internet, etc.
I reported the CTO of Information Management (DB2, IMS, Informix, etc). As such I was invited to talk at Almaden Research Center to give an introduction to the design of CouchDB.
The talk was really well attended and there were at least 2 IBM Fellows there and a bunch of distinguished engineers. That #8217;s what my sponsor guy I was with all day said anyway.
Almaden Research Center is so damn swank. It #8217;s at the top of a nature preserve in the San Jose hills. All the engineers had offices with doors that shut. And nice offices. With windows, hardwood desks and cabinets instead of grey plastic and fiber. I call it Fort Awesome.
Anyway while I was giving my talk some scraggly bearded dude started asking pointed questions and being a real prick about it. Where #8217;s the write ahead log? How can you have atomicity with out it? Questions that basically amounted to #8220;Why doesn #8217;t this work just like our RDBMS? #8221;
At one point I zinged him. I said #8220;because it #8217;s a MODERN DESIGN #8221; and I enunciated like a real prick. The whole place FELL OUT! The guy meekly shut up after that.
I have no idea if the rest of talk went well. But damn that zinger felt good. Worth it.
After the talk I had a meeting about an experimental project looking at Cassandra as a email store. I #8217;m still not sure why they were telling me about that. It was a weird meeting.
Then another meeting showed me two IBM projects for JSON manipulation: Jaql (pronounced jackel) and JSearch.
The Jaql syntax I found confusing. Nothing looked familiar or intuitive. I had the guy who wrote it explaining it to me. And still couldn #8217;t figure out what the code he showed did. But he seemed to like it a lot.
But JSearch however was really cool. It had a query syntax that mimiced the JSON data structure. And allowed you to combine predicates with boolean operators and parentheses for grouping. Everything about it was intuitive and expressive.
This was something that CouchDB could really use, we had no way to do adhoc queries. I almost immediately had plans to get it into the project, but it never happened. Always smaller tasks with more importance got in the way. A while later I left IBM to found Couch.io. I was in way over my head running a startup and I just couldn #8217;t push JSearch forward.
Here #8217;s the bug to add it to Apache CouchDB. This bug, with source code with JSearch source attached and a patent for it are the only places I know of with information about it.
Anyway, that was long time ago. But since that meeting I always wanted to build it in something other than Java. I tried get it into Couchbase Server, but then got sidetracked on this UnQL thing with Richard Hipp, SQLite author. We collaborated on design of a query language that I ended up not liking. At. All. It was SQL for JSON. I felt like it made you have to understand SQL way too well to be able to do simple things with JSON. I gave up on that effort. Besides SQL is for sets, not hierarchical data.
Later I tried again to get another form of it into Couchbase but I left the company before that was possible.
Fast forward to late 2015, divorced father of 3 kids and I was taking time off work to spend more time with them and learn to be a better dad. I fixed up an old Buick to occupy the part of my mind that loves problem solving and tinkering. Once it was running smoothly and reliably I was getting bored again. I wanted to work again but I didn #8217;t want a job. Jobs means you work on on someone else #8217;s vision. If I can avoid one I will. But I love working. A little too much sometimes. Software projects are a lot of work, with less job.
And so I remember that cool little JSearch project from so many years ago that I always wanted to build, but never had the time. Now I had the time and inclination.
So with that I started Noise: Nested Object Inverted Search Engine. A search library that allows you to index any valid JSON whatever it looks like (schema-less), and query it and be able to pick-off and aggregate information about objects nested in arrays nested in objects nested in more arrays.
I had years ago abandoned the JSON example-based syntax of JSearch (at the behest of the SQL guys) and instead used a Javascript dot path syntax. {foo: {bar: == "thing"}} vs doc.foo.bar = "thing" The path syntax looked more SQLish and the whole language looked like sql. For some reason I started with the path syntax this time too. But there are advantages the example-based approach, especially as the queries for fields get more deeply nest and complex. Plus it looks like the JSON you are querying.
I started writing it in early 2016, first in C then I remembered how painful error handling and clean up is. And the C api for RocksDB was a wrapper around a C++ api, but wasn #8217;t completely faithful in respect to errors. So I switched to C++. Then I remember C++ #8217;s header madness issues. But I got the basics of the index and path syntax version of the query language written and working with RocksDB (I can #8217;t say enough good things about RocksDB for this project. It #8217;s well designed and fast).
I wrote a document shredder and indexer, lifted a Porter stemmer in C, wrote a query parser and runtime filters. I got a bare minimum prototype running.
And then I stopped. I had a health issue I needed to focus on. Don #8217;t worry, I #8217;m healthy now. But I wasn #8217;t for almost a year.
Enter Volker Mische. Volker blew me away when during a internship at Couch.io he built a prototype indexing engine for CouchDB in about 2 weeks in Erlang, a language he barely knew. You don #8217;t let talent like that get away, so I hired him ASAP for the startup, and he #8217;d been working on GeoCouch for CouchDB and Couchbase since.
Last year during a visit to the US we got together to catch up. He wanted to build a LSM R-Tree into RocksDB. I showed him what I was building, also using RocksDB. I said it would go great with his, Noise could really use a geospatial query engine. Help me with the project and if things take off you #8217;ll get paid eventually to build this out as a co-founder.
So he joined the project, which for me was like #8220;Yes! No wait. Shit, now I #8217;ve got Volker wrapped up in this mess too. #8221; But it #8217;s been great, he #8217;s been pushing me as much as I #8217;ve been been pushing him.
He wasn #8217;t happy about my choice to write Noise in C++. I had originally talked about writing things in Rust.
But then a funny thing happened, I tried to learn Rust. And it was confusing as hell. I think coming to Rust I expected it to be more C++ish. All I could think is this thing is going to have a damn hard time going mainstream. So I dropped it, I had a lot of frustration with Erlang in the past as too niche and different (though I loved the weirdness) and suffering for lack of tooling and all the profiling and tuning the VM you need to do that seems to make little difference in performance. And I spent weeks tracking down a crashing race condition bug in the VM. Those memories still fresh, I was afraid Rust would have a similar fate obscure fate.
But Volker didn #8217;t program C++. He wanted to write the project in Rust. So he started porting my C++ code over to Rust. Ok, I didn #8217;t like it but I won #8217;t stop an engineer working his way. Volker has strong convictions. And I #8217;m glad he does.
When he came to visit for 3 weeks last November (I had him staying in the garage of my ex-wife!) and he showed me his progress so far. He had ported everything over except the query parser and query filters. So while he was here we set 2 goals for the trip:
1. Finish porting work. 100% Rust.
2. Design a full query language syntax and semantics.
We worked side by side pair programming. Him usually at the keyboard, me watching and explaining the C++ code and us translating line by line the code.
Then we fought with the borrow checker, for like a whole day or more. We couldn #8217;t figure out the right way to annotate the lifetimes until we did some weird thing of passing a struct by value and returning the same struct by value, instead of just passing it in by reference. If that makes no sense to you don #8217;t worry, it still makes no sense to me. But it worked.
We accomplished the goals just barely, but it was a crazy productive 3 weeks and I remembered how great it is to work to brilliant people. It lit a fire in me.
So we had the full text search stuff working for exact string match and term match and the boolean operator. But that #8217;s it.
We also designed a new syntax that looked much more like the JSearch stuff. Volker got to work writing a new peg grammar for the new language and I started investigating details how to get comparison operators to work ( =  =) for numbers and text.
And I discovered I was very wrong about how hard it would be. The more I thought about it the more I realized it was incompatible with how I was doing the full text search. Oops. What now?
Wait, Volker's R-Tree stuff it turns out is a perfect fit for the project. Each piece of data is just a value on an dimension, with the sequence # of the document on another dimension. I thought it would work perfectly with the first_result(startdoc) and next_result() scheme of the query runtime filters.
On our next Skype meeting I explained to Volker where I had gone wrong with the comparison support. I took a lot to explain why but eventually he agreed the original way we planned to do this wouldn #8217;t work. Then I explained the R-Tree work for geospatial support would actually be ideal for regular scalar values. I asked him a few questions about the semantics of how they work and everything lines up.
So he got busy working on the R-Tree backend for RocksDB (in C++, oh the irony!) and I continued pushing the Noise code forward.
Since last November I #8217;ve implemented the new query language parser, returning document values (not just ids), proximity search, phrase search, sorting and aggregates (group, min, max, avg, sum, etc), bind variables (extract array nested values and objects that match criteria), relevancy scoring, term boosting, boolean or (||) and logical not (!) and a command based test suite for testing the query language. And in-process Node.js integration.
I became really productive in Rust. It #8217;s very explicit and verbose, but as it eliminates a huge class of bugs from C++ (buffer overruns, use after free, iterator invalidation) or even Java (race conditions) and the compiler gives useful error messages, it becomes very productive and lets me code quickly and confidently. And it #8217;s performance is on par with C++.
The standard library is well designed, fairly complete and the online documentation is easy to navigate and understand.
For anything not in the standard library the cargo build and package system has an impressive number of modules that seem to be reasonably high quality. Or maybe I #8217;ve just been lucky in my needs and choices.
A lot people complain about the borrow checker in Rust. And I #8217;m one of them. It #8217;s not that I don #8217;t think it #8217;s great. I do. It #8217;s the way you have to annotate lifetimes when the borrow checker can #8217;t figure stuff out. I think I understand the borrow checker and lifetimes. I #8217;ve been able to annotate them when necessary. But I also suspect my understanding of lifetimes is shallow and I #8217;m missing some bigger truth. I #8217;m really not sure. I definitely don #8217;t understood why I need to annotate the lifetimes sometimes. Fortunately it #8217;s a rare occurrence so far.
The first challenge I faced was rewriting the query parser for the JSearch style query syntax. At first I wrote an easy-to-grok grammar using a peg parser. Then I used that grammar as a guide to write a recursive descent parser. As the language got larger, the parser got larger. What started out simple now feels complicated. Eventually the hand-coded parser and the peg grammar diverged and couldn #8217;t easily be reconciled. I feel like the current parser code needs some simplification, but I #8217;m not quite sure how.
The thing is every non-trivial language parser seems arbitrarily complex, even as a grammar for a parser generator (I #8217;ve written them in antlr and yacc/lex), especially once the action code is added. So maybe that #8217;s just how it goes. With recursive descent simple stuff is a little harder, it #8217;s often much easier to do complex things. The Noise parser can definitely use some improvements, especially our error handling and messages need some work, it should always show some context of the input where the parse error is occurring.
When using a new language with new features, you aren #8217;t always sure where and when to use them. One mistake I鈥檝e made is over-using tuples as return types. Sometimes that #8217;s really nice and readable, but sometimes it just makes it so the significance of the return values is obfuscated. With function input parameters you give each parameter a name, which helps greatly with understanding the significance of each parameter. But tuples only specify the types, so the significance of each tuple member is often lost unless you write explicit documentation, which is sub-optimal in many cases (doesn #8217;t show up in editor typeahead/hints). You can create a new a struct type just for returning things, but that creates another place to look while trying to understand the code. Like I said, still trying to figure out when it鈥檚 most appropriate.
One of the pieces of code I #8217;m the least happy with is my implementation of relevancy scoring. I implemented tf*idf the same way Lucene does it, but the code for it ended up being scattered around too many places. I have ideas how to fix that, but I #8217;m not even sure I got the scoring completely right. It seems right and ranks things as expected, but I also suspect it #8217;s a little off somehow. Scores seem lower then they should. But again I #8217;m not sure. What I need is to compare the scores with what Lucene gets for the same input documents and fields and with similar boolean queries. But I haven #8217;t gotten around to that yet.
But today I just learned that Lucene switched over to BM25 as the default scoring system and it #8217;s regarded as generally superior. Soooooo I guess we #8217;ll implement that one as well.
Another problem with the current code structure is with the single LSM keyspace. I #8217;m using key prefix characters to simulate multiple tables in the RocksDB LSM, which is fairly standard when using an LSM. But instead of creating an central place to map symbols to prefix characters, I just use the prefix character literals when constructing keys. This worked fine before I implemented scoring, there were only small handful of key types, but after I added scoring the key types doubled, and now the literals are confusing. I definitely need to refactor that code for clarity.
I was about to implement fuzzy search and prefix search and read about the amazing story of how Lucene does fuzzy search. I started reading a bunch of Lucene code and figured out how it works in Lucene (well except for the really mathy parts. Read the story!). I got the python script that emits javacode that uses another python file from a spell checker library. I was planning to adapt it to emit Rust code. But ultimately decided we had enough full text features for now. We need to get what we have into developers hands.
The current project phase of Noise is mostly about developer ergonomics and solid design. We need to see if users find the syntax and semantics useful and intuitive and where they get confuses and what features they need before they can deploy. The best way is to actually deliver a working project and see what users think.
We decided that targeting Node.js integration would be good to give us exposure to mainstream developers. So I started working on Node.js bindings for Noise, to run in the same process with Node code.
Not familiar with Node.js or NPM, my learning curve was steep. I had to hook up Rust code to V8 code, which means I had to figure out how to build Rust code on demand within NPM and link to Node.
Thankfully there is a really great Rust project called which takes a lot of the work out of integrating Node and Rust.
But still there were a lot of challenges. The Neon project didn #8217;t support async calls, it was strictly for calling into Rust and immediately returning an answer (though that might have changed since, don #8217;t know). I looked into implementing it myself, but it appeared to need a C++ compiler and then link that to both Rust and Node native code and my tolerance for build issues was already exceeded. So instead I figured out a way to get long running queries to notify the main event loop there was a result ready.
I use a simple named pipe between the Node.js code and the background worker threads (this was the same approach I took when I implemented thread pools in MySQL using libevent). When Node needs to talk to Noise, it calls into Rust Native code to put data into a mutex protected #8220;mail slot #8221;, then pushes a single byte through the pipe, which wakes up the thread and gets the message out of the mail slot.
When the thread performs the action, it puts the result back into the same mail slot and sends a single byte back through the pipe, which then notifies the Node event handler for the pipe so it can then call into native code and retrieve the result out of the mail slot.
I also had to do a bunch of work allowing multiple threads to access the same index instance, to allow for concurrency of the querying. The more instances of the index you open, the more concurrent threads that can process queries.
But now I #8217;m also second guessing that design decision. Maybe only one instance of the index should be open at a time, with an argument to specify the number of worker threads that should be spawned. That seems easier for the user.
Anyway, the Node integration now is functional and seems solid. I #8217;ve also gained a newfound respect for Node. However I #8217;ve been told my Javascript coding style could use a some work. That I shouldn #8217;t use let and var in the same code base. Sheesh.
Anyway, while I was doing the Node work Volker dropped a bomb on me! The R-Tree wouldn #8217;t be a good fit after all for the comparison operators, because of the way most number sets have a normal distribution. Or something like that. So instead he coded comparison matches up in a fairly simple way brute force way that for now is acceptably fast. We are looking into more advanced datastructures to make it faster.
I then wrote the first draft of the query language and Node documentation (it sucked), Volker helped clean it up. Hoping for more help with that soon. MC Brown where are you?
Most recently we #8217;ve built a Try Noise tutorial site that lets you try noise queries directly in your browser against a TV Show dataset. You can find it here.
The homepage for the project is here.
Posted on May 23, 2017May 26, 20172 Comments on Notes on Building Noise: a JSON Search Engine written in Rust
Finally Got A Rust Editor
I was able to install and configure Visual Studio Code to use the RustyCode extension: https://github.com/saviorisdead/RustyCode
Now I have nice autocomplete and auto-formatting. Tomorrow I start converting code.
Posted on June 14, 2016June 14, 2016
Setting Up Rust Environment
The first thing I am going to do is set up my tools and build environment. For the C++ codebase I used XCode, which is pretty good expecially with autocomplete.
I #8217;m going to try Micosoft Visual Studio Code for OS X with a Rust plugin. But so far I can #8217;t get autocomplete to work for the plugin. 馃檨
Posted on June 13, 2016
Learn Rust by Building
I #8217;ve been considering taking my current young code for Noise and converting it entirely to Rust. Why?
Rust has:
1. excellent performance
2. memory safety
3. excellent concurrency
4. momentum
And I want to blog the process and share what I learn. I like this idea.
Posted on June 12, 20161 Comment on Learn Rust by Building
A lot of walking
I spent most of today walking around Alameda. I hope I would find some inspiration. I found some. Being human can be very hard.
Posted on June 11, 2016
Cortisol
Oops, I forgot 2 blog entries in a row. Not good. Partially it #8217;s because I #8217;ve been delaying working on them until after the kids are in bed. Usually I had plentry of gas in the tank to work long hours, but a curious thing has happened, a supplement I #8217;ve been taking to help with low blood pressure has caused me to become very drowsy at around bedtime.
This is very much a good thing, as I usually couldn #8217;t fall asleep until very later. I #8217;m a classic night owl. I very much welcome a drowsy feeling, a urge to actually close my eyes and fall asleep.
Anyway I have to adjust to this new way of being where I actually sleep reasonable hours.
I owe 2 more blog posts. But not today.
Posted on June 8, 2016
How do you build a search engine from scratch?
Do you just start building everything all at once, from the ground up? Or build something else first, something simpler and smaller, that eventually becomes the whole?
Posted on June 5, 2016June 8, 2016
30 posts in 30 Days
Remember blogging? Where you blogged about whatever, didn #8217;t care about page views, and reasonable discussions comments were possible. No? Me neither.
Anyway, I need to jump start my blog juices (gross haha) so I #8217;m doing an exercise where I spend 30 minutes writing a blog post, everyday for a month. Whatever it is, I post.
Why? Because I think this might help me be a better writer. Anyway, this is the first one. Yes, I spent 30 whole gaddamn minutes on this. I suck.
29 days more to go.
Posted on June 3, 20161 Comment on 30 posts in 30 Days
Focus and Drive, Episode 2
Here is Jeff and Isaac part 2 of 3. Some really good stuff in here.
Signing up guest for future episodes now. Email me me@damienkatz.com if you are a founder (at any stage) of a startup.
Posted on July 31, 2015July 31, 20151 Comment on Focus and Drive, Episode 2
Focus and Drive, Episode 1
I completed the first episode of Focus and Drive. A show where we drive around and talk about startups.
This is part 1 of 3 with Jeff Atwood of Discourse.org (@codinghorror) and Isaac Schlueter of NPM Inc (@izs)
Focus and Drive, Episode 1
Some production notes:
I only meant to film for around 30 minutes, but I lost track of time and wound up at 90 minutes! This will be at least at least 2 episodes, maybe 3. The next episode I #8217;ll release within a week.
Things will go wrong. Cameras don #8217;t work and mics get dropped. Multiple cameras makes things more complicated, but also makes things more redundant. Two cameras shifted while driving, and had to be corrected in editing. The external one captured nothing. But still as a whole it worked.
Web work is complicated. Bits really do seem to rot and getting my old blog in once again usable shape was more work than I anticipated. I want to make a site for Focus and Drive but for now I #8217;m holding off. Anyone who wants to help email me.
Driving around really does work to make the conversation flow, to be more open and candid. That #8217;s the big thing I was trying to accomplish, to go beyond press releases and conference interviews and get more personal.
Driving around while talking startups takes a lot of concentration. But also helps keep the conversation light.
Final Cut Pro is amazing. Very intuitive and powerful. The auto-syncing of multiple camera and audio works great. Except this time it didn #8217;t, and it took me days to figure out how to get it to work. Once I got my head around HOW Final Cut wants to do things it became intuitive. But it #8217;s still a lot of stuff to take in and process.
Final Cut Pro has at least one multiple angle camera bug that causes audible pops when switching angles and using background noise reduction. I had to output a final video file and then audio process than one again, then the audio worked.
A huge thanks to Isaac Schlueter and Jeff Atwood, I couldn #8217;t have had better guests. I #8217;ll be filming another soon, if you are a startup founder and interested in participating.
Format VideoPosted on July 29, 2015July 29, 20151 Comment on Focus and Drive, Episode 1
Posts navigation
Page 1
Page 2
Next page
Proudly powered by WordPress

Updated Time

Updating   
Friend links: ProxyFire    More...
Site Map 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 250 300 350 400 450 500 550 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750
TOS | Contact us
© 2009 MyIP.cn Dev by MYIP Elapsed:1.418ms