import scalaz.stream.async
val q = async.unboundedQueue[Int]
val src = q.dequeue
// Thread 1
q.enqueue(1) // ordinary side-effecting calls
q.enqueue(2)
...| require 'sinatra' | |
| require 'json' | |
| set :bind, '0.0.0.0' | |
| post '/payload' do | |
| # push = JSON.parse(request.body.read) | |
| # puts "I got some JSON: #{push.inspect}" | |
| system 'git fetch --all --prune' | |
| system 'git push --mirror ssh://git@stash.osaro.net:7999/odin/core.git' |
Moving from imperative programming to functional programming requires a fairly large shift in mindset. Moving away from your mutable variables and control flow loops to a streams-based system of handling side effects requires a similar shift in mindset.
A Task encapsulates side effects. You can do just about anything you want in a Task. A Process as a stream of a specific piece of data. Think of it as a list of that data. For example, if you have a counter in your application, a single Process would be used to represent that Int. Think of a Process as a function that holds state that waits to emit a value when it's asked to. A Process is a state machine that can be in one of three states: emitting values, awaiting for the result of some request, or halted. It represents all values that you expect to get from your function. Those values could be simple, like a list of Ints, or it could be far more complex, like asynchronously waiting for responses from a remote server.
| Observable( | |
| subscriber => { | |
| new Thread(new Runnable() { | |
| def run() { | |
| val i = 0 // do real shit here instead | |
| subscriber.onNext(i) | |
| } | |
| if (!subscriber.isUnsubscribed) { | |
| subscriber.onCompleted() | |
| } |
| (:root-dir "/local/dev/reinforcementLearning" | |
| :cache-dir "/local/dev/reinforcementLearning/build/ensime_cache" | |
| :name "reinforcementLearning" | |
| :scala-version "2.11.7" | |
| :subprojects ((:name "reinforcementLearning" | |
| :target "/local/dev/reinforcementLearning/build/classes/main" | |
| :test-target "/local/dev/reinforcementLearning/build/classes/test" | |
| :compile-deps ("/Users/admin/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.11.7/f75e7acabd57b213d6f61483240286c07213ec0e/scala-library-2.11.7.jar") | |
| :runtime-deps ("/Users/admin/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.11.7/f75e7acabd57b213d6f61483240286c07213ec0e/scala-library-2.11.7.jar") | |
| :test-deps ("/Users/admin/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.11.7/f75e7acabd57b213d6f61483240286c07213ec0e/scala-library-2.11.7.jar" "/Users/admin/.gradle/caches/modules-2/files-2.1/org.scalatest/scalatest_2.11/2.3.0-SNAP2/b02b4673e62375c30040316462c33fb069cdc76b/scalatest_2.11-2.3.0-SNAP2.jar" "/Users/admin/.gradle/ |
| name := "ticTacToe" | |
| version := "1.0" | |
| scalaVersion := "2.11.7" | |
| resolvers ++= Seq( | |
| // other resolvers here | |
| // if you want to use snapshot builds (currently 0.12-SNAPSHOT), use this. | |
| "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/", | |
| "Sonatype Releases" at "https://oss.sonatype.org/content/repositories/releases/" | |
| ) | |
| resolvers += Classpaths.sbtPluginReleases |
| Xander-Dunns-MacBook-Pro:gridworld admin$ cd ~/Desktop/ | |
| Xander-Dunns-MacBook-Pro:Desktop admin$ git clone https://github.com/underscoreio/doodle.git | |
| Cloning into 'doodle'... | |
| remote: Counting objects: 1553, done. | |
| remote: Total 1553 (delta 0), reused 0 (delta 0), pack-reused 1553 | |
| Receiving objects: 100% (1553/1553), 1.16 MiB | 646.00 KiB/s, done. | |
| Resolving deltas: 100% (503/503), done. | |
| Checking connectivity... done. | |
| Xander-Dunns-MacBook-Pro:Desktop admin$ cd doodle/ | |
| Xander-Dunns-MacBook-Pro:doodle admin$ sbt |
| " TODO | |
| " - Figure out how to jump around .h/.m files with ctags | |
| " - Find some code dependency measurer: Find the GitHub repo of the guy who created a project for this. | |
| " - Create a command that will create a NAME.cpp, NAME.hpp, and TAME.test.cpp file all in the right place | |
| " - Figure out how to jump to the next line that has something marked in the gutter | |
| " - Figure out what conflicts with <leader>n in Python files | |
| " - Create a command that will display a symbol in the gutter for every line that was changed within the past x days. This would be super helpful for debugging. | |
| " TODO Later | |
| " - Set a sanitizer special case list so that it ignores any problems in the third party files: http://llvm.org/releases/3.6.0/tools/clang/docs/SanitizerSpecialCaseList.html |
| #!/usr/bin/env python | |
| # | |
| # Copyright (C) 2014 Google Inc. | |
| # | |
| # This file is part of YouCompleteMe. | |
| # | |
| # YouCompleteMe is free software: you can redistribute it and/or modify | |
| # it under the terms of the GNU General Public License as published by | |
| # the Free Software Foundation, either version 3 of the License, or | |
| # (at your option) any later version. |
| " TODO | |
| " - Figure out how to jump around .h/.m files with ctags | |
| " - How to jump to next item in quickfix list? | |
| " - How will I manage Coverity Scan submissions? Just do a git cherry-pick -n | |
| " or rebase squish whenever you want to submit the coverity_scan branch | |
| " - Get through the sample and buy the algorithms book | |
| " - Get Coverity Scan working once you meet the 85% code requirement | |
| " TODO Later | |
| " - Set a sanitizer special case list so that it ignores any problems in the |