Last week Crea Tyler (youtuber) told me to delete my video or I'll get a strike. I decided to call his bluff and made another video. by Chefpantry in videos

[–]g4n0n 12 points13 points  (0 children)

If I were Crea Tyler, I'd pay some other YouTuber like this to make videos exactly like this. Any publicity is good publicity.

Anyone using Google Home? by [deleted] in australia

[–]g4n0n 5 points6 points  (0 children)

Received mine in the USA a week ago.

Things that will definitely work in Australia:

"Hey Google..."

  • "what's the weather today?"
  • "wake me up at 6am tomorrow?"
  • "play Action Bronson" (plays on spotify)
  • "play the Pokemon Theme Song" (plays on spotify)
  • "play the latest episode of NPR Planet Money" (plays the podcast)
  • "play season 1 episode 1 of Serial" (plays the podcast)
  • "order me an uber"
  • "play MKBHD Google Pixel Unboxing on my TV" (starts playing the video on Chromecast within 2-3 seconds, super quick)

Things that won't work:

  • "play the news" will play NPR / Fox news from the USA and BBC news from World Service, but not Australian content yet. Normally the NPR news has some Australian content sometimes.

I just checked the power adapter and it support 100-240v so it will work when plugged into an Australian power outlet.

Going into quantitive analysis with a Mathematics with Computer Science degree? by [deleted] in cscareerquestions

[–]g4n0n 0 points1 point  (0 children)

No worries.

Exotic options is just a term in the field that describes option contracts that have more complicated payoffs. For example, a "vanilla" non-exotic European call option would have the payoff:

max(S-K, 0)

S - Current stock price, K - Strike price.

An "exotic" option might be a lot more complicated. For example:

This option has a strike price of zero and pays out 50% of S if the total shareholder return of S over the next year is at the 75% percentile of all other stocks in its industry. It pays out 100% of S if it's TSR lies at the 100% percentile, and pro-rata between 75% and 100%.

That's what's called a Relative Total Shareholder Return (RTSR) option, and is often used as part of executive compensation contracts.

There's a whole raft of "exotics": Barriers (Down-and-out, up-and-in, up-and-out, etc), Look-backs, Asian-options (Arithmetic and Geometric). That's where a lot of the interesting modelling work in options pricing is, and where you really have to leverage your Monte-Carlo skills!

Going into quantitive analysis with a Mathematics with Computer Science degree? by [deleted] in cscareerquestions

[–]g4n0n 1 point2 points  (0 children)

Combination Maths + CompSci gives you a good foundation.

Some good books to read to get a "feel" of what's involved with quant finance:

  • Paul Wilmott - Paul Wilmott introduces quantitative finance: Kind of like "Quantative Finance for Dummies" but it's a pretty decent overview and easy to read;
  • Salih Neftci - An Introduction to the Mathematics of Financial Derivatives: Really great 101 on most of the requisite mathematics. Not a "hardcore" maths proof book, so it's very approachable (i.e. you don't have to manually work through all the proofs to get a good understanding);
  • Paul Glasserman - Monte Carlo Methods in Financial Engineering: Specific focus on Monte-Carlo methods for solving various financial problems.

There's a whole bunch more, but if you start reading any of these and don't find them intensely interesting, then it may not be the field for you.

A pretty decent summer project in the area would be to implement the Longstaff-Schwartz method of valuing early-exercise derivatives. Play around with the different methods of Monte-Carlo variance reduction, implement a few of the more "exotic" options with path-dependent American-style payoffs (only reasonable way to solve them is often Monte-Carlo + Longstaff-Schwartz style early exercise boundary regression).

The "meat" of the project however would be to experiment with different variants of the more recent machine learning techniques (autoencoder, deep neural nets, etc) in place of the OLS regression used in typical Longstaff-Schwartz application. What you'd effectively do is train a neural net to fit the non-linear early exercise boundary.

Could be underestimating how long this would take, and it could potentially be a whole masters thesis, haha. But I think building a Monte-Carlo options valuation system for some of the more exotic options would be a pretty cool project and you'd learn a hell of a lot.

I just made my company lots of money. How can I negotiate a raise with this? by [deleted] in cscareerquestions

[–]g4n0n 75 points76 points  (0 children)

Been there and know exactly how you feel.

Best way to get a significant pay rise is to add:

Architected and developed blah in blah months which increased revenue by $xx+ mm per annum.

to your resume and find a new job that pays 30-40% more than your current one.

Remember that your employer has taken all the business risk and you've received a fixed salary for doing your job. Unless you pre-negotiated some stake of the upside, there's really no obligation for them to pony up. If, however, you can convince them that you've got an idea for another project or extension to the existing project that will add $x mm p.a. more revenue, then you may be able to negotiate a taste of that.

Non-US based Second Bachelor degree Suggestions? by sexychinese in cscareerquestions

[–]g4n0n 1 point2 points  (0 children)

Did you get your engineering degree in the UK, Australia, or China? and, what's your motivation for getting a formal CS qualification?

If you have Australian citizenship (not PR, but citizenship) then you're quite favoured within the US because of the E3 visa situation (super super easy and quick, like 2-3 weeks, to get a US visa for Aus citizens).

Making a new programming language by holger4ever in cscareerquestions

[–]g4n0n 2 points3 points  (0 children)

Easiest way to get up and running would be to build a transpiler: A compiler that converts your new language to an existing language. This means, at the start at least, you can avoid building the whole compiler architecture, and focus on experimenting and perfecting the syntax and semantics.

Since you're developing a language for Windows apps you'd get the most mileage out of C#, letting you leverage the .Net ecosystem. You could start with a transpiler from your language to C# and once you progress a bit more you could write a backend that generate CLR bytecode directly.

As far as I can tell there's pretty good support for C# as a target for the ANTLR parser.

Some good comments here re: building a compiler with C#: http://stackoverflow.com/questions/7377344/how-to-write-a-parser-in-c

Note: I'm not up to date with the cutting edge of Windows app development. From what I've heard Microsoft has been pushing building apps with Javascript, so maybe what I've said above about C# isn't 100% applicable any more.

Python for technical interview questions by seraphdd in cscareerquestions

[–]g4n0n 0 points1 point  (0 children)

Under the hood (in CPython at least), a Python list is a dynamically resized array of PyObject pointers. It still has O(N) traversal, O(1) indexing, and amortized O(1) insert / delete at the array end.

If you're storing value types, then a C array is much more memory efficient: i.e. storing N bytes in an unsigned char[] will only take N bytes, while in a Python list on a 64bit machine it will take at least 8*N bytes (64bit pointers). However, if you're storing an array of pointers, then the memory difference isn't as much.

Been looking for almost a year now, and I never make it through in-person interviews. I found out why and now it's worse. by demotivated2themax in cscareerquestions

[–]g4n0n 3 points4 points  (0 children)

That's waaaay out of my league, and it felt like they were trying to make me feel stupid. I was interviewing for an production engineer job, not a SWE.

The key aim of an interview is to answer the question "Do I like this person, do they meet the bar for my organisation, and would I want to work with them on a team?"

If I asked somebody their thoughts on how to design a cache API and their response was "I wouldn't", that's not the kind of person I'd like to work with.

Perhaps what they were asking for was the whole system design of a cache? i.e. the infrastructure solution: load balancers, backing onto a bunch of servers running memcache, with a crapload of ram, ideas on how to handle cache invalidation, how to recover from errors, how to monitor the status of the cache, what types of data structures to store the data, etc?

An appropriate series of responses may be:

  • What are you using it for? A look-aside cache?
  • Are there's unique requirements that mean an existing cache such as memcache or redis are inappropriate?
  • How large will it have to scale?
  • Will all cache accesses originate from the same geographic region, or across regions?
  • Is it alright if there's sometimes stale keys, or is it critical changes within the "source of truth" are always invalidated in the cache?
  • "For the use case in question, I think that using an ascii protocol would create too much overhead, instead I'd create a RPC interface using thrift."
  • etc...

If they wanted me to implement a linked list or fizzbuzz or whatever, that's fine, but come on, a cache?

Minimally a cache in Python is just a dict. Also, you can build a LRU cache by combining a dict with a linked list.

So, how do you come across as smart but not arrogant and how do you show your skills without showing off?

This likely has to come from within. I really do feel empathetic for how you are feeling, as I used to hold a similar attitude a long long time ago. I feel what you need is to be "humbled", so to speak.

I remember thinking I was top shit until I went to a programming conference, and at the conference dinner people around the table were talking about programming topics and confidently using technical terms that I didn't know. That was the point at which I was like "holy shit, I've got a lot to learn, and I'll absolutely never be able to know everything.": really an important turning point for me.

Advice

  1. Seek out environments where people will own you in technical knowledge ability. If your response to that is "I'm awesome, everyone else is stupid, I'm super smart and there's no environment where people will be better than me." then you've already lost.
  2. Try some teaching: Tutor at a university, teach at a community college, volunteer to teach kids about software, whatever. You gain A LOT more empathy for people who aren't at the same level as you, and it makes you realise that people can learn a lot of different things. If you're facing off against an interviewer and the question they ask is "stupid" then step back and think about it, they may have had a completely different life path to you and have a different view of things. You might be able to demolish them in certain areas, but almost certainly they could do the same to you in their area of expertise. If you're asked a stupid question, then think about "how can I nicely educate the questioner to come across to my point of view" rather than "that question was stupid, you're stupid, I'm smart, fucking this interview process." ╯°□°)╯︵ ┻━┻

A solid, sufficiently challenging and extensive project in C++ to improve your portfolio? by sphotavada in cscareerquestions

[–]g4n0n 6 points7 points  (0 children)

1. Choose a System

My recommendation is to choose an older system that you feel some connection to or interest in. If you're a Pokemon fan, then aim to get the original Pokemon ROM running on your own Gameboy emulator. Out of all the systems there's a lot of resources for Gameboy and NES emulation.

2. Write Some Basic Assembly Code

Next thing is to read up about developing for that platform: Learn assembly for the architecture (e.g. Z80 for GBA, 6502 for NES). Write a basic game that runs in an existing emulator: Pong, or basic Tetris, etc. Write small test apps that exercise all the features of the platform (sprites, palettes, etc), although ignore sound at the start.

3. Write an Assembler

A good initial project would be to write an assembler for the target instruction set. For example, if you're building a NES emulator (6502 CPU). Read any of the resources available online (http://e-tradition.net/bytes/6502/6502_instruction_set.html) that details all the 6502 opcodes and their binary representations. Write a basic 6502 parser that reads in assembly code and builds an in-memory representation. Then write a compiler than converts that in-memory representation into binary opcodes.

The neat thing about building a compiler first is that you already have a "gold standard" to test against. Take the code you wrote in step 2 and compile it with your assembler as well as with an existing 6502 assembler (with optimizations turned off). Compare your generate ROM with the ROM generated by the existing compiler: if they don't match, fix your code and iterate.

4. Write an Interpreter

Taking your knowledge from steps 2 and 3, write a basic instruction code interpreter. Create a struct / class / whatever equivalent in your language that encapsulated the state of the 6502 CPU: Current program counter, value in accumulator register, index register, etc. Create a parser that reads in binary instructions from a ROM and works out the opcode and arguments. Running sequentially through the parsed instructions, execute each instruction against the state (i.e. If the CLC - clear carry flag, then mutate the state to set the carry flag to zero). This is actually a pretty fun stage of the process as you have to methodologically work through each instruction and implement it yourself!

5. Write Additional Subsystems

If you get this far, then you'll likely already have the momentum to complete!

The CPU is only one component of a system. The NES has other hardware to accelerate graphic drawing, sound production, etc. Read about these and follow a similar process above to build out each system. As you build each new item, you can link it into the interpreter you've written. Keep iterating until the ROMs you wrote in 2 start running and showing graphics, etc.

Notes

Building the whole emulator is a pretty daunting task. But there are distinct learning steps along the way. If I were interviewing somebody and they could talk in detail about writing a 6502 assembler, compiler, etc as a side project out of their own interest that would be a huge positive. Even if you ultimately don't get it complete, and you admit that, it's still a huge positive.

For C++ what you could do, is focus on building an emulator using the latest C++14 features. Also, considering basing your code on a Library from a company you'd like to work for. For example, if you're keen on Facebook, then use features from their folly or fatal libraries.

A solid, sufficiently challenging and extensive project in C++ to improve your portfolio? by sphotavada in cscareerquestions

[–]g4n0n 1 point2 points  (0 children)

Not sure about books. Would probably be a worthwhile project for somebody to write a book about it!

Wrote a response to sphotavada under the parent thread with some links.

A solid, sufficiently challenging and extensive project in C++ to improve your portfolio? by sphotavada in cscareerquestions

[–]g4n0n 5 points6 points  (0 children)

My advice is to not start too big, haha. I tackled the Dreamcast, managed to get a pretty fast SH4 CPU emulator up and running, but got destroyed trying to implement the graphics side of things (it had a PowerVR GPU which wasn't easy to reverse engineer). Much much better to start with something that's reasonably approachable over a few months: Gameboy, NES, etc.

Here's some pretty good resources that give a high level overview of how emulators, and specifically NES emulators, work, with some links to various projects / websites:

Dolphin, the Gamecube emulator, is also a pretty good reference example. Here's a Github link to the Dolphin PowerPC emulator:

https://github.com/dolphin-emu/dolphin/tree/master/Source/Core/Core/PowerPC

Dolphin implements an interpreter (read an instruction, execute it and update state, read the next instruction) as well as Just in Time (JIT) compilers for various architectures (read a chunk of instructions, convert them to native machine code, put the code in a cache, then execute the code natively).

A solid, sufficiently challenging and extensive project in C++ to improve your portfolio? by sphotavada in cscareerquestions

[–]g4n0n 5 points6 points  (0 children)

Second this.

Writing an emulator is a super useful learning experience as you have to actually apply a bunch of things that are directly relevant to CS:

  • You gain a really good mental model for bit manipulation when you write a machine code parser;
  • You learn a heap about how the CPU actually works: segments, security bits, various memory addressing mechanisms;
  • If you implement dynamic recompilation then you also learn a lot about x86 assembly. You also get a chance to learn about register allocation (which can be optimized using Graph Coloring, etc);
  • You also get to actually experience a non-trivial product being realised and appreciate how much rework / refactoring / adjustments to design decision you have to make in a real world project;

Also, it will give you a heap of experience to directly draw upon in an interview: i.e. what's the hardest bug you've solved, what's the best optimization you've done, etc.

Resume Advice Thread - May 24, 2016 by AutoModerator in cscareerquestions

[–]g4n0n 0 points1 point  (0 children)

Pretty good.

The astronomy work is really interesting (Quasars caught my eye). Few things:

  • What was the purpose of creating the data visualization. Were you the first person to build visualization models of globular clusters to understand their evolution? Were you working with megabytes, gigabytes, terrabytes or petabytes of data? Did you use any newish or particularly interesting algorithms? Were the data visualization models built in a web frontend (WebGL), output as videos, etc.
  • The subject matter sounds interesting, but you should express a bit more about what you actually did and why it was important. e.g. "Built the first web-based data visualization frontend for globular cluster simulations, achieving 60fps rending of a 3 billion element point cloud. The ability to interact with the data in realtime lead to the discovery of blah or better understanding of blah or a paper in blah."
  • "Assisted in generating code" do you mean generating code in the sense of meta-programming or "I wrote some code"? If you were working with a system that itself generated code, then that's interesting and you should be a bit more specific.
  • "Assisted in the analysis of the obtained and reduced spectra." What did you actually do? What did the analysis find? Were the findings important or interesting or new (i.e. did they lead to a publication, or is there a publication in progress)
  • "What is the Crookes Radiometer?", how did you assist in the research exactly. What were the findings? Is it actually a better form of alternative energy. Did you help rule out its use as an alternative source of solar energy?
  • Not sure you should list all the subjects you did in coursework. Cut this out and add more color to your employment and projects.
  • Don't need the "projects" header under the technical experience. Maybe just replace Technical Experience with "Side Projects"
  • No Github or LinkedIn links? Put them under your email address. This would be a red flag for me.
  • Where2: What does Where2 actually do? Did you have people using it? Is it on the play store? How many installs / ratings do you have?
  • GeoBus: Did you build the app from the ground up? If so, stress this as it's a real positive (companies will respond really strongly to you showing evidence of building non-trivial things from scratch). What algorithm did you implement? Are people using it? Is it on the App Store?
  • Brain Map: Sound really impressive. I'd perhaps put this as the first project. A little re-wording wouldn't hurt: "Built an interactive visualization of the human brain, helping users understand the function of each distinct brain region. I populated the brain information database using Wikipedia data gathered with a custom-built (Scrapy?) web scraper."
  • Be wary of saying "proficient" with programming languages. For example, can you answer these questions about Python: How's the data structure underlying the Python list implemented? How's the data structure underlying the Python dictionary implemented? What's the key differences between Python 2 and 3? When would you use a metaclass in Python? What's the difference between a list and generator comprehension? If somebody wrote that they were proficient in Python I'd expect these kinds of questions to be fair game in an interview. If that's not the case then perhaps use a less strong word: "Experienced" maybe.

What should my GitHub profile look like? by [deleted] in cscareerquestions

[–]g4n0n 4 points5 points  (0 children)

I would recommend you focus on your existing projects and polish their presentation. Add README files with some product screenshots. Add some unit tests, etc. Also if you encountered any challenges when building each app: i.e. getting Android to do full screen filtering for Night Mode, then think about writing a blog post about it (create a blog on github pages).

Few quick things:

  • Get a good profile photo taken of yourself and put it as your Github profile;
  • For each of your projects, take a few screenshots and put them in the README.md;
  • Star a bunch of other repositories that interest you (Maybe keep an eye on https://github.com/trending/java every few days and star things that attract you);
  • Follow other people on Github who interest you;
  • Try and make a few pull requests to open source projects so that you get a second column;
  • Create a portfolio page or blog and add it as a link under your email address (perhaps just create a simple static site at sarbajitsaha.github.io);
  • Ask some friends to star some of your repositories, or post your most interesting repo as a Ask HN on Hacker News;

These kinds of things are minor, but they effect your initial impression of a profile. i.e. when I look at your profile and then introspect my thoughts from a recruitment perspective, these are the red flags:

  • No profile photo;
  • No followers, not following, and only starred two things;
  • Really nice set of side projects, but none are starred, many don't have README files, and without screenshots I can't actually assess what has been built (I'm not going to download the APKs);
  • You haven't forked any repos, which means you haven't sent any pull requests. Not a huge issue, but would be a "tick" if you had a few forks and some evidence of submitting pull-requests to open source projects;

Just saw this on my Facebook News Feed: "2016 Federal Election: Make sure you're enrolled to vote" Good job! by g4n0n in australia

[–]g4n0n[S] 12 points13 points  (0 children)

Not an advertisement, definitely originated from Facebook. It stood out to me because it was atypically formatted for a newsfeed post.

P=NP explained, that is interesting as fuck by [deleted] in videos

[–]g4n0n 0 points1 point  (0 children)

Excellent explaination.

Probably the best Venn diagram of the complexity classes I've seen somebody draw!

Well, that escalated quickly. by Beeso3 in funny

[–]g4n0n 50 points51 points  (0 children)

When setting pricing for products you'll often do this to exploit the anchoring[1] cognitive bias.

Say you're presented with two choices:

Single 3.85
Double 6.50

When looking at those prices, many people will chose the single option. However when presented with the three choices:

Single 3.85
Double 6.50
Tub 80.00

People will tend to choose the double option.

Having the large third value also "drags up" your likelihood of choosing a double, when compared to say:

Single 3.85
Double 6.50
Triple 8.30

[1] https://en.wikipedia.org/wiki/Anchoring

How can I explain to my supervisor that my thesis chapter still isn't done, again, a month later. I've been in an office 12 hours a day. But somehow have hardly touched it. UK based, where ahdh has no real respect. by Anthrodork in ADHD

[–]g4n0n 6 points7 points  (0 children)

I've been in a somewhat comparable position.

I finished my PhD pre-diagnosis: I was actually diagnosed at 9 years old, but parents wouldn't medicate. I was finally medicated at 31 after finding out a close friend had ADHD and discussing my symptoms with her.

I had various crises of confidence during my PhD where I felt absolutely helpless and angry at myself for not being able to work on my thesis / papers. I now know that what I was feeling was one of the primary negative effects of ADHD. I literally read every book on procrastination, getting things done, planning, etc, but literally couldn't "will" myself into effectively putting the strategies into action.

It took me 4 years and 26 days from starting to completing my thesis (and another ~6 months afterwards of it being out for review and incorporating comments, etc). So I also blew through all the deadlines (expected completion is 3 years, max 3.5 years).

The strategy that ended up working for me (note I didn't have medication, though I was using Modafinil on-and-off) was this:

  1. Set up a weekly meeting with supervisor, even if I'd done nothing at all (the key point of this is to be completely honest about progress "I didn't do anything this week"); and
  2. Setting the expectation of "I'll only do 1 hour of thesis today" and then not feel bad once I'd hit that mark;
  3. Daily meditation (super super hard to keep up and make a habit, might easier said than done);
  4. Following "write bullshit then refine" writing process I outline below.

I suggest not telling your supervisor about ADHD. In a perfect world they'd completely understand that it's a legitimate disorder and should be taking seriously, however, in reality that probably won't be the case, and they'll interpret it as an excuse. It's better to encourage them to adapt their behaviour to set you ultra-short term goals with strict deadlines.

The "write bullshit and refine" process

Writing final, clean, concise, prose with figures, tables, correct references, is a daunting task and when you look at the end-goal of a complete thesis it's fucking impossible to be motivated. It just seems insanity that you'll ever pump out the required length of output.

The number one thing that helped me hurdle the "brake" that ADHD represents was to just "let go" and write crap without worrying about how well it sounded, how well referenced it was, whether it had the correct graphs, etc.

  1. Bullshit Writing Pass: Just dump text on the page, try not to backspace, just write bullshit, if you write something that should be referenced, just put in brackets (FIND REFERENCE HERE) and plough on; If you need to put in a table or graph (even if you haven't created it) put a (Put a graph here of x plotted against y) and move on. Don't worry about captions, don't look thing in your reference library to make sure your reasoning is correct, just rely on what's in your brain. The goal is to do no context switching: only write.
  2. Reference Pass: Go through the text and note where you indicated a reference was needed. If you have the specific reference in mind, look it up and cite it, otherwise spend some time on Google Scholar to find a reference. Just keep skimming abstracts, don't go and print out papers, etc, you just want a shallow search of the literature. If you can find an appropriate reference then adjust the writing.
  3. Graph / Figures / Tables pass. Anywhere where you noted you'd need a graph or table, put it in.
  4. Honing Prose Pass: Read over the text you've written. Delete stuff that you don't need. Clean up sentences that don't make sense. Convert to active voice if written in passive. Make sure all the tenses are correct. If a more complex word can be replaced with a simpler word, then do so. i.e. "whilst" -> "while", "utilized" -> "used".

I had very very little progress on my PhD Thesis and Papers before stumbling on this strategy. It's SOO SOO much easier to actually do work if you've got pages and pages of bullshit that's somewhat related to the end product than trying to incrementally craft perfect sentences.

Everyone with ADHD is likely not the same, but sitting and looking at a blank page is super stressful and causes me to procrastinate. If I already have a few pages of utter bullshit writing that only makes sense 50% of the time, without references, etc, then I can quickly get the "satisfaction" of cleaning it up, rewording, finding references, etc, without worrying about simultaneously thinking about what to say. I'll rarely get into flow when writing, but will very often get into flow when editing.

You mileage may vary.

Bow and Arrow (Primitive Technology) by DemiPixel in videos

[–]g4n0n 2 points3 points  (0 children)

The Australian brush turkey, (Alectura Lathami), is a native Australian bird and is protected under State Wildlife Legislation (Nature Conservation Act 1992). It is a serious offence to harm brush turkeys.

Bush Turkeys have the reputation for totally destroying people's gardens. They are a protected species though, and harming them can attract substantial fines. (Likes hundreds of thousands of $$$).

Tilting the GearVR Up? by Logvin in GearVR

[–]g4n0n 1 point2 points  (0 children)

Just finished watching a Black Mirror episode laying flat on the bed using the Netflix app in Void Theater mode. Very comfortable, and will be my preferred method of consuming Netflix from now on!

Cord-Cutting Is Accelerating by Arzu1982 in Futurology

[–]g4n0n 4 points5 points  (0 children)

Note that it's a chart of growth, not the relative change in subscriber numbers.

So it's saying that in 2015 the total number of pay-TV subscribers declined by 0.6%. The rate of subscriber growth is expected to decrease further negative over time, hence the number of pay-TV subscribers is decreasing at an increasing rate: i.e. accelerating.