“Saving Face” is an augmented reality glasses app that leverages social networks, facial recognition algorithms and cloud infrastructure to automagically recognize and remember people. It merges linked data from social networks and live augmented reality to provide a layer of data over your social interaction.
This was a super-quick & dirty hack that we threw together in 30 hours at angelhack, please excuse any outrageous headgear or naughty errors!
All things being equal, this is the future of computing. Coming soon to a social interaction near you.
I was looking forward to using ConqueTerm on vim but was confronted with the following error:
Conque ERROR: Python interface cannot be loaded
Your ersion of Vim appears to be installed without the Python interface…
Alas, the eternal struggle between convenience & elegance. Because I should be doing more important things than blogging, I slapped a big old piece of duct-tape on this problem:
sudo pacman -Ss gvim
Despite the monstrous dependencies (ruby, gtk2, …):
$ pacman -Qi gvim
称 : gvim
版本 : 7.3.353-1
URL地址 : http://www.vim.org
软件许可 : custom:vim
软件组 : 无
提供 : vim=7.3.353-1
依赖于 : vim-runtime=7.3.353-1 gpm ruby libxt desktop-file-utils gtk2 lua
可选依赖 : 无
要求被 : 无
冲突与 : vim
取代 : 无
安装后大小: 2704.00 K
打包者 : Eric Belanger
架构 : i686
编译日期 : 2011年11月08日 星期二 23时05分50秒
安装日期 : 2011年11月22日 星期二 12时54分42秒
安装原因 : 单独指定安装
安装脚本 : 是
描述 : Vi Improved, a highly configurable, improved version of the vi text editor (with advanced features, such as a GUI)
I figured it would be better to spend my time elsewhere. So I simply installed gvim and it worked like a charm.
Few try to change the world during their brief tenure, fewer still try to change it for the better. Few step into the arena and spend themselves for a worthy cause. From the moment you come kicking and screaming into this world, you’re dying. By the time you’re “educated” with a college degree, you’re already 1/4 of the way out the door. What side of human progress are you?
It’s inspiring to know people like Alex Peake. We’re all capable of being catalysts of change in our environments; what have you done to change the world this month?
We are going to die, and that makes us the lucky ones. Most people are never going to die because they are never going to be born. The potential people who could have been here in my place but who will in fact never see the light of day outnumber the sand grains of Arabia. Certainly those unborn ghosts include greater poets than Keats, scientists greater than Newton. We know this because the set of possible people allowed by our DNA so massively exceeds the set of actual people. In the teeth of these stupefying odds it is you and I, in our ordinariness, that are here. We privileged few, who won the lottery of birth against all odds, how dare we whine at our inevitable return to that prior state, from which the vast majority have never stirred.
Bjarne Stroustrop
2011年 11月 09日 星期三 17:18:36 EST
-------------------------------------------------------------------------------
Multi-paradigm is not good enough
Light-weight abstraction
- software infrastructure
- resource constrained
No one size fits all
- 1st to market
- If program fails, pepole die
- 50% overhead implies the need for another $50M server farm
What we want
-------------------------------------------------------------------------------
Easy to understand
- Modularity
- No resource leaks
- Thread safe
- Efficient
- Portable
Ghastly style
ugly -> cin>>val
Bad style is the #1 problem in real-world C++ code
- bad code *BREEDS* more bad code
- Many are self-taught
- advice from decades old books/novices
Mars lander
-------------------------------------------------------------------------------
Using *UNITS*
Speed sp1 = 100m / 9.8s // very fast for a human
...
Acell acc
...
Using operator ""s, operator ""m, operator ""kg -- Elegant!
Keep interfaces strongly typed
- avoid very general types
- int, double, ...
- Object....
Checking of trivial types finds trivial errors
void f(const char* p) {
f = fopen(p, "r");
....
fclose(f);
}
(*The number of bugs you have in your problem is proportional to the amount and
complexity of the code you have got.*)
RAII - resource acquisiion is initializiation
~File_handle() { fclose(p) } // destructor
RAII lowers the time you use resources compared to other strategy
- manually
- finalizer
- garbage collection, etc...
Not all resources are scoped
Most uses of scoped resource allocation is no exception-proof
std::shared_ptr releases its object at when the last shared_ptr is destroyed
std::unique-ptr is the same
Gadget g {n}; // No naked 'new' s!
-------------------------------------------------------------------------------
Range-checks on containers, no more overflows
Resource handles and pointers "smart pointers" address most memory leak
problems
-------------------------------------------------------------------------------
Use data types that integrate this into their behavior:
std::vector, std::ostreamm, std::thread, ...
Moving large objets out of a function
Move the Matrix out
"steal the representation"
Use the Move Constructor in X11
class Matrix {
//
..
}
New X11
Not array -- because array is a chunk of memory
- no naked pointers
- no naked new or delete
- keep arrays out of interfaces (prefer containers)
- pointers are implementation-level details
- use unique_ptr and shared_pointer
- return objects "by-value" (using move rather than copy)
Vector vs List
To anwer this---
Know:
- complexity theory
- data structs.
- machine architecture
- *ran out of memory before list's advantage could show itself*
- Amount of memory used differ dramatically
- Memory access is relatively slow
- Implications
We *NEVER* hit the asymtote!
* Compactness
* Generic Code
Algorithms vs."Code"
Need to get to a more algorithmic version of code
-> gather example
A.K.A. C++ is becoming more like python
Low-level != efficient
-------------------------------------------------------------------------------
Don't lower your level of abstractionwithout good reason
Low-level implies
more code
more bugs
harder to understand and maintain
Inheritance
- When the domain concepts are hierarchical
- When there is a need for run-time selection among hierarchically ordered
alternatives
Type-Safe Concurrency
auto --> gets type of initializer
async() - pass arguments and return result
auto res1 = async(f, some_fec);
cout << res1.get();
get return value when you want it
-------------------------------------------------------------------------------
tldr;
C++ Style
Practice type-rich programming
- focus on interfaces
- simple classes are cheap - use lots
- avoid over-genral interfaces
Use compact data structures
- by default, use std;:vector
Have a general strategy for error handling
- By default, us exceptions and RAII
Prefer algorithms to "random code"
Rely on type-safe concurrency
Build and use libraries
- By default, start with the ISO C++ standard library
Q&A
- What languages do you feel have features you would like to see in C++?
- Threads & Concurrency now in ISO std C++
- shipped in MS/GNU/CLANG compilers
A small patch of snow finding itself clinging to the top of a rock which was lying on the topmost height of a very high mountain and being left to its own imaginings, it began to reflect in this way, saying to itself: “Now, shall not I be thought vain and proud for having placed myself—such a small patch of snow—in so lofty a spot, and for allowing that so large a quantity of snow as I have seen here around me, should take a place lower than mine? Certainly my small dimensions by no means merit this elevation. How easily may I, in proof of my insignificance, experience the same fate as that which the sun brought about yesterday to my companions, who were all, in a few hours, destroyed by the sun. And this happened from their having placed themselves higher than became them. I will flee from the wrath of the sun, and humble myself and find a place befitting my small importance.” Thus, flinging itself down, it began to descend, hurrying from its high home on to the other snow; but the more it sought a low place the more its bulk increased, so that when at last its course was ended on a hill, it found itself no less in size than the hill which supported it; and it was the last of the snow which was destroyed that summer by the sun. This is said for those who, humbling themselves, become exalted.
Fables on plants (1275-1279)
My Ninjitsu teacher, Dan Morris said, “The difference between confidence and arrogance is humility”. I try to follow that path.
Last week I made a post about Triangular Numbers. I posted a request for a new integer sequence on OEIS, which eventually got merged with an existing sequence, The Triangular Matchstick Numbers: https://oeis.org/A045943.
I love math.
Here are the Triangular Matchstick Number Formulas: