Giter Site home page Giter Site logo

open-source-ideas / ideas Goto Github PK

View Code? Open in Web Editor NEW
6.5K 233.0 222.0 118 KB

πŸ’‘ Looking for inspiration for your next open source project? Or perhaps you've got a brilliant idea you can't wait to share with others? Open Source Ideas is a community built specifically for this! πŸ‘‹

open-source-community ideas open-source-initiative community hacktoberfest open-source

ideas's Introduction

πŸ₯‡ Open Source Ideas have proudly led to 11 projects coming to fruition in a perfect harmony of talent and the open source spirit, and has over 200 ideas for those looking for a new project!

πŸ’‘ Open Source Ideas

For many working with Open Source, good ideas or cool projects aren't the limiting factor. Time is. But there are a lot of different people out there with various levels of experience and background. Some want to create open source projects, but don't know where to start or what to create. Why don't we solve both of these problems with each other's help? 🐦 πŸ” πŸ’₯

Welcome to Open Source Ideas! πŸ‘‹ This is a crowdsourced collection of open source ideas you can take inspiration from, join, or encourage others to attempt! The community is fueled by the dedicated contributors like yourself, and each and every idea is greatly appreciated!

If you would like to take a look at the existing ideas, head on over to the issues page! We've also labelled and tagged every issue to make it easier for people like yourself to find them!

Tags and filters

πŸ’ͺ Want to put in a minimal effort? Or perhaps build a rocketship? Got little time? Got a lot of time? Filter by estimated workload here!

πŸ§‘β€πŸ’Ό Are you just starting your programming carreer? Or are you taking a break from your senior backend developer position? Filter by difficulty?

🧐 Are you a sucker for the grand Internet of Things? Or perhaps you want to whip out your favorite OCR library and recognise some L's? Check out all our available categories!

If you're curious what other projects have started from this community, take a look at the Hall of Fame!


Let's show what open in Open Source means by creating a welcoming, inclusive and supportive community for all that want to be involved. My hope is that we can get more people involved with Open Source, learning the customary behavior and continuing to drive the open community forward. Read more about the initiative in the blog post.

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code.

I've got an idea to share

If there is anyone with cool ideas for projects and doesn't have the time to create them, post it as an issue on this repo, mark it with the appropriate label(s) and advertise it if you so please.

Try to include as much information as needed to implement the project, and be open to answering questions if necessary. Add a label to the project for whether it is estimated to be Little work, Medium work or Much work.
Also, try to answer the issue template as correctly as possible. If the project is perfect for first-timers, label the issue as First Contribute.
Finally, try to label the issue with the most appropriate tech categor(y|ies) to attract excited, motivated developers to your idea! (see list above)

I want to create a project

If you are Open Source-curious or just looking for your next project, you can look through the Issue-list and pick one of your liking. If anything captures your imagination, you can join the issue by commenting on it. If there are people who want to cooperate, that's fantastic. Just submit a comment and the person who created the issue can answer.

Feel free to keep the issue updated with the progress of the project and ask for help if needed. When the project is finished/published, add a link to the published project and the issue can be closed (and you & your teammates will make the Completed Hall of Fame below!)

If it already exists

As is often the case with Open Source, a project already exists, but people aren't aware that it does. If there are any issues opened that already exist in the real world, let us know and the issue will be closed (with a link to the existing project for people to use).


Completed Hall of Fame

ideas's People

Contributors

cugu avatar fredrikaugust avatar koppor avatar kreijstal avatar midzdotdev avatar mikaelbr avatar misacorn avatar mrosta avatar msantam2 avatar olliedean avatar roymoran avatar shlomif avatar veredrec 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  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

ideas's Issues

npm package for pairing over ssh/tmux

Project description

Make a simple package that spits the command you have to send to a user you want to pair with over ssh.

It would accept a user's Github username and add her public ssh key to your machine to allow her to connect via ssh.

Originally described on Coderwall by Mislav. His command is located here.

Ideally this would also use ngrok under to hood to allow tunneling so you don't have to configure your router.

The advantages over Mislav's command would be the ease of install with something like

$ npm install -g pair
$ pair mikaelbr

Relevant Technology

Node

Who is this for

Novice developers

P2P throttling detection and ISP stat collection

Project description

Some ISPs (especially wireless ones) throttle P2P. Some are doing other bandwidth fraud like better speed for measuring websites or (especially wireless ones) reducing speed after certain amount has been downloaded on "unlim" (which are in fact not unlim, but are often (fraudlently) called unlim) plans. It worth to know which ISPs do it to make right consumer decisions. There should be an app for a PC and a smartphone doing the following:
1 detecting ISP. It can be done using various databases, but I know an universal (though not very secure, so it should be validated against a db) way: reverse dns lookup to own IP. Own IP can be got with stun.
2 Measuring speed to speed-measuring websites like SpeedTest, https://fast.com/, https://2ip.ru/, https://yandex.ru/internet/ . Some of them also return geolocation and ISP info.
3 Measuring speed using bit-torrent (using libtorrent rasterbar), IPFS and blockchains of popular cryptocurrencies (no validation, just downloading). ISP of peers should be determined and only the peers of another ISP should be used for testing, because speeds in ISP intranets are usually (at least in Russia) much faster (~GBps) and are not a part of a plan (in the sense that they are not affected by plans), but we want to measure internet speed we pay for. Torrent files and magnet links for testing should be either user-provided (to resist fraud with whitelisting certain infohashes) or automatically retrieved from websites sharing linux distros (usage of TLS is mandatory!).
4 Throttling methods should be detected.
5 A user should enter their speed ISP must provide according to the contract.
6 A report should be shown to user. Report should be exportable into a json text file. Also there should be a way to send statistics to URIs and the way should be documented. PoW should be utilized to prevent sybil attacks by ISPs.

A user installs the app on a phone, pushes the button, the app should do most of the rest automatically. A mobile app implementing should be started as early as cli prototype is finished to encourage doing the measurements on wlan networks other than home ones.

The tool can have the following architecture:

               a cli app            a gui app              a mobile app  
                     a native lib encapsulating the measurer
https measurer       torrent measurer        ipfs measurer      blockchain measurer
plugins for sites    plugins for sites   
libcurl              libtorrent rasterbar 

Relevant Technology

https://github.com/jtriley/pystun + https://github.com/DamonOehlman/freeice/blob/master/stun.json + https://gist.github.com/zziuni/3741933 + https://gist.github.com/mondain/b0ec1cf5f60ae726202e
https://www​.libtorrent.org/
https://github.com/ndt-project/ndt/
https://github.com/sivel/speedtest-cli
https://ooni.torproject.org/
https://github.com/KOLANICH/CSharp-SpeedTest-Client
https://github.com/ipfs/py-ipfs
https://github.com/Agorise/c-ipfs
https://github.com/k2name/speedtest-zond

NPM Notification

Project description

Just an idea I had earlier. A way to subscribe to push notifications on your computer when a major change occurs in a project you follow. I was thinking specifically on NPM packages. Let's say I use lodash or a test framework such as mocha or Jest. When a major change of that is updated I'd like to know that. So what better then to get a native notification on my computer the exact moment it updates?

You could have a CLI similar to:

# Add new package to listen to
npmn add lodash

# Remove package
npmn remove lodash

# Add several at once
npmn add mocha jest

# Show all packages we're listening to
npmn list
> mocha (current @3.1.2)
> jest (current @16.0.1)

# Listen for minor changes also
npmn add --minor lodash

This can use things like the NPM hooks in combination with node-notifier. This is not quite the same as https://gemnasium.com/ although it share some traits.

Relevant Technology

JavaScript, NPM, Node.js, CLI design, NPM Hooks

Who is this for

Anyone who is interested in digging more into NPM and want to test out how to design good CLI tools. Don't think this is too much work in terms of days of development.

ECMAScript and RPC adapter plugins for OSMAnd

Project description

There is a modular hackable navigation app called OSMAnd. It can be extended with plugins which can be in separate apks. But writing a plugin implies that the writer is wiling to use JVM-based languages like Java, Kotlin and Scala. Some cannot afford that, IDEs for JVM-based languages are too heavy.

The solution is to create plugins doing the following:

  • loading of plugins written in "foreign" languages
  • management of plugins written in "foreign" languages embedded into OSMAnd plugins manager
  • running a runtime necessary to run such plugins:
  • ECMAScript
  • Mozilla Spidermonkey
  • Google v8
  • Android WebView This can be the easiest way, but webview is shit, often an obsolete shit, it's better not to touch it.
  • RPC
  • I guess gRPC should be used. It is possible to design a more effective rpc by replacing protobuf with Kaitai Struct, but this is out of scope.
  • OAuth can be used for authentication.
  • Flyweb proposal may also be useful here.
  • The plugin must restrict the connections to localhost by default.
    • Adapt the Java API into a convenient form to use.

Who is this for

For the ones familiar with Android development, NDK and embedding runtimes

Why nit to create an issue there? It was already created., but the devs are too busy to start implementing it.

Google Books alternative - Full text browsing and search

Project description

I have a lot of ebooks, mostly in PDF format, but some EPUBs as well, and I feel the information in them is often better than on the Internet. But I've got no way to find that information easily. I'd like a self-hosted (ideally web-based) platform that I can just upload all my books, and then search and browse them from wherever I am.

I asked for something like this on HN, and other than general full text search apps to run on my desktop, there really wasn't anything to do this.

Relevant Technology

Needs to support hosting on a Linux box. Should ideally be usable from Windows, Linux, Android, Mac, etc. through a web interface.

Who is this for

Probably at least somewhat savvy users since we're talking about self-hosting here, but hopefully one could admin a server for their family to use or something.

Java code generation for config interfaces

Project description

For dealing with properties/configuration files in java, and mapping them to interfaces there is an already incredible OWNER framework. As you can see on the basic usage page, it allows us to very conveniently abstract where and how something is configured.

It would be nice to have something very similar but with the following differences:

  • Instead of creating 'proxy' objects for the actual implementations at runtime, they should be generated during compile time. I want the usage to be like dagger (I have never used dagger myself though)
  • Support lazy loading/delegate the loading to a user provided class. relevant issue on the owner repo
  • Nested Configurations, almost ready in owner! relevant PR (almost there!)
Basic Usage (copied from the basic usage link above) ServerConfig.properties
port=80
hostname=foobar.com
maxThreads=100
ServerConfig.java
public interface ServerConfig extends Config {
   int port();
   String hostname();
  @DefaultValue("42")
   int maxThreads();
}

elsewhere in the code...

ServerConfig cfg = ???ServerConfigFactory.get();
System.out.println(cfg.hostname() + ":" + cfg.port() + " will run " + cfg.maxThreads());

Relevant Technology

I think it should be compatible with java 8's default interfaces, and follow in OWNER's philosophy of having 0 dependencies.

very basic annotations processing article: https://deors.wordpress.com/2011/10/08/annotation-processors/

Who is this for

intermediate+ java developers I'd imagine.

I am willing to work on this but not sure where I should start / get feedback on designs etc. Unfortunately it looks like the original owner library is not very active.

SQL-based programming language for web development

Project description

As most web sites/applications are database-driven these days, I think there may be a place for a new programming language/environment, where web and database are one system.

Let’s look at some of the way we may be developing database-driven websites/applications now…

We write our SQL, put it in a string in PHP and send this request to MySQL which returns the data we need, which we then translate and present in HTML.

Or we have a model of our database in PHP and we use a query builder to create our query which gets translated to SQL which we then send to MySQL which we then translate into our model and then present in HTML.

Or maybe we are also using database stored procedures.

Could this be improved by producing our website directly in the database? And database-driven web development could require one less language to learn and master.

What I am thinking is a hybrid language combining the query functionality of SQL with the functionality of a web programming language like PHP.

The database structure would be known, so there would be no need to create models (although you might have custom views).

Even though the application and database code would be one, the system would of course need to allow for separation of concerns. It would also have to allow for multiple sites/applications using the same data source.

I’m not sure if this project would be best as an entry-level language (as PHP once was), possibly something like SQLlite combined with PHP. Or whether it would be best as a larger framework like MySQL combined with PHP, that can scale across multiple servers, and something that can take advantage of the likely performance benefits of a combined system.

I’ve got more ideas of how this could work if there’s any interest.

Relevant Technology

Completely open. Possibly base on an existing open source database and/or programming language.

Who is this for

Would require experienced developers.

MySQL/Postgres ER diagram generator

Project description

Autogenerate , or load cached, force layout node graph, example, by reading the information_schema metadata from MySQL/Postgres/Oracle/SQL Server. Node tethers would represent foreign keys. Hovering or highlighting a node could show the table description.

Security should be the first priority, followed by performance and usability.

Relevant Technology

The example is Ontology Visualization from d3.js Gallery.

Who is this for

Advanced experience.

General Purpose CLI Dashboard

Project description

This is just a conceptual idea I've got some months ago, and I haven't really thought it through too much, or researched the topic, but I thought I'd share it here to hear other peoples opinion about it.

Weirdly enough, but 2016 seems to be the year the CLI makes it revised return for the fullest. We've seen many tools that have gotten much more focus on usability/UX in CLI, instead of just "good old API-design" for commands. You have interactive watchers such as in Jest, Webpack Dashboard, and more. Things like blessed (and maybe for some react-blessed) seems to have allowed people to create more advanced CLI-systems in a easier way.

Why not use this to create a pluggable general purpose CLI dashboard? By this I mean for instance just the ability to refer to different Unix-streams (or commands) and a grid size and automatically create an interactive dashboard from it.

Something like either a hookup file:

// dashboard.js
const dashboard = require('cli-dashboard');
dashboard([
  { command: 'mocha -R dots -w', size: 2 },
  { command: 'webpack -d -w', size: 4 },
  { command: 'onchange 'app/**/*js' -- eslint', size: 2}
]);

or by using package.json scripts:

// dashboard.js
const dashboard = require('cli-dashboard');
dashboard([
  { script: 'test', size: 2 },
  { script: 'build:js', size: 4 },
  { script: 'watch:lint', size: 2}
]);

and running

node dashboard.js

or even

cli-dashboard

Could launch a CLI dashboard looking something like

--------------------------------------------------------------------------------
|                                       |                                      |
|                                       |                                      |
|                 mocha                 |                                      |
|                                       |                                      |
|                                       |                                      |
-----------------------------------------                                      |
|                                       |                 webpack              |
|                                       |                                      |
|                eslint                 |                                      |
|                                       |                                      |
|                                       |                                      |
|                                       |                                      |
--------------------------------------------------------------------------------

Based on the releative sizes.

Maybe this isn't as useful as I'm thinking now, but maybe the idea sparks some other ideas with you.

Relevant Technology

JavaScript, Node.js, CLI, blessed, NPM, Frontend build systems

Who is this for

Someone with experience with CLI systems and the need to organize different CLI outputs. Labelling this as a lot of work, even though I don't think it has to be that massive.

A free open-souce client for Coursera (Android)

Project description

There exists a proprietary app for Coursera. Unfortunately it has too many permissions and has not-enough customizeable interface.

The required features:

  • black theme
  • content (audio, video, subtitles, supplementary materials, quizes, etc.) downloading
  • quizes and built-in selfcheck quizes
  • search and enrolling into a new course
  • should be able to operate without any cache in flash memory (cache in RAM is allowed)
  • passing an URI to stream to an external player via intent.
  • as an option, custom pixel shaders, which can be used, for example, to turn white background into black (for example by inverting colors) to limit screen burn-in

It may worth to develop an universal video-playing app (for example NewPipe is developing this way, I have created an issue about Coursera support: TeamNewPipe/NewPipe#1141) and support media sources like YouTube, Vimeo, Coursera, Stanford, MIT, etc as plugins.

Relevant Technology

https://play.google.com/store/apps/details?id=org.coursera.android
https://github.com/coursera-dl/coursera-dl
https://github.com/coursera/courseraoauth2client
https://github.com/coursera/courseraresearchexports/blob/master/courseraresearchexports/exports/api.py
https://github.com/coursera/courseraresearchexports/blob/master/courseraresearchexports/models/utils.py
https://github.com/coursera/courseraresearchexports/blob/master/courseraresearchexports/constants/api_constants.py#L17-L20

Who is this for

Any Android developer.

Gamification of Source Code Documentation & Contribution

Project description

In the talk I am your user. Why do you hate me?, Donna Benjamin talks about how open source software often possess a steep learning curve, lack documentation, and have difficulties transforming users into contributors. In the learning curve section she referred to a funny graph depicting that of some famous MMORPG games, the most cruel curve being that of EVE Online.

With some exceptions, game is probably the industry that has mastered the learning curve. One of the most engaging experience I have had with coding is wrapped in a Japanese game developed by an IT recruitment company called Paiza. Other examples include LeetCode, Codewars, etc.

The way games ease the learning curve is through more granular division of basic operations and immediate feedback on success and failure. When it comes to contributing to an open source project, it doesn't look good on both front. The most basic operation of contribution is down to creating an issue, but then goes right into the whole code base, be it a feature, or a piece of documentation.

Documentations is a good start point towards a more granular coding experience. For non-programmers, other than reporting bugs and requesting features, they are most ready in adding documentations, especially from a user's perspective that's different from a developer's. For novice programmers, writing documentation introduces them to the codebase. In all situations, documentation is easier and serves as a faster feedback than a bug fix or a feature patch.

On top of documentation, the code base need to be broken down into smaller pieces. The important thing to remember is that the code base is not modular, no matter how modular it is designed to be, to someone who don't know about program architecture. The way of breaking down the code base is dependent on the language, but as a first step it is useful to identify all functions (methods). The pieces then need to be ranked by their difficulty, which can be determined roughly by their length (number of lines).

The immediate feedback part is probably the easier part during gamification. A popup of congrats should accompany the finish of a documentation string. Accumulation of difficulty points on the condition of successful merge can serve as a mid-term motivation. In the end, a log of resulting commits and contributions is what hopefully satisfies the players in the long run, as well as their improved knowledge.

Because the game wants to facilitate contribution, it needs to interface directly with online source control utilities to utilize features such as pull requests. From the project's standpoint, the game may also serve as an education tool about best practices regarding sending pull requests.

Relevant Technology

Accessibility: Web related techs
Source code analysis techs (probably language specific)
Source control interfaces

Who is this for

The first prototype would probably be more an assistance tool for motivating experienced developers to write more documentations. Then I hope it expand to novice level programmers and non-programmers.


Share on Twitter/other social media if you will. Something like

New project on Open Source Ideas Initiative: Make Doc Game – https://github.com/mikaelbr/open-source-ideas/issues/32

Slack alike IRC client

Project description

Slack is a glorification of IRC with search support (for paid plans) and file uploads. Current trend for open source communities is to use Slack as a communication tool, but it all started years ago with IRC. IRC has played a major role in connecting open source communities over the years and is a well known standard in the developer circles.

Slack's main advantage over its competitors is slick design with great color scheme and it would be a good idea to use it as inspiration for this.

There are a lot of IRC clients out there but none of them has great design. The most popular among real hackersβ„’ is irssi which runs inside a terminal.

The cool part of using Electron for this is that we can reuse the design and logic on the web and create a better experience for web-based IRC clients too, like Freenode's.

Drawbacks of using this instead of Slack would be lack of support for search and file uploads.

I guess it's okay to support only MacOS with the initial release.

Relevant Technology

Electron, React, Redux, Node

Who is this for

Experienced developers


Joined by @georoot

Add emoji keyboard layout into android app Hacker's Keyboard

Project description

There is an awesome screen keyboard app for Android called Hacker's Keyboard (F-droid, GitHub, Play Store). Unfortunately it lacks emoji. We need a new separate layout dedicated to emojis. There should be several groups, i.e. faces, tools, animals, etc. Some characters should be usable as modifiers, i.e. a man + a tool = a man having that job, or skin color modifier. So on the tools palette there should be a modifiers keys like shift. A tap changes the kind of modifier, a hold activates and deactivates. The keyboard should support font adjustment because emojis look different in different fonts.

klausw/hackerskeyboard#622

Who is this for

An android developer familiar with OpenGL and keyboard apps.

Script/Page to convert gist to runnable demo

Project description

A JavaScript library which takes a link to a gist and for each file in the gist (e.g. something like this gist) it creates a syntax highlightet, editable input field, and the result of that file.

This can either be a script that you can include on your blog, or it could be a standalone web page where you can take a query parameter to a Gist ID and automatically create series of input fields.

This page or script can be used to create workshops, editable demo files, examples for documentation, etc.

One could also take this one step further and take a gist of a markdown document and look for code blocks. This way one could automatically make blogposts interactive just based on the Gist sha ID.

Relevant Technology

JavaScript, HTML, CSS, Web. Specifically Ace/CodeMirror, sandboxing javascript and running it in the browser.

Who is this for

This is for someone who sees the value of having the possibility of automatically creating interactive demos and editable code from Github Gists. Probably a medium timeframe project.

A free open-source simple (for the first time) graphic editor for Android

Project description

There are several graphic-editor-like apps, but there is no a good enough free open-source graphic editor allowing anyone everything from the list:

  • crop, rotate, flip an image or it's piece
  • save the result in a file
  • change background color
  • set the default background color
  • create an image of predefined resolution and mode
  • draw with a pressure- (and probably angle-) -sensitive input device, like a stilus or a finger on some touchscreens
  • select and move pieces of image
  • simple layers
  • fill an area with a color

Relevant Technology

https://github.com/valerio-bozzolan/AcrylicPaint
https://github.com/androidsoft-org/androidsoft-coloring
https://github.com/konradrenner/kolabnotes-android
https://github.com/SimpleMobileTools/Simple-Draw
https://github.com/zaki50/MemoPad/
https://github.com/dsandler/markers/
https://github.com/rjmarsan/Pixelesque/
https://github.com/rosenpin/QuickDrawEverywhere
https://github.com/alterakey/effy
https://github.com/tux4kids/Tuxpaint-Android
https://github.com/federicoiosue/Omni-Notes
https://github.com/SecUSo/privacy-friendly-notes

https://git.gnome.org/browse/gegl/tree/

Who is this for

For Android devs familiar to OpenGL and NDK.

Open Source Version of onlinevideoconverter.com

Project description

I want to make an Open Source version of this site : onlinevideoconverter.com

It's just a basic web application which converts videos - uploaded videos or YouTube and other video site videos given the URL, in the cloud. Why create it ? I am a freelancer and I was asked if I could do this work in Fiverr. It was a nice project to work on, so I started it off and have created a basic version for converting uploaded files (not video URLs though). Here's a glance

converter

And the GitHub Repo is here : http://github.com/karuppiah7890/online-av-converter . [ Edit : I am NOT MAINTAINING the project currently. PRs are welcome though. ]

It IS an Open source software. And may be it can get some money too ( by hosting a SaaS or through donations ? ) if we do some more UI which I am bad at and then add support for YouTube and other video site links. And now I am not goving it to the Fiverr buyer. I turned down the offer as it required too much UI work including an Admin UI. And I am too bad at UI. Still learning it.

Relevant Technology

Platform : Web
Language : Js - front end and back end (NodeJS) too

Back end - It's built using Express Js web framework and uses ffmpeg to convert the videos with a worker process. And it's a Dockerized application, and there are other services which it needs, like - RabbitMQ message broker, Redis DB, Nginx for serving front end files and to act as a reverse proxy for the back end. All of the services run as a Docker container. The architecture may look bad to you, if so, please do suggest and help me :), I don't know much

Front end - Bootstrap for styling and jQuery for client side Js. Has only a single page and single route now. Looking forward to make it better. Front end developers are welcome. Making the current one better or using a completely different library for the front end like React.Js, Vue.Js etc is also welcome. I would love to learn a bit of them too! :)

Who is this for

Beginners who want to learn about Backend (NodeJs)/ Front end (React, Preact, Vue etc)/ Docker/ Docker Compose/ Redis DB/ RabbitMQ


Share on Twitter/other social media if you will. Something like

New project on Open Source Ideas Initiative: 
Open Source Version of onlinevideoconverter.com – https://github.com/mikaelbr/open-source-ideas/issues/37
A basic version : http://github.com/karuppiah7890/online-av-converter

Xtreme Community Edition

The software company Xara released a limited version of its graphics design suite as source code in 2005, designed for use under Linux. Various issues caused the Xara developers to abandon XaraLX in favour of the paid/commercial suite that still exists today.
However, the source code for XaraLX is still available on GitHub and I know many frustrated users of the
modern Photo and Graphic designer that would love to see a fork of good old Xara Xtreme polished and up to date.
This project is perfect for small start-up software companies looking for a project - the source code is there but just needs editing.

GitHub: https://github.com/samuell/xara-xtreme

Open Source version of SoundSeeder App

Project description

I want to make an Open Source version of this App :
https://play.google.com/store/apps/details?id=com.kattwinkel.android.soundseeder.player&hl=en

For reasons similar to this issue and this issue is a related one :
#27

Both issues are related problems if you check out the Apps. It's just that in SoundSeeder App, the Android device is the source of the audio and all other devices including Android can act as speakers. Unlike in SoundWire App, where only the PC/Raspberry Pi is the source of the audio.

Relevant Technology

Platform : Android
Language : Java
Concepts to know : Networking. Streaming, especially Audio Streaming.

Who is this for

Experienced developers.
Much Work!


Share on Twitter/other social media if you will. Something like

New project on Open Source Ideas Initiative: 
Open Source version of SoundSeeder App - https://github.com/mikaelbr/open-source-ideas/issues/28

Joined by @prahladyeri

Korotko(v|ff) sounds simulator

Project description

Electronic cuff-based blood pressure meters are really bad. Their measurements are wrong, they may differ by 20 mm Hg, and doctors advise to use the manual method as a more precise one. So people need to be trained to use a manual shpygmomanometer.

1 A user opens a web page.
2 On that page he sees a button.
3 He pushes the button. The app samples systolic, diastolic blood preasures and other parameters like heart rate from the distributions.
4 The app draws cuff pressure gauge using SVG.
5 The app synhesizes and plays Korotkov sounds (all the phases, including the asculatory gap) synchronized with the cuff preassure gauge.
6 The app shows 2 text fields where the user should enter his measurements.
7 The app checks them and shows the user the correct values.
8 The app replays the measurement process with annotations on the gauge.

Relevant technology

  • JavaScript
  • WebAudio
  • SVG
  • CSS

Dependency graph based online learning system

Project description

1 Create a model of knowledge of all areas as a directed graph of dependencies of concepts, and these concepts should be as small and as reusable as possible.
For example for understanding the topic physics:phonons you should understand physics:normal modes of lattice, physics:secondary quantization, physics:lattice potential energy power expansion first. To understand physics:normal modes of lattice you need understanding physics:Brillouin zone and physics:lattice potential energy power expansion again first. For understanding physics:Brillouin zone you should understand signal processing:aliasing first. It's not physics but it is closely relevant to the topic! There are lots of such kind interlinks between areas, for example you need math:windowed Fourier transform to understand physics:Heisenberg uncertainty relation or physics:natural line width or physics:time dependent perturbation theory or physics:single slit difraction.

2 When we have such a graph we can assign to each concept a list of URIs to web resources devoted to such concepts, such as video lectures like the ones on Coursera or Khan Academy or books or lectures in PDFs (many lecturers in the universities have put their lectures and books online for their students, but they are usable and downloadable for anyone else). I guess the creation of list of such URIs can be partially automated.

3 A person fills own profile: marks the learned topics.
Than he selects the topics he wanna learn from the graph and the system computes the path to the roots, removes the concepts he already knows and gives him the grap of topics he needs to learn with the links to the resources. When he learns a topic he marks it as learned.

Such process should give a better understanding than using a single source of lectures because every lecturer omits some important topics and links.

Building an Anrdoid-like permissions interface for Linux desktops

Project description

Sometimes it is useful to employ 3rd-party software (which might be closed source) that you can not fully trust. Currently, there is no user-friendly way – at least that I am aware of – which would allow you to limit the permissions of such an application. Common mobile operating systems offer some form of privilege management, so that the user can grant permissions, such as accessing contacts, on a per application level. In my opinion, in would be very convenient and lead to a higher level of security to have an equivalent interface under Linux. After all, it is an ordinary wish to use closed-source software, but I don’t think providing access to all personal files is the best default behaviour.

Of course, the system architecture of a mobile OS differs greatly from the one of a Linux desktop. But I think that AppArmor profiles could be managed by a GUI to yield a similar user experience.

Here is a rough mockup of how the controls for a single application could look like:

mockup_s

Questions:

  • How to collect a list of the applications that are managed by the interface?
    Possible solution: Collect all executables in the current path environment and offer the ability to manually add executables.

  • What kind of permissions would be managed?
    Initially, I think just granting read / write privileges to files and directories would be a good starting point. At a later stage a nice extension would be to control special privileges such as network or webcam access etc.

Relevant Technology

  • Linux
  • AppArmor

The interface itself could be written in various languages. Using python ant gtk would certainly be one popular option.

Who is this for

Creating the GUI itself is trivial and could be done by a novice developer. The more sophisticated part is the management of AppArmor rules and having a strong knowledge of linux systems would certainly help here. I think creating a first prototype shouldn't take too long and an intermediate level should be good enough for development.

Further reading

Android File Sharing Library

Project description

I created a simple Android App to share files within a WiFi LAN between two mobiles, where one mobile creates a hotspot and the other connects to it and the network is formed and the files are shared.

It was a very basic App, so I wanted to upgrade it. I had created a music player by learning from a tutorial and then upgraded my basic App to one, where people can share music files through my App and listen to the music in the same App. Best part is, in your phone, you get to see the list of music files in your friend's phone and when you think you like one of the songs in the list, you can click it, and only then the song will get downloaded (to your phone) and then it will play automatically. And your friend use other apps in her phone while these files are being shared and you can also use other Apps while listening to these songs.

Later when I wrote about how ShareIt probably works in my Quora Answer based on my experience on creating a File Sharing App, I found that many people want to know how it works and found that there are almost no Open Source Apps for it. So, now I want to create an Android File Sharing Library, which can be used by people who want to add File Sharing facility to their App. And I want to make this library Open Source. Also, I am planning to use this library in my Music App that I mentioned above and make that Music App Open Source too, may be. For now, it's in a private repository.

I am gonna start the work soon on this. But before that, I wanted to follow some best practices to use in the library. Like what Android Components to use, and use the most appropriate ones. I put up a post about this here. But it didn't help me much. And I was asking it for my App. I think my Music App's code isn't efficient, so I put up this Q. So, when I create this library that I am talking about, I will replace the code in my Music App with this library usage.

I need some Android Experts, who are good in networking, who can work with me on this Library. Comment here, and we can discuss about it and I will show you my File Sharing code that I used in my Music App and show the whole App code too.

Relevant Technology

Platform : Android
Language : Java
Concepts to know : Networking. Socket Programming in Java

But it's fine if you don't know the concepts. I can help you. And link you to articles based on them. But it would be good if you have some knowledge in Android. It's very necessary, because I am not an expert in Android.

Who is this for

Everyone is welcome.
And Experienced Developers and Novice developers are needed.
Beginners are welcome if they are interested in networking and connected devices. [ It's fine if you don't know networking. We can help! We are all here to learn! ]

It has much work!

Twitter authenticator for JupyterHub

Project description

JupyterHub is a wonderful project that allows multiple users to spawn Jupyter notebooks (formerly IPython notebooks) in a shared space and collaborate together. It has support for various authentication backends - You can see a partial list in https://github.com/jupyterhub/jupyterhub/wiki/Authenticators.

Adding Twitter OAuth to that would be wonderful! Would probably be added to https://github.com/jupyterhub/oauthenticator - which already has google / mediawiki / etc OAuth based backends.

Relevant Technology

This is exclusively python - specifically, with the Tornado async web framework.

Who is this for

Novice developers who want to learn more about how OAuth works / async web frameworks work!

Netflix.com Kodi plugin using Electron

Project description

Using Electron, which has Widevine support, create a Kodi plugin that cleanly integrates Netflix. Other plugins like Flix2Kodi scrape Netflix and show individual show episodes that aren't guaranteed to be in order. This does not make for easy binge watching.

The plugin should handle login credentials through Kodi settings. When a user opens the plugin, it should display the Netflix.com website already logged in. I use a keyboard to navigate Kodi, when playing a movie/TV show, I would expect escape to return to the previous screen or if a video is not playing, exit the plugin.

It would be nice if JavaScript files could be injected from a specified directory into the page like GreaseMonkey or TamperMonkey. It would allow users to theme Netflix.com to their personal liking and autoplay next episodes.

Relevant Technology

Kodi plugins are written in Python and Electron is JavaScript. Releases should be packaged with the necessary WideVine browser plugins for Windows, OSX and Linux. This plugin should work on all three operating systems.

Who is this for

Intermediate - Advanced experience.

Open Source Ideas Website

Project description

Make a website for this repository. This can be a great way to get involved. To make the issues and project suggestions as accessible as possible we should have a website with search, potentially categories and a pretty design. This project is pretty open for the person who is interested

I was thinking this could be pretty easy implemented by basing all the data on the Github Issue API. Using the Github API as Backend means there is no need for a server side component or a administration. Which makes it much smaller of a task. This can be done as simple as possible initially. A listing of all the issues and when navigating to the issue you see relevant comments and updates on the issue.

The goal should be that people could open the website and see if there are any new project suggestions and open that issue to claim it if they so please.

This is a great opportunity to experiment with GraphQL from the Github API, a no-server dynamic JavaScript application.

Feel free to ask if there are any questions.

Relevant Technology

JavaScript, GraphQL, Github, CSS, HTML, Web.

Who is this for

This project is for anyone looking to get involved with this project. It's not very technically difficult, but depending on the direction it might require some design knowledge or help from someone who has that.

A wrapper library for JavaScript engines

Project description

There are plenty of modern JS engines:

  • Mozilla SpiderMonkey
  • Google V8
  • Microsoft Chakra
    ...
    and some non modern ones:
  • Android WebView.
  • duktape - a ES5 JS engine which is intended to be embedded and was designed to be small. There is also no JIT-compilation or modern JS features.
  • IE9 (very old and obsolete JS engine found in Windows OSes from XP to 8.1)
    .

Some of them have own shared libraries. Nearly all of them have terrible API incompatible with each other.

When you wanna embed a JS engine you may want to have the latest JS but not to update them. The solution may be an abstraction layer library doing the following:

  • creating a unified API for apps which wanna embed a JS engine, hiding differences between engines and ugliness of their APIs
  • discovering engines installed in the system, choosing the best one which meets the user's requirements and loading it in runtime.

So a dev just uses the library. And it works on any machine having any modern web browser. When a browser is updated the js engine is also updated, because the library uses the JS engine used by browser.

Relevant Technology

node.js has some abstraction layer allowing to replace v8 with chackra and spidermonkey

`atom-notifier`: GNTP for Atom

Project description

Implement a Growl Notification Transport Protocol (GNTP) server for Atom.

Atom has it's own built in notification system, where you get a message in the upper right corner. This is easily pluggable by creating an atom plugin. This can be combined with the specification of the Growl Notification protocolo to create a server that listens for notifications on a port. In that way you don't have to install any third party applications to get notifications, you can isolate your notifications to your developer environment.

This is relevant as many programming tools uses notifications, such as testing frameworks (like mocha-notifier-reporter or jest) uses node-notifier to do their notification. And node-notifier falls back to Growl notifications if nothing else is found. This way you can get your notifications directly to your editor, in a cross platform and non-intrusive way.

Relevant Technology

JavaScript, Node.js, node-notifier, Growl, Growl Notification Transfer Protocol, Atom, Atom-plugin

Who is this for

People who want to try to make Atom plugins.

Free alternative to Operator Mono Italic Theme for VSCode

Update: Solved by @kencrocken

Mashed two fonts together to get an Open Source variant of Operator Mono - https://github.com/kencrocken/FiraCodeiScript.


Project description

Operator Mono + Italic keywords in Atom has become a fairly popular combination, but for many the Operator Mono is quite expensive. But luckily, there are open and free alternatives we can use, but as of yet there aren't any ways to do this in Visual Studio Code (as far as I know. Hopefully, if there are, anyone let me know). We can fix this, though.

By combining the guide An alternative to Operator Mono font by Matthew McFarland and something like the Oceanic Next Italic theme it could work seamlessly (I hope).

Example output

Relevant Technology

Visual Studio Code, Atom, Syntax highlighting, tmTheme.

Who is this for

People who want to create and publish their own editor theme as free alternative and get a cool syntax highlight in the process. Should be fairly straight forward to copy/fork existing code and just use free font alternatives.

slack-notify: CLI for sending messages on Slack

This idea has been claimed and implemented by @dinodsaurus. Found at https://github.com/twobucks/slack-message. 🍰


Project description

A minimal CLI for sending messages to a slack team and channel. This can be used as a general, CI agnostic, tool to notify a Slack channel when a operation is done. For instance when some tests fails on a Travis Build, when a new version is deployed to a production environment or what ever.

I'm envisioning something like this:

slack-message "team-name" "channel" "My message here"

Maybe there should be some AUTH in a rc file or as a part of the interface.

Relevant Technology

What ever the developer would like to use. This is a great opportunity to test out a new platform/language. It should be easily installable on all platforms and CI systems. It's easy to think Node.js/NPM for this, but there are other options also.

Who is this for

Anyone interested in testing out the Slack API and creating CLIs. Not much work and it can be implemented very specifically as a minimal wrapper of the Slack API.

Facebook Authenticator for JupyterHub

Project description

JupyterHub is a wonderful project that allows multiple users to spawn Jupyter notebooks (formerly IPython notebooks) in a shared space and collaborate together. It has support for various authentication backends - You can see a partial list in https://github.com/jupyterhub/jupyterhub/wiki/Authenticators.

Adding Facebook OAuth to that would be wonderful! Would probably be added to https://github.com/jupyterhub/oauthenticator - which already has google / mediawiki / etc OAuth based backends.

Relevant Technology

This is exclusively python - specifically, with the Tornado async web framework.

Who is this for

Novice developers who want to learn more about how OAuth works / async web frameworks work!

Spacemacs/Emacs inspired web browser

Project description

As a computer nerd, I spend a lot of time in my web broser. I constantly try to make this a more pleasant experience, but I can't seem to become completely happy. What annoys me the most is the lack og good hotkeys. Hotkeys are mostly modelled after the well known [modifier] + [key] system, which is quite limiting when you have experienced the power of Vi or Emacs.

A project which gets quite close to this is Vimperator. It is heavily inspired by Vim, with normal mode and insert mode, known hotkeys, searching and so on. The main problem with Vimperator is that it is an addon, and sort of feels "non-native". It is certainly a very good alternative, but there are so many more interesting ideas I would like to explore:

  • Remove the notion of tabs. You instead have a number of buffers, each containing one website. The browser initially has one window, this can show one buffer. You can swap buffers whenever you like (which would be the same as chaning tabs). A window can be split in half horizonally of vertically to create more windows, displaying multiple buffers at the same time.
  • Sort buffers into "projects". With this you could sort your buffers into work buffers and private buffers, and load the set of buffers relevant to what you are doing right now.
  • Extremely lightweight GUI. With complex hotkeys, you can hide away a lot of the stuff that is normally shown in a GUI. Hotkeys are often critisized for being hard to discover, but as Spacemacs has shown this does not neccesarily need to be true. You can also show most stuff you need to show (such as state of the history stack, current buffer URL and so on) in a line at the top or bottom of the window, completely removing the need for large interface icons.

These are just a few of the ideas for such a browser. The main idea is to make browsing feel more like editing in Emacs (or Vi, as a lot of the ideas exists there as well). It will certainly not be a mainstream browser, but the hope is that it will give "advanced users" a more pleasant experience when browsing the web.

This is very much inspired by the editor Spacemacs (which really is just a heavily configured Emacs distribution), so a few of the concepts might make less sence if you haven't used it.

Relevant Technology

Making a web browser completely from scratch is a more or less impossible task today. It would probably be a good idea to base the browser on Webkit (or similar). When it comes to language, that is a though one. The first thing that comes to mind is using a technology such as Electron since that already is integrated with Webkit and is quite widely accessible as it is Javascript based. However, one needs to be certain that this is a task Javascript can handle.

The most important thing, I believe, it that the browser should run on "all" major desktop operating systems. We are already limiting the user base to advanced users, so it would be bad to limit it even further by supporting only on desktop operating system.

Who is this for

This project will definitely need experienced developers on the board. Some of the tasks required by a web browser (security, to name one) are really complex. But there will definitely be room for more novice or beginner programmers as well.

This idea is probably better suited for a team, and not just a single person (but please prove me wrong!).

A social experience game, DGS stand for Digital Goverment Simulator

Project description

This is an ongoing idea is not clear even for me, I just have it yesterday and wanted to share with you.

The idea is to try to build a Goverment and a Digital country, just to prove what can be done better and found solutions to real problems.

Lately I have been influenced by many politicals ideas and some are goods others not much and I was thinking if it is possible to build a collaborative world where the people need to mantain the system like it happened in real life.

Create a digital economy, elections, political debates, secret votes, each player will have its own ID like it happens in real life, each individual will collaborate with ideas, scientific investigation or even build cities, not something fancy.

Relevant Technology

Maybe can be develop a webapp using any framework that is available nowadays, nothing graphically at the begining, ideas are welcome.

Need a simulator engine, maybe java backoffice, as I said ideas are always welcome.

Who is this for

Everyone that would like to collaborate with ideas to build this digital country πŸ˜„. More specifically, a group of people that would like to integrate a team to build a simulator engine, and a webapp.


Want to check the impact of this idea in here, and create then the proper ways for communication and publicize the idea.

New project on Open Source Ideas Initiative, feel free to add comments and issues: DGS – https://github.com/dbranco/DGS/issues

./configure to CMake scripts transpiler

Project description

Some projects still use obsolete ./configure scripts. It is very bad because it breaks crossplatformity. In such scripts often the usual set of shell commands is used extensively.

CMake is a cross-platform cross-toolchain build system.

It should be possible to implement a tool parsing a bash script into an AST, parsing commands syntax, then building a CMake script AST replacing commands with CMake functions.

Relevant Technology

Who is this for

Any python developer.

Express/Koa middleware for tracking exceptions

Project description

There are a lot of exception tracker services on the market:

There's also Errbit, an open-source solution, which you have to host on some server.

Exception tracking is important, but instead of relying on third-party services or managing another server for that, let's use a simple middleware that mounts on an URL like /__exceptions and protects it with password. It would be intended for small apps primarily.

It would come with search support and some sort of notification system.

Relevant Technology

Node, Express, Koa, React

Who is this for

Experienced developers

GraphQL Syntax for selecting data in a Immutable.js Structure

Project description

I often use Immutable.js as a datastructure for my applications. Destructuring doesn't work to well with it and I can see some added value in being able to do GraphQL-type querying for the nested datastructure. There are projects such as vacuumlabs/babel-plugin-extensible-destructuring, and you can destructure an immutable structure that has been .toObject()-ed or .toJS()-ed. But neither of those solve the problem I've been thinking of, and they seem pretty non-performant.

By supporting something like GraphQL querying, you could do things like fragments that you can't do with destructuring. You could also make it much more performant, only selecting the data you want.

I was thinking one could do an API such as

const data = select(`{
  person {
    firstName,
    lastName
  }
}`, immutableStructure);

And that can also be used for component based libraries/frameworks such as React.js:

const MyConnectedComponent = connectData(`{
  person {
    firstName,
    lastName
  }
}`, MyExistingComponent);

... and that'll select the data in the current schema from the props passed to MyExistingComponent. This would probably be it's own library. So this issue can be for two projects.

Maybe something like https://www.npmjs.com/package/graphql-parser can be used for this project.

Relevant Technology

JavaScript, GraphQL, Immutable.js, Possibly React.js (but that should probably exist in it's own project).

Who is this for

This requires some knowledge of GraphQL or Immutable.js. Both isn't that hard to get an understanding of, but it's something to consider. I think this can be more advanced and take some time considering you have to have some knowledge of existing technologies. But it's not too big of a project code line-wise.

Chat for this project

Project description

A chat for this repository, so that we can chat instead of submitting issue comments.
Different issues can use different 'channels'.

Relevant Technology

Slack seems good, although in the spirit of the project a custom solution could be developed as well.

Who is this for

People contributing to this project.

Gitlab like server in nodejs

Project description

Gitlab is an awesome opensource alternative to github. The problem is that it is too bloated to use on servers with limited resources.Git protocol can be setup on any server with ssh access and using ssh2 a very lightweight daemon can be made to handle git requests.

The main advantage to having such a minimalistic server/daemon like tool would be that it can be hosted on devices as simple as ras-pie.

Initially i propose to split the projects in 3 segments,

  1. A git daemon that handles ssh connections and is responsible for commits and auth
  2. A simple expressjs server to create new repo and list out files etc.
  3. Angular/react app to render in browser

Relevant Technology

node, ssh, git, webapps, expressjs

Who is this for

Experienced developers

Batch file generator

Project description

Write the batch logic, test and compile for multiple OS whitout knowing programming. Additionally, create your own command and save it for reuse.

Use Case:
Let's suppose we have 5 tasks (from A to B) to do everytime we start our PC and task C has parameters (can be the action to start an application on debug mode). We can reduce those 5 tasks to 1 with a batch file, but we don't know how to write one and we don't want or have time to learn.

So, we can implement the logic on a GUI and compile for our OS like this:

  1. Start a new proyect.
  2. Add task A.
  3. Add task B.
  4. Add task C with parameters.
  5. Add task D.
  6. Add task E.
  7. Select target OS (Or multiple OS if you want).
  8. (Optional) Review resulting code.
  9. (Optional) Test.
  10. Compile.

Relevant Technology

This application can be divided in two parts: GUI and API.

The API can be written in several languages ​​to let people the option of developing the GUI.
The GUI is optional since anyone can write it based on the API.

Who is this for

Intermediate programmers with knowledge in batch (or want to learn). Doesn't need to know the commands for every OS.

[Medium Work] [Intermediate] Open Source Sandbox Game(Like Starbound or Terraria)

Project description

The idea is to create an Open Source sandbox game like Starbound or Terraria. These are 2D scrolling games where you can do many things. If you want an idea of what I am talking about, you can check the StarboundΒ΄s official webpage: http://playstarbound.com/

Please note that the visual style of these game is always pixelated.

Relevant Technology

This game could be created using a game engine; However, I think that the best way would be to do it with code. For example, Starbound was created using the Lua code language.

About the game, it would be great if it could be available for Windows, Mac and Linux. But itΒ΄s ok if it can only be for Windows

Who is this for

I do not know too much about it, but I think that this is not a hard thing to do for someone who knows how to do this.

Also, whoever makes this, should be able to do art assets for the game.


Share on Twitter/other social media if you will. Something like

New project on Open Source Ideas Initiative: [short description] – [link]

Offline JSFiddle clone

Project description

Use Electron, React Native, or similar platform to build a JSFiddle/Codepen clone that is a stand-alone application and can be used without Internet access.

The idea is to provide a standardized web development environment without having to worry about cross browser "fun" or interference from browser plugins. This would be useful those who do not have reliable Internet access or beginner web developers at home or in a classroom setting (especially if tutorials were incorporated).

It should be able to store "fiddles/pens" in a built in storage, exports to HTML/JS/CSS files, Github Gist, JSFiddle.net and Codpen.io

Who is this for

Intermediate experience.

MST3k web page easter egg

Project description

Create a responsive SVG of the Mystery Science Theater 3000 silhouette to be position at the base of the window viewport. Using hidden anchor tags (maybe?) with title containing the message and attribute indicating the speaker, display message balloons from Joel/Mike, Crow and Tom Servo. Maybe have Joel's/Mike's hand move to point to the position of the tag.

Relevant Technology

I see this as an ester egg that could be enabled using something like Cheet.js

If possible, use only CSS.

Who is this for

Novice experience.

Editing README

Fix a few typos in the README.md file.

I saw several small typos which I fixed on my forked version.
@mikaelbr I would love to open a PR with my suggestions if you are interested.

Gitbook plugin: Make gitbook plugin for redacted data

Project description

When doing documentation you'd want to keep it as close to your code base as possible. This way you can automate content and it's easier to keep updated. In addition, you know the current documentation is always relevant for the code that is in the repo at a given moment. This has great value if you host the documentation as static sites and you have several environments such as test, dev, staging and prod. What is the relevant documentation for this exact version? It's easy to know as it follows the code.

Some times you'd also want to have system documentation in the same documentation. But the problem is that system documentation often contain information such as how is the infrastructure setup, what IPs are used where, and what password is set to what. This is a problem if you want to use the docs several places and don't want to be restricted into distributing the docs openly.

This is where this plugin comes in. Based on an environment variable you can opt-out or opt-in a redacting plugin to the gitbook project. If a variable sets the redacting to active (or the other way around), you remove the information within a block in the gitbook documents. So you could do things as *password here*, and that would be removed in some editions of the documentation. This could also work on PDF exports, making redacting much easier than it is now from things like Word or Pages.

Relevant Technology

JavaScript, Node.js, Gitbook, Environment variables, Markdown

Who is this for

Anyone interested in checking out Gitbook plugins. Probably someone who has the need for this plugin or uses Gitbook, but it shouldn't be too much work getting to know Gitbook for this purpose.

The One 3 tier extendable package manager to rule them all

There are lot of package managers, there are lots of package formats, there are lots of repositories, they have duplicated packages which can conflict with each otner and break things, some of them may have security issues. It's mess and Bedlam. We need to get rid of this. But not to produce the situation like in xkcd #927 Standards.

The roots of the problem is that there are different environments, and package managers should be adapted to them. Usually OS developers create own package managers. But there may be a better way.

Project description

Package managers and their packages are similar to each other, they are differrent in some details: interface and package format.

So the solution is a package manager of 3 tiers:
1 fronend: command line interface, language bindings, reading packages formats and invoking operations
2 middleware
3 backend: a plugin actually doing the operations in the way adapted to the OS

The middleware is a package manager itself. Frontend and backend are plugins.

It shouldn't have an own package format. Instead it should have frontend plugins reading all the packages pormats of all other package managers. The vendors and users won't bother transforming their paskages. Having a compatible interface should mean it to be a drop-in replacement - just install One PM instead the native one and you are migrated.

It shouldn't have an own interface, instead it should have frontend plugins transforming the interfaces of other package managers.

It shouldn't be tied rigidly to the environment. Instead the environment developers should only create a backend plugin doing the things in the way they have mean them to be done.

npm bower cargo pecl pear composer conda conan nix guix pip(sdist, egg, wheel, etc) portage rpm apt [io]pkg chocolatey NuGet OneGet c[ptr]an haxelib apk homebrew
                                 middleware
ubuntu gentoo Arch debian Android slackware FreeBSD openwrt windows GoboLinux MacOS guix

The frontend tells the package manager what to do.
The backend knows how exactly should this be done.
The middleware keeps track of the dependencies.

There are differrent packages of the same program in differrent repos. The middleware should be able to detect the packages for the same purpose. For example this can be imlemented as a mapping (repo1, id1) -> the global id of the program <- (repo2, id2) stored into a database which is updated manually (the similarities are detected automatically, but a human takes decision).

Here is a draft of the architecture:

using IdT = uint64_t;
struct IIdentified{ //< our restricted hand-crafted RTTI with hardcoded identifiers
    virtual IdT getTypeId() = 0;
};
template <IdT typeId, typename T> struct Identified: public IIdentified, public T{
    virtual IdT getTypeId(){return typeId} override;
};
struct IActionProvider: public IIdentified{ //< Actually does action
    virtual IdT getActionType() = 0;
    virtual bool do(IAction &act) = 0;
};
template<IdT actionTypeId> struct ActionProviderStub: public IActionProvider{
    virtual IdT getActionType(){return actionTypeId} override;
};
struct IManager: public IIdentified{ //< discovers, downloads and manages packages.
    virtual void getSourceTypes(collection<IdT> &res) = 0;
    virtual void installed(collection<IPackage> &res) = 0;
    virtual void discover(ISource &src, collection<IPackage> &res) = 0;
    virtual void download(ISource &src, collection<IPackage> &pkgs, collection<IDownloadedPackage> &res, bool fullness) = 0; // if fullness == 0 the 
};
struct ISource: public IIdentified{ //< stores the info about a source
    std::string name; // doesn't contain source type because source type is identifed by IdT
...
};
struct Metadata{
    std::span<UnresolvedPackage> dependencies; // nullptr if not available without actual downloading the package
    ....
};
struct UnresolvedPackage{
    IManager *manager; // can be nullptr. Used to indicate the preferred manager to resolve the package.
    std::string name;
};
struct IPackage: public IIdentified{
    UnresolvedPackage *id;
    ISource *source;
    virtual Metadata getMetadata() = 0;
};
struct IDownloadedPackage: public IIdentified{
    IPackage *identified;
    virtual void getActions(collection<IAction> &res) = 0;
};
struct IAction: public IIdentified{};
struct IUnpackAction: public IAction{ //< used to get files objects
    virtual void getTrees(collection<IFile> &res) = 0;
};
struct IFile{
    enum class Kind: uint8_t{
        file = 0,
        dir = 1,
        link = 2
    };
    union{...} payload;
};

struct IDependencyAction: public IAction{//< used for discovery (in the case they are not known before downloading) and installation of dependencies
    virtual void getDependencies(collection<UnresolvedPackage> &res) = 0;
};
struct IRegisterAction: public IAction{ //< used for registratikn of the package inside of a specific package managers
    virtual void register(IDownloadedPackage &pkg) = 0;
};

Relevant Technology

  • I guess frontends should be implemented in haxe because they need to interface many languages.
  • Debian alternatives.
  • All the mentioned package managers.
  • https://packages.debian.org/sid/alien - a convertor between packages formats

Who is this for

Lennart @poettering

An open-source pdf sanitizer / compressor / processor / info extractor / metadata creator

Project description

I have a lot of PDFs. Most of them are full of garbage like embedded fonts, JavaScript, whitespaces in XMP etc. That's why they take too much space on my HDD and too long to load.

  • Some of them usually have bad filenames. The original file names of scientific papers are usually gibberish, I have to rename them manually.
  • Sometimes the compression used is not optimal.
  • Some of them lack metadata completely, which makes them hard to use with the tools like jabref.
  • Sometimes publisher website contains bibtex reference enough to populate the metadata. Other metadata may be extracted from the text.
  • Some of them don't have a built-in bookmarks, so it's hard to navigate them.
  • Some of them have bookmarks, but change the mode of page display.
  • Sometimes the text is in wrong codepage, so it looks right because of over/underlay , but when you copy it, it's gibberish.

So we need a tool:
1 parsing pdf files in the folder
2 removing all the unneeded elements like javascript or redundant whitespaces in xmp.
4 removing all the fonts which are usually installed in the systems, such as times new roman or calibri
5 keeping a database of all the font files. Detection of different versions of the same font, combining them into a single font file installed into a system and removing the font from the files.
6 Fixing all the links in the documents according to HTTPSEverywhere rules.
7 Fixing codepage issues.
8 Extraction of metadata from the pdf content, like authors, date, publisher, doi, arxiv and adding it into metadata.
9 Visiting the page by doi link, or in absence of doi link, other link classified as a link to the page of the paper on publisher's website and extracting bibtex info from it, embedding it into pdf metadata
10 getting metadata from other sources like google scholar
11 merging and normalizing the metadata from different sources smartly
12 detection of headers in the pdf text. For example they usually have the larger font than the majority of text.
13 detection and parsing of contents in the text
14 matching parsed contents to headers and creating bookmarks
15 detecting hierarchy in bookmarks, for example, by numbers.
16 merging bookmarks trees: the generated one and the already present one
17 detecting page numbers in headers/footers and making them equal to the ones used in pdf.
18 Compressing the contents with the best compression available.
19 Detecting named entities like chemical compounds and creating highlighting annotations for them

Relevant Technology

Who is this for

Any python dev who are willing to spend his own priceless irrecoverable time on such a large project.

An RPC wrapper library

Project description

A tool in python which wraps another library.

Use cases:

  • in distant future: interoperability between libraries written in different languages and using different interpreters;
  • network transparency;
  • stability - a crash of one interpreter won't cause the crash of another one
  • using GPL, LGPL and other libs with viral licenses in the apps with another licenses. May be illegal: FSF GPL FAQ opinion states

It depends on how the main program invokes its plug-ins. If the main program uses fork and exec to invoke plug-ins, and they establish intimate communication by sharing complex data structures, or shipping complex data structures back and forth, that can make them one single combined program.

Using shared memory to communicate with complex data structures is pretty much equivalent to dynamic linking.

If the main program and the plugins are a single combined program then this means you must license the plug-in under the GPL or a GPL-compatible free software license and distribute it with source code in a GPL-compliant way.

though this opinion may be biased and I'm not a lawer.

Look & Feel

import tool_name
#the tool registers custom import hook

tool_name.remote.add("some_lib_which_can_cause_crash") # marking that lib as to be remotely used
import some_lib_which_can_cause_crash # import hooks work

some_lib_which_can_cause_crash.doSomething() # crashing the lib process won't crash the process using the lib

The tool contains of 2 parts sharing the same code:
1 a cli tool as a backend
2 a library as a frontdend

The library should add an import hook and have a set of modules imported through that lib. When a the hook is activated, it checks if the name asked to be imported is in the set, and if it is, it starts the backend and communicates to it via a shared memory page (in the case of local one) or via network. All the communication must be authenticated and optionally encrypted. The backend imports the library and allows the frontend which have started it to remotely execute code by sending special commands in a custom binary protocol. This protocol must have some comands to get values of variables.

The frontend creates a lazy object returning objects of special kind. When a user used any library functions which produce a value other than null (Note in the case of python) a pair of objects is created: the returned value on a backend and a proxy object on a frontend. When a method is called on a proxy object, the data is serialized and passed to backend. When a proxy object is used in a function on the frontend, the value is passed to frontend.

Relevant Technology

  • python lazy_object_proxy
  • python pickle (I hate it! But sometimes it may be useful, for example for passing variables back and forth)
  • https://github.com/ray-project/ray
  • google protobuf
  • kaitai struct
  • jupyter notebook

Open Source vesion of SoundWire Android App

Project description

Simply put, I want to make an Open Source version of this App.

https://play.google.com/store/apps/details?id=com.georgie.SoundWireFree

The App is super cool. And I want to learn how it works. I am new to streaming and stuff, and I don't know much about audio concepts. But I do know some network concepts. So if we make this App, we can learn a lot, and of course we can help the Open Source community help with how connected Android devices work. And then finally put the App in PlayStore and in F-Droid

Relevant Technology

Platform : Android
Language : Java
Concepts to know : Networking. Streaming, especially Audio Streaming.

Who is this for

Experienced developers who want to learn more about networking and audio streaming.


Share on Twitter/other social media if you will. Something like

New project on Open Source Ideas Initiative: 
Open Source version of SoundWire Android App – https://github.com/mikaelbr/open-source-ideas/issues/27

Versioned documentation from markdown

Project description

Client side rendered documentation from markdown files, similar to Flatdoc, but with versioning like ApiDocJS.

Relevant Technology

The versioning could be implemented using a custom markdown tag but probably should be implemented using Git and tags.

A nice feature would be the ability to edit through the page, like a wiki, but this might be a project in itself.

Who is this for

Intermediate experience

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.