Conception was an experimental project, looking for ways to make software development more efficient.

Conception

Note: All future development is done in the Go version.

Conception is an experimental research project, meant to become a modern IDE/Language package. It experiments with discarding old conventions that were based on computational limitations (e.g. breaking code into files on a file system), and tries to make the process of coding as efficient as possible. I'm a fan of ideas from Bret Victor's talks, Light Table, Code Bubbles, Subtext, and of course I have ideas of my own.

My main guiding principle is to find ways to avoid manual duplication of code, human efforts.

It started off from this tweet.

Feel free to steal any good ideas you see here. My goal is to benefit the world as much as possible; personal gains are a lesser priority.

I work on this project in my limited free time.

News

  • 2013-07-19 - I now have a full-time job, so my time to work on Conception is very limited. However, I'm working on recreating a better and cleaner version of Conception in Go. Sneak peek of my efforts here.

Motivation

  • Right now it's often easier to write code from scratch to do something, rather than find existing code that already does it. Conception is about flipping that.
  • Conversely, code you write today is dead on arrival, no one (not even you) is likely to ever reuse it. Millions of ppl's efforts are wasted. Must make Conception so that we can encode complicated things in available formats. Make data-mining, machine-learning, computer vision algorithms as easily accessible as file.open, sort, hashmaps, other stuff available via standard libraries. Let the underlying technological improvements (new tools) propogate to current/old/future apps. Consider writing graphics code for latest ATI video card w/ new extensions, vs. "for the average user" - intention might be the same, just a difference of available tools.
  • Instead of dumbing down code for the existing tools, why not make more advanced tools to read code as if debugging the program. (https://twitter.com/shurcooL/status/156526541214457856)
  • What if you could change the public API of a library (in order to improve it) without breaking an unknown number of things that use the said library. That would require the dependencies to be known, and editable. That is not currently possible, but it may be possible if all code is within one open system. The payoff would be the ability to improve anything without fear of breakage; nothing would have to be written in stone.

Demonstration

Screenshots

These WIP screenshots present a partial outlook into the things I'm prototyping.

Notes

The Xcode project is the most up to date and should allow you to compile and run right away.

There's a makefile for Linux. It compiles with the latest clang, but is largely untested.

Can be compiled on Windows, but since I use some C++11 features that Visual Studio 2012 doesn't support yet, it will take some effort to compile it there. Either remove C++11 code, or get clang compiler for Windows.

Since it can execute code live, it's potentially as dangerous as a terminal (i.e. don't try to delete files).

It assumes golang is installed (i.e. /usr/local/go/bin/go exists). You might have to change this path if your go binary is elswhere.

For git-related stuff, it assumes git is in your bash's $PATH.

Comments
  • Running on linux

    Running on linux

    Here are the problems I ran into on linux:

    1. I couldn't compile with the provided glfw. I had to link against my system one and remove the version check in Main.cpp. On debian 2.7 is available as a package and everything I tested works fine with it. Is there a better way to link against glfw?

    2. I had to explicitly link all the required libs, it was caused by this: http://fedoraproject.org/wiki/Features/ChangeInImplicitDSOLinking

    The changes that I needed for debian jessie was removing the glfw version check and the following Makefile:

    # Linux version
    
    CC = clang++
    CFLAGS = -I./include
    CPPFLAGS = -std=c++11
    # Disabled
    # -stdlib=libc++
    LFLAGS = -lglfw -lGL -lGLU -lX11 -lpthread -lXxf86vm
    
    OBJS = ./src/*.cpp ./src/*/*.cpp ./src/*/*/*.cpp #./lib/libglfw.a
    
    # Rule for Conception
    Conception: $(OBJS) Makefile.linux
        $(CC) $(CFLAGS) $(CPPFLAGS) $(OBJS) $(LFLAGS) -o $@
    

    Anyway just wondering if you are interested in a pull request for these?

  • Fix linux makefile and GLFW usage on linux

    Fix linux makefile and GLFW usage on linux

    This pull request fixes compilation on a (recent) debian/ubuntu system with GLFW and pkg-config

    There appears to be incompatibility with the InputManager::ProcessMouseWheel that takes different arguments, i am not sure wether this is intended or not, i guess if the version changes based on operating system we can ifdef it. I edited the function to make it comply with the required signature, but i am not at all sure this is "safe", since i do not know glfw. Any comments are welcome, thanks for developing this!

  • Relative paths doesnt seem to work in my machine

    Relative paths doesnt seem to work in my machine

    Here is the output

    Using GLFW 2.7.5. CPU Count: 1 GL Renderer: NVIDIA Corporation NVIDIA GeForce GT 650M OpenGL Engine 2.1 NVIDIA-8.18.22 310.40.05f01 GLFW_ACCELERATED: 1 GLFW_RED_BITS: 8 GLFW_GREEN_BITS: 8 GLFW_BLUE_BITS: 8 GLFW_ALPHA_BITS: 8 GLFW_DEPTH_BITS: 0 GLFW_STENCIL_BITS: 0 GLFW_REFRESH_RATE: 0 GLFW_FSAA_SAMPLES: 8 Window Dimensions: 1536x960 Background thread (tid = 1) created. Background thread is starting. Error: Failed to load texture.

    rm: ./GenProgram: No such file or directory rm: ./GenDiff1.txt: No such file or directory rm: ./GenDiff2.txt: No such file or directory sh: ./bin/gocode/gocode: No such file or directory sh: ./bin/gocode/gocode: No such file or directory Background thread has ended. Background thread has been shut down. ~App() ~InputManager()

    Returning 0 from main().

    Even the data/Background.tga was not loading, It part returned True only after I replaced it with absolute path.

    Any way to set the base path in this case ? I am using XCode5

  • fixed from PVS-Studio:

    fixed from PVS-Studio:

    I'm a member of the Pinguem.ru competition on finding errors in open source projects. A bug, found using PVS-Studio. Warnings:

    V728 An excessive check can be simplified. The '(A && !B) || (!A && B)' expression is equivalent to the 'bool(A) != bool(B)' expression. tga.c 309

  • Printing text with 0x00 characters doesn't work properly.

    Printing text with 0x00 characters doesn't work properly.

    package main
    
    import "fmt"
    
    func main() {
        fmt.Print(string([]byte{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x74, 0x68, 0x65, 0x72, 0x65, 0x2e}))
    }
    

    Displays as "Hello       " instead of "Hello?there." or something.

  • Update simple live editor with latest changes from dev branch.

    Update simple live editor with latest changes from dev branch.

    There are still a few flaws in the recent Input Event Queue processing model that make text fields less responsive, and this needs to be fixed, but I'm confident enough about the new input design to stay with it.

    There's not much improvements for simple live editor app, but it might as well have the latest code base, since the previous is quite old.

  • Merge dev_gesture-recognizer-redesign into dev.

    Merge dev_gesture-recognizer-redesign into dev.

    It seems I'll be sticking with the new Gesture Recognizer and Input Event Queue redesign.

    Despite it not being completely up to speed feature-wise with the previous hacky approach. But it can be expanded to catch up, and it's definitely more maintainable and forward-looking.

Related tags
Go development plugin for Vim
Go development plugin for Vim

vim-go Features This plugin adds Go language support for Vim, with the following main features: Compile your package with :GoBuild, install it with :G

Jan 7, 2023
Project containing all scripts and descriptors to deploy Slurpanize in different ways

Slurpanize cloud infrastructure This project is built to install on any hardware or cloud infrastructure the Slurpanize platform. The installation is

Nov 24, 2021
Bofin - A command line tool that can be used by to make Weblink development more productive

Bofin A command line tool that can be used by to make Weblink development more p

Jan 13, 2022
Golang project for looking up geo from an IP. Meant to be deployed on Render.

geoip-render-go Golang project for looking up geo from an IP. Meant to be deployed on Render. Dependencies In order to use this project, you'll need a

Dec 6, 2021
☔️ A complete Go cache library that brings you multiple ways of managing your caches
☔️ A complete Go cache library that brings you multiple ways of managing your caches

Gocache Guess what is Gocache? a Go cache library. This is an extendable cache library that brings you a lot of features for caching data. Overview He

Jan 1, 2023
Tile is a 2D grid engine, built with data and cache friendly ways, includes pathfinding and observers.
Tile is a 2D grid engine, built with data and cache friendly ways, includes pathfinding and observers.

Tile: Data-Oriented 2D Grid Engine This repository contains a 2D tile map engine which is built with data and cache friendly ways. My main goal here i

Dec 26, 2022
☔️ A complete Go cache library that brings you multiple ways of managing your caches
☔️ A complete Go cache library that brings you multiple ways of managing your caches

Gocache Guess what is Gocache? a Go cache library. This is an extendable cache library that brings you a lot of features for caching data. Overview He

Jan 1, 2023
Toy program for benchmarking safe and unsafe ways of saving a file

save-a-file benchmarks the many strategies an editor could use to save a file. Example output on a SSD: ext4: $ ./save-a-file ~/tmp/foo 29.195µs per s

Jan 4, 2023
A Golang library for testing infrastructure in automated ways.

Infratest Infratest is a Golang library that we hope makes testing your infrastructure using tests that are written in Golang easier to do. The genera

Nov 2, 2022
Learning Vim and Vimscript doesn't have to be hard. This is the guide that you're looking for.
Learning Vim and Vimscript doesn't have to be hard. This is the guide that you're looking for.

Learn Vim (the Smart Way) What's This? Learn Vim (the Smart Way) is a guide to learn the good parts of Vim. There are many places to learn Vim: the vi

Jan 1, 2023
Get related domains / subdomains by looking at Google Analytics IDs
Get related domains / subdomains by looking at Google Analytics IDs

AnalyticsRelationships This script try to get related domains / subdomains by looking at Google Analytics IDs from a URL. First search for ID of Googl

Jan 2, 2023
A command line utility and library for generating professional looking invoices in Go.
A command line utility and library for generating professional looking invoices in Go.

ginvoicer A command line utility and library for generating professional looking invoices in Go. This is a very rough draft and there could still be b

Dec 15, 2022
The simple and light self-hosted custom event analytics you were looking for.

Dead-Simple-Game-Analytics What is Dead Simple Game Analytics? An extremely simple self-hosted system to log your game analytics events. No fluff or o

Oct 23, 2022
🌳 Go Bonzai™ File Completer, normal completion looking at files and directories with trailing slashes on directories (like bash)

?? Go Bonzai™ File Completer, normal completion looking at files and directories with trailing slashes on directories (like bash)

Apr 12, 2022
Turn repo with markdown files into a nice looking blog

Chameleon Chameleon is web application (blog engine) that reflects content from markdown files from a git repository. Powers articles.orsinium.dev. Fe

Oct 30, 2022
oDrop, a fast efficient cross-platform file transfer software for server and home environments

oDrop is a cross-platform LAN file transfer software to efficiently transfer files between computers, oDrop is useful in environments where GUI is not available.

Jun 4, 2022
Gorilla is a REST API template for efficient personal development, implemented based on the CleanArchitecture design philosophy.
Gorilla is a REST API template for efficient personal development, implemented based on the CleanArchitecture design philosophy.

The Gorilla Template is a REST API template for efficient personal development, implemented based on the CleanArchitecture design philosophy.

Feb 13, 2022
Clockwise is a meeting cost calculator designed to encourage more efficient meetings.
Clockwise is a meeting cost calculator designed to encourage more efficient meetings.

↻lockwise Clockwise is a meeting cost calculator designed to encourage more efficient meetings. The meetings will continue until morale improves.

Oct 25, 2022
What is more efficient value or pointer method receivers in Go?

What is more efficient value or pointer method receivers? A) Why would you think struct is more efficient? You are making single call to fetch struct

Feb 4, 2022
Minutes is a CLI tool for synchronizing work logs between multiple time trackers, invoicing, and bookkeeping software to make entrepreneurs' daily work easier.
Minutes is a CLI tool for synchronizing work logs between multiple time trackers, invoicing, and bookkeeping software to make entrepreneurs' daily work easier.

Minutes is a CLI tool for synchronizing work logs between multiple time trackers, invoicing, and bookkeeping software to make entrepreneurs' daily work easier.

Aug 8, 2022