Nikola Brežnjak blog - Tackling software development with a dose of humor
  • Home
  • Daily Thoughts
  • Ionic
  • Stack Overflow
  • Books
  • About me
Home
Daily Thoughts
Ionic
Stack Overflow
Books
About me
  • Home
  • Daily Thoughts
  • Ionic
  • Stack Overflow
  • Books
  • About me
Nikola Brežnjak blog - Tackling software development with a dose of humor
Programming

Progwriter [programmer + writter] by Azat Mardan

My notes from the book Progwriter [programmer + writter] by Azat Mardan:

It’s better to have fewer features with no bugs than lots of features with bugs.

Marketing is easy when you think about the value that you bring to other people. Think about how much frustration, and how many sleepless hours, other developers can avoid by reading your books! If your product is good, this is exactly what will happen.

Leanpub, Gumroad worth checking out. Simple webhosting via Github pages, and a lot more awesome content…

I actually liked this book very much, so that I wrote the short review (5/5) on Amazon:

Honestly, so much acquired knowledge presented in a straight forward way, one would have to spend years in trying it out himself. Great eye opener for all those who aspire to become a programming writer = progwriter.

Books

The Lean Startup – Eric Ries

My notes from the book The Lean Startup by Eric Ries:

Split testing often uncovers surprising things. Many features that make the product better in the eyes of engineers and designers have no impact on customer behavior.

Are we making sufficient progress to believe that our original specific strategic hypothesis is correct or do we need to make a mayor change. That change is called a PIVOT – a structured course correction designed to test a new fundamental hypothesis about the product, strategy and the engine of growth.

Single piece flow – one envelope at a time. It works because of a surprising power of small batches.

It matters how fast you can get through the entire loop of build measure learn.

Books

Creativity for sale – Jason Surfrapp

My notes from the book Creativity for sale: How I Made $1,000,000 Wearing T-Shirts and How You Can Turn Your Passion Into Profit, Too by Jason Surfrapp:

Do work that matters to you, and don’t be afraid to do things wildly differently from other people.

There was one question I always asked myself when it came to dealing with a customer service issue of any kind:’How would i want to be treated in this situation?’

Under promise and over deliver.

I’m happy to work until I’m 100 years old if I truly enjoy what I’m doing.

The freedom to understand that I don’t need things, I just want them, and that these feelings will often pass (normally when I stop watching TV).

Books

Zločin u židovskoj četvrti – Ernesto Mallo

My notes (on Croatian [did you notice I added the translate functionality?]) from the book Zločin u židovskoj četvrti by Ernesto Mallo:

Smrt je jedino što ne dopušta repliku.

Bol ima vrlinu da osobe načini dubljima.

Kad se čovjek rodi kao bogataš, doživljava siromaštvo kao nepravdu.

Strah je kruh vojnika.

Svako biće, samom činjenicom što živi, odašilje zračenje koje se projicira u prostoru. Kao u slučaju zvijezda, to zračenje dalje putuje, možda vječno, čak i kad je onak koji ga je odašiljao nestao.

Ne voljeti iz straha od patnje je kao ne živjeti zbog straha od umiranja.

Books

Start with why – Simon Sinek

My quotes from the book Start with why by Simon Sinek:

There are leaders and there are those who lead. Leaders hold a position of power or influence. Those who lead inspire us.

…quicker, cheaper option over the better long-term solution. Just like the habitual dieter. They never had the time or money to do it right the first time, but they always seem to have enough time and money to do it again.

Companies try to sell us what they do, but we buy why they do it.

Creative advertised their MP3 player as a 5GB MP3 player. It is exactly the same message as Apple’s ‘a thousand songs in your pocket’. Creative told us what their product was and Apple told us why we need it.

People with Apple laptop computers believe that they convey a message when opening them up on the airports, and that’s why the love to do it.

To be a good salesman you have to believe in that what you are selling.

When you compete against someone else, no one wants to help you. But when you compete against your self everyone wants to help.

What if we show up to work every day, just to be better than our selves? Be better than you were yesterday, and not than someone else.

Books

Brain rules for baby – John Medina

My notes from the book Brain rules for baby by John Medina:

Babies develop an active mental life in womb. Stressed mom, stress baby. Eat right, stay fit.

Newborns remember sounds they were exposed to when they were still in the womb. 

Baby will love to eat with mother ate during pregnancy.

Larger babies are, to a point, smarter.

Mothers can boost baby brain development by proper gain weight, balanced diet, modern exercise and stress reduction.

Happy marriage, happy baby.

I’m spiteful of my husband because he gets to sleep through the night. My daughter is nine months old and she still wakes up three times a night. My husband sleeps right through and then wakes up so exhausted.

Children have never been good at listening their parents, but they have never failed to imitate them.

Mothers milk is the silver bullet. Breast-feeding makes baby smarter.

Speak to your children as much as you can.

Do not tell them they are smart! Praise the effort, not IQ!!!

Make the child understand that the mistakes occur because the lack of effort, and not from the lack of ability.

The amount of TV a child should watch before the age of two is zero. But, after the age of five it is good, but only those shows that teach them.

No T’s in kids rooms! Research shows these kids scored way worse than those kids that don’t have TV in their rooms.

Brain loves exercise.

Intellectual pressure (expecting too much too early stage) can actually hurt your child intellectual development.

Books

Time management made simple by Brian Tracy

I listened to the book Time management made simple by Brian Tracy via Audible and honestly this is one of the best I’ve read/listened on this subject.

Make a decision. Every positive change in your life begins with a clear decision that you’re going to do something or stop doing something. Either fish or cut bait.

Self-discipline is the ability to make yourself do what you should do when you should do it whether you feel like it or not.

Develop a clear goals and objectives. Be clear on what is it that you want to achieve.

Plan every day in advance.

6P = prior proper planning prevents poor performance

Working from a to do list will improve your performance by 25% very first day you start practicing it. Think on paper.

ABCDE method for setting priorities.

Select your most valuable desk and then discipline yourself to work on the single task until it is complete.

Eat that frog!

If the first thing you do each morning to get up and eat to live frog, you can be sure that nothing worst will happen all day long. Your frog is the ugliest job you have to do which is most important.

Work from a clean workspace.

Used travel time effectively! Always listen to educational material.

Zero-based thinking – is there anything in my life knowing what I know now I wouldn’t get into today if I had to do it again.

Set clear posteriorities – before you start doing something new you have to stop doing something old.

Keep your life in balance! The reason why you’re working you so that you can earn enough money to enjoy your family, health and the important parts of your personal life.

In life, relationships are everything. For 85% of your success in life will come from your happy relationships with all others. Only 15% happiness will come from your achievement from your work.

It’s quantity of time at home that counts, and quality of time at work.

Everything is hard before it’s easy. Goete

Only 21 days are needed to form a habit.

One minutes spent in planning saves 10 minutes in execution.

If I didn’t read this, will there be any negative consequences? If no – throw it away. It goes the same for information which you can get it elsewhere at a later time.

Doing something extremely well, the need not be done at all is a useless waste of time.

Effectiveness is doing the right things and efficiency is doing the things right.

The person you see is the person you will be. Imagine constantly yourself as a perfect, and you will mold your mind so.

When everyone knows that there’s an award at the end of the road the people around you will be more supportive and it will be even encourage you to work on your job until finished.

Whatever you can do, or dream you can – begin it! Boldness has genius power and magic in it. Goete

Seven years spent in bathroom. Six years eating. Five years waiting in line. Four years cleaning your house. Three years in meetings. One you searching for things. Eight months opening junk mail. Six months of waiting in the red lights. 125 days brushing your teeth. Four minutes per day conversing with your spouse. 30 seconds per day conversing with your children.

Be willing to make a decision and act on it. Be willing to make a mistake if necessary other than to hesitate or delay. The others are so afraid of a mistake that they do nothing.

John C. Gardener once wrote “Mastery it is not something that strikes instantly like a thunderbolt, but the gathering forward to it moves steadily through time, like the weather.”

To earn more, you must learn more.

Read at least one hour per day in your chosen field.

All readers are leaders.

Adult brain only learns something which is immediately applicable.

We only understand something to the degree which we are able to explain it to another person.

Delegate every job that can be done by someone else with a lower hourly rate did you earn.

Would you quit your current job if you got $10 million.

It doesn’t really matter where you’re coming from, it only matters where you’re going.

More child sees you’re committed about him doing his homework, the more it becomes committed to school work.

But she’s ill – she’s not the woman you married. Yes, but I’m still the man she married.

Don’t look at how much you already put in – invest on how the cards are now.

Never given to the temptation to clear the small things first!

Article – if it’s not immediately applicable to you, throw it away.

Books

The Egg – Andy Weir

Awesome Andy Weir and his The egg. If you like this, you may like his The Martian which will be a movie in 2015. The Youtube adaptation:

You were on your way home when you died.

It was a car accident. Nothing particularly remarkable, but fatal nonetheless. You left behind a wife and two children. It was a painless death. The EMTs tried their best to save you, but to no avail. Your body was so utterly shattered you were better off, trust me.

And that’s when you met me.

“What… what happened?” You asked. “Where am I?”

“You died,” I said, matter-of-factly. No point in mincing words.

“There was a… a truck and it was skidding…”

“Yup,” I said.

“I… I died?”

“Yup. But don’t feel bad about it. Everyone dies,” I said.

You looked around. There was nothingness. Just you and me. “What is this place?” You asked. “Is this the afterlife?”

“More or less,” I said.

“Are you god?” You asked.

“Yup,” I replied. “I’m God.”

“My kids… my wife,” you said.

“What about them?”

“Will they be all right?”

“That’s what I like to see,” I said. “You just died and your main concern is for your family. That’s good stuff right there.”

You looked at me with fascination. To you, I didn’t look like God. I just looked like some man. Or possibly a woman. Some vague authority figure, maybe. More of a grammar school teacher than the almighty.

“Don’t worry,” I said. “They’ll be fine. Your kids will remember you as perfect in every way. They didn’t have time to grow contempt for you. Your wife will cry on the outside, but will be secretly relieved. To be fair, your marriage was falling apart. If it’s any consolation, she’ll feel very guilty for feeling relieved.”

“Oh,” you said. “So what happens now? Do I go to heaven or hell or something?”

“Neither,” I said. “You’ll be reincarnated.”

“Ah,” you said. “So the Hindus were right,”

“All religions are right in their own way,” I said. “Walk with me.”

You followed along as we strode through the void. “Where are we going?”

“Nowhere in particular,” I said. “It’s just nice to walk while we talk.”

“So what’s the point, then?” You asked. “When I get reborn, I’ll just be a blank slate, right? A baby. So all my experiences and everything I did in this life won’t matter.”

“Not so!” I said. “You have within you all the knowledge and experiences of all your past lives. You just don’t remember them right now.”

I stopped walking and took you by the shoulders. “Your soul is more magnificent, beautiful, and gigantic than you can possibly imagine. A human mind can only contain a tiny fraction of what you are. It’s like sticking your finger in a glass of water to see if it’s hot or cold. You put a tiny part of yourself into the vessel, and when you bring it back out, you’ve gained all the experiences it had.

“You’ve been in a human for the last 48 years, so you haven’t stretched out yet and felt the rest of your immense consciousness. If we hung out here for long enough, you’d start remembering everything. But there’s no point to doing that between each life.”

“How many times have I been reincarnated, then?”

“Oh lots. Lots and lots. An in to lots of different lives.” I said. “This time around, you’ll be a Chinese peasant girl in 540 AD.”

“Wait, what?” You stammered. “You’re sending me back in time?”

“Well, I guess technically. Time, as you know it, only exists in your universe. Things are different where I come from.”

“Where you come from?” You said.

“Oh sure,” I explained “I come from somewhere. Somewhere else. And there are others like me. I know you’ll want to know what it’s like there, but honestly you wouldn’t understand.”

“Oh,” you said, a little let down. “But wait. If I get reincarnated to other places in time, I could have interacted with myself at some point.”

“Sure. Happens all the time. And with both lives only aware of their own lifespan you don’t even know it’s happening.”

“So what’s the point of it all?”

“Seriously?” I asked. “Seriously? You’re asking me for the meaning of life? Isn’t that a little stereotypical?”

“Well it’s a reasonable question,” you persisted.

I looked you in the eye. “The meaning of life, the reason I made this whole universe, is for you to mature.”

“You mean mankind? You want us to mature?”

“No, just you. I made this whole universe for you. With each new life you grow and mature and become a larger and greater intellect.”

“Just me? What about everyone else?”

“There is no one else,” I said. “In this universe, there’s just you and me.”

You stared blankly at me. “But all the people on earth…”

“All you. Different incarnations of you.”

“Wait. I’m everyone!?”

“Now you’re getting it,” I said, with a congratulatory slap on the back.

“I’m every human being who ever lived?”

“Or who will ever live, yes.”

“I’m Abraham Lincoln?”

“And you’re John Wilkes Booth, too,” I added.

“I’m Hitler?” You said, appalled.

“And you’re the millions he killed.”

“I’m Jesus?”

“And you’re everyone who followed him.”

You fell silent.

“Every time you victimized someone,” I said, “you were victimizing yourself. Every act of kindness you’ve done, you’ve done to yourself. Every happy and sad moment ever experienced by any human was, or will be, experienced by you.”

You thought for a long time.

“Why?” You asked me. “Why do all this?”

“Because someday, you will become like me. Because that’s what you are. You’re one of my kind. You’re my child.”

“Whoa,” you said, incredulous. “You mean I’m a god?”

“No. Not yet. You’re a fetus. You’re still growing. Once you’ve lived every human life throughout all time, you will have grown enough to be born.”

“So the whole universe,” you said, “it’s just…”

“An egg.” I answered. “Now it’s time for you to move on to your next life.”

And I sent you on your way.

Books

The Richest Man in Babylon – George S. Clason

My favourite quotes from the book The Richest Man in Babylon:

A part of all you earn is yours to keep.

Why should so few men be able to acquire all the gold? Because they know how. One may not condemn the man for succeeding because he knows how. Neither may one with justice take away from a man what he has fairly earned, to give to a man of less ability.

If you get paid 10 coins, take out only nine for spending.

A man’s wealth is not in the coins that he carries in his purse, but in the income he builds. The stream of money that comes in constantly whether you work or travel.

That’s what each of us calls necessary expenses will always grow to equal our incomes unless we protest to the contrary. Don’t confuse necessities with desires.

Preceding all accomplishment must be desire, which is strong and definite. The wish to be rich is of little purpose, but to desire 10 pieces of gold is a tangible desire which he can press to fulfillment.

The more wisdom we know, the more we may earn.

That man who seeks to learn more of his craft will be richly rewarded.

Where determination is, the way can be found.

The hungrier one becomes, the clear ones mind becomes.

How can you call yourself a free man when your weakness has brought you here. If a man has in himself a soul of a slave, will he not become one no matter what his birth?

Programming

Notes from the book Game development with Three.js by Isaac Sukin

My notes from the book Game development with Three.js by Isaac Sukin:

Three.js is usually used with a new technology called WebGL, a JavaScript API for rendering graphics without plugins. The API is based on OpenGL, a desktop graphics API (GL stands for graphics library).

Because it uses the client’s graphics processing unit to accelerate rendering, WebGL is fast! However, many mobile browsers as well as Internet Explorer 10 and below do not support WebGL. Luckily, Three.js supports rendering with the HTML5 Canvas API as well as other technologies such as Scalable Vector Graphics instead.

<!DOCTYPE html>
<html>
	<head>
		<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r57/three.min.js"></script>
	</head>
	<body>
		
		<script>
			var camera, scene, renderer;
			var geometry, material, mesh;

			var init = function () {

				renderer = new THREE.CanvasRenderer();
				renderer.setSize( window.innerWidth, window.innerHeight );
				document.body.appendChild( renderer.domElement );

				camera = new THREE.PerspectiveCamera( 95, window.innerWidth / window.innerHeight, 1, 5000 );
				camera.position.z = 900;

				scene = new THREE.Scene();

				geometry = new THREE.CubeGeometry( 100, 100, 100 );
				material = new THREE.MeshNormalMaterial( { color: 0x000000, wireframe: true, wireframeLinewidth: 2 } );

				mesh = new THREE.Mesh( geometry, material );
				scene.add( mesh );
			}

			var animate = function () {

				requestAnimationFrame( animate );

				mesh.rotation.x = Date.now() * 0.001;
				mesh.rotation.y = Date.now() * 0.001;

				renderer.render( scene, camera );

			}

			init();
			animate();
		</script>
	</body>
</html>

The renderer creates a new <canvas> element by default that should be added to the DOM. Avoid changing the canvas’ size with CSS; use the renderer’s setSize method instead, which sets the width and height HTML attributes on the canvas element.

This is because CSS describes the display size but not the render size. That is, if the canvas is rendered at 800 x 600, but the CSS shows it at 1024 x 768, the rendering will be stretched to fill the space just like if you specified the CSS size of an image to be larger than its true size. This can result in distortion and difficulty converting between “screen space” and “canvas space.”

The one last thing we need is a camera object as shown in the following code snippet, which is something Three.js uses to tell the renderer from what perspective the scene should be displayed. If the player was standing in your virtual world and their screen represented what they could see, camera would be their eyes, renderer would be their brain, and scene would be their universe.

All objects are initialized at the position (0, 0, 0), also called the origin. The key here is requestAnimationFrame(), which executes the function passed to it when the browser is ready to paint a new frame. Geometries are instances of THREE.Geometry that define the shape of an object in a scene. They are made up of vertices and faces (which are themselves objects and are accessible through the vertices and faces array properties). Vertices are the THREE.Vector3 objects representing points in three-dimensional space, while faces are the THREE.Face3 objects representing triangular surfaces.

Triangle:

var geo = new THREE.Geometry();
geo.vertices = [
    new THREE.Vector3(0, 0, 0),
    new THREE.Vector3(0, 100, 0),
    new THREE.Vector3(0, 0, 100)
];

geo.faces.push(new THREE.Face3(0, 1, 2));
geo.computeBoundingSphere();

3D:

THREE.Sphere(radius, horizontalSegments = 8, verticalSegments = 6)

THREE.Icosahedron(radius, detail = 0);
THREE.Octahedron(radius, detail = 0);
THREE.Tetrahedron(radius, detail = 0);

THREE.CylinderGeometry(radiusTop, radiusBottom, height, radiusSegments = 8, heightSegments = 1, openEnded= false)

THREE.TorusGeometry(radius, tubeWidth = 40, radialSegments = 8, tubularSegments = 6)

THREE.TorusKnotGeometry(radius, tubeWidth = 40, radialSegments, tubularSegments, p = 2, q = 3, heightScale = 1)

2D:

Plane THREE.PlaneGeometry(width, height, widthSegments = 1, heightSegments = 1)

Circle THREE.CircleGeometry(radius, numberOfSides = 8)

Ring THREE.RingGeometry(innerRadius, outerRadius, radialSegments = 8, ringSegments = 8)

Extruding:

var triangle = new THREE.Shape([
new THREE.Vector2 (0, 50),
new THREE.Vector2 (50, 50),
new THREE.Vector2 (50, 0)
]);
var geometry = new THREE.ExtrudeGeometry(triangle, {
bevelEnabled: false,
amount: 30
});

Custom fonts must be in the typeface.js format (you can convert OpenType and TrueType fonts to Typeface format at http://typeface.neocracy.org/fonts.html). Use the following code to create text geometry:

new THREE.TextGeometry("Text message goes here", {
    size: 30,
    height: 20, // extrude thickness
    font: "helvetiker", // font family in lower case
    weight: "normal", // or e.g. bold
    style: "normal", // or e.g. italics
    bevelEnabled: false
});

Procedural city:

var camera, scene, renderer;

function setup() {
    document.body.style.backgroundColor = '#d7f0f7';
    setupThreeJS();
    setupWorld();
    requestAnimationFrame(function animate() {
        renderer.render(scene, camera);
        requestAnimationFrame(animate);
    });
}

function setupThreeJS() {
    scene = new THREE.Scene();
    camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000);
    camera.position.y = 400;
    camera.position.z = 400;
    camera.rotation.x = -45 * Math.PI / 180;
    renderer = new THREE.CanvasRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
}

function setupWorld() {
    // Floor
    var geo = new THREE.PlaneGeometry(2000, 2000, 20, 20);
    var mat = new THREE.MeshBasicMaterial({color: 0x9db3b5, overdraw:true});
    var floor = new THREE.Mesh(geo, mat);
    floor.rotation.x = -90 * Math.PI / 180;
    scene.add(floor);
    // Original building
    var geometry = new THREE.CubeGeometry(1, 1, 1);
    geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, 0.5,0));

    var material = new THREE.MeshDepthMaterial({overdraw: true});
    // Cloned buildings
    for (var i = 0; i < 300; i++) {
        var building = new THREE.Mesh(geometry.clone(), material.clone());
        building.position.x = Math.floor(Math.random() * 200 - 100) * 4;
        building.position.z = Math.floor(Math.random() * 200 - 100) * 4;
        building.scale.x = Math.random() * 50 + 10;
        building.scale.y = Math.random() * building.scale.x * 8 + 8;
        building.scale.z = building.scale.x;
        scene.add(building);
    }
}

// Run it!
setup();

Fog:

scene.fog = new THREE.FogExp2(0x9db3b5, 0.002);

Only the DirectionalLight and PointLight objects can cast shadows. Casting shadows first requires that we enable shadows on the renderer:

renderer.shadowMapEnabled = true;

For our city scene, we’ll enable shadow receiving for our floor and both casting and receiving for our buildings:

floor.receiveShadow = true;
city.castShadow = true;
city.receiveShadow = true;

Finally, we configure our DirectionalLight object to use shadows:

light.castShadow = true;
light.shadowDarkness = 0.5;
light.shadowMapWidth = 2048;
light.shadowMapHeight = 2048;
light.position.set(500, 1500, 1000);
light.shadowCameraFar = 2500;

// DirectionalLight only; not necessary for PointLight
light.shadowCameraLeft = -1000;
light.shadowCameraRight = 1000;
light.shadowCameraTop = 1000;
light.shadowCameraBottom = -1000;

Earlier, we switched from CanvasRenderer to WebGLRenderer in order to support shadows and fog. As a rule of thumb, WebGLRenderer is faster and has the most features, while CanvasRenderer has fewer features but broader browser support. One particularly nice feature of WebGLRenderer is that it supports antialiasing to smooth out jagged edges. We can enable this for our cityscape by passing the option in to the renderer constructor:

renderer = new THREE.WebGLRenderer({antialias: true});

Already written navigation from examples:

<script src="FirstPersonControls.js"></script>

Add timer:

clock = new THREE.Clock();
controls = new THREE.FirstPersonControls(camera);
controls.movementSpeed = 100;
controls.lookSpeed = 0.1;

Add this to requestAnimationFrame:

controls.update(clock.getDelta());

Clicking on the screen in order to select or interact with something is a common requirement, but it’s somewhat harder than it sounds because of the need to project the location of the click in the 2D plane of your screen into the 3D world of Three.js. To do this, we draw an imaginary line, called a ray, from the camera toward the position where the mouse might be in 3D space and see if it intersects with anything. In order to project, we first need a projector:

projector = new THREE.Projector();

Then we need to register a listener on the click event for the canvas:

renderer.domElement.addEventListener('mousedown', function(event) {
var vector = new THREE.Vector3(
renderer.devicePixelRatio * (event.pageX - this.offsetLeft) /
this.width * 2 - 1,
-renderer.devicePixelRatio * (event.pageY - this.offsetTop) /
this.height * 2 + 1,
0
);
projector.unprojectVector(vector, camera);
var raycaster = new THREE.Raycaster(
camera.position,
vector.sub(camera.position).normalize()
);
var intersects = raycaster.intersectObjects(OBJECTS);
if (intersects.length) {
// intersects[0] describes the clicked object
}
}, false);

The last thing you want when your player is clicking madly to shoot at enemies is for the whole screen to suddenly turn blue because the browser thinks the user is trying to select something. To avoid this, you can either cancel the select event in JavaScript with document.

onselectstart = function() { return false; }

or disable it in CSS:

* {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}

Colission libraries:

  • Ammo.js is a large but complete library compiled to JavaScript from C++. It is available at https://github.com/kripken/ammo.js/
  • Cannon.js is a smaller library written from scratch in JavaScript and inspired in part by concepts from Three.js. It is available at https://github.com/schteppe/cannon.js
  • Physi.js is a bridge between Ammo or Cannon and Three.js that also runs the physics simulation in a separate thread to avoid blocking the rendering. It is available at https://github.com/chandlerprall/Physijs

Well, tbh, stopped at page 61/100 as the examples from the book didn’t quite work for me so all in all very disappointed with the book in that department. But, as far as the writing and explanations up till this point go I think it was good. Grade: 2.7/5  

Page 9 of 12« First...«891011»...Last »

Recent posts

  • Discipline is also a talent
  • Play for the fun of it
  • The importance of failing
  • A fresh start
  • Perseverance

Categories

  • Android (3)
  • Books (114)
    • Programming (22)
  • CodeProject (35)
  • Daily Thoughts (77)
  • Go (3)
  • iOS (5)
  • JavaScript (127)
    • Angular (4)
    • Angular 2 (3)
    • Ionic (61)
    • Ionic2 (2)
    • Ionic3 (8)
    • MEAN (3)
    • NodeJS (27)
    • Phaser (1)
    • React (1)
    • Three.js (1)
    • Vue.js (2)
  • Leadership (1)
  • Meetups (8)
  • Miscellaneou$ (77)
    • Breaking News (8)
    • CodeSchool (2)
    • Hacker Games (3)
    • Pluralsight (7)
    • Projects (2)
    • Sublime Text (2)
  • PHP (6)
  • Quick tips (40)
  • Servers (8)
    • Heroku (1)
    • Linux (3)
  • Stack Overflow (81)
  • Unity3D (9)
  • Windows (8)
    • C# (2)
    • WPF (3)
  • Wordpress (2)

"There's no short-term solution for a long-term result." ~ Greg Plitt

"Everything around you that you call life was made up by people that were no smarter than you." ~ S. Jobs

"Hard work beats talent when talent doesn't work hard." ~ Tim Notke

© since 2016 - Nikola Brežnjak