De Tomaso Mangusta Legacy Concept

De Tomaso Mangusta Legacy Concept

That’s a beautiful concept car.

de-tomaso-mangusta-legacy-concept-gear-patrol-full

Design student Maxime de Keiser decided to recreate it for the 21st century and we like what we see in his De Tomaso Mangusta Legacy Concept. Though it clearly steals some of its rear quarter panel work from the Lamborghini Diablo, the overall execution works well. The crazy flat hood and the aggressive angry-eyebrow headlight and taillight treatment give the car a cat-like appearance and the massive air intakes and wide platform give it the requisite supercar aesthetic. For now, it’s just a 3D model and the birth of an idea from a talented designer, but it could potentially be the start of a resurgent brand if it found the proper funding. We envision a carryover of the original powertrain manufacturer, perhaps dropping in the 5.4L supercharged V8 from the Ford GT. Oh, to dream.

mangusta-legacy-concept-02_ mangusta-legacy-concept-03_ mangusta-legacy-concept-05_ mangusta-legacy-concept-06_ mangusta-legacy-concept-12_

 

Hawking joins voices saying automation and AI are going to decimate the middle class

Hawking joins voices saying automation and AI are going to decimate the middle class

Steven Hawking added his voice to a growing chorus of experts concerned that AI and automation are going to decimate middle class jobs, worsen inequality, and increase the risk of significant political upheaval.

Article here

A report put out in February 2016 by Citibank with the University of Oxford predicted that 47% of US jobs are at risk of automation. In the UK, 35% are. In China, it’s a whopping 77%. Hawking writes that automation will, ” accelerate the already widening economic inequality around the world. The internet and the platforms that it makes possible allow very small groups of individuals to make enormous profits while employing very few people. This is inevitable, it is progress, but it is also socially destructive.”

This is what I’ve said for some time. AI allows you to replace whole swaths of employees. We can see how this is playing out by looking at the economies AirBnB and Uber are setting up. Instead of these nationwide chains of workers facilitating this new industry, the work is largely done by servers and AI on commoditized server farms. Instead of that money coming into a company of thousands, machine learning and automation can do it with only hundreds. Those hundreds are in narrow job titles with many traditional disciplines no longer needed. Further, it’s not hard to see how this concentrates money from a nation-wide chain into an incredibly small number of pockets instead of a host of employees they might have hired in years past.

Don’t get me wrong, I’m not for putting our heads in the sand and ignoring these new economies or saying we should stop them. That’s impossible. However, as Hawking and economists note,  “We are living in a world of widening, not diminishing, financial inequality, in which many people can see not just their standard of living, but their ability to earn a living at all, disappearing. It is no wonder then that they are searching for a new deal, which Trump and Brexit might have appeared to represent.”

So what will be lost and what will be left? Just like the industrial revolution – certain kinds of jobs will be affected, but others will not. Creative, supervisory, and health care roles are likely safe. Skilled workers that know how to build and maintain AI server systems as well. But jobs like cashiers, tellers, secretaries, logistics, quantitative marketing/planning/strategy, financial planning, truck drivers, possibly even train conductors or airline pilots could all see major parts of their job functions replaced with machine learning algorithms. We’re already seeing this with automated checkouts, automated driving vehicles, and logistics AI’s are already out-performing replacing live counterparts. Even if one’s job is not replaced, there might only need to be one or two persons in the cockpit instead of 3 to 5.

This is going to come to a head in our lifetimes, and it’s very important we start talking and thinking about it now.

Google Home Vs Amazon Echo

Google Home Vs Amazon Echo

There were predictions that we would soon have intelligent agents in our home. This is a comparison and I’d say they’re pretty much there.

They’ve got ordering things down, playing music, etc. But a few items are still missing involve doing slightly more complex tasks for you:

  • Find then schedule best flights for you based on criteria you specify (price, stops, dates, etc)
  • Tell it to make calls to your doctor’s office/auto shop/etc to make appointments and check on the status of repairs/etc and report back.
  • Find and buy the best tickets for a show – scouring craigslist, ebay, ticketmaster, etc. for best prices/seats/etc.
  • Find out about a topic and summarize it from a few sources (not just google) – giving you verbal decision trees (automobiles are broken down by commercial vs passenger, trucks vs cars vs motorcycles, etc – which would you like to learn more about?)
  • Law – Is X legal in my state/local?
  • Tell you when appliances are finished (laundry is done, etc)

Perhaps there’s an opportunity here for services to work with these companies – especially in the case of law/etc. You could opt to talk to a real person in which case it would call the local office and you could continue more detailed discussion for a fee.

And as I have stated before, here’s another example of how AI and machine learning are removing a whole class of white-collar jobs. I predict professional assistants will always be necissary for some situations, but a lot of them are about to be replaced in version 2.0 of these devices.

Advent Thought

Advent Thought

We all have deserts in our life. Deserts of loneliness, relationships that have grown cold or died, anger, fear, being stuck in a chronic sin, illness or physical pain, ignoring our relationship with God, selfishness, bad work situations – the deserts can be endless.

Advent is the time to open the doors of our desert to Christ so they can bloom. Not just for us, but for others around us that might be in their own deserts.

How can I open my deserts for Christ and bloom today?

Charity Giving at the End of the Year

Charity Giving at the End of the Year

As we enter the home stretch of the year and enter the Advent season, it’s a great time to volunteer, adopt a family, serve food or eat and visit with the homeless, and make some end of the year donations to charities as part of our preparation for Christmas.

If you want to support women, especially young, vulnerable women, during pregnancy, I would suggest a donation to the Fr. Taaffe Foundation. I’ve met Fr Taaffe and heard about the lives of many young women his group has helped over its 40 years and believe this is exactly the kind of support that really helps communities and stops unhealthy social cycles.

Reverend Monsignor Charles Taaffe began the Father Taaffe Foundation by opening the St. Brigid Home in 1975 in Keizer, Oregon. By 1990, Father realized that many more teenage mothers were keeping their babies and that there was a need for a home where young mothers could learn skills to help them succeed as single mothers.

Today, Catholic Community Services sustains Father’s vision as a nondenominational, nonprofit, charitable program, where homes and community-based supports provide structure, security, unconditional love and encouragement for single, pregnant and parenting teens.

Father Taaffe Homes are welcoming, comforting homes, inspiring hope for the future, self-confidence and independence. Certified by the State of Oregon and operated by Catholic Community Services, the homes provide young women, ages 12 to 20, a safe and nurturing environment from which to build their futures.

Through both residential and community-based services, expecting and young, single mothers gain knowledge and skills from prenatal care, to parenting, to running a household and creating healthy social connections for themselves and their babies. Those who come to live in a Father Taaffe Home are provided with basic amenities, including food, laundry facilities, access to local transportation, and computers to help with school work and job search.

Link for donations:
https://www.ccswv.org/home-page/childrenfamilies/father-taaffe-homes-and-pregnancy-support-services/

Module to cause linux kernel panic

Module to cause linux kernel panic

In doing some robustness testing, I needed to crash my Linux VM intentionally to see if the rest of the system survived. I was thinking of writing a kernel module that just did something silly like dereference null or divide by zero, but turns out you can do it much easier than that. Just call panic.

panic.c:
#define __NO_VERSION__
#include <linux/version.h>
#include 
#include 

int init_module(void)
{
    panic(" insert lame excuse here");
    return 0;
}

Build with:

 gcc -I/usr/src/linux/include -D__KERNEL__ -DMODULE -o panic.o -c panic.c

Here’s a good link about building kernel modules without full kernel source.

Now, run the following insmod, and your system will kernel panic.

 insmod panic.o 

Credit to Paul’s Journal

“Hello World” OpenGL on Linux

“Hello World” OpenGL on Linux

Writing the OpenGL context creation plumbing on Linux isn’t 100% intuitive. It’s always good to have a handy getting started guide. With developers increasingly using engines such as Unity, the number of people writing directly to OpenGL is shrinking – and so are some of the online resources to get over this initial step. I decided to collect a few links and copy critical sample code here for when I need to whip something up quickly.

 

Some links to good ‘hello world’ Linux GL samples:
https://github.com/jckarter/hello-gl
https://www.opengl.org/wiki/Tutorial:_OpenGL_3.0_Context_Creation_(GLX)
http://www-f9.ijs.si/~matevz/docs/007-2392-003/sgi_html/ch04.html

 

Code:
Taken from: https://www.opengl.org/sdk/docs/man2/xhtml/glXIntro.xml

Below is a minimal example of creating an RGBA-format X window that’s compatible with OpenGL using GLX 1.3 commands. The window is cleared to yellow when the program runs. The program does minimal error checking; all return values should be checked.

#include < stdio.h >
#include < stdlib.h >
#include < GL/gl.h >
#include < GL/glx.h >

int singleBufferAttributess[] = {
    GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
    GLX_RENDER_TYPE,   GLX_RGBA_BIT,
    GLX_RED_SIZE,      1,   /* Request a single buffered color buffer */
    GLX_GREEN_SIZE,    1,   /* with the maximum number of color bits  */
    GLX_BLUE_SIZE,     1,   /* for each component                     */
    None
};

int doubleBufferAttributes[] = {
    GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
    GLX_RENDER_TYPE,   GLX_RGBA_BIT,
    GLX_DOUBLEBUFFER,  True,  /* Request a double-buffered color buffer with */
    GLX_RED_SIZE,      1,     /* the maximum number of bits per component    */
    GLX_GREEN_SIZE,    1, 
    GLX_BLUE_SIZE,     1,
    None
};


static Bool WaitForNotify( Display *dpy, XEvent *event, XPointer arg ) {
    return (event->type == MapNotify) && (event->xmap.window == (Window) arg);
}
int main( int argc, char *argv[] )
{
    Display              *dpy;
    Window                xWin;
    XEvent                event;
    XVisualInfo          *vInfo;
    XSetWindowAttributes  swa;
    GLXFBConfig          *fbConfigs;
    GLXContext            context;
    GLXWindow             glxWin;
    int                   swaMask;
    int                   numReturned;
    int                   swapFlag = True;

    /* Open a connection to the X server */
    dpy = XOpenDisplay( NULL );
    if ( dpy == NULL ) {
        printf( "Unable to open a connection to the X servern" );
        exit( EXIT_FAILURE );
    }

    /* Request a suitable framebuffer configuration - try for a double 
    ** buffered configuration first */
    fbConfigs = glXChooseFBConfig( dpy, DefaultScreen(dpy),
                                   doubleBufferAttributes, &numReturned );

    if ( fbConfigs == NULL ) {  /* no double buffered configs available */
      fbConfigs = glXChooseFBConfig( dpy, DefaultScreen(dpy),
                                     singleBufferAttributess, &numReturned );
      swapFlag = False;
    }

    /* Create an X colormap and window with a visual matching the first
    ** returned framebuffer config */
    vInfo = glXGetVisualFromFBConfig( dpy, fbConfigs[0] );

    swa.border_pixel = 0;
    swa.event_mask = StructureNotifyMask;
    swa.colormap = XCreateColormap( dpy, RootWindow(dpy, vInfo->screen),
                                    vInfo->visual, AllocNone );

    swaMask = CWBorderPixel | CWColormap | CWEventMask;

    xWin = XCreateWindow( dpy, RootWindow(dpy, vInfo->screen), 0, 0, 256, 256,
                          0, vInfo->depth, InputOutput, vInfo->visual,
                          swaMask, &swa );

    /* Create a GLX context for OpenGL rendering */
    context = glXCreateNewContext( dpy, fbConfigs[0], GLX_RGBA_TYPE,
				 NULL, True );

    /* Create a GLX window to associate the frame buffer configuration
    ** with the created X window */
    glxWin = glXCreateWindow( dpy, fbConfigs[0], xWin, NULL );
    
    /* Map the window to the screen, and wait for it to appear */
    XMapWindow( dpy, xWin );
    XIfEvent( dpy, &event, WaitForNotify, (XPointer) xWin );

    /* Bind the GLX context to the Window */
    glXMakeContextCurrent( dpy, glxWin, glxWin, context );

    /* OpenGL rendering ... */
    glClearColor( 1.0, 1.0, 0.0, 1.0 );
    glClear( GL_COLOR_BUFFER_BIT );

    glFlush();
    
    if ( swapFlag )
        glXSwapBuffers( dpy, glxWin );

    sleep( 10 );
    exit( EXIT_SUCCESS );
}