09/29/16

Making your own persistent USB bootable Ubuntu Distro: the easy way

I had a recent Ubuntu install with customizations that I wanted to be able to put it on a USB, boot into it on another machine and be able to modify its contents by, installing new packages, editing files, etc…

PinguyBuilder to the rescue

So after a number of false starts. I stumbled upon PinguyBuilder. I followed the excellent instructions at maketecheasier, with the slight modification of checking the PinguyBuilder site for the the latest version. I used the backup option to get all the tweaks on home directory, and my none deb packages in. My Ubuntu was a derivative the standard Xubuntu 16.04 distro.

Moving the ISO to the USB

The generated iso file could then be installed usb-creator-gtk, or if are working on windows, Rufus. At this point I could nicely boot using my USB stick. I could not, however, write anything persistently on the USB. If I create some file, and then reboot, it would be gone!

Making the USB persistent

First I need to create casper-rw file that would be identified by boot-loader as space to write on. I was happy with 2GB, so this what I did by adopting the instructions on StackExchange post:

I created an empty 2GB file

dd if=/dev/zero of=casper-rw bs=1M count=2048

You can changed count to whatever size of persistent storage you want. I then had to format that space into something that Linux would be able to read

mkfs.ext4 -F casper-rw

The next step was to change /boot/grub/grub.cfg file on the USB to have the following menu-entry at the beginning.

menuentry "Xubuntu in persistent mode" {
    set gfxpayload=keep
    linux   /casper/vmlinuz  file=/cdrom/preseed/custom.seed boot=casper persistent iso-scan/filename=${iso_path} quiet splash --
    initrd  /casper/initrd.gz
}

Finally, I modified /isolinux/isolinux.cfg to include the extra label

label persistent 
  menu label live - boot the Live System
  kernel /casper/vmlinuz
  append  file=/cdrom/preseed/custom.seed boot=casper persistent initrd=/casper/initrd.gz quiet splash --

et voilà!

09/25/16

Julia calling C: A minimal example

This blog is a “Hello World” example of Julia calling C.

We start of by at bit of C code we want to call from Julia. We write the following in calc_mean.c

double mean(double a, double b) {
  return (a+b) / 2;
}

To build the library, we need to create a Makefile

CC=gcc 
 
CFLAGS=-c -Wall -fPIC
 
SOURCES=calc_mean.c 
OBJECTS=$(SOURCES:.c=.o)
 
.c.o:
    $(CC) $(CFLAGS) $< -o $@ 
 
lib: $(OBJECTS)
    $(CC) -shared -fPIC -o libmean.so $(OBJECTS)
 
clean:
    rm *.o *.so

The option fPIC and -shared are essential for Julia to be able to resolve the function in our library. Now we are almost ready to build our library. From the bash terminal we invoke:

make lib

This will generate a libmean.so file.

In Julia we call the function in our c library by

x=ccall((:mean,"libmean"),Float64,(Float64,Float64),2.0,5.0)
println(x)
3.5

For this to work,

  • Julia must be running either on the same path where libmean.so resides,
  • the path to libmean.so is in LD_LIBRARY_PATH, or
  • the path to the library is pushed to Libdl.DL_LOAD_PATH via

push!(Libdl.DL_LOAD_PATH,"path_to_libmean.so")

P.S. Thanks to Christopher Rackauckas for tips on Julia highlighting.

08/19/16

In the wind

I stand alone!

Bellowing winds, drive me home

In agony, I cry for a dream forlorn 

To build a world that is free of form

A world where Truth can again be born

Of purest thought, of noble intention

A world so free from any contention 

Alas, my soul now must now take flight 

As darkness falls in a starless night 

I ride the winds to from whence I came 

A place were Light will always remain 

Where my dream can be reborn again 

09/15/15

Questions and speculations on Consciousness

I think, I am, I have a sense of self, and my observations shape reality. There is an apparent intentionality in my actions. I believe I possess the power rebel against existing order, tear it apart and construct a new one. I am a member of a lucky species that has attained a certain degree of consciousness.

But what is that thing we label consciousness. Is it simply and emergent phenomena of an advanced sensory system that is combined with the complex arrangement of neurons and synapses? Is it inevitable that conscious being such as humans should exist in the universe? Are we truly “At home in the Universe”, as Stuart Kauffman would put it?

Is the quality of consciousness intrinsically tied to being human? I am not so sure.

Is it a field that permeates space seeking a suitable medium to express itself? I am happier with that thought, though I have no way to prove it…yet!

We might one day set in motion a process that would create increasingly more advanced mediums of consciousness. We may one day surpass ourselves and hand the baton to nobler and superior beings. There should be joy in that; no fear or shame. It will be just then that we would have fulfilled the ultimate purpose of our species.

07/11/15

On terrorism and the hate that follows

I worry less about the damage to live and property from acts of terror, than the waves of hate that soon follow. The damage due to hate is always much worse. Hate brings out the worst in humans. It locks the mind in inescapable focus on violence. All noble ideas, and worthy aspirations fall by the wayside as survival becomes the primary preoccupation. When that happens, I sense that the terrorists have already won.

07/11/15

الكراهية أخطر من الإرهاب

أرى نفسي أقل قلقاً من الموت و الدمار الناتج من الأعمال الإرهابية بالمقارنة لموجات الكراهية التي تتبعها. الضرر و الخسارة الناتجة من الكراهية التي تولدها هذه الأعمال أشد خطورة.
الكراهية تسقم القلوب و تبرز أقبح ما في البشر.
الكراهية تسجن العقل في دائرة لا نهائية في التركيز علي العنف.
كل الأفكار النبيلة و الطموحات الشريفة تسقط عندما يكون الهم الشاغل هو البقاء.
عندما يحدث ذالك أشعر أن الإرهاب قد نال غايته.

07/11/15

Herodotus on Decision Making

A decision was wise, even though it led to disastrous consequences, if the evidence at hand indicated it was the best one to make; and a decision was foolish, even though it led to the happiest possible consequences, if it was unreasonable to expect those consequences.

05/24/15

The vengeful Murex

If you chance upon a smooth red sea shore,
tread carefully ….lest your sorrows multiply even more.
A spiny Murex could be lurking …in wait for a pompous step.
As many of its kin died for the imperial purple it delights in crimson red.

image

05/2/15

Monkeys and Coconuts

Here is my attempt to solve the monkeys and coconuts problem. The story goes
that five sailors were stranded on an island and had decided to gather some
coconuts for their provisions. They put all the coconuts in one large pile and
went to sleep. One sailor got up and fearing that there could be problems when the
time to came to divide the pile, he divided the pile five ways and noticing that
he has an extra coconut, he gave it to a monkey, and then hid his stash. The other
four sailor repeated the same procedure. When they woke up they noticed that
they had a smaller pile and proceeded to divide into five equal piles, this time
around there were no extra coconut left for the monkey. So the question is: what was
the size of the original pile?

We will denote by \(x_i\) as the size of the
pile after the \(i\)th sailor has carried out his procedure. In this system \(x_0\)
is original size of the pile. So following this procedure we then proceed as
follows:

\(x_1=\frac{4(x_0-1)}{5}\)
\(\cdots\)
\(x_i=\frac{4(x_{i-1}-1)}{5}\)
\(\cdots\)
\(x_5=\frac{4(x_4-1)}{5}\)

It is important to note that \(x_i \in \mathbb{N}_0\) for \(i=0\ldots5\), also \(\frac{x_5}{5}\in \mathbb{N}_0\). Alternatively, we think of the reverse procedure and express the above as
\(x_4=\frac{5x_5}{4}+1\)
\(\cdots\)
\(x_i=\frac{5x_{i+1}}{4}+1\)
\(\cdots\)
\(x_0=\frac{5x_1}{4}+1\)

Observing that \(x_5\) has to be divisible by 4 and 5 (last equation in the first system and first equation in the second), one can brute force the solution(s) by the following Julia code:
https://gist.github.com/mbeltagy/129a584c21ce56ac3b60
Which results in

[2496,1996,1596,1276,1020]
m=51, x₀= 3121
[14996,11996,9596,7676,6140]
m=307, x₀= 18746
[27496,21996,17596,14076,11260]
m=563, x₀= 34371
[39996,31996,25596,20476,16380]
m=819, x₀= 49996

This corresponds nicely to the answers that were obtained by rigorous derivation in the video, however it shows how programming can easily find such solutions by brute force.

If one would like to avoid the negative or blue concocts suggested in the video and also preserve the monkey. Below is an alternative derivation. Working through the first system, one gets:

$latex x_{5}={{4\,\left({{4\,\left({{4\,\left({{4\,\left({{4\,\left(x_{0}-
1\right)}\over{5}}-1\right)}\over{5}}-1\right)}\over{5}}-1\right)
}\over{5}}-1\right)}\over{5}}=\frac{4^5x_0}{5^5}-\frac{8404}{5^5}$

Hence,
\(5^5x_5=4^5x_0-8404\).
Realizing the \(x_5\) has to be necessarily divisible by 5, we denote the final share that each sailor gets in the last division by \(s\). So our Diophantine equation becomes
\(5^6s=4^5x_0-8404\).
It will have solutions at \(x_0=3121, 18746, 34371 \ldots= 3121+n5^6 \text{ for } n \in \mathbb{N}_0 \).

03/6/15

The Postmodern Man

Wondering through an old town
I saw a sight that made me frown
People running all over the place
With no purpose, but an angry face

Tearing houses in which they dwell
Barking words I can not tell
Breaking mirrors and shattering glass
What an awful fate this has come to pass

They smashed all that could glimmer
Their ugly faces it could mirror
I asked a man what is going on
To the beautiful city of a thousand songs

He stared at me in total confusion
Then said “We lost all truth for an illusion”
“At first it was truth that we were seeking
But lost all hope when we lost all meaning”

“Of many Gods we did create
Then we destroyed and declared their fate”
Of what is sacred we did not respect
Many noble meaning we did dissect ”

“We studied stars with microscopes
Viewed atoms with telescopes

“We uttered word we shouldn’t speak
Turned heaven’s gift into a freak
We’ve broken vows we shouldn’t break
Our existence became a funny mistake”

“Then our hearts turned to dust
Nothing left that we can trust
“God is dead” the man proclaimed
“Man is god, man is great”

“When man is god all is abstruse
What use to him, is now the truth
Of a murky mix he did evolve
In murky chaos he must now dissolve”

“All must be now undone
All hope is lost all meanings gone”
I walked away in disbelief
My heart now filled with so much grief

What tragic end could all this be
For men with eyes but could not see
What strange turns this world does take
When men are stung by a life-giving snake

Logic used to break man’s chains
From chains of logic it should break again
I weep for that post-modern man
Post-modern, postmortem and the world is bland