| (require '[cemerick.url :as url] | |
| '[clojure.spec.alpha :as s] | |
| '[clojure.spec.gen.alpha :as gen] | |
| '[clojure.string :as string]) | |
| (def non-empty-string-alphanumeric | |
| "Generator for non-empty alphanumeric strings" | |
| (gen/such-that #(not= "" %) | |
| (gen/string-alphanumeric))) |
| ;; I think it would be a mistake to introduce temporal coupling to prevent typos. | |
| ;; The example program below lets you identify "missing" keys specs at | |
| ;; the time and place of your choosing, and then handle them as you | |
| ;; deem appropriate, without imposing those decisions on other | |
| ;; users of spec. | |
| (require '[clojure.spec.alpha :as s] | |
| '[clojure.set :as set]) |
| {:paths ["."] | |
| :deps {clansi/clansi {:mvn/version "1.0.0"}}} |
| ### prerequisites | |
| sudo yum groupinstall "Development Tools" | |
| git --version | |
| gcc --version | |
| bash --version | |
| python --version # (system) | |
| sudo yum install -y openssl-devel readline-devel zlib-devel | |
| sudo yum update | |
| ### install `pyenv` |
| # Add these to your .bash_profile / .zshrc / etc. | |
| # Starts a Clojure repl | |
| function rebel-clj() { | |
| clojure -Sdeps "{:deps {com.bhauman/rebel-readline {:mvn/version \"0.1.4\"} $@}}" -m rebel-readline.main | |
| } | |
| # Starts a browser REPL | |
| function rebel-cljs() { | |
| clojure -Sdeps "{:deps {com.bhauman/figwheel-main {:mvn/version \"0.1.7\"} com.bhauman/rebel-readline-cljs {:mvn/version \"0.1.4\"} $@}}" -m figwheel.main |
| (ns kc.datomic | |
| "Datomic utility functions | |
| Usage Notes: | |
| Some functions in this namespace take sequences of facts and return them modified in some way. Some up-front modifications are useful for those functions, like replacing all map-form facts with vector-form facts. In order to avoid doing these modifications repeatedly to same the same set of facts (which would be harmless but wasteful), two versions of these functions exist: a \"safe\" version that does those up-front modifications, and an \"unsafe\" version that expects those modifications to already have been performed. The unsafe versions are named like the safe ones, but with a single quote appended. | |
| TODO: | |
| - consider implementing all fns that branch based on operation as multimethods | |
| These fns mostly support :db/add, :db/retract :db.fn/retractEntity, :db.fn/cas, |
Download and run the Adobe Creative Cloud Cleaner Tool, their multi-app uninstaller and wipe assistant. Adobe does recommend running individual application uninstallers first, your call. Click the Clean All option.
Type a one line command in terminal find ~/ -iname "*adobe*" and it's shows up all files which match pattern.
To remove all files
`sudo rm -rf /Applications/Adobe* /Applications/Utilities/Adobe* /Library/Application\ Support/Adobe /Library/Preferences/com.adobe.* /Library/PrivilegedHelperTools/com.adobe.* /private/var/db/receipts/com.adobe.* ~/Library/Application\ Support/Adobe* ~/Library/Application\ Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.adobe* ~/Library/Application\ Support/CrashReporter/Adobe* ~/Library/Caches/Adobe ~/Library/Caches/com.Adobe.* ~/Library/Caches/com.adobe.* ~/Library/Cookies/com.adobe.* ~/Library/Logs/Adobe* ~/Librar
| ;; Because in formal logic, ∀x.P(x) = ¬∃x.¬P(x) | |
| (d/q '[:find ?id | |
| :in $ [?interest ...] | |
| :where | |
| [?a :account/id ?id] | |
| (not-join [?a ?interest] | |
| [?a :account/interest ?i] | |
| (not [(= ?i ?interest)]))]) | |
| ;; It is harder to understand when you bind interest as above if you |
I've been working with Aleph rougly for last 5 years, actively contributing to the library for last 2 (or so). I also put some effort into spreading the word about it, including educational tech talks, like "Deep HTTP Dive Throught Aleph & Netty". But the more I talk to people the more confusion I find, mostly about how Aleph works and what can you expect when adding it to your stack. Clojurists Together has recently announced Aleph to get Q1 funding, I think it's a good time to share my priorities and thoughts on development plans that were mentioned in the blog post. Hope the community would find it interesting and helpful.
Aleph describes itself as "asynchronous communication for Clojure" library. And you should probably pay a good portion of your attention to the first word: "asynchronous".