Thursday, October 12, 2017
Sunday, October 08, 2017
Gitbook Notes
https://github.com/GitbookIO/gitbook/blob/master/docs/setup.md
https://toolchain.gitbook.com/syntax/markdown.html#images
https://toolchain.gitbook.com/syntax/markdown.html#images
Saturday, October 07, 2017
Full Stack Developer Course Notes
Development Environment Setup
1. Install browser-sync https://browsersync.io/
npm install -g browser-sync
2. browser-sync --version
3. Start the browser-sync to watch all the files for changes.
1. Install browser-sync https://browsersync.io/
npm install -g browser-sync
2. browser-sync --version
3. Start the browser-sync to watch all the files for changes.
browser-sync start --server --directory --files "*"
Wednesday, September 06, 2017
UI User Story Example
Miya is part of the awesome group called The Foundation. She is a developer by trade and she wants to send cold email to do market research in her area of interest, IP law. She tries quickemail.io and finds it's interface very confusing. She is new to cold email marketing. She signsup for toutapp and finds that it is very bloated. She posts on TF forum to get some recommendation for cold email marketing automation tools. They recommend vocus which is also not beginner friendly. She has questions like: Will this allow me to upload a CSV file and schedule the emails to send out based on template. Vocus website does not provide any answers to these questions.
Miya found the quickmail.io interface very confusing to use. Instead of days, you had to convert the days to hours for the followup sequence. It had variation and A/B testing as part of the setup which was not required for her initial set of emails to be sent. It was difficult to find the merge fields and had to contact support several times over the period of 5 days. She did not know whether it was a bug due to the browser she was using or which icon would display the merge fields. She had a specific task to complete but found it extremely difficult to use the product. The training video she found on youtube channel of quickmail.io was irrelevant and she wasted few hours of her time watching the unrelated video to her task. She was very frustrated.
As a developer she started to do research on open tracking and threading features found in other products. She figured out threading is not really required. She found out that only the first email open must be tracked and ignore the email open when they are replying to her email. Scheduling the emails to trigger would require a fair amount of work. She found some good resources on how to authenticate to use the Gmail API for sending emails.
Goal: Cold email and followup for contacting prospects
Miya found the quickmail.io interface very confusing to use. Instead of days, you had to convert the days to hours for the followup sequence. It had variation and A/B testing as part of the setup which was not required for her initial set of emails to be sent. It was difficult to find the merge fields and had to contact support several times over the period of 5 days. She did not know whether it was a bug due to the browser she was using or which icon would display the merge fields. She had a specific task to complete but found it extremely difficult to use the product. The training video she found on youtube channel of quickmail.io was irrelevant and she wasted few hours of her time watching the unrelated video to her task. She was very frustrated.
As a developer she started to do research on open tracking and threading features found in other products. She figured out threading is not really required. She found out that only the first email open must be tracked and ignore the email open when they are replying to her email. Scheduling the emails to trigger would require a fair amount of work. She found some good resources on how to authenticate to use the Gmail API for sending emails.
Goal: Cold email and followup for contacting prospects
Tuesday, September 05, 2017
Business Model Canvas for SaaS Business
Key Partners
What can you outsource to whom?
Web Hosting Providers
IaaS Providers
Open Source Projects
Key Activities
What will you need to master?
Customer interviews
Product Development (Product design, Software Development)
Deployment and Maintenance
Key Resources
What do you ned to build up?
Code base
Developers
Value Propositions
What is your unique value proposition?
Business Productivity and Collaboration
Customer Relationships
Customer Conference
Associations
Events
Acquire and Lockin
Channels
How to communicate and deliver?
Self service
Web
Phone
Email
Customer Segments
Who are your customers?
IP Attorneys
Cost Structure
What are my costs?
Product development
Partner costs (IaaS)
Marketing and Sales
Hosting Fees
Customer Acquisition Costs
Salaries
Revenue Streams
How will you make money?
Usage based, by user or by transaction
What can you outsource to whom?
Web Hosting Providers
IaaS Providers
Open Source Projects
Key Activities
What will you need to master?
Customer interviews
Product Development (Product design, Software Development)
Deployment and Maintenance
Key Resources
What do you ned to build up?
Code base
Developers
Value Propositions
What is your unique value proposition?
Business Productivity and Collaboration
Customer Relationships
Customer Conference
Associations
Events
Acquire and Lockin
Channels
How to communicate and deliver?
Self service
Web
Phone
Customer Segments
Who are your customers?
IP Attorneys
Cost Structure
What are my costs?
Product development
Partner costs (IaaS)
Marketing and Sales
Hosting Fees
Customer Acquisition Costs
Salaries
Revenue Streams
How will you make money?
Usage based, by user or by transaction
The Four Pillars of Wealth
Clay Collins and Perry Marshal recommend:
1. Automated Sale
2. Recurring Revenue
3. Sell a reproducible product or a tool (break time for money dependency and scale)
4. No accounts receivable (Get paid in advance)
1. Find pains
2. Presell
3. Outsource product development
1. Find the problem
2. Sell the solution
3. Hire a developer
1. Idea discovery
2. Sketch the solution (create a paper prototype to solve the problem)
3. Presell the sketch
4. Outsource product development
5. Launch the product
Find booming industries and sell them software tools.
1. Automated Sale
2. Recurring Revenue
3. Sell a reproducible product or a tool (break time for money dependency and scale)
4. No accounts receivable (Get paid in advance)
1. Find pains
2. Presell
3. Outsource product development
1. Find the problem
2. Sell the solution
3. Hire a developer
1. Idea discovery
2. Sketch the solution (create a paper prototype to solve the problem)
3. Presell the sketch
4. Outsource product development
5. Launch the product
Find booming industries and sell them software tools.
References
Notes from Dane Maxwell's video transcript
Read The Automatic Customer by John Warrillow
Read The Automatic Customer by John Warrillow
Wednesday, August 30, 2017
Cold Email Guide
How to achieve reply rates of 40, 50 or 70%.
- Prepare a well targeted prospect list. Don't sell sweets to a diabetics list.
- Number one goal is to get a response (either positive or negative).
- Follow ups lead to 55% of responses.
- Follow up can be a one liner. Just wanted to make sure my email below didn't fall through the cracks.
- Be prepared for rejection.
- Aim for certain ratio and improve it (ex 1 positive reply for each negative reply)
- Contact at least 100 prospects before making any decision
- Make it short, layout a clear offering that compel them into replying
- Just reply 'yes' and I'll send you more information
- Use the name of the person in the email
- Get small commitments before going for big commitments
- You can pre-warm a relationship by using referrals like: Bugs Bunny mentioned I should get in touch with you
- Tuesday to Thursday is the best days to send
- Prepare a well targeted prospect list. Don't sell sweets to a diabetics list.
- Number one goal is to get a response (either positive or negative).
- Follow ups lead to 55% of responses.
- Follow up can be a one liner. Just wanted to make sure my email below didn't fall through the cracks.
- Be prepared for rejection.
- Aim for certain ratio and improve it (ex 1 positive reply for each negative reply)
- Contact at least 100 prospects before making any decision
- Make it short, layout a clear offering that compel them into replying
- Just reply 'yes' and I'll send you more information
- Use the name of the person in the email
- Get small commitments before going for big commitments
- You can pre-warm a relationship by using referrals like: Bugs Bunny mentioned I should get in touch with you
- Tuesday to Thursday is the best days to send
Monday, August 28, 2017
Problem Discovery Questions for Conference
I am attending a 3 day conference in my target market. I had to come up with questions based on the amount of time available. The goal is to learn about their problems.
One Question
1. What tasks take up the most time in your day?
Three Questions
2. What's the hardest part of your day?
3. What product do you wish you had that does not exist yet?
Seven Questions
4. What are some unmet needs you have?
5. What could be done to improve your experience with [process/role]?
6. What’s the hardest part about being a [demographic]?
7. What are your most important professional goals?
One Question
1. What tasks take up the most time in your day?
Three Questions
2. What's the hardest part of your day?
3. What product do you wish you had that does not exist yet?
Seven Questions
4. What are some unmet needs you have?
5. What could be done to improve your experience with [process/role]?
6. What’s the hardest part about being a [demographic]?
7. What are your most important professional goals?
Thursday, August 24, 2017
Wednesday, August 16, 2017
Dealing with Vague Requirements in Software Development
1. Very vague and unknown requirements should be moved out of scope. Use scope control as a way to filter out.
2. Build a quick and dirty throwaway prototype to find answers to the vague / unknown requirements.
3. Identify the vague requirements and ask the product owner the right questions to fill in the blanks.
4. Conduct a requirements grooming session to flesh out the vague requirements.
5. Ask the stake holders to prioritize the backlog and work on the well defined requirements.
2. Build a quick and dirty throwaway prototype to find answers to the vague / unknown requirements.
3. Identify the vague requirements and ask the product owner the right questions to fill in the blanks.
4. Conduct a requirements grooming session to flesh out the vague requirements.
5. Ask the stake holders to prioritize the backlog and work on the well defined requirements.
Saturday, August 12, 2017
Thursday, August 10, 2017
Top Links for Second Week of Aug 2017
https://robots.thoughtbot.com/a-crash-course-in-analyzing-memory-usage-in-ruby
https://blog.codeship.com/advanced-enumeration-with-ruby/
https://thisbitofcode.com/managing-localization-rails/
https://blog.showoff.ie/using-gemstash-for-private-gem-hosting-8b6170da766c
http://semaphoreci.com/blog/2017/08/03/tips-on-treating-flakiness-in-your-test-suite.html
https://semaphoreci.com/blog/2017/08/09/faster-rails-eliminating-n-plus-one-queries.html
https://www.nopio.com/blog/ruby-state-machine-aasm-tutorial/
http://www.pablocantero.com/blog/2017/08/06/using-ruby-and-amazon-sqs-fifo-queues
https://depfu.io/blog/2017/08/02/bundler-and-private-dependencies
https://blog.codeship.com/advanced-enumeration-with-ruby/
https://thisbitofcode.com/managing-localization-rails/
https://blog.showoff.ie/using-gemstash-for-private-gem-hosting-8b6170da766c
http://semaphoreci.com/blog/2017/08/03/tips-on-treating-flakiness-in-your-test-suite.html
https://semaphoreci.com/blog/2017/08/09/faster-rails-eliminating-n-plus-one-queries.html
https://www.nopio.com/blog/ruby-state-machine-aasm-tutorial/
http://www.pablocantero.com/blog/2017/08/06/using-ruby-and-amazon-sqs-fifo-queues
https://depfu.io/blog/2017/08/02/bundler-and-private-dependencies
Monday, August 07, 2017
Sunday, August 06, 2017
Find all articles that is not tagged in Rails
ids = Tagging.where(taggable_type: "Article").collect(&:taggable_id).uniq
Article.where.not(id: ids).collect(&:id)
Saturday, August 05, 2017
API Documentation with Tabs for Languages
Slate generates html from a markdown document and provides syntax highlighting for different languages that displays in separate tabs.
For internal use, API blueprint is a good option. For external use, slate is a great option to publish documentation. It generates good looking and developer friendly docs. We can copy the slate generated static files to a static site deployed on Google cloud. This is the easiest deployment. It avoids extra work that is required with AWS such as uploading to S3, configuring a bucket as a webserver etc.
Questions
1. Is slate markdown compatible with API blueprint markdown file (.apib) ?
2. Is there a tool that will convert .apib file to slate markdown file?
I started with the schema.rb file from a Rails project that I am currently working on.
References
- Using API Blueprint With MSON
- HTTP Documentation with API Blueprint
For internal use, API blueprint is a good option. For external use, slate is a great option to publish documentation. It generates good looking and developer friendly docs. We can copy the slate generated static files to a static site deployed on Google cloud. This is the easiest deployment. It avoids extra work that is required with AWS such as uploading to S3, configuring a bucket as a webserver etc.
Questions
1. Is slate markdown compatible with API blueprint markdown file (.apib) ?
2. Is there a tool that will convert .apib file to slate markdown file?
I started with the schema.rb file from a Rails project that I am currently working on.
References
- Using API Blueprint With MSON
- HTTP Documentation with API Blueprint
Friday, August 04, 2017
Vue.js 2 The Complete Guide Course
Things to focus when watching the video:
1. Using tabs and highlighting selected tab.
2. Defining routes for each tab.
3. Real development workflow with Webpack and Vue CLI
4. Deploying the app to AWS S3
1. Using tabs and highlighting selected tab.
2. Defining routes for each tab.
3. Real development workflow with Webpack and Vue CLI
4. Deploying the app to AWS S3
Thursday, August 03, 2017
Learn by doing Vue.js 2 the Right Way
1. Replacing hard-coded URLs with configuration file values for different environments.
Use webpack-merge and interceptors to configure URL in config folder dev.env.js and prod.env.js
2. API documentation for using JWT for authentication.
3. Using scoped style
4. Using aletifyjs to display form error messages
5. What is the vue-resource interceptor equivalent in axios?
6. vue-auth - Jwt auth library for Vue.js
7. Use vue.js router global guards to protect URLs that require login.
Use webpack-merge and interceptors to configure URL in config folder dev.env.js and prod.env.js
2. API documentation for using JWT for authentication.
3. Using scoped style
4. Using aletifyjs to display form error messages
5. What is the vue-resource interceptor equivalent in axios?
6. vue-auth - Jwt auth library for Vue.js
7. Use vue.js router global guards to protect URLs that require login.
Tuesday, August 01, 2017
Rails Interview Questions
Ruby
1. What is the difference between a lambda, a block and a proc?
2. What are
3. Getter and setter methods
4. method overloading (Ruby does not have this feature)
5. Include vs Extend
6. Symbol vs String
7. What does yield do?
8. Difference between && and AND operators
9. Multiple inheritance
10. public, private, protected
11. How can you call the base class method from a subclass? (super)
Rails
1. How do you sort an Array of objects by a particular attribute? What is a better way to do sorting with ActiveRecord?
2. Explain CSRF and how Rails combats it.
3. Explain mass-assignment vulnerability.
4. Explain various forms of caching available in Rails.
5. How is something like 30.seconds.ago implemented?
6. HashWithIndifferentAccess
7. N+1 Query problem
8. has_one, belongs_to, has_many, has_many_through, polymorphic
9. database transactions
10. load, auto_load, require_relative
11. load vs require
12. How can you call the base class method from inside of its overridden method?
13. sql injection (sanitize user input)
14. Include vs Prepend
15. How to implement single table inheritance?
16. Eager loading (includes the association)
17. render vs redirect
1. What is the difference between a lambda, a block and a proc?
2. What are
#method_missing and #send? Why are they useful?3. Getter and setter methods
4. method overloading (Ruby does not have this feature)
5. Include vs Extend
6. Symbol vs String
7. What does yield do?
8. Difference between && and AND operators
9. Multiple inheritance
10. public, private, protected
11. How can you call the base class method from a subclass? (super)
Rails
1. How do you sort an Array of objects by a particular attribute? What is a better way to do sorting with ActiveRecord?
2. Explain CSRF and how Rails combats it.
3. Explain mass-assignment vulnerability.
4. Explain various forms of caching available in Rails.
5. How is something like 30.seconds.ago implemented?
6. HashWithIndifferentAccess
7. N+1 Query problem
8. has_one, belongs_to, has_many, has_many_through, polymorphic
9. database transactions
10. load, auto_load, require_relative
11. load vs require
12. How can you call the base class method from inside of its overridden method?
13. sql injection (sanitize user input)
14. Include vs Prepend
15. How to implement single table inheritance?
16. Eager loading (includes the association)
17. render vs redirect
Monday, July 31, 2017
Elasticbeanstalk Transcript
Let's update brew. We need to install aws-elasticbeanstalk. Let's create a new Rails 5.1 API only backend app. We don't need spring or action cable. We will use Postgresql as the database. The health controller renders status ok json. Let's start the server. We can hit the health endpoint using curl. The browser displays the JSON. We need to run eb init from the root folder of the Rails project. I will use the region 1, us-east-1. We can provide an application name. We are using Ruby. Let's use the option 1 for the platform version. We don't need CodeCommit. We can host a private repo for free on bitbucket. We need SSH access to our instance. We can provide a key pair name. It is better not to use generic name so that we know which keypair is used on which server. We need to provide a new passphrase. This generates the key pair. We see that the eb tool created some entries in the gitignore file. We can now create a production environment for our Rails app. This creates a zip file of our app and uploads the zip file to S3. It provides the details about the environment such as the application name, region, deployed version, environment id, platform, tier and so on. The environment is starting now. It automatically created a load balancer and security group for us.
We can check the status by using the eb status command. It is launching. Let's update the awcebcli tool. We get a permission denied error. We can use sudo to run the upgrade command. The environment is still in launching state. While we wait, let's see if we can set the secret key base environment variable. We cannot set any environment variable while the instance is still in launching state. We have to wait for some time. Now the instance is ready but is in red state. Let's set the secret key base environment variable. It is now updating the environment. After some time, it is in ready state but the health is yellow.
We can deploy our Rails app by using the eb deploy. Let's hit this URL in the browser. We get a 502 bad gateway error. The health check URL also gives the same error. Let's go to the AWS console. The health is in yellow state. We see the recent events and it's details. If we go to the causes screen, we see the warning. We can go to the logs tab and request the full logs. It will take some time to generate the log files. It will then appear as the download link. I looked at the eb-activity-log and found the PG connection bad error. The Rails app was not able to connect to Postgres database.
We need to add the configuration for the production database in the database.yml file. We can also run eb logs command to retrieve logs. It seems to hang and there is no feedback. So I downloaded the log file from the AWS console using the browser. We can create RDS instance using the AWS CLI command. This generates a small database instance with 1 GB storage for Postgres database. You need to provide the master user name and the master password.
We can get help for eb command by running eb. The eb open still gives the same error. I created a .ebextensions directory in the root folder of the Rails project and created a packages.config with the these contents. This will install the postgresql93-devel package on our EC2 instance. We need to add this file to the git and commit it. We can now deploy the changes. We did not change the code but provided a package that needs to be installed for the postgres database connection problem. It is in updating status. It is now in updating green status. We can see that it is still updating. It is now complete. We can now see the response of the health endpoint in the browser. We don't have anything to display in the home page.
We can check the status by using the eb status command. It is launching. Let's update the awcebcli tool. We get a permission denied error. We can use sudo to run the upgrade command. The environment is still in launching state. While we wait, let's see if we can set the secret key base environment variable. We cannot set any environment variable while the instance is still in launching state. We have to wait for some time. Now the instance is ready but is in red state. Let's set the secret key base environment variable. It is now updating the environment. After some time, it is in ready state but the health is yellow.
We can deploy our Rails app by using the eb deploy. Let's hit this URL in the browser. We get a 502 bad gateway error. The health check URL also gives the same error. Let's go to the AWS console. The health is in yellow state. We see the recent events and it's details. If we go to the causes screen, we see the warning. We can go to the logs tab and request the full logs. It will take some time to generate the log files. It will then appear as the download link. I looked at the eb-activity-log and found the PG connection bad error. The Rails app was not able to connect to Postgres database.
We need to add the configuration for the production database in the database.yml file. We can also run eb logs command to retrieve logs. It seems to hang and there is no feedback. So I downloaded the log file from the AWS console using the browser. We can create RDS instance using the AWS CLI command. This generates a small database instance with 1 GB storage for Postgres database. You need to provide the master user name and the master password.
We can get help for eb command by running eb. The eb open still gives the same error. I created a .ebextensions directory in the root folder of the Rails project and created a packages.config with the these contents. This will install the postgresql93-devel package on our EC2 instance. We need to add this file to the git and commit it. We can now deploy the changes. We did not change the code but provided a package that needs to be installed for the postgres database connection problem. It is in updating status. It is now in updating green status. We can see that it is still updating. It is now complete. We can now see the response of the health endpoint in the browser. We don't have anything to display in the home page.
Subscribe to:
Posts (Atom)




