Code Monkey home page Code Monkey logo

0pdd's Introduction

logo

EO principles respected here DevOps By Rultor.com We recommend RubyMine

rake Availability at SixNines Webhook via ReHTTP PDD status Maintainability Test Coverage Hits-of-Code Codacy Badge

Read this blog post first: PDD in Action. TL;DR:

  1. Your boss tells you to fix issue #42
  2. You do it, but not completely (you have no time, you are lazy, etc.)
  3. You put TODO #42:30min bla-bla-bla into the code base (in a pull request)
  4. CI checks that you didn't break the format of the TODO (reuse our pdd.yml)
  5. You merge the pull request
  6. The bot picks up the TODO and creates issue #43 (new one)
  7. The boss asks your friend to fix #43
  8. The friend fixes it, and merges
  9. The TODO is gone from the code base
  10. The bot closes the issue #43

0pdd.com is a hosted service that finds new "puzzles" in your repository and posts them as GitHub issues. To start using it just create a Webhook in your repository just for push events with https://www.0pdd.com/hook/github payload URL and application/json content type.

Then, add @0pdd GitHub user as a collaborator to your repository, if it's private (you don't need this for a public repository). If your invitation is not accepted by @0pdd in 30mins, please visit this address https://0pdd.com/invitation?repo={REPO_FULL_NAME} - REPO_FULL_NAME is the full name of your repo e.g yegor256/0pdd

Then, add a @todo puzzle to the source code (format it right).

Then, git push to master branch something and see what happens. You should see a new issue created in your repository by @0pdd.

The dependency tree of all puzzles in your repository you can find here: https://www.0pdd.com/p?name=yegor256/0pdd (just replace the name of the repo in the URL).

Don't forget to add that cute little badge to your README.md, just like we did here in this repo (see above). The Markdown you need will look like this (replace yegor256/0pdd with GitHub coordinates of your own repository):

[![PDD status](https://www.0pdd.com/svg?name=yegor256/0pdd)](https://www.0pdd.com/p?name=yegor256/0pdd)

How to configure?

The only way to configure 0pdd is to add .0pdd.yml file to the root directory of your master branch (see this one as a live example). It has to be a YAML file with the following optional parameters inside:

threshold: 10
model: true
errors:
  - [email protected]
alerts:
  suppress:
    - on-found-puzzle
    - on-lost-puzzle
    - on-scope
  github:
    - yegor256
format:
  - short-title
  - title-length=100
tags:
  - pdd
  - bug

The element threshold allows you to limit the number of issues created from the puzzles in your code. In the example above, each time the appropriate push event is sent to your webhook up to 10 issues will be created regardless of the number of puzzles found in the code. If this limit is not set, threshold is assumed to be equal to 256.

Section errors allows you to specify a list of email addresses which will receive notifications when PDD processing fails for your repo. It's a very useful feature, since very often programmers make mistakes in PDD puzzle formatting. We would recommend you use this feature.

Section alerts allows you to specify users that will be notified when new PDD puzzles show up. By default we will just submit GitHub tickets and that's it. If you add github subsection there, you can list GitHub users who will be "notified": their GitHub nicknames will be added to each puzzle description and GitHub will notify them by email.

Subsection suppress lets you make 0pdd more quiet, where it's necessary:

  • on-found-puzzle: stay quiet when a new puzzle is discovered

  • on-lost-puzzle: stay quiet when a puzzle is gone

  • on-scope: stay quiet when child puzzles change statuses

--model

The model option used by 0pdd to opt-in to use ML model which prioritizes puzzles generated by pdd. If you would like to opt-in to puzzle prioritization, then add this option to your .0pdd.yml config file at the root of your project.

pdd is the tool that parses your source code files. You can configure its behavior by adding .pdd file to the root directory of the repository. Take this one, as an example.

The format section helps you instruct 0pdd about GitHub issues formatting. These options are supported:

  • short-title: issue title will not include file name and line numbers

  • title-length=...: you may configure the length of the title of GitHub issues we create. Minimim length is 30, maximum is 255. Any other values will be silently ignored. The default length is 60.

The tags section lists GitHub labels that will automatically be attached to all new issues we create. If you don't have that labels in your GitHub repository, they will automatically be created.

What to expect?

Pay attention to the comments @0pdd posts to your commits. They will contain valuable information about its recent actions. If something goes wrong, you will receive exception messages there. Please, post them here as new issues.

Remember that GitHub triggers us only when you do git push. This means that if you make a number of commits, we will process them all together. Only the latest one will be commented. It may not be the one with new puzzles though.

After we create GitHub issues you can modify their titles and descriptions. You can work with them as with any other issues. We will touch them only one more time, when the puzzle disappears from the source code. At that moment we will try to close the issue. If it is already closed, nothing will happen. However, it's not a good practice to close them manually. You better remove the necessary puzzle from the source code and let us close the issue.

How to contribute?

It is a Ruby project. First, install Java SDK 8+, Maven 3.2+, Ruby 2.3+, Rubygems, and Bundler. Then:

$ bundle update
$ rake

The build has to be clean. If it's not, submit an issue.

Then, make your changes, make sure the build is still clean, and submit a pull request.

To run it locally:

$ rake run

If you want to run it on your own machine, you will need to add this config.yml file to the root directory of this repository:

s3:
  region: us-east-1
  bucket: xml.0pdd.com
  key: AKIAI..........UTSQA
  secret: Z2FbKB..........viCKaYo4H..........vva21
sentry: https://[email protected]/229223
dynamo:
  region: us-east-1
  key: AKIAI..........UTSQA
  secret: Z2FbKB..........viCKaYo4H..........vva21
github:
  client_id: b96a3b5..........87e
  client_secret: be61c471154e2..........66f434d33e0f63a5f
  encryption_secret: some-random-text
  login: 0pdd
  pwd: GitHub-Password
smtp:
  host: email-smtp.us-east-1.amazonaws.com
  port: 587
  key: AKIAI..........UTSQA
  secret: Z2FbKB..........viCKaYo4H..........vva21
id_rsa: |
  -----BEGIN RSA PRIVATE KEY-----
  MIIJKAIBAAKCAgEAoE94Xy8TGMbnoK5cKJXWccr9qLLDc/liKpMAMlnQEFDCgi0l
  ...
  NaaFpowFg8LKSiwc04ERduu72Imv5GJBCkhS8F7laURXFcZiYNqBnWYzY0U=
  -----END RSA PRIVATE KEY-----

We add this file to the repository while deploying to Heroku, see how it's done in .rultor.yml.

How to install in Heroku

Don't forget this:

heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt

0pdd's People

Contributors

dependabot[bot] avatar firedev avatar golyalpha avatar h1alexbel avatar lastk avatar llorllale avatar mbao01 avatar mesut avatar pbenety avatar pdacostaporto avatar pnatashap avatar renovate[bot] avatar rultor avatar silasreinagel avatar snugghash avatar valentin-eb avatar vivekimsit avatar yegor256 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

0pdd's Issues

github_tickets.rb:36-39: This mechanism of body abbreviation is r...

The puzzle 3-9fa46796 in objects/github_tickets.rb (lines 36-39) has to be resolved: This mechanism of body abbreviation is rather primitive and doesn't produce readable texts very often. Instead of cutting the text at the hard limit (40 chars) we have to cut it at the end of the word, staying closer to the limit..

The puzzle was created by Yegor Bugayenko on 13-Dec-16.

Estimate: 20 minutes, Role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

puzzles.rb:87-89: Let's post notification messages to...

The puzzle 41-15a94873 in objects/puzzles.rb (lines 87-89) has to be resolved: Let's post notification messages to tickets where other puzzles were waiting for the resolution of this one. Let's update them with a summary information of what is left.

The puzzle was created by Yegor Bugayenko on 15-Feb-17.

Estimate: 30 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD.

show total repositories count

Let's render this total repo counter on the front page. We will have to go through all S3 objects in the bucket and count them. Will take a lot of time, so let's invent some caching mechanism. Maybe, let's use stateful.co counter and increment it every time we create a new S3 object, which we've never seen before.

notify users on new puzzles

Let's make it possible to configure in .0pdd.yml the list of users who should get notifications when new puzzles are posted. We should just post an extra message to them, asking to pay attention to the ticket. Something like this:

alerts:
  github:
    - yegor256
    - davvd

These two people will get a notification message: @yegor256 and @davvd

0pdd.rb:33-35: Let's create robots.txt entry point with...

The puzzle 1-6a5fba58 in 0pdd.rb (lines 33-35) has to be resolved: Let's create robots.txt entry point with an an empty content. Should be pretty easy. Maybe there will be some other static resources, let's add them too.

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 15 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:33-35: Let's create robots.txt entry point with...

The puzzle 1-6a5fba58 in 0pdd.rb (lines 33-35) has to be resolved: Let's create robots.txt entry point with an an empty content. Should be pretty easy. Maybe there will be some other static resources, let's add them too.

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 15 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:23-26: This is just a test puzzle. This is just...

The puzzle 31-3016794f in 0pdd.rb (lines 23-26) has to be resolved: This is just a test puzzle. This is just a test puzzle. This is just a test puzzle. This is just a test puzzle.

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 15 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb: 44-46: Let's implement this entry point, where ...:

Puzzle 3-04ce612e in 0pdd.rb has to be resolved: Let's implement this entry point, where we will render all puzzles we have for a particular project. Let's not forget about security too.. The puzzle was created by @yegor Bugayenko on 12-Dec-16

    If you have any technical questions, don't ask me,         submit new tickets instead. The task will be "done" when         the problem is fixed and the text of the puzzle is         removed from the source code.

Pull requests instead of write access

It would be better, I think, if the bot made PRs instead of asking for write permissions.

Moreover, it could scan the root folder of the repo for .rultor.yml, check if it has commandment rights and if so, it should ask rultor to merge the pr. This way also the build is run and it assures that no mistake was made while removing puzzles.

I think the integration with rultor is quite elegant. And if there i no rultor in the project, I still think people would rather check what the bot changed before merging. Since the bot does not run a build, it would be risky to just merge changes directly.

A couple of ideas

Since this is at the beginning of its life, I assume this is the right moment to suggest some ideas.

  1. Instead of webhooks, you could spin a checker somewhere, that would read notifications and post them to the /hook endpoint? I wrote such an EJB for a project of mine and decided to pull it out and make it reusable. Here it is.
    The user doesn't have to do any settings to the repo and the load is small, only containing the repo's fullname and issue number where the bot was mentioned. The lookup logic, avoiding spam and whatnot is up to the receiver to implement,

I think, instead of having it check my whole repo at every push, it would be more efficient to have it check when I tell it to: "@ 0pdd check please" - you could have a script for rultor at merge time: check for todo's in the changed files and comment if there are any.

  1. Why the write access needs? You already have rultor for automatic merging, so you might as well have it make pull requests and ask rultor to merge. I would add 0pdd as a commander in .rultor.yml. This way I could also check that the puzzles were correctly removed and see what other changes the bot did to my repo. Of course, if I choose to trust it completely, I add it as an architect and rultor won't ask for review.

I mean, if I like your work enough to use 0pdd, chances are very high that I already use rultor, so I have 2 of your bots, both needing write access. Besides, for write access, someone has to log into the bots account and accept the invitation and that takes time :)

3-04ce612e: :44-46

Let's implement this entry point, where we will render all puzzles we have for a particular project. Let's not forget about security too.

0pdd.rb:23-26: This is just a test puzzle 3. This is ju...

The puzzle 31-bd057c47 in 0pdd.rb (lines 23-26) has to be resolved: This is just a test puzzle 3. This is just a test puzzle 3. This is just a test puzzle 3. This is just a test puzzle 3.

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 15 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

.pdd config to email bugs

Let's make it possible to configure .0pdd.yml file for email reports. When something goes wrong after the push we must be able to send a stacktrace to the owner of the repo. That's what .0pdd.yml will be used for:

errors:
  email: [email protected]

Alternative to webhooks

Instead of having the users configure webhooks on their repos, you could have a running checker, that would check for notifications like comment mentions and ping the bot at /hook endpoint.

I wrote such a checker so it, or something similar, could be used.

Instead of checking the whole repo at each push event, the bot would check it only when commanded. It could also be commanded by rultor after a merge.

chat bot

Let's create a chat bot, which will respond to GitHub messages, with some status information about puzzles.

0pdd.rb:41-43: This feature is not implemented now and ...

The puzzle 15-1dc72086 in 0pdd.rb (lines 41-43) has to be resolved: This feature is not implemented now and it makes it very difficult to track the status of puzzles in a repo. Let's add this simple converter from XML to HTML (through XSLT).

The puzzle was created by Yegor Bugayenko on 13-Dec-16.

Estimate: 30 minutes, Role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:58-60: Let's add GZIP compression to this...

The puzzle 41-ab139346 in 0pdd.rb (lines 58-60) has to be resolved: Let's add GZIP compression to this output, since most XML files are rather big and it would be beneficial to see them compressed in the browser.

The puzzle was created by Yegor Bugayenko on 15-Feb-17.

Estimate: 30 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

repository renaming

What will happen if repository is renamed? We will re-submit all tickets to a new one -- that would be a big disaster. Let's find a way to prevent that.

0pdd.rb:33-35: This puzzle is just a test. It has to pr...

The puzzle 31-641f9fa5 in 0pdd.rb (lines 33-35) has to be resolved: This puzzle is just a test. It has to prove that the system works just well. Right after that I will remove it and it has to be removed from Github.

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 15 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

default labels

Let's make it possible to configure default labels for all GitHub issues created by @0pdd. Somewhere in .0pdd.yml let's create a config section for it:

tags:
  - bug
  - urgent

Doesn't seem to work for a certain repo

This is the repo: https://www.github.com/opencharles/charles-rest

I push puzzles and 0pdd doesn't open issues.
It used to work at some point, now it doesn't

I looked in Settings/Webhooks, and the calls to the webhook endpoint
get HTTP 503 server error response

I checked and the format is right, including one space indentation for all the new lines.

----
Later edit:

Response is 200 now (503 was my fault, bad content-type header), but still nothing happens.

Here is the stacktrace

0pdd.rb:44-46: Let's implement this entry point, where ...:

Puzzle 3-04ce612e in 0pdd.rb has to be resolved: Let's implement this entry point, where we will render all puzzles we have for a particular project. Let's not forget about security too.. The puzzle was created by Yegor Bugayenko on 12-Dec-16.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

job.rb:34-37: We may lose the moment of update and for...

The puzzle 13-4c2685d4 in objects/job.rb (lines 34-37) has to be resolved: We may lose the moment of update and forget to create an issue or close it. For many reasons that may happen. No matter why, we have to do the second check once in a while and update GitHub issues. Maybe every hour or so.

The puzzle was created by Yegor Bugayenko on 13-Dec-16.

Estimate: 30 minutes, Role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

/issues/unknown: 404 - Not Found

PATCH https://api.github.com/repos/foo/foo/issues/unknown: 404 - Not Found // See: https://developer.github.com/v3/issues/#edit-an-issue

/app/vendor/bundle/ruby/2.2.0/gems/octokit-4.6.2/lib/octokit/response/raise_error.rb:16:in `on_complete'
/app/vendor/bundle/ruby/2.2.0/gems/faraday-0.11.0/lib/faraday/response.rb:9:in `block in call'
/app/vendor/bundle/ruby/2.2.0/gems/faraday-0.11.0/lib/faraday/response.rb:61:in `on_complete'
/app/vendor/bundle/ruby/2.2.0/gems/faraday-0.11.0/lib/faraday/response.rb:8:in `call'
/app/vendor/bundle/ruby/2.2.0/gems/octokit-4.6.2/lib/octokit/middleware/follow_redirects.rb:73:in `perform_with_redirection'
/app/vendor/bundle/ruby/2.2.0/gems/octokit-4.6.2/lib/octokit/middleware/follow_redirects.rb:61:in `call'
/app/vendor/bundle/ruby/2.2.0/gems/faraday-0.11.0/lib/faraday/rack_builder.rb:139:in `build_response'
/app/vendor/bundle/ruby/2.2.0/gems/faraday-0.11.0/lib/faraday/connection.rb:377:in `run_request'
/app/vendor/bundle/ruby/2.2.0/gems/faraday-0.11.0/lib/faraday/connection.rb:177:in `patch'
/app/vendor/bundle/ruby/2.2.0/gems/sawyer-0.8.1/lib/sawyer/agent.rb:94:in `call'
/app/vendor/bundle/ruby/2.2.0/gems/octokit-4.6.2/lib/octokit/connection.rb:154:in `request'
/app/vendor/bundle/ruby/2.2.0/gems/octokit-4.6.2/lib/octokit/connection.rb:46:in `patch'
/app/vendor/bundle/ruby/2.2.0/gems/octokit-4.6.2/lib/octokit/client/issues.rb:130:in `close_issue'
/app/objects/github_tickets.rb:75:in `close'
/app/objects/puzzles.rb:88:in `block in close'
/app/vendor/bundle/ruby/2.2.0/gems/nokogiri-1.6.8.1/lib/nokogiri/xml/node_set.rb:187:in `block in each'
/app/vendor/bundle/ruby/2.2.0/gems/nokogiri-1.6.8.1/lib/nokogiri/xml/node_set.rb:186:in `upto'
/app/vendor/bundle/ruby/2.2.0/gems/nokogiri-1.6.8.1/lib/nokogiri/xml/node_set.rb:186:in `each'
/app/objects/puzzles.rb:88:in `close'
/app/objects/puzzles.rb:41:in `deploy'
/app/objects/job.rb:42:in `proceed'

0pdd.rb:48-51: For some reason, at the moment of this P...

The puzzle 3-5ec03020 in 0pdd.rb (lines 48-51) has to be resolved: For some reason, at the moment of this PUSH event arrival the repository is not ready yet and we don't have the current version of it. Let's introduce some delay or some other method, so that we can wait until the repo is in proper state.. The puzzle was created by Yegor Bugayenko on 13-Dec-16.

Estimate: 20 minutes, Role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:33-35: This puzzle is just a test. It has to pr...

The puzzle 1-e4c85f20 in 0pdd.rb (lines 33-35) has to be resolved: This puzzle is just a test. It has to prove that the system works. Right after that I will remove it and it has to be removed from Github.

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 30 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:52-56: At the moment we're not thread-safe. If ...

The puzzle 2-f47a3215 in 0pdd.rb (lines 52-56) has to be resolved: At the moment we're not thread-safe. If two PUSH events arrive at the same time we will/may have troubles with concurrent modification of S3 objects and Git repository. Let's introduce some queing system, which will put all requests into a pipeline and proceed them one by one.. The puzzle was created by Yegor Bugayenko on 13-Dec-16.

Estimate: 30 minutes, Role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:32-34: We don't have an SVG badge for GitHub, w...

The puzzle 15-a1d6817e in 0pdd.rb (lines 32-34) has to be resolved: We don't have an SVG badge for GitHub, which will show how many puzzles we have at the moment in the repo. Let's create it, in SVG format (and maybe in PNG too).

The puzzle was created by Yegor Bugayenko on 13-Dec-16.

Estimate: 30 minutes, Role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

3-04ce612e: :44-46

Let's implement this entry point, where we will render all puzzles we have for a particular project. Let's not forget about security too.

0pdd.rb: 44-46: Let's implement this entry point, where ...:

Puzzle 3-04ce612e in 0pdd.rb has to be resolved: Let's implement this entry point, where we will render all puzzles we have for a particular project. Let's not forget about security too.. The puzzle was created by @yegor Bugayenko on 12-Dec-16

    If you have any technical questions, don't ask me,         submit new tickets instead. The task will be "done" when         the problem is fixed and the text of the puzzle is         removed from the source code.

0pdd.rb:23-26: This is just a test puzzle 2. This is ju...

The puzzle 31-30e0dcda in 0pdd.rb (lines 23-26) has to be resolved: This is just a test puzzle 2. This is just a test puzzle 2. This is just a test puzzle 2. This is just a test puzzle 2.

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 15 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:23-25: We lose errors when they happen with the...

The puzzle 1-1c2ee73f in 0pdd.rb (lines 23-25) has to be resolved: We lose errors when they happen with the source code. They just drop into the log and that's it. Instead, we must email them to the repository owner or a predefined email from .0pdd.yml

The puzzle was created by Yegor Bugayenko on 22-Dec-16.

Estimate: 30 minutes, role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

0pdd.rb:33-35: Page not found is not implemented. When ...

The puzzle 3-41f7e700 in 0pdd.rb (lines 33-35) has to be resolved: Page not found is not implemented. When I open a URL that doesn't exist I see a default sinatra "not found" page, which is annoying.

The puzzle was created by Yegor Bugayenko on 13-Dec-16.

Estimate: 15 minutes, Role: IMP.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

puzzles.rb:35-38: It's not really effective to always save...

The puzzle 3-09c2d743 in objects/puzzles.rb has to be resolved: It's not really effective to always save the XML document back to storage, even when it was not really modified. Would be much better to check whether any modifications have been made and skip that SAVE() operation.. The puzzle was created by Yegor Bugayenko on 13-Dec-16.

If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.