From c7fca123d168bd87d29c3380db798a61c35997d6 Mon Sep 17 00:00:00 2001 From: Sharyn Date: Tue, 10 Jul 2018 13:39:05 +0200 Subject: [PATCH 1/7] Adding an extra example interview --- data/archives/interviews.js | 351 ++++++++++++++++++++++++++++++++++++ 1 file changed, 351 insertions(+) diff --git a/data/archives/interviews.js b/data/archives/interviews.js index 920de51..7e865c7 100644 --- a/data/archives/interviews.js +++ b/data/archives/interviews.js @@ -986,6 +986,357 @@ const data = [ '\n' + '

', }, + { id: 4, + name: 'Fernando Smith', + content: '
\n' + + '

\n' + + '
\n' + + '

Fernando Smith

\n' + + '

\n' + + '
    \n' + + '
  1. What type of apps do you\n' + + 'build?
  2. \n' + + '
\n' + + '
    \n' + + '
  1. 0x - Decentralized exchange\n' + + 'protocol. It is a set of smart contracts that handle standard\n' + + 'transactions in an order format.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. The key advantage here is that\n' + + 'these smart contracts leads to shared liquidity
  2. \n' + + '
\n' + + '
    \n' + + '
  1. We also achieve increased security\n' + + 'and network liquidity through our architecture.
  2. \n' + + '
  3. We launched the network in August\n' + + '2017.
  4. \n' + + '
\n' + + '
    \n' + + '
  1. It works, but is V1. We are working\n' + + 'on V2 which helps people build hybrid stations, supports new token\n' + + 'standards, and makes the contract more gas efficient.
  2. \n' + + '
  3. V1 only allows humans to create\n' + + 'orders; V2 will allow new smart contract to create orders. This is\n' + + 'HUGE.
  4. \n' + + '
\n' + + '
    \n' + + '
  1. Notes:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. We’re building the protocol;\n' + + 'designing the standard; building dev tools for anyone to build a\n' + + 'decentralized exchange.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Orders may become invalid for any\n' + + 'reason:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Order being filled
  2. \n' + + '
  3. Griefing attacks
  4. \n' + + '
  5. We’ve now built an OrderWatcher\n' + + 'that keeps relayers updated on the state of orders.
  6. \n' + + '
\n' + + '
    \n' + + '
  1. We’re using contract Events as a\n' + + 'proxy for state changes.
  2. \n' + + '
  3. Can do a diff between state trees\n' + + 'and between block headers.
  4. \n' + + '
\n' + + '
    \n' + + '
  1. We also have a set of smart\n' + + 'contracts to handle settlement;
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Everyone who wants to trade is\n' + + 'setting allowances on a smart contract.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. We want upgradability.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. What are the\n' + + 'tools/libraries/frameworks you use?
  2. \n' + + '
\n' + + '
    \n' + + '
  1. EthereumJS / truffle hardwallet\n' + + 'provider / Typedoc (to generate documentation) /
  2. \n' + + '
  3. We don’t use Truffle\n' + + 'anymore
  4. \n' + + '
\n' + + '
    \n' + + '
  1. Not reliable – can have race\n' + + 'conditions;
  2. \n' + + '
  3. Artifacts don’t allow you to have\n' + + 'versions of the contract on different networks
  4. \n' + + '
\n' + + '
    \n' + + '
  1. You don’t run into this stuff if\n' + + 'you’re just building a “hello world”
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Overwriting parts of the\n' + + 'contracts;
  2. \n' + + '
\n' + + '
    \n' + + '
  1. We rolled our own. It’s open-source\n' + + 'but not documented. We have other things that are keeping us\n' + + 'busy.
  2. \n' + + '
  3. The problem is that Truffle has too\n' + + 'much functionality –– we would like to see more of a Unix\n' + + 'philosophy.
  4. \n' + + '
  5. Cannot support different versions\n' + + 'of Solidity.
  6. \n' + + '
\n' + + '
    \n' + + '
  1. Version management doesn’t\n' + + 'exist.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. EthPM –– doesn’t have versioning\n' + + 'either? It’s going through a big refactor, so we held off. We need\n' + + 'the NPM package manager.
  2. \n' + + '
  3. We have built a lot of developer\n' + + 'tools to interface with the smart contracts ourselves.
  4. \n' + + '
  5. We have also built own deployer and\n' + + 'migration tool, as truffle’s did not suit our needs.
  6. \n' + + '
\n' + + '
    \n' + + '
  1. What are your biggest\n' + + 'frustrations?
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Getting a simple experimental\n' + + 'environment up is hard
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Remix is there; but it’s not\n' + + 'enough.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Tracing and profiling is not\n' + + 'existent.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Remix does it, but can’t do it\n' + + 'locally.
  2. \n' + + '
  3. “Code coverage” tool exists but\n' + + 'inserts console.logs in
  4. \n' + + '
\n' + + '
    \n' + + '
  1. Adding up gas costs per line of\n' + + 'code.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Need to do profiling, because gas\n' + + 'costs depend on inputs.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Solidity language\n' + + 'itself:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Crashed the Solidity compiler twice\n' + + 'today.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. E.g. AbiEncoderV2 is pretty new and\n' + + 'hard to understand/use.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. The code that it produces is\n' + + 'inefficient.
  2. \n' + + '
  3. There is a stark stack limit in\n' + + 'solidity
  4. \n' + + '
\n' + + '
    \n' + + '
  1. All the variables are locally\n' + + 'scoped.
  2. \n' + + '
  3. Un-intuitive as it is a curly\n' + + 'braced language.
  4. \n' + + '
  5. The lifecycle hook value_of is\n' + + 'within a function.
  6. \n' + + '
  7. Can only access top 16 slack slots.\n' + + 'Including input and output.
  8. \n' + + '
  9. We need to implement a graph\n' + + 'coloring register allocator – to find out what the lifetime of the\n' + + 'variables is.
  10. \n' + + '
\n' + + '
    \n' + + '
  1. “This stack slot was used in the\n' + + 'first half –– the second half you can use”
  2. \n' + + '
  3. Or implement register\n' + + 'splitting.
  4. \n' + + '
\n' + + '
    \n' + + '
  1. Function inlining is frustrating\n' + + 'sometimes:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. E.g. SafeMath –– turns every\n' + + 'operator into function call – which is a huge gas sink.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. How Solidity optimizes could be\n' + + 'improved:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. It focuses on the code size (which\n' + + 'makes sense since it’s minimizing the state tree); but sometimes\n' + + 'you need to optimize size of tx gas (e.g. 0x needs optimized\n' + + 'fillOrder call)
  2. \n' + + '
\n' + + '
    \n' + + '
  1. ABI doesn’t implement\n' + + 'introspection
  2. \n' + + '
\n' + + '
    \n' + + '
  1. EIP 165
  2. \n' + + '
\n' + + '
    \n' + + '
  1. E.g. “does this contract implement\n' + + 'ERC20, or ERC223?”
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Solidity should have this\n' + + 'in-built.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Should be built into the API spec\n' + + 'and compiler.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Inheritance:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Interface or abstract contract –\n' + + 'e.g. Solidity automatically creates getters for state functions ––\n' + + 'collides with
  2. \n' + + '
  3. Contract which implements an\n' + + 'interface – public or external for abstract functions – they\n' + + 'collide
  4. \n' + + '
\n' + + '
    \n' + + '
  1. ERCs – there is not a formal way to\n' + + 'describe the interface for contracts.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Have a standard repo –– this will\n' + + 'lead to a canonical ABI definition –– can have semantic rules\n' + + 'around this. Could run some specific unit tests against
  2. \n' + + '
\n' + + '
    \n' + + '
  1. How do you handle\n' + + 'testing?
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Testrpc has gotten better\n' + + '––
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Increases the speed at which you\n' + + 'can dev.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Blockstream is really cool. Written\n' + + 'by Mica (from Augur?), under the EthereumJS lib.
  2. \n' + + '
  3. Good dealing with block re-orgs and\n' + + 'changes in state.
  4. \n' + + '
  5. Continuous Integration:
  6. \n' + + '
\n' + + '
    \n' + + '
  1. Doesn’t really work for smart\n' + + 'contracts.
  2. \n' + + '
  3. We just use testrpc.
  4. \n' + + '
  5. Neufund was different than\n' + + '0x:
  6. \n' + + '
\n' + + '
    \n' + + '
  1. Neufund was a trustee for tokens ––\n' + + 'it was centralized by definition.
  2. \n' + + '
  3. This made it simpler: I could\n' + + 'create “open-ended” contracts –– a switch statement, that the\n' + + 'default would send to another proxy contract.
  4. \n' + + '
  5. But wouldn’t be able to do this\n' + + 'with 0x –– e.g. if we wanted to add Shnorr signatures –– because\n' + + 'it’s a governance / security issues.
  6. \n' + + '
\n' + + '
    \n' + + '
  1. How do you handle smart contract\n' + + 'verification and security?
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Code audits before\n' + + 'deployment
  2. \n' + + '
  3. Want to add a formal verification\n' + + 'tool to our deployment tool.
  4. \n' + + '
\n' + + '
    \n' + + '
  1. By analyzing the code, you can find\n' + + 'patterns.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. I manually did an audit in v0 of\n' + + '0x:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Make sure all functions have a\n' + + '“Read -> Write -> External Call” pattern, so you don’t have\n' + + 'any race conditions.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Other bounties?
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Rest of the bounties from\n' + + 'Remco
  2. \n' + + '
  3. State-watching –– built-in\n' + + 'diff’ing of state trees
  4. \n' + + '
\n' + + '
    \n' + + '
  1. Should be implemented in the\n' + + 'Ethereum clients – Geth and Rust.
  2. \n' + + '
  3. They want this feature for\n' + + 'OrderWatcher.
  4. \n' + + '
\n' + + '
    \n' + + '
  1. EIP process is\n' + + 'suboptimal:
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Lacks in consensus-building.\n' + + 'There’s vocal people who don’t have good ideas; there’s a lot of\n' + + 'noise.
  2. \n' + + '
  3. To improve: committee-based\n' + + 'approach (reputable stakeholders from reputable projects who get\n' + + 'together?).
  4. \n' + + '
  5. Problems are getting solved at the\n' + + 'wrong abstraction level.
  6. \n' + + '
\n' + + '
    \n' + + '
  1. E.g. NFT standards.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. Neufund was largest Solidity\n' + + 'project before –– tokenized equity.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. You want a EuroToken. You don’t\n' + + 'want your company valuated in Ether.
  2. \n' + + '
  3. What if blockchain forks; which\n' + + 'token is actually tied to the company?
  4. \n' + + '
\n' + + '
    \n' + + '
  1. Bounty approach gives many\n' + + 'different styles within the codebase.
  2. \n' + + '
\n' + + '
    \n' + + '
  1. This is a problem; e.g. OpenSSL\n' + + 'codebase after Masters / PhDs.
  2. \n' + + '
\n' + + '

', + }, ]; export default data; From 5dc9ee291b2f3bfd00bbe88b1f1bfae1af1d2969 Mon Sep 17 00:00:00 2001 From: Sharyn Date: Tue, 10 Jul 2018 13:39:24 +0200 Subject: [PATCH 2/7] deleting mistake file --- components/interviews/interviewsList/sss | 356 ----------------------- 1 file changed, 356 deletions(-) delete mode 100644 components/interviews/interviewsList/sss diff --git a/components/interviews/interviewsList/sss b/components/interviews/interviewsList/sss deleted file mode 100644 index cd39879..0000000 --- a/components/interviews/interviewsList/sss +++ /dev/null @@ -1,356 +0,0 @@ -const data = [ - { id: 1, - name: 'Fabio Berger + Remco Bloemen', - content: '
\n' + - '

\n' + - '
\n' + - '

Fabio\n' + - 'Berger + Remco Bloemen

\n' + - '

\n' + - '
    \n' + - '
  1. What type of apps do you\n' + - 'build?
  2. \n' + - '
\n' + - '
    \n' + - '
  1. 0x - Decentralized exchange\n' + - 'protocol. It is a set of smart contracts that handle standard\n' + - 'transactions in an order format.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. The key advantage here is that\n' + - 'these smart contracts leads to shared liquidity
  2. \n' + - '
\n' + - '
    \n' + - '
  1. We also achieve increased security\n' + - 'and network liquidity through our architecture.
  2. \n' + - '
  3. We launched the network in August\n' + - '2017.
  4. \n' + - '
\n' + - '
    \n' + - '
  1. It works, but is V1. We are working\n' + - 'on V2 which helps people build hybrid stations, supports new token\n' + - 'standards, and makes the contract more gas efficient.
  2. \n' + - '
  3. V1 only allows humans to create\n' + - 'orders; V2 will allow new smart contract to create orders. This is\n' + - 'HUGE.
  4. \n' + - '
\n' + - '
    \n' + - '
  1. Notes:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. We’re building the protocol;\n' + - 'designing the standard; building dev tools for anyone to build a\n' + - 'decentralized exchange.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Orders may become invalid for any\n' + - 'reason:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Order being filled
  2. \n' + - '
  3. Griefing attacks
  4. \n' + - '
  5. We’ve now built an OrderWatcher\n' + - 'that keeps relayers updated on the state of orders.
  6. \n' + - '
\n' + - '
    \n' + - '
  1. We’re using contract Events as a\n' + - 'proxy for state changes.
  2. \n' + - '
  3. Can do a diff between state trees\n' + - 'and between block headers.
  4. \n' + - '
\n' + - '
    \n' + - '
  1. We also have a set of smart\n' + - 'contracts to handle settlement;
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Everyone who wants to trade is\n' + - 'setting allowances on a smart contract.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. We want upgradability.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. What are the\n' + - 'tools/libraries/frameworks you use?
  2. \n' + - '
\n' + - '
    \n' + - '
  1. EthereumJS / truffle hardwallet\n' + - 'provider / Typedoc (to generate documentation) /
  2. \n' + - '
  3. We don’t use Truffle\n' + - 'anymore
  4. \n' + - '
\n' + - '
    \n' + - '
  1. Not reliable – can have race\n' + - 'conditions;
  2. \n' + - '
  3. Artifacts don’t allow you to have\n' + - 'versions of the contract on different networks
  4. \n' + - '
\n' + - '
    \n' + - '
  1. You don’t run into this stuff if\n' + - 'you’re just building a “hello world”
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Overwriting parts of the\n' + - 'contracts;
  2. \n' + - '
\n' + - '
    \n' + - '
  1. We rolled our own. It’s open-source\n' + - 'but not documented. We have other things that are keeping us\n' + - 'busy.
  2. \n' + - '
  3. The problem is that Truffle has too\n' + - 'much functionality –– we would like to see more of a Unix\n' + - 'philosophy.
  4. \n' + - '
  5. Cannot support different versions\n' + - 'of Solidity.
  6. \n' + - '
\n' + - '
    \n' + - '
  1. Version management doesn’t\n' + - 'exist.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. EthPM –– doesn’t have versioning\n' + - 'either? It’s going through a big refactor, so we held off. We need\n' + - 'the NPM package manager.
  2. \n' + - '
  3. We have built a lot of developer\n' + - 'tools to interface with the smart contracts ourselves.
  4. \n' + - '
  5. We have also built own deployer and\n' + - 'migration tool, as truffle’s did not suit our needs.
  6. \n' + - '
\n' + - '
    \n' + - '
  1. What are your biggest\n' + - 'frustrations?
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Getting a simple experimental\n' + - 'environment up is hard
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Remix is there; but it’s not\n' + - 'enough.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Tracing and profiling is not\n' + - 'existent.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Remix does it, but can’t do it\n' + - 'locally.
  2. \n' + - '
  3. “Code coverage” tool exists but\n' + - 'inserts console.logs in
  4. \n' + - '
\n' + - '
    \n' + - '
  1. Adding up gas costs per line of\n' + - 'code.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Need to do profiling, because gas\n' + - 'costs depend on inputs.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Solidity language\n' + - 'itself:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Crashed the Solidity compiler twice\n' + - 'today.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. E.g. AbiEncoderV2 is pretty new and\n' + - 'hard to understand/use.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. The code that it produces is\n' + - 'inefficient.
  2. \n' + - '
  3. There is a stark stack limit in\n' + - 'solidity
  4. \n' + - '
\n' + - '
    \n' + - '
  1. All the variables are locally\n' + - 'scoped.
  2. \n' + - '
  3. Un-intuitive as it is a curly\n' + - 'braced language.
  4. \n' + - '
  5. The lifecycle hook value_of is\n' + - 'within a function.
  6. \n' + - '
  7. Can only access top 16 slack slots.\n' + - 'Including input and output.
  8. \n' + - '
  9. We need to implement a graph\n' + - 'coloring register allocator – to find out what the lifetime of the\n' + - 'variables is.
  10. \n' + - '
\n' + - '
    \n' + - '
  1. “This stack slot was used in the\n' + - 'first half –– the second half you can use”
  2. \n' + - '
  3. Or implement register\n' + - 'splitting.
  4. \n' + - '
\n' + - '
    \n' + - '
  1. Function inlining is frustrating\n' + - 'sometimes:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. E.g. SafeMath –– turns every\n' + - 'operator into function call – which is a huge gas sink.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. How Solidity optimizes could be\n' + - 'improved:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. It focuses on the code size (which\n' + - 'makes sense since it’s minimizing the state tree); but sometimes\n' + - 'you need to optimize size of tx gas (e.g. 0x needs optimized\n' + - 'fillOrder call)
  2. \n' + - '
\n' + - '
    \n' + - '
  1. ABI doesn’t implement\n' + - 'introspection
  2. \n' + - '
\n' + - '
    \n' + - '
  1. EIP 165
  2. \n' + - '
\n' + - '
    \n' + - '
  1. E.g. “does this contract implement\n' + - 'ERC20, or ERC223?”
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Solidity should have this\n' + - 'in-built.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Should be built into the API spec\n' + - 'and compiler.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Inheritance:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Interface or abstract contract –\n' + - 'e.g. Solidity automatically creates getters for state functions ––\n' + - 'collides with
  2. \n' + - '
  3. Contract which implements an\n' + - 'interface – public or external for abstract functions – they\n' + - 'collide
  4. \n' + - '
\n' + - '
    \n' + - '
  1. ERCs – there is not a formal way to\n' + - 'describe the interface for contracts.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Have a standard repo –– this will\n' + - 'lead to a canonical ABI definition –– can have semantic rules\n' + - 'around this. Could run some specific unit tests against
  2. \n' + - '
\n' + - '
    \n' + - '
  1. How do you handle\n' + - 'testing?
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Testrpc has gotten better\n' + - '––
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Increases the speed at which you\n' + - 'can dev.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Blockstream is really cool. Written\n' + - 'by Mica (from Augur?), under the EthereumJS lib.
  2. \n' + - '
  3. Good dealing with block re-orgs and\n' + - 'changes in state.
  4. \n' + - '
  5. Continuous Integration:
  6. \n' + - '
\n' + - '
    \n' + - '
  1. Doesn’t really work for smart\n' + - 'contracts.
  2. \n' + - '
  3. We just use testrpc.
  4. \n' + - '
  5. Neufund was different than\n' + - '0x:
  6. \n' + - '
\n' + - '
    \n' + - '
  1. Neufund was a trustee for tokens ––\n' + - 'it was centralized by definition.
  2. \n' + - '
  3. This made it simpler: I could\n' + - 'create “open-ended” contracts –– a switch statement, that the\n' + - 'default would send to another proxy contract.
  4. \n' + - '
  5. But wouldn’t be able to do this\n' + - 'with 0x –– e.g. if we wanted to add Shnorr signatures –– because\n' + - 'it’s a governance / security issues.
  6. \n' + - '
\n' + - '
    \n' + - '
  1. How do you handle smart contract\n' + - 'verification and security?
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Code audits before\n' + - 'deployment
  2. \n' + - '
  3. Want to add a formal verification\n' + - 'tool to our deployment tool.
  4. \n' + - '
\n' + - '
    \n' + - '
  1. By analyzing the code, you can find\n' + - 'patterns.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. I manually did an audit in v0 of\n' + - '0x:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Make sure all functions have a\n' + - '“Read -> Write -> External Call” pattern, so you don’t have\n' + - 'any race conditions.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Other bounties?
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Rest of the bounties from\n' + - 'Remco
  2. \n' + - '
  3. State-watching –– built-in\n' + - 'diff’ing of state trees
  4. \n' + - '
\n' + - '
    \n' + - '
  1. Should be implemented in the\n' + - 'Ethereum clients – Geth and Rust.
  2. \n' + - '
  3. They want this feature for\n' + - 'OrderWatcher.
  4. \n' + - '
\n' + - '
    \n' + - '
  1. EIP process is\n' + - 'suboptimal:
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Lacks in consensus-building.\n' + - 'There’s vocal people who don’t have good ideas; there’s a lot of\n' + - 'noise.
  2. \n' + - '
  3. To improve: committee-based\n' + - 'approach (reputable stakeholders from reputable projects who get\n' + - 'together?).
  4. \n' + - '
  5. Problems are getting solved at the\n' + - 'wrong abstraction level.
  6. \n' + - '
\n' + - '
    \n' + - '
  1. E.g. NFT standards.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. Neufund was largest Solidity\n' + - 'project before –– tokenized equity.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. You want a EuroToken. You don’t\n' + - 'want your company valuated in Ether.
  2. \n' + - '
  3. What if blockchain forks; which\n' + - 'token is actually tied to the company?
  4. \n' + - '
\n' + - '
    \n' + - '
  1. Bounty approach gives many\n' + - 'different styles within the codebase.
  2. \n' + - '
\n' + - '
    \n' + - '
  1. This is a problem; e.g. OpenSSL\n' + - 'codebase after Masters / PhDs.
  2. \n' + - '
\n' + - '

', - }, -]; - -export default data; From a24ce0fd5812e1164f007e8e859fca14e8ff1b3b Mon Sep 17 00:00:00 2001 From: Sharyn Date: Tue, 10 Jul 2018 13:43:11 +0200 Subject: [PATCH 3/7] Updating interviews list - Sorting interviews alphabetically - Building up interviews object with letter key - Looping through each letter and listing intervies by that letter - Adding scroll into view with letters nav --- components/interviews/interviewsList/index.js | 113 +++++++++++++----- .../interviews/interviewsList/style.scss | 33 +++++ 2 files changed, 117 insertions(+), 29 deletions(-) diff --git a/components/interviews/interviewsList/index.js b/components/interviews/interviewsList/index.js index 3cb5066..f122b64 100644 --- a/components/interviews/interviewsList/index.js +++ b/components/interviews/interviewsList/index.js @@ -3,36 +3,91 @@ import { PropTypes } from 'prop-types'; import Modal from '../../modal'; import './style.scss'; -const InterviewsList = props => ( -
-
- Interviews ({ props.data.length }) {/* eslint-disable-line */} - View {/* eslint-disable-line */} -
- -
-

Interviews ({ props.data.length })

-
    - { props.data.map(interview => ( - // eslint-disable-next-line -
  • - { interview.name } -
  • - )) - } -
+const InterviewsList = props => { + + // Sort interviews alphabetically + const sortedInterviews = props.data.sort((a, b) => { return a.name.localeCompare(b.name); }); + const interviews = {}; + + // Build up interviews object with letter key + sortedInterviews.forEach(interview => { + const firstLetter = interview.name.charAt(0); + if (typeof interviews[firstLetter] === 'undefined') { + interviews[firstLetter] = []; + } + interviews[firstLetter].push(interview); + }); + + return ( +
+
+ {/* eslint-disable-next-line */} + + Interviews ({props.data.length}) + + {/* eslint-disable-next-line */} + + View +
- -
-); + + +

Interviews ({ props.data.length })

+
+
+ { + Object.keys(interviews).map(firstLetter => ( +
+
{ firstLetter }
+
    + {interviews[firstLetter].map(interview => ( + // eslint-disable-next-line +
  • + {interview.name} +
  • + ) + )} +
+
+ ) + ) + } +
+
+ { + Object.keys(interviews).map(firstLetter => ( + { document.querySelector(`#${firstLetter}`).scrollIntoView({ behavior: 'smooth' }); }} + > + { firstLetter } + + ) + ) + } +
+
+
+
+
+ ); +}; InterviewsList.propTypes = { isInterviewsListModalOpen: PropTypes.bool.isRequired, diff --git a/components/interviews/interviewsList/style.scss b/components/interviews/interviewsList/style.scss index 8054835..60be0f0 100644 --- a/components/interviews/interviewsList/style.scss +++ b/components/interviews/interviewsList/style.scss @@ -19,8 +19,28 @@ } } +.interviews-nav-wrap { + display: flex; + justify-content: space-between; + justify-content: flex-end; + position: relative; +} + .interviews-list { + @media (min-width: $desktop) { + position: absolute; + top: 0; + left: 0; + height: 100%; + overflow: auto; + width: 96%; + } + + .letter-block { + padding-bottom: calculateRem(32); + } + li { cursor: pointer; outline: none; @@ -30,3 +50,16 @@ } } } + +.letters-nav { + display: none; + + @media (min-width: $desktop) { + display: flex; + flex-direction: column; + + span { + cursor: pointer; + } + } +} From afc0ee7c43e5495bc559c9bc3b4f908db0b9f18b Mon Sep 17 00:00:00 2001 From: Sharyn Date: Tue, 10 Jul 2018 13:43:25 +0200 Subject: [PATCH 4/7] Sorting search results alphabetically --- components/searchResults/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/components/searchResults/index.js b/components/searchResults/index.js index 50e85e1..b1f193f 100644 --- a/components/searchResults/index.js +++ b/components/searchResults/index.js @@ -7,10 +7,13 @@ const SearchResults = (props) => { return
Loading...
; } + // sort array alphabetically + const sortedInterviews = props.data.sort((a, b) => { return a.name.localeCompare(b.name); }); + return (
    - { props.data.map(interview => ( + { sortedInterviews.map(interview => ( // eslint-disable-next-line
  • Date: Tue, 10 Jul 2018 14:25:23 +0200 Subject: [PATCH 5/7] lint fixes --- .eslintrc | 3 +++ assets/styles/base/forms.scss | 4 +++ components/interviews/interviewsList/index.js | 26 ++++++++----------- .../interviews/interviewsList/style.scss | 8 +++--- .../interviews/relatedInterviewsList/index.js | 4 +-- .../relatedInterviewsList/style.scss | 7 ++--- components/searchResults/index.js | 2 +- 7 files changed, 29 insertions(+), 25 deletions(-) diff --git a/.eslintrc b/.eslintrc index 1c5b0dd..9fa4a67 100644 --- a/.eslintrc +++ b/.eslintrc @@ -14,5 +14,8 @@ "expect": false, "afterEach": false, "jest": false + }, + "env": { + "browser": true } } diff --git a/assets/styles/base/forms.scss b/assets/styles/base/forms.scss index 5c75c38..c756c7c 100644 --- a/assets/styles/base/forms.scss +++ b/assets/styles/base/forms.scss @@ -5,3 +5,7 @@ button { font-family: $primary-font; } +button { + cursor: pointer; + outline: none; +} diff --git a/components/interviews/interviewsList/index.js b/components/interviews/interviewsList/index.js index f122b64..04f1ff1 100644 --- a/components/interviews/interviewsList/index.js +++ b/components/interviews/interviewsList/index.js @@ -3,14 +3,13 @@ import { PropTypes } from 'prop-types'; import Modal from '../../modal'; import './style.scss'; -const InterviewsList = props => { - +const InterviewsList = (props) => { // Sort interviews alphabetically - const sortedInterviews = props.data.sort((a, b) => { return a.name.localeCompare(b.name); }); + const sortedInterviews = props.data.sort((a, b) => a.name.localeCompare(b.name)); const interviews = {}; // Build up interviews object with letter key - sortedInterviews.forEach(interview => { + sortedInterviews.forEach((interview) => { const firstLetter = interview.name.charAt(0); if (typeof interviews[firstLetter] === 'undefined') { interviews[firstLetter] = []; @@ -52,34 +51,31 @@ const InterviewsList = props => {
    { firstLetter }
      - {interviews[firstLetter].map(interview => ( - // eslint-disable-next-line + { interviews[firstLetter].map(interview => (
    • - {interview.name} +
    • - ) - )} + )) + }
    - ) - ) + )) }
{ Object.keys(interviews).map(firstLetter => ( + // eslint-disable-next-line { document.querySelector(`#${firstLetter}`).scrollIntoView({ behavior: 'smooth' }); }} > { firstLetter } - ) - ) + )) }
@@ -92,7 +88,7 @@ const InterviewsList = props => { InterviewsList.propTypes = { isInterviewsListModalOpen: PropTypes.bool.isRequired, data: PropTypes.arrayOf(PropTypes.shape({})).isRequired, - toggleSingleInterview: PropTypes.func.isRequired, + toggleSingleInterview: PropTypes.func.isRequired, /* eslint-disable-line */ toggleInterviewsListModal: PropTypes.func.isRequired, }; diff --git a/components/interviews/interviewsList/style.scss b/components/interviews/interviewsList/style.scss index 60be0f0..cb8482c 100644 --- a/components/interviews/interviewsList/style.scss +++ b/components/interviews/interviewsList/style.scss @@ -41,9 +41,11 @@ padding-bottom: calculateRem(32); } - li { - cursor: pointer; - outline: none; + button { + border: 0; + padding: 0; + text-align: left; + font-size: calculateRem(14); &:hover { text-decoration: underline; diff --git a/components/interviews/relatedInterviewsList/index.js b/components/interviews/relatedInterviewsList/index.js index 3372dee..3df5d17 100644 --- a/components/interviews/relatedInterviewsList/index.js +++ b/components/interviews/relatedInterviewsList/index.js @@ -7,13 +7,11 @@ const RelatedInterviewsList = props => (

Related
Interviews

    { props.data.map(interview => ( - // eslint-disable-next-line
  • - { interview.name } +
  • )) } diff --git a/components/interviews/relatedInterviewsList/style.scss b/components/interviews/relatedInterviewsList/style.scss index 331805f..7e4007f 100644 --- a/components/interviews/relatedInterviewsList/style.scss +++ b/components/interviews/relatedInterviewsList/style.scss @@ -3,10 +3,11 @@ .related-interviews-list { margin-bottom: calculateRem(24); - li { + button { + border: 0; + padding: 0; + text-align: left; font-size: calculateRem(14); - cursor: pointer; - outline: none; &:hover { text-decoration: underline; diff --git a/components/searchResults/index.js b/components/searchResults/index.js index b1f193f..f52b045 100644 --- a/components/searchResults/index.js +++ b/components/searchResults/index.js @@ -8,7 +8,7 @@ const SearchResults = (props) => { } // sort array alphabetically - const sortedInterviews = props.data.sort((a, b) => { return a.name.localeCompare(b.name); }); + const sortedInterviews = props.data.sort((a, b) => a.name.localeCompare(b.name)); return (
    From 970f36599fa231e1c0af2edb74f8355d998f527b Mon Sep 17 00:00:00 2001 From: Sharyn Date: Tue, 10 Jul 2018 14:37:19 +0200 Subject: [PATCH 6/7] mobile style fix --- components/interviews/interviewsList/style.scss | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/components/interviews/interviewsList/style.scss b/components/interviews/interviewsList/style.scss index cb8482c..d532818 100644 --- a/components/interviews/interviewsList/style.scss +++ b/components/interviews/interviewsList/style.scss @@ -20,10 +20,13 @@ } .interviews-nav-wrap { - display: flex; - justify-content: space-between; - justify-content: flex-end; - position: relative; + + @media (min-width: $desktop) { + display: flex; + justify-content: space-between; + justify-content: flex-end; + position: relative; + } } .interviews-list { From f36d059deef83861eff5b76d84d59811a93224b0 Mon Sep 17 00:00:00 2001 From: Sharyn Date: Tue, 10 Jul 2018 16:26:12 +0200 Subject: [PATCH 7/7] Adding spacing --- components/interviews/interviewsList/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/interviews/interviewsList/index.js b/components/interviews/interviewsList/index.js index 04f1ff1..8c84294 100644 --- a/components/interviews/interviewsList/index.js +++ b/components/interviews/interviewsList/index.js @@ -11,9 +11,11 @@ const InterviewsList = (props) => { // Build up interviews object with letter key sortedInterviews.forEach((interview) => { const firstLetter = interview.name.charAt(0); + if (typeof interviews[firstLetter] === 'undefined') { interviews[firstLetter] = []; } + interviews[firstLetter].push(interview); });