News aggregator

Street Slope Map

Another word for itSun, 07/27/2014 - 21:38

Categories:

Topic Maps

A neat idea for maps:

See on Twitter.

I can think of a number of use cases for street slope information. Along with surveillance camera coverage, average lighting conditions, average police patrols, etc.

I first saw this in a tweet by Bob Lehman.

PHPTMAPI 3

Another word for itSun, 07/27/2014 - 21:19

Categories:

Topic Maps

PHPTMAPI 3 by Johannes Schmidt.

From the webpage:

PHPTMAPI 3 is the succession project of http://phptmapi.sourceforge.net/

PHPTMAPI is a PHP5 API for creating and manipulating topic maps, based on the http://tmapi.sourceforge.net/ project. This API enables PHP developers an easy and standardized implementation of ISO/IEC 13250 Topic Maps in their applications.

What is TMAPI?

TMAPI is a programming interface for accessing and manipulating data held in a topic map. The TMAPI specification defines a set of core interfaces which must be implemented by a compliant application as well as (eventually) a set of additional interfaces which may be implemented by a compliant application or which may be built upon the core interfaces.

Please spread the word to our PHP brethren.

Elementary Algorithms

Another word for itSun, 07/27/2014 - 20:57

Categories:

Topic Maps

Elementary Algorithms by Xinyu LIU.

From the github page:

AlgoXY is a free book about elementary algorithms and data structures. This book doesn’t only focus on an imperative (or procedural) approach, but also includes purely functional algorithms and data structures. It doesn’t require readers to master any programming languages, because all the algorithms are described using mathematical functions and pseudocode.

For reference and implementation purposes, source code in C, C++, Haskell, Python, Scheme/Lisp is available in addition to the book.

The contents of the book are provided under GNU FDL and the source code is under GNU GPLv3.

The PDF version can be downloaded from github: https://github.com/liuxinyu95/AlgoXY/blob/algoxy/preview/elementary-algorithms.pdf?raw=true

This book is also available online at: https://sites.google.com/site/algoxy/home

I was concerned when the HTML version for trie was only 2 pages long. You need to view the pdf version, which for trie is some forty (40) pages, to get an idea of the coverage of any particular algorithm.

I first saw this in a tweet by OxAX

orkjerns blogg: Now running Drupal 8, in the most hipster way imagined.

Planet DrupalSun, 07/27/2014 - 20:48

Categories:

Drupal
Now running Drupal 8, in the most hipster way imagined.

It has been a weekend in the spirit of headless Drupal, front-end optimizations and server side hacks. The result is I updated my blog to Drupal 8. Since you are reading this, it must mean it is live.

First let's start with the cold facts (almost chronologically ordered by request lifetime):

Other front-end technologies used that does not directly relate to the request itself:

So, HHVM, huh?

Yeah, that's mostly just a novelty act. There is no real gain there. Quite the opposite, I have added some hacks to get around some limitations.

HHVM does not work very well with logged in users right now, but works alright for serving anonymous content.

When I reload and look at the source code, there is no css loading. WAT?

Yeah, I am just assuming you remember the styles from last page load. Also, I have made it an image to have a 1 HTTP request CMS, right?

No, really. How does that work?

The real magic is happening by checking if you as a user already have downloaded my page earlier. If you have, I don't need to serve you css, as far as I am concerned. You should have saved that last time, so I just take care of that.

OK, so you use a cookie and save css in localstorage. Does that not screw with the varnish cache

Good question. I have some logic to internally rewrite the cached pages with a key to the same varnish hash. This way, all users trying to look at a css-less page with the css stored in localstorage will be served the same page, and php will not get touched.

What a great idea!

Really? Are you really sure you have thought of all the limitations? Because they are many. But seeing as this is my personal tech blog, and I like to experiment, it went live anyway.

Give us the code!

Sure. The theme is at github. The stupid cache module is at github. Please be aware that it is a very bad idea to use it if you have not read the code and understand what it does.

And since I am feeling pretty bad ass right now, let's end with Clint Eastwood as an animated gif.

Tags:

Metadata: Organizing and Discovering Information

Another word for itSun, 07/27/2014 - 20:36

Categories:

Topic Maps

Metadata: Organizing and Discovering Information by Jeffrey Pomerantz.

Coursera course described in part as follows:

If you use nearly any digital technology, you make use of metadata. Use an ATM today? You interacted with metadata about your account. Searched for songs in iTunes or Spotify? You used metadata about those songs. We use and even create metadata constantly, but we rarely realize it. Metadata — or data about data — describes real and digital objects, so that those objects may be organized now and found later.

Metadata is a tool that enables the information age functions performed by humans as well as those performed by computers. Metadata is important to many fields, particularly Computer Science; but this course is not purely a Computer Science course. This course approaches Metadata from the perspective of Information Science, which is a broad interdisciplinary field that studies how people create and manage information.

Course Syllabus

Unit 1: Organizing Information
Unit 2: Dublin Core
Unit 3: How to Build a Metadata Schema
Unit 4: Alphabet Soup: Metadata Schemas That You (Will) Know and Love
Unit 5: Metadata for the Web
Unit 6: Metadata for Networks
Unit 7: How to Create Metadata
Unit 8: How to Evaluate Metadata

An eight week course, July 14 – September 8, 2014, at 4 to 6 hours per week.

I first saw this in a tweet by Aaron Kirschenfeld that reads:

Every one of your legal hackers out there: where’s the metadata? Please learn from @jpom #metadatamooc on @coursera. My brain is crackling.

My follow-up question being: Where are the subject identifications to help map between heterogeneous metadata systems?

Digital Humanities and Computer Science

Another word for itSun, 07/27/2014 - 20:19

Categories:

Topic Maps

Chicago Colloquium on Digital Humanities and Computer Science

Deadlines:

1 August 2014, abstracts of ~ 750 words and a minimal bio sent to martinmueller@northwestern.edu.

31 August 2014, Deadline for Early Registration Discount.

19 September 2014, Dealing for group rate reservations at the Orrington Hotel.

23-24 October, 2014 Colloquium.

From the call for papers:

The ninth annual meeting of the Chicago Colloquium on Digital Humanities and Computer Science (DHCS) will be hosted by Northwestern University on October 23-24, 2014.

The DHCS Colloquium has been a lively regional conference (with non-trivial bi-coastal and overseas sprinkling), rotating since 2006 among the University of Chicago (where it began), DePaul, IIT, Loyola, and Northwestern. At the first Colloquium Greg Crane asked his memorable question “What to do with a million books?” Here are some highlights that I remember across the years:

  • An NLP programmer at Los Alamos talking about the ways security clearances prevented CIA analysts and technical folks from talking to each other.
  • A demonstration that if you replaced all content words in Arabic texts and focused just on stop words you could determine with a high degree of certainty the geographical origin of a given piece of writing.
  • A visualization of phrases like “the king’s daughter” in a sizable corpus, telling you much about who owned what.
  • A social network analysis of Alexander the Great and his entourage.
  • An amazingly successful extraction of verbal parallels from very noisy data.
  • Did you know that Jane Austen was a game theorist before her time and that her characters were either skillful or clueless practitioners of this art?

And so forth. Given my own interests, I tend to remember “Text as Data” stuff, but there was much else about archaeology, art, music, history, and social or political life. You can browse through some of the older programs at http://lucian.uchicago.edu/blogs/dhcs/.

….

One of the weather sites promises that October is between 42 F for the low and 62 F for the high (on average). Sounds like a nice time to visit Northwestern University!

To say nothing of an exciting conference!

I first saw this in a tweet by David Bamman.

Ten habits of highly effective data:…

Another word for itSun, 07/27/2014 - 19:45

Categories:

Topic Maps

Ten habits of highly effective data: Helping your dataset achieve its full potential by Anita de Waard.

Anita gives all the high minded and very legitimate reasons for creating highly effective data, with examples.

Read her slides to pick up the rhetoric you need and leads on how to create highly effective data.

Let me add one concern to drive your interest in creating highly effective data:

Funders want researchers to create highly effective data.

Enough said?

Answers to creating highly effective data continue to evolve but not attempting to create highly effective data is a losing proposal.

Underspecifying Meaning

Another word for itSun, 07/27/2014 - 19:34

Categories:

Topic Maps

Word Meanings Evolve to Selectively Preserve Distinctions on Salient Dimensions by Catriona Silvey, Simon Kirby, and Kenny Smith.

Abstract:

Words refer to objects in the world, but this correspondence is not one-to-one: Each word has a range of referents that share features on some dimensions but differ on others. This property of language is called underspecification. Parts of the lexicon have characteristic patterns of underspecification; for example, artifact nouns tend to specify shape, but not color, whereas substance nouns specify material but not shape. These regularities in the lexicon enable learners to generalize new words appropriately. How does the lexicon come to have these helpful regularities? We test the hypothesis that systematic backgrounding of some dimensions during learning and use causes language to gradually change, over repeated episodes of transmission, to produce a lexicon with strong patterns of underspecification across these less salient dimensions. This offers a cultural evolutionary mechanism linking individual word learning and generalization to the origin of regularities in the lexicon that help learners generalize words appropriately.

I can’t seem to access the article today but the premise is intriguing.

Perhaps people can have different “…less salient dimensions…” and therefore are generalizing words “inappropriately” from the standpoint of another person.

Curious if a test can be devised to identify those “…less salient dimensions…” in some target population? Might lead to faster identification of terms likely to be mis-understood.

Clojure Destructuring Tutorial….

Another word for itSun, 07/27/2014 - 19:04

Categories:

Topic Maps

Clojure Destructuring Tutorial and Cheat Sheet by John Louis Del Rosario.

From the post:

When I try to write or read some Clojure code, every now and then I get stuck on some destructuring forms. It’s like a broken record. One moment I’m in the zone, then this thing hits me and I have to stop what I’m doing to try and grok what I’m looking at.

So I decided I’d write a little tutorial/cheatsheet for Clojure destructuring, both as an attempt to really grok it (I absorb stuff more quickly if I write it down), and as future reference for myself and others.

Below is the whole thing, copied from the original gist. I’m planning on adding more (elaborate) examples and a section for compojure’s own destructuring forms. If you want to bookmark the cheat sheet, I recommend the gist since it has proper syntax highlighting and will be updated first.

John’s right, the gist version is easier to read.

As of 27 July 2014, the sections on “More Examples” and “Compojure” are blank if you feel like contributing.

I first saw this in a tweet by Daniel Higginbotham.

The Simplicity of Clojure

Another word for itSun, 07/27/2014 - 18:47

Categories:

Topic Maps

The Simplicity of Clojure by Bridget Hillyer and Clinton N. Dreisbach. OSCON 2014.

A great overview of Clojure that covers:

  • Clojure Overview
  • Collections
  • Sequences
  • Modeling
  • Functions
  • Flow Control
  • Polymorphism
  • State
  • Coljure Libraries

Granted they are slides so you need to fill in with other sources of content, such as Clojure for the Brave and True, but they do provide an outline for learning more.

I first saw this in a tweet by Christophe Lalanne.

Need an App For That? Try iGenApps!

Life HackSun, 07/27/2014 - 15:00

Categories:

Life

Having trouble finding an app that gives you what you need? Do you want to create an app but are not sure where to begin? Try iGenApps! IGenApps is a mobile application building service that lets you build a smartphone app, right on your smartphone. Best of all, it has a simple and easy to use interface and no programming is required.

When you download iGenApps, it immediately begins to walk you through the process of building your application for iOs, Android, Windows 8 and Google Chrome. After the brief tutorial, you can create application you want whether it is for personal or business needs. Watch the video below to see more about iGenApps.

Three innovative ways to use iGenApps:

1.) Presentations: This was the first time I learned about iGenApps was during a large presentation. The presenter asked us, if we had a smartphone or tablet, to download the application he designed. On the application was all of his presentation materials. It had links to PDF files, power point presentations, videos and his contact information. In awe by this innovative presentation format, I asked how he did it, and he told me, iGenApps. Not only was this an organized method of presenting, but it kept the audience interested.

2.) Teaching: I use iGenApps for teaching. I create my applications to surround the subject I am teaching, I upload my lessons (power point presentations), homework assignments (PDF files), support videos and my contact information, so students can e-mail me right from the app. I have also had my students build their own app as a project, and then I would have the class test their app. There possibilities are endless in the field of education.

3.) Organizations: From professional organizations to clubs, organizations can now

Featured photo credit: Jason Howie via flickr.com

The post Need an App For That? Try iGenApps! appeared first on Lifehack.

The Five W’s Of Life Can Change Your Mind

Life HackSun, 07/27/2014 - 14:00

Categories:

Life
  • Who you are is what makes you special. Do not change for anyone.
  • What lies ahead will always be a mystery. Do not be afraid to explore.
  • When life pushes you over, you push back harder.
  • Where there are choices to make, make the one you won’t regret.
  • Why things happen will never be certain. Take it in stride and move forward.

The post The Five W’s Of Life Can Change Your Mind appeared first on Lifehack.

Stanford Large Network Dataset Collection

Another word for itSun, 07/27/2014 - 01:27

Categories:

Topic Maps

Stanford Large Network Dataset Collection by Jure Leskovec.

From the webpage:

SNAP networks are also availalbe from UF Sparse Matrix collection. Visualizations of SNAP networks by Tim Davis.

If you need software to go with these datasets, consider Stanford Network Analysis Platform (SNAP)

Stanford Network Analysis Platform (SNAP) is a general purpose, high performance system for analysis and manipulation of large networks. Graphs consists of nodes and directed/undirected/multiple edges between the graph nodes. Networks are graphs with data on nodes and/or edges of the network.

The core SNAP library is written in C++ and optimized for maximum performance and compact graph representation. It easily scales to massive networks with hundreds of millions of nodes, and billions of edges. It efficiently manipulates large graphs, calculates structural properties, generates regular and random graphs, and supports attributes on nodes and edges. Besides scalability to large graphs, an additional strength of SNAP is that nodes, edges and attributes in a graph or a network can be changed dynamically during the computation.

A Python interface is available for SNAP.

I first saw this at: Stanford Releases Large Network Datasets by Ryan Swanstrom.

Berliners blog: Showcase: Art market

Planet DrupalSat, 07/26/2014 - 18:56

Categories:

Drupal

The last months I was busy with a friends art project. Today I'm very happy to announce that it went public on july 15th and is doing good so far.

Jule, the founder of Port of Art, approached me last summer, asking if I could help her building an online market place for artworks. Working primarily as a freelance Drupal developer, knowing that her budget is tight and that she is certainly not the first one with this idea, I hesitated. But I gave it a thought and after several meetings I agreed. I liked the idea and I liked Jules approach, that is very trusting and positive without being naive. I like good people ;) She also gave me the impression of being able to value constructive input, even if it means to change previous ideas. That is a good feature in clients!

Basic ideas with a special flavor

The basic requirements were pretty simple:

  • Content management for static content pages as well as for special content like the artworks that are sold on the site
  • Search artworks by different filters
  • Legal compliant checkout process
  • Integration of external payment providers (limited to paypal for the moment being)
  • Contact forms
  • Multilingual content and communication
  • Integration of social media
  • Some map views for geo visualization
  • SEO, customizability, ...

So far that was relatively straight forward and we all love Drupal for that.
But there were some special requirements too, that had a huge impact on my choice of modules to realize this with.

  • Artworks don't integrate with a basic warehouse approach. Each one should be unique and can be bought only once. Therefor there was no need for a shopping cart either.
  • Artworks can be bought for a fixed price or as an auction.
  • Artworks under a certain price are not sold via the site, but instead the customer and the artist are put in touch directly and have to figure out the details independently of the platform.
  • Artists should be able to upload their artworks, pay a fee to get them published and than manage the selling and delivery on their own.
  • Artworks expire after a certain time that depends on the publishing fee that the artist is willing to pay.
  • Once an artwork has been sold on the site, an additional fee has to be paid.
  • Fully customizable e-mails

The main content is obviously the artwork. This is a node type with additional fields to represent attributes of an artwork. Then there are static pages, artschools, faqs and webforms. On the user side we have two frontend user roles for customers and artists that get enhanced using the Profile 2 module.

Additional considerations

The situation that our development team was faced with: Small budget, tiny team (only 2 people), the project's concept still a little in the flux. The founder had no technical background or previous experience using Drupal but needed a customized shop system that she could actually manage after we finished the project and went on to other things. So one of the goals during development has always been to make things configurable. Special text at a certain page? Build a setting for that. A special criterion that controls logic during checkout? Don't hardcode it somewhere! Build a setting for that as it might change later and you don't want to change code for simple things. I love drupal for it's easy variable management and quick form building capabilities. Building an admin form to control certain behaviors takes rarely more then 10 minutes. Obviously there are things that you can't build that way, but when you can, do it. I feel much butter with it and the client loves it too because it gives him control.

Conception and development process

One of the things I knew before, but that got confirmed again: Communication is the key. The client has never did a web project before. That meant that certain good practices and workflow, concerning the development process as well as the final product, were not clear to her. So we (the designer and me) spend a good amount of time helping her figure out what was realistic and which compromises needed to be done in order to deliver the product without cost explosion or an exagerated time frame. Being honest and communicating potential problems early on, as well as the clients openness towards constructive input, was something that attributed a lot to the perceived quality of the development process. Including the client in the development and design decisions also allowed us to educate her on the technical aspects of the product and raise awarness about technical implications, making her see advantages and restrictions in different areas that she didn't consider in the beginning.
We didn't formalize the process, but we ended up with some kind of agile development with three distinct roles: Conception and design by the client, frontend by the designer and backend logic and architecural design by me. That worked very good for us.

Obvious modules that we still didn't use

First, there is Rules. A crazy wonderland for workflow configuration that amazes me every time I look at it. But I've almost never used it. Call me old fashioned, but when business logic or complex relations must be build, I prefer to build them on my own. I want as much logic as possible in the code, not in the database. So for all the power Rules provide, I still prefer not to use it.

Then there is Commerce. We have never build a real-world website with it, so our experience was very limited. We thought about it. Very seriously. Then we decided against it. From todays perspective that was probably an error. But given the special requirements we were afraid of having to spent too much time customizing and altering the workflow that commerce proposes. This was more of a gut feeling. And at the end I'm not sure it was the right decision. We ended up with conceiving and building a full fledged product management incuding the purchase logic and payment. The obvious advantage when you write something like this on your own, is that you have a lot of fine grained control about flow and design. But the price is pretty high considering the amount of time necessary. At the end we have a considerable code base that needs to be maintained. So next time, I hope I'll remember this an give commerce a more in depth examination regarding the potential for the problem at hand.

Crucial contrib modules / add ons

It's hardly necessary to mention, but we couldn't have build the site so easily without the usual candidates: Views, Webform, Better Exposed Filters, Address Field, CTools, i18n, References, Profile 2, Geofield, Global Redirect, Libraries, ...

The fantastic wookmark jquery plugin is responsible for the display of the central search component of the site. Our designer loves it!

Some modules that got born or advanced

I build MEFIBS for this site. I had a need for that functionality before, but never quite as strong as this time, so I decided to solve it as a self contained module instead of hacking things together. Though there are some problems currently with a few new features that I added recently, it is already in production and doing pretty well. Have a look at the filter and sorting blocks on the artwork search page: . Two independant blocks without duplicating a views display or intensive custom form altering. That's pretty neat.

Hopefully the jQuery Update module will also profit. During development I ran into issues with the admin version feature introduced here: https://www.drupal.org/node/1524944. I wrote about it in jQuery version per theme. This resulted in a feature patch that is currently on a good way to get committed soon.

I also found a bug in the PayPal for Payment module: https://www.drupal.org/node/2052361 that will hopefully get fixed soon.

Another module I find myself using often is my sandbox module Mailer API. It's a bit cumbersome to use as a developer, but for the client it's perfect. She can customize practically every mail that will be send by the system. It's all on a single configuration page and supports multilingual setups. A test mail feature is also included to see what mails will look like. And a batch mailer that the client often uses to address a bunch of people. It's like very easy home made promotional mails in a consistent look and feel. Made the client happy.

For frontend eye candy we have build a jQuery plugin that is responsible for the collapsible checkbox filter elements in the left side bar.

Some module discoveries

During the work on www.port-of-art.com I found some modules that I didn't know before.

The Form API Validation module allows you to simplify validation rules in custom forms, using predefined validation rules. And you can also add your own rules which we used for the price entry validation needed when artists publish their artworks.

The Physical Fields module provides fields for physical dimensions and for weight attributes. That was exactly what we needed for physical goods. It saved us the time to configure fields in field collections.

Conclusion

At the end of the project I can say, that everyone involved has had a good and productive time and enjoyed the process and the result. The client is happy for all the things she can do with the site. Now she can concentrate on managing business and extending marketing. The designer was happy. Even if some of the design decisions might not have been the best ones looking at the requirements profile from today. I feel positive though that the system fully matches the clients expectations and that it'll be a valuable tool for developing her business. If the site manages to establish itself, it's more than probable that we would rebuild the system, at least some substantial pieces like the shop component.

We as the site builders are happy too. We feel that we have done a good job and that we managed to keep resources and expectations in balance. I would do it again, which always feels like a good measure.

Category: Drupal Planet7.x

It’s all in the Approach

Life HackSat, 07/26/2014 - 15:00

Categories:

Life
The Approach

We are often assigned tasks that we are unable to perform and that we seek help with.These tasks are often neither enjoyable for us, nor for the person we seek assistance or a sale from. We find ourselves in a situation where we must put it all in our approach or pitch.

I have come to learn that the best time to approach with your product / service is when the potential customer is most vulnerable. The only problem with this is the fact that you may not always find your customer within a state of beneficial vulnerability. In a lot of circumstances, you will find yourself having to create the customer’s need for the product.

Your going to initially think that this might come across as impossible or unlikely to happen. The fact is, just about anyone has the capability to create a customer vulnerability based on the current, or a past situation. Your going to find this most effective by resurfacing a dilemma relating to this particular product / service within your approach.

No one wants to mow when they are mowing

Understanding this method is the first step. The best example that I am able to provide you with, is regarding lawn mowing / property care. I learned very quickly that going door to door proved to be unsuccessful as most people think of property care as “a breeze” and are less likely to accept the services offered. With this being said, the best approach would be targeting the potential consumer when they’re most vulnerable. For this particular niche, the best time would be either; when the customer is mowing their lawn, or have a lawn that is overgrown.

The reason that this person is vulnerable is that they are currently experiencing the tediousness involved in maintaining their lawn, or that they have already realized this and are procrastinating and putting it off. By approaching the customer during these times, it increases your likelihood of positive results.

I don’t want to do this

Very often we are assigned a task that we are completely uninterested in completing. Whether we are eager to complete it or not, it is required. Your most beneficial method of having this work completed, without actually doing it yourself, is having someone else do it. With this being said, someone else isn’t going to necessarily take this without any hesitation. The best method of reaching out to someone else and push away the task assigned to you is all in the approach.

When we approach someone with a task, the last thing we want to do is focus on the tediousness involved. We want to ensure that the person we are approaching is under the assumption that we approached them due to the fact that they are the expert. We need to emphasize on the ability which this person possesses and that the reason we are coming to them with the task, is the fact that they are the best man for the job. When we talk someone up like this, it increases their self-worth. The fact that we are admiring the individual’s skills and assigning a responsibility, could push the individual to work hard and achieve much better results then originally expected.

Conclusion

We are often assigned tasks that we know would bring better results if the task is managed by someone else. Whether or not we get the work done by someone else is completely dependent on how we approach them with the project.

We may also find ourselves looking to sell a service but having a hard time reaching customers. We are going to find this most beneficial and profitable when we are finding our customers in moments of weakness and when they are most vulnerable. By creating a need, or approaching when the customer is in a moment of need, we are most likely to receive positive results from our approaches.

The post It’s all in the Approach appeared first on Lifehack.

Code Drop: Drupal 7 WYSIWYG Editors Done Right

Planet DrupalSat, 07/26/2014 - 14:36

Categories:

Drupal

It's fair to say, on a fresh install the content authoring experience in Drupal needs improvement. WYSIWYG editors are often criticised for various reason such as the ugly HTML they are known to generate or the power they give users to mess up typography. While these are valid criticisms, there is definitely a right and wrong way configure these editors. Doing things the right way will empower users while keeping them safe from nasty pitfalls. Note: this guide assumes you're already familiar with a typical Drupal WYSIWYG setup.

Provide a true WYSIWYG experience

It's important that a WYSWIYG editor represents exactly what appears on the front-end of your website. While it seems obvious, it's easy to ignore and has a big impact on a user's experience.

Our WYSWIYG stack is:

Never Expect, Never Assume, Never Ask, Never Demand

Life HackSat, 07/26/2014 - 14:00

Categories:

Life

Never expect. Never assume. Never ask. Never demand. Just let it be. If it’s meant be, it will happen.

There are so many things I wish I had known while growing up. No one ever tells you the hard truths of life. Maybe it’s because they can’t stomach it, or maybe it’s because they think it’s just something you have to experience firsthand to understand. Here are twenty things nobody told you while growing up that would’ve been nice to know beforehand:

20 Things Nobody Told You While Growing Up

The post Never Expect, Never Assume, Never Ask, Never Demand appeared first on Lifehack.

Subscribe to The Universal Pantograph aggregator