I recently installed VirtualBox configured internet connection to the internet for a virtual windows 7 machine I’ve installed using Vagrant, tried to setup USB, but got the following message: “Failed to save settings – Empty or null HostOnly interface name is not valid.”. Looking at the details, I saw the following “Result Code: E_FAIL (0x80004005) Component: NetworkAdapterWrapper …”.I don’t remember when I started to get that popup message. Couldn’t find any HostOnly adapter using the VirtualBox GUI. Finding the solution in the web is too hard. and I can’t find anything in the user guide either. But, one useful thing I know: in Linux and Unix-like system, I can find configuration files. They are usually found in directories whose names begin with ‘.’. followed by the program’s name or under “${HOME}/.config’ or directories created by the software. This time, the file was found in “${HOME}/VirtualBox VMs/<machine-name>”. In this case: “${HOME}/VirtualBox VMs/windows7_default_1563689015423_90469/”. In this directory there are files with the suffix ‘.vbox’. They are XML files. In one of them, named “windows7_default_1563689015423_90469.vbox”, I find the following element:
HTML5 includes some features that allows developers to draw 3D shapes by drawing bi dimensional shapes and applying 3d transform, such as rotateX, rotateY and rotateZ. For convenience, you can shift the origin of axes using the style property If you don’t want the 3D image too flat (for example, all the faces of a cube having the same size) use perspective and perspective-origin style properties.
You can use the matrix3d style properties instead of the named transforms if, for example, you don’t want to compute angles.
The Style Properties
A style property can be defined by adding the attribute style to an HTML element, defining a CSS class or accessing a DOM node.
In this section I will explain the properties using a little Javascript program that draws a regular tetrahedron.
Drawing a tetrahedron is done by drawing 4 isosceles triangles and rotating each of them once or twice.
“perspective” and “perspective-origin”
The distance and angle from which the shape is viewed.
Transform Values: “rotateX”, “rotateY”, “rotate” and “transform-origin”
Rotate an axis. Keep the value of the rotated axis coordinate unchanged, and change the rest. The axis is rotated around the position defined by “transform-origin”
The following code adds the data for creating 4 triangles, and rotates 1 triangle 120 degrees to the right and 1 triangle 120 degrees to the left. Rotation is done around the bottom face’s centroid.
This matrix is used if you want to use a transformation out of the comfort zone. For example, a rotation transform with cosines and sines of the angle. The argument list contains 16 values, which are the cells of a square matrix of order 4 (4 rows and 4 columns).
This matrix will be applied on (x,y,z,w) vector to get the target vector. When rotating a 2d vector )point), our original z-coordinate will be 0, and w will be 1.
To specify the matrix:
use
In my example, I will rotate 3 triangles, so their top vertex will go to a line perpendicular to the tetrahedron base, and passing through the base’s median.
The median of a triangle is the point where median cross its other, dividing each median at the ratio 1:2.
So, if each side of a triangle is of length 1. The height is
Since, the height is the length of the median, the distance from a side to the centroid is the height divided by 3, and the requested sine is latex13latex 1 \over 33latex1
The cosine is
so, we will compute the matrix as follows:
var rotateXCos = Math.sqrt(8) / 3;
var rotateXSin = 1 / 3;
var rotateXMat3d = [1,0,0,0,
0,rotateXCos,rotateXSin,0,
0,-rotateXSin,rotateXCos,0,
0,0,0,1];
var matrixTransformString = 'matrix3d(' + rotateXMat3d + ')';
Now, the code to draw the tetrahedron with *d3.js( is:
var side=100;
var len=100;
var height=side * Math.sqrt(3)/2;
var centroidZValue = -height / 3; // The point where medians meet.
var rotateXCos = Math.sqrt(8) / 3;
var rotateXSin = 1 / 3;
var rotateXMat3d = [1,0,0,0,
0,rotateXCos,rotateXSin,0,
0,-rotateXSin,rotateXCos,0,
0,0,0,1];
var matrixTransformString = 'matrix3d(' + rotateXMat3d + ')';
var centroidString = '150px 0 ' + centroidZValue + 'px';
var main_div = d3.select('body')
.append('div')
.style('position','absolute')
.style('top','50px')
.style('left','50px')
.style('perspective','50px')
.style('perspective-origin','bottom left');
main_div.selectAll('div').
data([{color: 'red', transform: null,upperVertexInd: true},
{color: 'black', transform: 'rotateX(90deg)', 'origin':'
100px 100px 0'},
{color: 'blue', transform: 'rotateY(120deg)',origin: cent
roidString,upperVertexInd: true},
{color: 'green', transform: 'rotateY(-120deg)',origin: ce
ntroidString,upperVertexInd: true}])
.enter()
.append('div')
.style('position','absolute')
.style('top',0)
.style('left',0)
.style('transform',d=>d.transform)
.style('transform-origin',d=>d.origin)
.style('transform-style','preserve-3d')
.append('div')
.style('transform-style','preserve-3d')
.style('position','absolute')
.style('top',0)
.style('left',0)
.style('transform',function(d){
return d.upperVertexInd?matrixTransformString:false;
})
.style('transform-origin',function(d){
return d.upperVertexInd?'0 100px 0':false;
})
.append('svg')
.append('polygon')
.attr('points',[100,100,150,100-height,200,100])
.style('fill','none')
.style('stroke',d=>d.color);
Some days ago I found that someone was looking for a D3.js expert. To prove one is an expert one has to pass a test, and one of the tasks on this test is to create a 3D color picker with RGB for axes.
The cube faces cannot be filled with a bi-dimensional linear gradients because such gradients are not supported. So, you have to explicitly write a loop to add the pixels.
Using SVG to add the pixels is a bad idea: SVG is an XML language, and uses a DOM tree. Using SVG will use a lot of memory and will slow down your computer. Use a canvas instead. Drawing on a canvas is done by simple Javascript commands, that add lines and shapes.
Following is a little code snippet that fills a cube face:
for (i=x1; i<=x2;i++){
for (j=y1; j<=y2; j++){
rgb_arr[d.rgb_variable[0]]=i;
rgb_arr[d.rgb_variable[1]]=j;
ctx.fillStyle=d3.rgb(rgb_arr[0],rgb_arr[1],rgb_arr[2]);
ctx.fillRect(i,j,1,1);
}
}
Now, to get the color where the mouse points, first get the position using the mouse event’s offsetX and offsetY. These properties will hold the correct value even if the canvas is rotated.
Then you can get the RGBA values of the pixel using method getImageData of the canvas’ context. The method returns the data of a rectangle defined by 4 arguments: x,t,width and height.
Following is an example:
<pre class="wp-block-syntaxhighlighter-code"> canvas.on('click', function(evt){
var ctx=d3.event.target.getContext('2d');
var pixelData = ctx.getImageData(d3.event.offsetX,d3.event.offsetY,1,1).data;
alert(pixelData);
});
</pre>
The thought to create a copy of my Thunderbird profile did not cross my mind until the last power failure. After each power failure I found that I have to setup my mail account, and that all my events were “lost”.
Wellm the events were not exactly lost, but a new calendar id was created, which is to be used to find all the events and their relevant properties in the calendar extension’s database. The database itself is an SQLite file, and in my system is located under ‘~/.thunderbird/default-dir/calendar-data/local.sqlite’
(Change the default-dir name to your local name, it is by default the one that ends with ‘.default*.
Finding the Current Calendar Id
The calendar id is the value of the Thunderbird’s user preference ‘calendar.list.sortOrder’. You can view this variables by choosing from the menu:
preferences->preferences->preferences*, and then from the window opend, choosing the Advanced tab, and then clicking the “Config Editor* button.
Continue at your own risk…
Now, if you haven’t imported your calendar using Events And Tasks->Export.
You can connect to the database using:
sqlite3 /path/to/local.sqlite
From now on, I’ll assume you only have one calendar.
SQLite Tables
The tables, indexes, trigges and other database entities are stored in a table named ‘sqlite_master’. To find tables, run the query
select name from sqlite_master
where type='table';
Now, I guess that an event in the last calendar has the latest event start date.
A good query to find that event can be:
select cal_id, title, event_start
from cal_events
order by event_start;
Let us call the most recent value calendar id “old-cal-id”, and the new calendar id “new-cal-id*
Updating and Deleting
I suggest that you perform update and delete queries within transaction, so if something goes wrong you can rollback.
Begin a transaction by running the command:
begin transaction
Now, for each table that has the column cal_id, run the query:
update table_name
set cal_id="new-cal-id"
where cal_id="old-cal-id"
Replace table_name by a name of a table that has the column cal_id, for example:
update cal_event
set cal_id="new-cal-id"
where cal_id="old-cal-id";
Now, to delete the rest, run:
delete from table_name
where cal_id != "old-cal-id";
If everything’s fine, it’s time to commit your transaction by running:
Matplotlib is a MATLAB-like library that allows Python programmers to create images and animations. For example, you can easily draw a graphic representation of functions with Y (and maybe Z) values generated by numpy and scipy functions.
Matplotlib can also be interactive and handle events. The command mpl_connect is used for connecting an event with a callback function.
The Backend Layer
Someone on the IRC has challenged me with questions on how to perform some operations when the window is closed. In addition, I want the window title to be other than the default, “Figure 1”.
Well, the layer that handles the main window is the backend layer,
To find what backend Matplotlib uses, you can add the line print type(fig.canvas)
The result may be something like: <class 'matplotlib.backends.backend_gtkagg.FigureCanvasGTKAgg'>
This means that the backend used is ‘GtkAgg’.
With the function ‘dir’, I’ve found that the canvass has a function named get_toplevel, and the returned value of fig.canvass.get_toplevel() is an object of type gtk.Window.
This object has the methods of a GTK window. So you can change its title with the ‘set_titlemethod. For example: fig.canvas.get_toplevel().set_title(‘Rubic Cube’)
You can tell your application what to do when the user closes the window, by calling its 'connect' method, with 'destroy' for first arguments.
For example: fig.canvas.get_toplevel().connect(‘destroy’, destroyFunc, ‘Goodbye, cruel world!’) destroyFunc` is a function that accept 2 arguments (3 if a class member): the widget where the event has occurred and additional user defined data.
More about Python FTK can be found at http://www.pygtk.org/pygtk2tutorial/index.html
Last but not least, you can specify the backend Matplotlib will use, by calling the ‘use’ method of matplotlib.
For example: matplotlib.use('GTKAgg')
Note: This method should be called before importing ‘pyplot’.
The other day I downloaded “Fahrenheit 451” by Ray Bradbury as a free eBook, and tried to read it. I found that I cannot read much more than the titles of each chapter.
I tried double-clicking and dragging, and saw that something appears on the screen, organized in paragraphs.
Right Click->Inspect Element
Now, a sub-window is opened at the bottom of the screen:
You can see in that sub-window that some text in English appears in a ‘div’ element just under another ‘div’ element of class ‘textLayer’. To the right of the ‘Inspect Element’ sub-window you can see the CSS rules:
As you can see, the value of property ‘color’ is ‘transparent’, You can edit that property using the color selector or by overriding the text value. Let’s set it to ‘black’.
Now, you can see the paragraphs. You can change the opacity property of ‘div.textLayer’ from 0.2 to a higher value (up to 1) in order to read the text better. Firefox is a great PDF viewer, but my browser couldn’t save the document with the changes: the result was a corrupt file that cannot be opened. I’d written about it to the newsgroup ‘mozilla.wishlist’ found on server ‘news.mozilla.org’. and they opened a ticket.
Before you upload an internet site, you better test it on your local machine. To do that, you should allocate an IP address known as a loopback address that does not require a modem for access. If you’ve installed Apache Httpd server, you’ll probably get an HTML page that reads “It works” upon connecting to “http://localhost” or http://127.0.0.1” from the web browser. But what if you want to create another site? How to make your server recognize an IP?
In this post I will describe by example the process of adding a local IP.
Step 1: Associate an IP with a Domain Name
If you want to create a domain name such as ‘example.coq‘, add a line for it in /etc/hosts in the format:
<inet-addr><alias>
For example:
127.0.0.2 example.coq
Step 2: Attach the IP Address To a Network Interface
To make an address available to internet servers, attach it to a network interface.
A network interface is the identifier followed by colons at the beginning of blocks returned by the command ifconfigFor example:
You can learn more about virtual hosts from the section ‘11.6 Virtual Hosts” of the FreeBSD Handbook
Step 3: Start a Listening Server
Now, you can start a server that will listen on your address. You can do it by adding a virtual host in apache httpd, create a server in ‘node.js’, etc.
If you’ve installed ‘Apache24’ from the ports, you can find documentation in '/usr/local/share/doc/apache24'. In addition, you can find documentation in the httpd site.
One thing I wish to see in languages such as PHP is to find them supporting the complex type. Complex numbers are more than vectors in 2D, and I wish to see expression containing them parsed just like the ones with real numbers. Python supports them, and you have to import ‘cmath’ to use functions of a complex variable. To import cmath type
import cmath
For example, complex numbers are useful in solving cubic equations even if all its roots are real. And cubic equations can be used for Bézier curve manipulations.
Following is the Cardan formula for solving a cubic equation
Be a cubic equation.
Step 1
Convert the equation to the form latex y^3 + py + q = 0 Use the Taylor series formula, to find a k, such that y=x-k: Be P(x) = Then,
Because P”(k)=0, 6k + 2a=0, thus: .
For example, will become In Python:
a = -7
b = 14
c = -8
p = b - a**2 / 3.
q = 2*a**3 / 27. - b*a/3. - 8
Step 2
Find 2 numbers u and v that will help us solve the equation. If y=u+v , then the new equation will be: We can find u,v such that (p + 3uv) = 0, Thus,
and latex u^3 + v^3 = -q Since p+3uv=0, From both equations, we get that latex u^3 and latex v^3 are the roots of the quadratic equations The roots of the quadratic equations are: (1) (2) In Python, the inner root can be computed using:
innerRoot = cmath.sqrt(q**2 / 4. + p**3/27.)
Now, u and v are cubic roots of (1) and (2) respectively. They must satisfy 3uv=-p. In Python, you get your initial u using:
u=(-q / 2. + innerRoot) ** (1/3.)
If the pair u,v does not satisfy 3uv = -p, you can multiply your v by $latex-1 + i \sqrt 3 \over 2 $ until the pair satisfies the condition. Now, having a solution, get the next by multiplying u by $latex-1 + i \sqrt 3 \over 2 and v by latex-1 – i \sqrt 3 \over 2
(The above values are output from Python script. The real results look much better.) Now, to get the roots of the original equation, add to each y. In our example, Thus,
Writing expressions is much easier and more readable when the language supports the complex type.
When you see a change in the major version (the number before the first point of the version id), expect a great leap. New features have been added to PHP in version 7, that make programming more convenient. I’m going to discuss some of them.
Null Coalescing
Suppose you’re trying to get a value from a request, and set it to zero if not sent. So instead of typing
$val = $_GET['foo'];
if ($val == null)
$val=0;
Simply use ?? as follows:
$val = $_GET['foo'] ?? 0;
The Spaceship Comparison Operator
When making a decision based on comparisons between to values, would you like to use a switch command instead of if ... else? Use the operator ‘<=>’ to compare numbers or strings. $a<=>$b will return one of the following values:
* -1 if $a is smaller than $b
* 0 if $a equals $b
* 1 if $a is greater than $b
Generator Functions
Generator functions have been introduced in PHP 5.5. They allow you to elegantly use generated values in a foreachloop without calling the function time and time again.
For example, the following code:
In addition to generating values, a generator can return a value using the return command. This value will be retrieved by the caller using the method getReturn().
A generator function can generate values using another generator function. This can be done by adding the keyword from after the command yield.
For example, the following code:
A return type can be declare by adding it at the end of the function declaration after colons.
For example:
functionmyFunc(): int
{
.
.
.
return $retValue;
}
returns an integer.
Why Write The Return Type At The End?
Two possible reasons to write the type at the end of the declaration and not at the beginning like in Java, C, and other c-like languages:
* In PHP, the function declaration begins with the keyword funcction. The return type is optional.
* This syntax already exists in AcrionScript.
I remember that little prank from the days I was a student. You work on an X terminal, and out of the blue, all the display contents gradually disappear’ Pixel after pixel turns black. But don’t worry – you’ll regain control over your display shortly. shortly. Everyone can access other X terminal display, and mess with it.
How Does It Work?
This program is a simple one using the GDK library, Gnome’s window management package. Including ‘gdk.h’ will also include:
The main function of the program performs the following steps: 1. Initialize GDK. 2. Create a window whose dimensions are the same as those of the root window. 3. Make the window’s background transparent. 4. Make the window a full-screen window. 5. Add an event handler. to handle Expose events. The event handler will perform the following steps: 1. Create a list of columns and lengths (number of blackened pixels). 2. Create the Graphics Context for the window. 3. Blacken pixels until all pixels are black. 4. Quit the main loop.
Includes And Structures:
#include <stdio.h>
#include <stdlib.h>
#include <gdk/gdk.h>
GMainLoop *mainloop;
GList *list;
typedef struct col_and_length_t{
short col; // Column number
short len; // Number of blackened pixels.
} col_and_length;`