- hummus - c++ pdf manipulator
- mimeograph - api on a conglomeration of tools (poppler, tesseract, imagemagick etc)
- pdftotextjs - wrapper around pdftotext
- pdf-text-extract - another wrapper around pdftotext
- pdf-extract - wrapper around pdftotext, pdftk, tesseract, ghostscript
- pdfutils - poppler wrapper
- scissors - pdftk, ghostscript wrapper w/ high level api
- textract - pdftotext wrapper
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>com.example</groupId> | |
<artifactId>my-project</artifactId> | |
<version>0.0.1-SNAPSHOT</version> | |
<dependencies> | |
<!-- none yet --> |
var mongoose = require('mongoose'); | |
mongoose.connect('mongo://localhost/test'); | |
var conn = mongoose.connection; | |
var users = conn.collection('users'); | |
var channels = conn.collection('channels'); | |
var articles = conn.collection('articles'); | |
var insertUsers = Q.nfbind(users.insert.bind(users)); | |
var insertChannels = Q.nfbind(channels.insert.bind(channels)); |
var Fiber = require("fibers"); | |
module.exports = await; | |
function await(continuation) { | |
var fiber = Fiber.current; | |
var result; | |
var async; | |
continuation(function (err, value) { | |
if (async === undefined) { | |
async = false; |
(function (window, app, undefined) { | |
'use strict'; | |
app.factory('socket', ['$rootScope', function ($rootScope) { | |
var socket = $rootScope.socket; | |
var onCallback = function (callback, args) { | |
$rootScope.$apply(function () { | |
callback.apply(socket, args); |
// Make sure the socket is coming from our app by matching the session id | |
socketServer.set('authorization', function (data, accept) { | |
cookieParser(data, {}, function(err) { | |
if (err) { | |
accept(err, false); | |
} else { | |
config.sessionStore.load(data.signedCookies[config.sessionKey], function(err, session) { | |
if (err || !session) { | |
accept('Session error', false); | |
} else { |
Interesting part (unmounting & API) is at the end if you're not interested in the rest =).
This animation proposal is just an attempt. In case it doesn't work out, I've gathered a few examples that can test the power of a future animation system.
-
Parent is an infinitely spinning ball, and has a child ball that is also spinning. Clicking on the parent causes child to reverse spinning direction. This tests the ability of the animation system to compose animation, not in the sense of applying multiple interpolations to one or more variables passed onto the child (this should be trivial), but in the sense that the parent's constantly updating at the same time as the child, and has to ensure that it passes the animation commands correctly to it. This also tests that we can still intercept these animations (the clicking) and immediately change their configuration instead of queueing them.
-
Typing letters and let them fly in concurrently. This tests concurrency, coordination of an array of ch

While this gist has been shared and followed for years, I regret not giving more background. It was originally a gist for the engineering org I was in, not a "general suggestion" for any React app.
Typically I avoid folders altogether. Heck, I even avoid new files. If I can build an app with one 2000 line file I will. New files and folders are a pain.
2015-01-29 Unofficial Relay FAQ
Compilation of questions and answers about Relay from React.js Conf.
Disclaimer: I work on Relay at Facebook. Relay is a complex system on which we're iterating aggressively. I'll do my best here to provide accurate, useful answers, but the details are subject to change. I may also be wrong. Feedback and additional questions are welcome.
Relay is a new framework from Facebook that provides data-fetching functionality for React applications. It was announced at React.js Conf (January 2015).