Git Product home page Git Product logo

rosetta's Introduction

rosetta

A directory of various software development techniques demonstrated in multiple technologies and languages that you can compare side by side. Can be used for learning or as a reference.

Contributing

  • make changes and test things locally (see running locally)
  • submit your changes as new PRs
  • make sure to follow the Guildelines
  • all PRs will have a preview build generated automatically
  • get approving reviews for your PR
  • merge changes (all pushes get automatically deployed to the live website)

Currently all snippets are placed within /public/topics folder, in the form of <topic>/<tech>.md.

Add/modify snippets as Markdown (.md) files, exclusively. Github flavored Markdown (GFM) formatting is supported.

Adding a new tech

To add a new tech to an existing topic (i.e. add another column as an option), just create a file within /public/topics/<topic>/<tech>.md and populate it with content. Find the <tech> identifiers within /utils/techs.ts (filenames will be matched exactly with these expected identifiers).

If you don't see a technology listed, you can modify /utils/techs.ts to add a new tech and its details (this will "register" it), and then do the mentioned steps to add a file snippet.

Adding a new topic

To add a new topic, create a folder within /public/topics and add about.yml file (made based on this topic template). Then add tech files inside that folder one by one.

Running locally

This is a Next.js project (React with Typescript), hosted on Vercel. To learn more about it visit Next.js documentation.

To run things locally, use yarn and Next.js-provided scripts.

  • install dependencies by running yarn install
  • to start the development server use yarn dev (this will start listening on http://localhost:3000)

Contributor guidelines

to be defined

rosetta's People

Contributors

abstractalgo avatar

Stargazers

 avatar  avatar

Forkers

its-kundan

rosetta's Issues

Move topics metadata into YAML files

Instead of using Typescript types, move topics metadata into separate YAML files.

Example of /public/topics/<topic>/<topic>.yml:

label: Some label
description: Some description
categories:
    - Languages
    - Tooling

Fix back button behavior

Repro:

Kapture.2021-11-16.at.17.49.16.mp4

Desired behavior:

  • the back button should refresh the columns based on the current URL

Add focus mode

Add a quality-of-life improvement in the form of the "focus mode" - the view that takes the entire screen space and distributes selected columns equally (if 2 then each 50%, if 3 then each 33% etc).

Launch

  • twitter
  • hacker news
  • product hunt
  • slack

Add a GHA for sanity checks

Add Github actions that do some basic checking:

  • check if all topics have at least one tech (warn)
  • check that all techs are registered and can be matched (err)
  • warn with a comment if a destructive change has been detected (some of the previously available urls is now not available because it was either the topic or tech modified, or it was removed)

Update README with instructions

Add details on how to add new cards, or features, or languages.

  • submit a PR that will be reviewed
  • license information
  • NextJS + Vercel
    • automatic preview builds and CI/CD
  • adding new topic
  • adding new technology
  • code of conduct file
  • best practices
    • think about the readers' level of familiarity with the material (prefer more details and explanations over obfuscation and hard to understand, cryptic things)
    • stay consistent in writing style and styling
    • if you're making a change, think about its effect on technologies in the same topic - do you need to update them as well?
    • try not to post a topic with only one technology if you can - you may be an expect in one, but not in multiple areas, and that is fine, but makes it that much less useful for other people, so think about extending with at least one more tech for the comparison
  • don't:
    • remove or reorder someone else's content just for the sake of your own promotion
    • don't write in "sales language" - the website is not there to promote and market things, but primarily to help out by giving very concrete, pragmatic information and steps
  • it's ok:
    • remove and/or reorder things based on the popularity of technologies, for the sake of staying up to date with the latest trends
    • refresh the content with the latest instructions and steps (if it's useful, maybe even keep the older version around)
    • add mentions of your personal projects, as long as they focus on the specific topic sufficiently (if not, maybe even consider creating a new topic) and have some tangible traction so that readers don't get spammed and information gets diluted, losing all point

Smarter file retrieval

  • generate rosetta folder structure as JSON at build time and use that, instead of querying the file system on demand
  • pull markdown files directly from Github instead of local file system (should be faster + caching/CDN)

Landing page

  • favicon
  • og tags
  • text (copy)
  • pre-load an example put a link to an example
  • query params

Add icons for technologies

Add icons for technologies and show them alongside labels within dropdown pickers and buttons.

const TopicMeta: Record<
  string,
  {
    label: string;
    description?: ReactNode;
+   icon: string // path to an icon image
  }
 > = ...

Add more content

Some of the suggestions:

  • language features - ...language concepts (js/ts, py, rust, go, cpp, c, ...)
    • primitive types
    • arrays, slices, lists, tuples
    • records, objects, dictionaries
    • enums
    • unions
    • classes
    • inheritance
    • closures
    • generics
    • macros
    • memory management
    • types
  • tooling
    • env managers (pyenv, nvm, ...)
    • package managers (npm, yarn, pip, cargo, ...)
    • formatters & linters (eslint, prettier, clippy, ...)
    • local debugging setup
    • watchers, hot reload
  • BE web frameworks - ...techniques (expressJS, nestJS, fastify, django, beego, rocket,...)
  • API design - ...apis (REST, graphql, webhooks, gRPC, RPC-like)
  • message brokers - pub, sub, topics (rabbit mq, kafka, pubsub, redis, (bull, celery)...)
  • caching - read/write (memcached, redis)
  • proxies - ...configs (nginx, envoy, haproxy, apache)
  • databases - ...features (rdb, nosql, ...)
    • GUI clients
    • orms (per lang)
  • FE web frameworks
    • components, hooks (react, angular, svelte, solid, web comp)
    • stores (redux, native, mobx, recoil)
    • forms (react-hook-forms, formik, angular)
    • ssg & ssr (next, nuxt, gatsby, react server components...)
  • css - ...features (css, sass, less)
  • styling frameworks - ...features (pure css, styled-components, tailwind...)
  • deep learning - ...blocks & algorithms (keras, pytorch, tensorflow, native...)
  • 3d graphics - binding resources (opengl (old, new), webgl, webgpu, dx, vk, metal)
  • 2d graphics (svg, canvas)
    • ...primitives
    • ...screen effects
  • VCS - git, svn, p4

Add "Last modified on ..." detail

Display when the snippets have been last modified.

Story: As a user I want to be able to see when the snippet was last modified so that I can assess how outdated the information is.

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.