Maxima – 145 – itensor – 4


Continuo da qui, copio dal Reference Manual, PDF scaricabile da qui, sono a p.434.

defcon (tensor_1)
defcon (tensor_1, tensor_2, tensor_3)
gives tensor_1 the property that the contraction of a product of tensor_1 and tensor_2 results in tensor_3 with the appropriate indices. If only one argument, tensor_1, is given, then the contraction of the product of tensor_1 with any indexed object having the appropriate indices (say my_tensor) will yield an indexed object with that name, i.e. my_tensor, and with a new set of indices reflecting the contractions performed. For example, if imetric:g, then defcon(g) will implement the raising and lowering of indices through contraction with the metric tensor. More than one defcon can be given for the same indexed object; the latest one given which applies in a particular contraction will be used. contractions is a list of those indexed objects which have been given contraction properties with defcon.

remcon (tensor_1, ..., tensor_n)
remcon (all)
Removes all the contraction properties from the (tensor_1, ..., tensor_n). remcon(all) removes all contraction properties from all indexed objects.

contract (expr)
Carries out the tensorial contractions in expr which may be any combination of sums and products. This function uses the information given to the defcon function. For best results, expr should be fully expanded. ratexpand is the fastest way to expand products and powers of sums if there are no variables in the denominators of the terms. The gcd switch should be false if GCD cancellations are unnecessary.

indexed_tensor (tensor)
Must be executed before assigning components to a tensor for which a built in value already exists as with ichr1, ichr2, icurvature. See the example under icurvature.

components (tensor, expr)
Permits one to assign an indicial value to an expression expr giving the values of the components of tensor. These are automatically substituted for the tensor whenever it occurs with all of its indices. The tensor must be of the form t([...],[...]) where either list may be empty. expr can be any indexed expression involving other objects with the same free indices as tensor. When used to assign values to the metric tensor wherein the components contain dummy indices one must be careful to define these indices to avoid the generation of multiple dummy indices. Removal of this assignment is given to the function remcomps.

It is important to keep in mind that components cares only about the valence of a tensor, not about any particular index ordering. Thus assigning components to, say, x([i,-j],[]), x([-j,i],[]), or x([i],[j]) all produce the same result, namely components being assigned to a tensor named x with valence (1,1).

Components can be assigned to an indexed expression in four ways, two of which involve the use of the components command:

1) As an indexed expression. For instance:

(%i1) load (itensor)$

(%i2) components(g([],[i,j]),e([],[i])*p([],[j]))$

(%i3) ishow(g([],[i,j]))$
                                      i  j
(%t3)                                e  p

2) As a matrix:

(%i4) lg:-ident(4)$lg[1,1]:1$ lg;
                             [ 1   0    0    0  ]
                             [                  ]
                             [ 0  - 1   0    0  ]
(%o6)                        [                  ]
                             [ 0   0   - 1   0  ]
                             [                  ]
                             [ 0   0    0   - 1 ]
(%i7) components(g([i,j],[]),lg);
(%o7)                                done
(%i8) ishow(g([i,j],[]))$
(%t8)                                g
                                      i j
(%i9) g([1,1],[]);
(%o9)                                  1
(%i10) g([4,4],[]);
(%o10)                                - 1

3) As a function. You can use a Maxima function to specify the components of a
tensor based on its indices. For instance, the following code assigns kdelta to h if h has the same number of covariant and contravariant indices and no derivative indices, and g otherwise:

(%i11) h(l1,l2,[l3]):=if length(l1)=length(l2) and length(l3)=0
         then kdelta(l1,l2) else apply(g,append([l1,l2], l3))$

(%i12) ishow(h([i],[j]))$
(%t12)                              kdelta
(%i13) ishow(h([i,j],[k],l))$
(%t13)                              g
                                     i j,l

4) Using Maxima’s pattern matching capabilities, specifically the defrule and applyb1 commands:

(%i14) matchdeclare(l1,listp);
(%o14)                               done
(%i15) defrule(r1,m(l1,[]),(i1:idummy(),

(%i16) defrule(r2,m([],l1),(i1:idummy(),

(%i17) ishow(m([i,n],[])*m([],[i,m]))$
                                    i m
(%t17)                             m    m
                                         i n
(%i18) ishow(rename(applyb1(%,r1,r2)))$
                           %1  %2  %3 m
(%t18)                    e   q   w     q   e   g
                                         %1  %2  %3 n

showcomps (tensor)
Shows component assignments of a tensor, as made using the components command. This function can be particularly useful when a matrix is assigned to an indicial tensor using components, as demonstrated by the following example:

(%i1) load(ctensor)$

(%i2) load(itensor)$

(%i3) lg:matrix([sqrt(r/(r-2*m)),0,0,0],[0,r,0,0],
               [         r                                     ]
               [ sqrt(-------)  0       0              0       ]
               [      r - 2 m                                  ]
               [                                               ]
               [       0        r       0              0       ]
(%o3)          [                                               ]
               [       0        0  r sin(theta)        0       ]
               [                                               ]
               [                                      r - 2 m  ]
               [       0        0       0        sqrt(-------) ]
               [                                         r     ]
(%i4) components(g([i,j],[]),lg);
(%o4)                                done
(%i5) showcomps(g([i,j],[]));
                  [         r                                     ]
                  [ sqrt(-------)  0       0              0       ]
                  [      r - 2 m                                  ]
                  [                                               ]
                  [       0        r       0              0       ]
(%t5)      g    = [                                               ]
            i j   [       0        0  r sin(theta)        0       ]
                  [                                               ]
                  [                                      r - 2 m  ]
                  [       0        0       0        sqrt(-------) ]
                  [                                         r     ]
(%o5)                                false

The showcomps command can also display components of a tensor of rank higher than 2.

Visto nel Web – 371

Allora: non ho ancora visto la comenta ma intanto ecco cosa ho wisto nel Web.


PHP 7.3 Brings C Inlining and Speed Improvements
linguaggi di programmazione
::: Slashdot

Smartphones Are Everywhere
dispositivi mobili
::: marcoscan

The new blog explains why @libreoffice helps @linuxdistro viable alternatives to #microsoftwindows Some distros @ubuntu @linuxmint @fedora @opensuse @zorinos
open source
::: oscollege

Altair: Interactive Statistical Visualizations for Python
::: eitanlees

Huawei’s CFO had most likely routed her flight via Canada on purpose, to avoid USA. The fastest connections from Hong Kong to Mexico City are via San Francisco or Los Angeles (instead of Vancouver)
::: mikko ::: micmord ::: real_fabristol ::: Slashdot ::: Slashdot

Can Democrats In Congress Restore America’s Net Neutrality Rules?
Web, Internet
::: Slashdot

🎉 The blog for my Languages and Abstractions for Distributed Programming course launches this week!
linguaggi di programmazione
::: lindsey

Edge goes Chromium, and open source wins the browser wars via @ZDNet & @sjvn After decades, the #web #browser wars are over and Microsoft has lost. #opensource
Web, Internet | open source
::: sjvn

Easy Clojure, Easy REPL! Welcome the Klipse REPL: a beginner friendly REPL
::: viebel

L’informazione sempre più sotto attacco. Nel 2018 oltre 70 giornalisti uccisi
::: fabiochiusi

Tre minuti prima di sbarcare sulla Luna
::: Spreaker

On this date, 50 years ago, Doug Engelbart and his team gave “The Mother of All Demos”
::: zvr


The Friendship That Made Google Huge
programming, codice, snippet
::: Slashdot

Princeton rejected her application, because they didn’t accept women at the time. She went somewhere else to get her education, and ended up changing the programming world forever with Abstract Data Types. Here’s Barbara Liskov
storia | protagonisti
::: old_sound

VoxxedDays are coming to Italy for 1st time (and I’m proud of it). Let’s learn and have fun together!
programming, codice, snippet
::: mariofusco

As We Forge the Web of Tomorrow, We Need a Set of Guiding Principles That Can Define the Kind of Web We Want, Says Tim Berners-Lee
Web, Internet
::: Slashdot

Google Just Can’t Get the Message
Google | social media
::: Slashdot

A comprehensive look at what it takes to build a game with Lisp
::: DefunGames

Radical restructuring of ownership and #copyright, as seen with streaming in the music industry, has not fully hit academic publishing + the privatization of publicly-funded research… Yet
copyright e brevetti
::: lawnouveau

Alibaba Already Has a Voice Assistant Way Better Than Google’s
Web, Internet
::: Slashdot

Bella introduzione interattiva agli algoritmi di percorso minimo nei grafi
programming, codice, snippet
::: fulcorno

Details about self-publishing “A Programmer’s Introduction to Mathematics”
manuali, how to
::: jeremyjkun

#Anaconda has one job. It can’t do it
::: Symbo1ics


Our long-held view remains: #Article11 should be removed from the #copyrightdirective. The option to make the #press #publishers right waivable is simply one way to slightly improve it if deletion is impossible
copyright e brevetti
::: communia_eu

Check out my zero-knowledge proofs starter pack
manuali, how to
::: PaulRBerg

When Linux required installation parties
sistemi operativi | storia
::: cialunet

Did you know it was possible to seamlessly connect your Android phone to your GNOME desktop to share photos, send SMS, and even control the mouse cursor? With the GSConnect extension you can!
sistemi operativi | dispositivi mobili | manuali, how to
::: gnome

Vim for normal people
tools, componenti software
::: cialunet

Ready to explore a galaxy of your choosing in a massive scale 4X/RTS set in space on #Ubuntu? Install the Star Ruler 2 snap today and become a RulerOfStars 🌟🤴🚀
::: cialunet

The Cost of Shutdown Tool (COST) launches today and estimates the economic impact of Internet shutdowns, mobile data blackouts and social media restrictions including throttling. The tool allows calculation by country, services and length of time
Web, Internet | economia, lavoro
::: fabiochiusi

BREAKING: #SaveTheInternet Petition against #UploadFilters just cracked 4 million signatures, the largest @change petition ever! On Wednesday at 14:30, petitioners will present their demands to the press at @Europarl_EN in Strasbourg
copyright e brevetti | censura
::: Senficon

Facebook usage in Europe by country
::: simongerman600

GNOME is Experimenting with a Refreshed GTK & Icon Theme
tools, componenti software
::: dcavedon

One-in-five U.S. adults say they often get news via social media, slightly higher than the share who often do so from print newspapers (16%) for the first time since @PewResearch began asking these questions
social media | media
::: fabiochiusi


That TV use 📺 is heavily driven by older adults
::: ElisaShearer

#KDE_Frameworks 5.53 is out. In this version we fixed the (ironic) crash in KCrash, added KWayland virtual desktop protocol, and improved the Baloo indexing engine amongst many other fixes and tweaks
programming, codice, snippet
::: kdecommunity ::: linuxjournal

New tutorial hot off the presses!🔥🚀 How to train, save, and load your Keras deep learning models
::: PyImageSearch

Tutto quanto su fb
::: davidakaye

Camel K on @KnativeProject: agile integration becoming serverless! 😃 #ApacheCamel #Serverless
Web, Internet
::: ni_ferraro

Intel LSD performance issue: tiny loop goes 1.5x slower or faster depending on how a register is zeroed before entering the loop
::: _monoid

Mapping to Bits: Efficiently Detecting Type Confusion Errors
programming, codice, snippet
::: johnregehr

I would say no, but if I answer from my phone I would feel a little dishonest!
dispositivi mobili
::: Kasparov63

In the heart of silicon valley, the internet goes through overhead lines, and outages last for days…
Web, Internet
::: fchollet

%pip and %conda magic commands have just been merged into IPython! 🎉🎉🎉 This will go a long way toward alleviating user confusion around package installation in @ProjectJupyter that I wrote about last year
::: jakevdp

Latest EU Copyright Proposal: Block Everything, Never Make Mistakes, But Don’t Use Upload Filters 🤦‍♀️
copyright e brevetti | censura
::: laura_nobilis ::: communia_eu ::: mathver ::: WikimediaItalia ::: communia_eu ::: Inov_mediapub ::: communia_eu ::: communia_eu ::: WikimediaItalia ::: rdicosmo ::: Senficon


A coalition of more than 60 leading groups from countries across the world have joined forces to blast the internet giant for failing to address concerns about the secretive China project, known as Dragonfly
::: fabiochiusi

Politicians’ willingness to smear journalists or the outlets they report for, rather than debate the facts, in order to warp the public’s right to information is the true threat to media freedom in the EU
::: IndexCensorship

Odio e paura scorrono su fibra ottica? Nella scorsa puntata di #EcoEtico abbiamo intervistato @fabiochiusi che ci ha parlato di Io non sono qui. Visioni e inquietudini da un futuro presente
social media
::: VBazzarin

Few of the Silicon Valley titans seem capable of acknowledging their responsibility for the real-world political impact of their products. Could it be that that’s because they don’t know much about the real world?
economia, lavoro | social media
::: MaxBoot

The 10 most popular programming languages from 2012 to today
linguaggi di programmazione

One thing on my Python packaging wish list: a way to specify versions of peer dependencies — dependencies that are not strictly necessary, but have specific version requirements *if* you plan to use them
::: jakevdp

Evelyn Berezin, Who Built the First True Word Processor, Has Died at 93
::: Slashdot ::: ComputerHistory

The Behavior of Gradual Types: A User Study
linguaggi di programmazione
::: Programming Research Laboratory

What Student Developers Want in a Job
economia, lavoro
::: Slashdot

Facebook is Starting To Test Search Ads in its Search Results and Marketplace
ad, pubblicità | Facebook
::: Slashdot

Comcast Rejected by Small Town — Residents Vote For Municipal Fiber Instead
Web, Internet
::: Slashdot

Jupyter is the greatest productivity boost of any tool I’ve used in the last 30+ years of coding. It takes time to understand how to do use it well, and it’s particularly hard for experienced programmers to re-tool
::: jeremyphoward


Updates on this, thanks to several folks who responded to the thread. Conda now supports this via the “run_constrained” section, though it’s not all that well documented yet. Pip has something along these lines via the “extra_requires” section, though the user must opt in
::: jakevdp ::: joelgrus

Nextcloud 15 is out. This major release is a “big step forward for communication and collaboration with others in a secure way”. It introduces several new features, including Nextcloud Social, new security abilities & deep Collabora Online integration
Web, Internet
::: linuxjournal

Publishers told by Google to be careful what they wish for on #copyright: Google won’t enter a licensing deal with every publisher that asks for one after EU approves an overhaul of copyright rules for the internet age, a senior exec told POLITICO
copyright e brevetti | Google
::: PoliticoRyan

Linux Kernel Developers Discuss Dropping x32 Support
::: Slashdot

FreeBSD 12 Released
sistemi operativi
::: Slashdot

Non c’è più l’informazione di una volta
::: mante

42 Silicon Valley is part of a grand experiment in free STEM education. Even housing is included
scuola, educazione
::: IEEESpectrum ::: IEEESpectrum

Say what you will about Microsoft Word, but I just found a .doc file buried in the Microsoft Word for Winows 1.1 source code, opened it in today’s update to Word in Office 365 with two clicks and read it
::: dcbrock

FCC Gives Carriers the Option To Block Text Messages
Web, Internet
::: Slashdot

Google Training Document Reveals How Temps, Vendors, and Contractors Are Treated
economia, lavoro
::: Slashdot

I argue here that Congress’s confusion about Google and privacy is really an argument *for* regulation
economia, lavoro | politica
::: WillOremus


Version 3 of my “Parsing: a Timeline”
storia | programming, codice, snippet
::: jeffreykegler

Email got so many things so right that we’re still unpacking its brilliance four decades later. Long-form and asynchronous, email is an ace medium for fully considered thoughts. Not knee-jerk, instant reactions. We lost sight of that due to chaff
Web, Internet
::: dhh

random RT of this awesome collection of resources about compiler correctness
programming, codice, snippet
::: johnregehr

How US and Chinese cloud providers are competing on the European internet infrastructure battleground
Web, Internet
::: adam_tooze

Looks interesting: @palewire & co. at @LATdatadesk have been doing a lot of great work in open data-driven journalism powered by Python, Jupyter, etc., as well as contributing back to the open source tools they use!
::: jakevdp

Thank you Twitter for showing me again tweets from people I don’t follow
Twitter | ad, pubblicità
::: Gianlucadfiore

Impacchettando il nulla
Web, Internet | politica
::: mante ::: enristradi

ASUS CEO Resigns as Company Shifts Mobile Focus To Power Users
ditte | economia, lavoro
::: Slashdot

Important report by Canada’s House of Commons on data-opolies
economia, lavoro | politica
::: MauriceStucke

not enough people know (and the name doesn’t help) that C-Reduce does a pretty good job reducing programs in almost any language in the extended Algol or Lisp families
linguaggi di programmazione
::: johnregehr

Microsoft Is Readying a Consumer Microsoft 365 Subscription Bundle
::: Slashdot


Go 1.11.3 and 1.10.6 have been released! 🔒 Includes security fixes to “go get” and crypto/x509
linguaggi di programmazione
::: golang

About ncurses Colors
tip, suggerimenti
::: Gianlucadfiore

The Linux terminal is no one-trick pony
tools, componenti software
::: cialunet

🎉 WE DID IT! $2.5 million raised, from 42,780 founding members, in 29 days. The Correspondent WILL launch mid-2019! 🎉 Thank you to everyone who brought this incredible movement for unbreaking news to life. We’re so proud to have done this with you!
::: The_Corres ::: dangillmor

Steady progress on EM Dates, our early modern date parser and converter. The Roman date parser can now deal with several common variants
tools, componenti software
::: kintopp

In 1973, Bowmar/ALI was the biggest calculator company in the world. In 1976, it went out of business
::: IEEESpectrum

Serverless: More Than Just Functions
Web, Internet
::: redmonk

I very much recommend @jeffreycwitt: Digital Scholarly Editions and API Consuming Applications
programming, codice, snippet | scuola, educazione
::: awndlr

Despite having 20 years of experience with C++, when I compile a non trivial chunk of code for the first time without any error or warning, I am suspicious. It is not, usually, a good sign
linguaggi di programmazione
::: lemire

Head to the arcade in your Linux terminal with this Pac-Man clone
games | storia
::: cialunet

Developing Console Applications with Bash | Bring the power of the Linux command line into your application development process
linguaggi di programmazione
::: linuxjournal


Messaggio colorato nel terminale – 2


Continuo con i messaggi colorati, completando questo post.

Oltre a Bash e Python manca qualcuno? In realtà molti ma in particolare JavaScript, per me Node.

Si può fare, anzi è una variante di quanto già visto. Va però considerato che JavaScript è nato e viene usato per il Web e solo raramente in locale per il terminale. Ma volendo… 😋

Il beep ha richiesto una sessione prolungata di  googlaggio  duckduckgoaggio, non funziona il solito \a delle origini di Unix. Anche perché a rappresenta “alarm” ma c’è dentro ^G. C’è il modulo beeper, ed ecco:

var beeper = require('beeper');

Il modulo dev’essere installato via npm. Dove abbiamo trovato l’indicazione di beeper? Purtroppo non lo abbiamo memorizzato. Ma guardando dentro si trova una soluzione più semplice, senza moduli aggiunti, molto simile alle versioni Bash e Pyton:


eh sì! ^G.

Per il colore lo script (dis.js) è una variante di quello Python, dopo aver concatenato gli elementi della lista degli argomenti usa replace() per le sostituzioni. Notare la sintassi inusuale, derivata dalle regexps. Ed ecco:



args = process.argv;
n = args.length - 1;
i = 2
st = args[i];
while (i < n) {
    i += 1;
    st = st + ' ' + args[i];

st = st.replace(/%R/g, RED);
st = st.replace(/%G/g, GREEN);
st = st.replace(/%Y/g, YELLOW);
st = st.replace(/%B/g, BLUE);
st = st.replace(/%Z/g, ENDC);



Maxima – 144 – itensor – 3


Continuo da qui, copio dal Reference Manual, PDF scaricabile da qui, sono a p.431.

Gestione di oggetti indicizzati

dispcon (tensor_1, tensor_2, ...)
dispcon (all)
Displays the contraction properties of its arguments as were given to defcon. dispcon (all) displays all the contraction properties which were defined.

entertensor (name)
is a function which, by prompting, allows one to create an indexed object called name with any number of tensorial and derivative indices. Either a single index or a list of indices (which may be null) is acceptable input (see the example under covdiff).

changename (old, new, expr)
will change the name of all indexed objects called old to new in expr. old may be either a symbol or a list of the form [name, m, n] in which case only those indexed objects called name with m covariant and n contravariant indices will be renamed to new.

Lists all tensors in a tensorial expression, complete with their indices.

(%i1) load (itensor)$

(%i2) ishow(a([i,j],[k])*b([u],[],v)+c([x,y],[])*d([],[])*e)$
(%t2)                        d e c    + a    b
                                  x y    i j  u,v
(%i3) ishow(listoftens(%))$
(%t3)                        [a   , b   , c   , d]
                               i j   u,v   x y

ishow (expr)
displays expr with the indexed objects in it shown having their covariant indices as subscripts and contravariant indices as superscripts. The derivative indices are displayed as subscripts, separated from the covariant indices by a comma.

indices (expr)
Returns a list of two elements. The first is a list of the free indices in expr (those that occur only once). The second is the list of the dummy indices in expr (those that occur exactly twice) as the following example demonstrates.

(%i4) ishow(a([i,j],[k,l],m,n)*b([k,o],[j,m,p],q,r))$
                                k l      j m p
(%t4)                          a        b
                                i j,m n  k o,q r
(%i5) indices(%);
(%o5)                 [[l, p, i, n, o, q, r], [k, j, m]]

A tensor product containing the same index more than twice is syntactically illegal. indices attempts to deal with these expressions in a reasonable manner; however, when it is called to operate upon such an illegal expression, its behavior should be considered undefined.

rename (expr)
rename (expr, count)
Returns an expression equivalent to expr but with the dummy indices in each term chosen from the set [%1, %2,...], if the optional second argument is omitted. Otherwise, the dummy indices are indexed beginning at the value of count. Each dummy index in a product will be different. For a sum, rename will operate upon each term in the sum resetting the counter with each term. In this way rename can serve as a tensorial simplifier. In addition, the indices will be sorted alphanumerically (if allsym is true) with respect to covariant or contravariant indices depending upon the value of flipflag. If flipflag is false then the indices will be renamed according to the order of the contravariant indices. If flipflag is true the renaming will occur according to the order of the covariant indices. It often happens that the combined effect of the two renamings will reduce an expression more than either one by itself.

(%i6) allsym:true;
(%o6)                                true
(%i7) g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%4],[%3])*

(%i8) expr:ishow(%)$
       %4 %5  %6 %7      %3         u          %1         %2
(%t8) g      g      ichr2      ichr2      ichr2      ichr2
                         %1 %4      %2 %3      %5 %6      %7 r
                        %4 %5  %6 %7      u          %1         %3         %2
                     - g      g      ichr2      ichr2      ichr2      ichr2
                                          %1 %2      %3 %5      %4 %6      %7 r
(%i9) flipflag:true;
(%o9)                                true
(%i10) ishow(rename(expr))$
        %2 %5  %6 %7      %4         u          %1         %3
(%t10) g      g      ichr2      ichr2      ichr2      ichr2
                          %1 %2      %3 %4      %5 %6      %7 r
                        %4 %5  %6 %7      u          %1         %3         %2
                     - g      g      ichr2      ichr2      ichr2      ichr2
                                          %1 %2      %3 %4      %5 %6      %7 r
(%i11) flipflag:false;
(%o11)                               false
(%i12) ishow(rename(expr))$
        %1 %2  %3 %4      %5         %6         %7        u
(%t12) g      g      ichr2      ichr2      ichr2     ichr2
                          %1 %6      %2 %3      %4 r      %5 %7
                        %1 %2  %3 %4      %6         %5         %7        u
                     - g      g      ichr2      ichr2      ichr2     ichr2
                                          %1 %3      %2 %6      %4 r      %5 %7

show (expr)
Displays expr with the indexed objects in it shown having covariant indices as subscripts, contravariant indices as superscripts. The derivative indices are displayed as subscripts, separated from the covariant indices by a comma.

Default value: false.

If false then the indices will be renamed according to the order of the contravariant indices, otherwise according to the order of the covariant indices.

If flipflag is false then rename forms a list of the contravariant indices as they are encountered from left to right (if true then of the covariant indices). The first dummy index in the list is renamed to %1, the next to %2, etc. Then sorting occurs after the rename-ing (see the example under rename).

Maxima – 143 – itensor – 2


Continuo da qui, copio dal Reference Manual, PDF scaricabile da qui, sono a p.428.

Manipolazione di itensor (indicial tensor)
The indicial tensor manipulation package may be loaded by load(itensor). Demos are also available: try demo(tensor).

In itensor a tensor is represented as an “indexed object” . This is a function of 3 groups of indices which represent the covariant, contravariant and derivative indices. The covariant indices are specified by a list as the first argument to the indexed object, and the contravariant indices by a list as the second argument. If the indexed object lacks either of these groups of indices then the empty list [] is given as the corresponding argument. Thus, g([a,b],[c]) represents an indexed object called g which has two covariant indices (a,b), one contravariant index (c) and no derivative indices.

The derivative indices, if they are present, are appended as additional arguments to the symbolic function representing the tensor. They can be explicitly specified by the user or be created in the process of differentiation with respect to some coordinate variable. Since ordinary differentiation is commutative, the derivative indices are sorted alphanumerically, unless iframe_flag is set to true, indicating that a frame metric is being used. This canonical ordering makes it possible for Maxima to recognize that, for example, t([a],[b],i,j) is the same as t([a],[b],j,i). Differentiation of an indexed object with respect to some coordinate whose index does not appear as an argument to the indexed object would normally yield zero. This is because Maxima would not know that the tensor represented by the indexed object might depend implicitly on the corresponding coordinate. By modifying the existing Maxima function diff in itensor, Maxima now assumes that all indexed objects depend on any variable of differentiation unless otherwise stated. This makes it possible for the summation convention to be extended to derivative indices. It should be noted that itensor does not possess the capabilities of raising derivative indices, and so they are always treated as covariant.

The following functions are available in the tensor package for manipulating indexed objects. At present, with respect to the simplification routines, it is assumed that indexed objects do not by default possess symmetry properties. This can be overridden by setting the variable allsym[false] to true, which will result in treating all indexed objects completely symmetric in their lists of covariant indices and symmetric in their lists of contravariant indices.

The itensor package generally treats tensors as opaque objects. Tensorial equations are manipulated based on algebraic rules, specifically symmetry and contraction rules. In addition, the itensor package understands covariant differentiation, curvature, and torsion. Calculations can be performed relative to a metric of moving frame, depending on the setting of the iframe_flag variable.

A sample session below demonstrates how to load the itensor package, specify the name of the metric, and perform some simple calculations.

(%i1) load(itensor);
(%o1)         /usr/share/maxima/5.41.0/share/tensor/itensor.lisp
(%i2) imetric(g);
(%o2)                                done
(%i3) components(g([i,j],[]),p([i,j],[])*e([],[]))$

(%i4) ishow(g([k,l],[]))$
(%t4)                               e p
                                       k l
(%i5) ishow(diff(v([i],[]),t))$
(%t5)                                  0
(%i6) depends(v,t);
(%o6)                               [v(t)]
(%i7) ishow(diff(v([i],[]),t))$
(%t7)                               -- (v )
                                    dt   i
(%i8) ishow(idiff(v([i],[]),j))$
(%t8)                                v
(%i9) ishow(extdiff(v([i],[]),j))$
                                  v    - v
                                   j,i    i,j
(%t9)                             -----------
(%i10) ishow(liediff(v,w([i],[])))$
                               %3          %3
(%t10)                        v   w     + v   w
                                   i,%3    ,i  %3
(%i11) ishow(covdiff(v([i],[]),j))$
(%t11)                        v    - v   ichr2
                               i,j    %4      i j
(%i12) ishow(ev(%,ichr2))$
                %4 %5
(%t12) v    - (g      v   (e p       + e   p     - e p       - e    p
        i,j            %4     j %5,i    ,i  j %5      i j,%5    ,%5  i j
                                                    + e p       + e   p    ))/2
                                                         i %5,j    ,j  i %5
(%i13) iframe_flag:true;
(%o13)                               true
(%i14) ishow(covdiff(v([i],[]),j))$
(%t14)                        v    - v   icc2
                               i,j    %6     i j
(%i15) ishow(ev(%,icc2))$
(%t15)                        v    - v   ifc2
                               i,j    %6     i j
(%i16) ishow(radcan(ev(%,ifc2,ifc1)))$
             %6 %7                    %6 %7
(%t16) - (ifg      v   ifb       + ifg      v   ifb       - 2 v
                    %6    j %7 i             %6    i j %7      i,j
                                                         %6 %7
                                                    - ifg      v   ifb      )/2
                                                                %6    %7 i j
(%i17) ishow(canform(s([i,j],[])-s([j,i])))$
(%t17)                            s    - s
                                   i j    j i
(%i18) decsym(s,2,0,[sym(all)],[]);
(%o18)                               done
(%i19) ishow(canform(s([i,j],[])-s([j,i])))$
(%t19)                                 0
(%i20) ishow(canform(a([i,j],[])+a([j,i])))$
(%t20)                            a    + a
                                   j i    i j
(%i21) decsym(a,2,0,[anti(all)],[]);
(%o21)                               done
(%i22) ishow(canform(a([i,j],[])+a([j,i])))$
(%t22)                                 0

AI, innovazioni e blockchain – 52

Ogni venerdì ci sono 2 cose: il mercato a Moncalieri e la rassegna delle novità innovative, questa, ecco 😁


After a Year of Tech Scandals, Our 10 Recommendations for AI
The report has 10 key recommendations
artificial intelligence | etica
::: AINowInstitute

A single #AI algorithm that learns from scratch to play chess, shoji and Go at superhuman (beyond world champion) levels @sciencemagazine by @DeepMindAI David Silver @demishassabis and colleagues
algoritmi, codice | machine learning
::: EricTopol

Wonderful piece by Garry Kasparov @Kasparov63 in Science about the #AlphaZero paper: Chess, the Drosophila of reasoning
innovazioni, futuro
::: marcelsalathe ::: _wilfredh

New version of our paper on deterministic RBM training, now with Deep Boltzmann Machines
artificial intelligence
::: fujikanaeda

Always good @johnthornhillft “If data are the feedstock for AI then what does it mean for governments when multinational companies, such as Google and Facebook, control so much of it? To what extent this erodes democratic sovereignty and political agency?”
dati, raccolta
::: francesca_bria

What makes a great consumer gadget? We set our criteria, made a list, and explored their untold histories. Browse the first devices in our Consumer Electronics Hall of Fame
innovazioni, futuro
::: IEEESpectrum

Tesla’s Giant Battery In Australia Saved $40 Million During Its First Year, Report Says
innovazioni, futuro
::: Slashdot

In @HarvardBiz, @iyadrahwan and Manuel Cebrian join @Deloitte data scientists in discussing why and how to scrutinize algorithms for bias, potential misuse, and other ethical pitfalls
artificial intelligence
::: medialab

Innovation often comes from small teams that tend to work against the company culture rather than with its blessing
innovazioni, futuro
::: RichRogersIoT

Chinese scientist who edited twin girls’ genes He Jiankui missing for over a week
innovazioni, futuro | etica
::: marcelsalathe

It’s time to act to regulate #FacialRecognition. To ensure it’s used as a force for good, we’ve laid out our suggestions on how we can get started and the principles @Microsoft will adopt. Thanks @BrookingsInst for the opportunity to discuss these ideas
artificial intelligence
::: BradSmi

Bitcoin ELI5, a magazine for children explaining crypto
blockchain e crypto*
::: mrcoolbp

Canada and France plan an international panel to assess #AI’s dangers
artificial intelligence
::: MFordFuture

Seymour Cray

Seymour Cray

Not gonna lie: It would be fun to play around with this IBM truck that has 100TB SSD storage, 1,000 Mbps networking and 47kW of self-generating power
::: mikko

Respect of human rights is first among them
artificial intelligence
::: fabiochiusi

Aston Martin Will Make Old Cars Electric So They Don’t Get Banned From Cities
innovazioni, futuro
::: Slashdot

A combination of Ubuntu Core, snaps and Kura can solve the limitations that come with Linux distributions for IoT edge gateway devices
Internet of things
::: cialunet

Problem: Transistors are hard to turn completely off and leak current, wasting power. Solution: Ditch them and use tiny mechanical switches instead
Internet of things
::: IEEESpectrum

Is our constant use of digital technologies affecting our brain health? We asked 11 experts
innovazioni, futuro
::: medialab

California Gives Final OK To Require Solar Panels On New Houses
innovazioni, futuro
::: Slashdot

UPS Tries Delivery Tricycles As Seattle’s Traffic Doom Looms
innovazioni, futuro
::: Slashdot

DHS Looking Into Tracking Monero and Zcash Transactions
blockchain e crypto*
::: Slashdot

Just out! The coordinated plan on #artificialintelligence between the Commission & Member States will boost AI “made in Europe”. Development of Trustworthy AI deemed essential
artificial intelligence
::: nsmuha

Bias is a social problem, and seeking to solve it within the logic of automation is always going to be inadequate
artificial intelligence
::: datasociety

Share of global CO₂ emissions vs. share of global population
economia, lavoro
::: MaxCRoser


Cryptocurrencies Tumble Even More, While One Asset Manager Proclaims ‘Bitcoin is Dead’
blockchain e crypto*
::: Slashdot ::: Slashdot

Elon Musk: Tesla ‘Would Be Interested’ in Taking Over GM’s Closed Factories
economia, lavoro
::: Slashdot

The coordinated action plan on #artificialintelligence presented today outlines joint actions to increase investment and availability of data, foster talent and trust in AI
artificial intelligence
::: RoboticsEU

If you have a Tesla built in past 2 years, definitely try Navigate on Autopilot. It will blow your mind. Automatically passes slow cars & takes highway interchanges & off-ramps
::: elonmusk

Remove a magnetic field from a new metamaterial, and here’s what happens
innovazioni, futuro
::: IEEESpectrum

Intelligenza «naturale» e intelligenza «artificiale»: c’è un equivoco. Ecco quale
artificial intelligence
::: MauroV1968

For academic scientists, especially the more junior among us, we will have to contend with whether it’s strategically sound for our careers to continue working on structure prediction
artificial intelligence | machine learning
::: marcelsalathe

The Electric Airplane Revolution May Come Sooner Than You Think
innovazioni, futuro
::: Slashdot

How to build deep learning inference through Knative serverless framework
machine learning
::: cialunet

Alexa is Implementing Self-Learning Techniques To Better Understand Users
machine learning
::: Slashdot

UK Just Banned the National Health Service From Buying Any More Fax Machines
innovazioni, futuro
::: Slashdot


“Facial-recognition technology is advancing faster than the people who worry about it have been able to think of ways to manage it.” @NewYorker on the manifold challenges of harnessing a promising, but frightening, technology
privacy, sicurezza, spionaggio, virus
::: medialab

As emerging algorithm-driven artificial intelligence (#AI) continues to spread, will people be better off than they are today? Experts weigh in, including @amywebb, @setlinger, @rushkoff and @jeffjarvis
artificial intelligence
::: pewresearch

1. Time for a brief tweetstorm on non-financial applications of blockchains. As blockchain scalability gets better and better, and UX improves and fees drop as a result, this will become a bigger and bigger part of the story
blockchain e crypto*
::: VitalikButerin

Start-Ups Aren’t Cool Anymore
economia, lavoro
::: Slashdot

Amazon is now designing its own computer chips. This is “a watershed moment” for a tech industry increasingly dominated by five companies
::: CadeMetz

Walmart Is Reportedly Testing a Burger-Flipping Robot
::: Slashdot

Facebook Filed a Patent To Calculate Your Future Location
privacy, sicurezza, spionaggio, virus
::: Slashdot

Californians Have Now Purchased Half a Million EVs
innovazioni, futuro
::: Slashdot

Elowan: A plant-robot hybrid
innovazioni, futuro | robots
::: marcoscan

Nifty Wallet started as a project that was friendly to sidechains and other networks who wanted the MetaMask experience. We’re excited to add a new feature allowing you to directly interact with Smart contracts!
blockchain e crypto*
::: poanetwork

Machine learning systems aren’t perfect, even at a closed system like chess. There will be cases where an AI will fail to detect exceptions to their rules. Therefore, we must work together, to combine our strengths
machine learning
::: sciencemagazine

Robot Gift Guide 2018
::: AutomatonBlog


How to get started in AI
artificial intelligence
::: WebReflection

Exaggerated expectations and fears about AI, together with an over-emphasis on humanoid representations, can affect public confidence and perceptions. They may contribute to misinformed debate, with potentially significant consequences for AI research, funding, regulation …
artificial intelligence
::: algorithmwatch

Rather than use the logic and memory of ordinary CPUs to make a neural network, companies have been trying to build them from arrays of different kinds of nonvolatile memories
deep learning
::: IEEESpectrum

Intel Reveals 10nm Sunny Cove CPU Cores That Go Deeper, Wider, and Faster
::: Slashdot

Intel Unveils Roadmaps For Core Architecture and Atom Architecture
::: Slashdot

Europe — not the US or China — Publishes the Most AI Research Papers
artificial intelligence
::: Slashdot

The AI Index 2018 report is out! Lots of great data. My key takeaways: (i) AI’s rapid growth–in jobs, publications, performance–continues. (ii) We still need to do better in diversity/inclusion
artificial intelligence
::: AndrewYNg

Cryptocurrencies Are Like Lottery Tickets That Might Pay Off in Future
blockchain e crypto*
::: Slashdot

Join the revolution! @bitwala is your bridge to the crypto economy. Buy and sell cryptocurrencies directly from your bank account
blockchain e crypto*
::: cialunet

UK Media coverage of artificial intelligence dominated by industry and industry sources
artificial intelligence
::: fabiochiusi

Ethereum Thinks it Can Change the World. It’s Running Out of Time To Prove It
blockchain e crypto*
::: Slashdot

‘Blockchain Developer’ is the Fastest-Growing US Job
blockchain e crypto*
::: Slashdot


Messaggio colorato nel terminale – 1


Se un messaggio è importante deve attrarre l’attenzione. Argomento già trattato in passato ma questa è la versione 2018.

Ci sono due modi facili: un suono e un colore diverso dal solito.

Produrre un beep è semplice, così:

echo -en "\a"

o così:

print("\a", end="")

Visualizzare il testo colorato è risultato immediato con Python, più impegnativo con Bash. I codici delle sequenze di escape ANSI si trovano (come farei senza la Wiki) qui: ANSI escape code – Colors.

La versione Python:


import sys


dis = str.join(' ', sys.argv[1:])

dis = dis.replace('%R', RED)
dis = dis.replace('%G', GREEN)
dis = dis.replace('%Y', YELLOW)
dis = dis.replace('%B', BLUE)
dis = dis.replace('%Z', ENDC)
dis = dis.replace('%_', BEEP)



I codici sono nella forma %L dove %L è una lettera (o anche più di una, o _ per il beep) che genera una sequenza improbabile: di solito % finisce la parola, terminando un numero.

Più impegnativo produrre l’equivalente Bash: abbiamo, PLG e io, provato con sed ma con pessimi risultati. Poi la dritta, da Stack Overflow ed ecco:


st=$(printf '%s' "$st" | sed -e 's/:R/\\033[01;31m/g')
st=$(printf '%s' "$st" | sed -e 's/:G/\\033[01;32m/g')
st=$(printf '%s' "$st" | sed -e 's/:Y/\\033[01;33m/g')
st=$(printf '%s' "$st" | sed -e 's/:B/\\033[01;34m/g')
st=$(printf '%s' "$st" | sed -e 's/:Z/\\033[00m/g')

echo -e $st

Rispetto alla versione Python cambia il codice, uso : al posto di %. Probabilmente da uniformare. Prossimamente, forse, chissà 😐

Maxima – 142 – itensor – 1


Continuo da qui, copio dal Reference Manual, PDF scaricabile da qui, sono a p.427.

Maxima implements symbolic tensor manipulation of two distinct types: component tensor manipulation (ctensor package) and indicial tensor manipulation (itensor package).

Nota bene: Please see the note on ’new tensor notation’ below.

Component tensor manipulation means that geometrical tensor objects are represented as arrays or matrices. Tensor operations such as contraction or covariant differentiation are carried out by actually summing over repeated (dummy) indices with do statements. That is, one explicitly performs operations on the appropriate tensor components stored in an array or matrix.

Indicial tensor manipulation is implemented by representing tensors as functions of their covariant, contravariant and derivative indices. Tensor operations such as contraction or covariant differentiation are performed by manipulating the indices themselves rather than the components to which they correspond.

These two approaches to the treatment of differential, algebraic and analytic processes in the context of Riemannian geometry have various advantages and disadvantages which reveal themselves only through the particular nature and difficulty of the user’s problem.

However, one should keep in mind the following characteristics of the two implementations:

The representation of tensors and tensor operations explicitly in terms of their components makes ctensor easy to use. Specification of the metric and the computation of the induced tensors and invariants is straightforward. Although all of Maxima’s powerful simplification capacity is at hand, a complex metric with intricate functional and coordinate dependencies can easily lead to expressions whose size is excessive and whose structure is hidden. In addition, many calculations involve intermediate expressions which swell causing programs to terminate before completion. Through experience, a user can avoid many of these difficulties.

Because of the special way in which tensors and tensor operations are represented in terms of symbolic operations on their indices, expressions which in the component representation would be unmanageable can sometimes be greatly simplified by using the special routines for symmetrical objects in itensor. In this way the structure of a large expression may be more transparent. On the other hand, because of the special indicial representation in itensor, in some cases the user may find difficulty with the specification of the metric, function definition, and the evaluation of differentiated “indexed” objects.

The itensor package can carry out differentiation with respect to an indexed variable, which allows one to use the package when dealing with Lagrangian and Hamiltonian formalisms. As it is possible to differentiate a field Lagrangian with respect to an (indexed) field variable, one can use Maxima to derive the corresponding Euler-Lagrange equations in indicial form. These equations can be translated into component tensor (ctensor) programs using the ic_convert function, allowing us to solve the field equations in a particular coordinate representation, or to recast the equations of motion in Hamiltonian form. See einhil.dem and bradic.dem for two comprehensive examples. The first, einhil.dem, uses the Einstein-Hilbert action to derive the Einstein field tensor in the homogeneous and isotropic case (Friedmann equations) and the spherically symmetric, static case (Schwarzschild solution.) The second, bradic.dem, demonstrates how to compute the Friedmann equations from the action of Brans-Dicke gravity theory, and also derives the Hamiltonian associated with the theory’s scalar field.

Panico? 😐 Forse, si vedrà 😋

Nota: nuova notazione per tensor
Earlier versions of the itensor package in Maxima used a notation that sometimes led to incorrect index ordering. Consider the following, for instance:

(%i1) load(itensor)$

(%i2) imetric(g);
(%o2)                                done
(%i3) ishow(g([],[j,k])*g([],[i,l])*a([i,j],[]))$
                                 i l  j k
(%t3)                           g    g    a
                                           i j
(%i4) ishow(contract(%))$
                                      l k
(%t4)                                a

This result is incorrect unless a happens to be a symmetric tensor. The reason why this happens is that although itensor correctly maintains the order within the set of covariant and contravariant indices, once an index is raised or lowered, its position relative to the other set of indices is lost.

To avoid this problem, a new notation has been developed that remains fully compatible with the existing notation and can be used interchangeably. In this notation, contravariant indices are inserted in the appropriate positions in the covariant index list, but with a minus sign prepended. Functions like contract_Itensor and ishow are now aware of this new index notation and can process tensors appropriately.

In this new notation, the previous example yields a correct result:

(%i5) ishow(g([-j,-k],[])*g([-i,-l],[])*a([i,j],[]))$
                                 i l       j k
(%t5)                           g    a    g
                                      i j
(%i6) ishow(contract(%))$
                                      l k
(%t6)                                a

Presently, the only code that makes use of this notation is the lc2kdt function. Through this notation, it achieves consistent results as it applies the metric tensor to resolve Levi-Civita symbols without resorting to numeric indices.

Since this code is brand new, it probably contains bugs. While it has been tested to make sure that it doesn’t break anything using the “old” tensor notation, there is a considerable chance that “new” tensors will fail to interoperate with certain functions or features. These bugs will be fixed as they are encountered… until then, caveat emptor!

Maxima – 141 – Affine


Continuo da qui, copio dal Reference Manual, PDF scaricabile da qui, sono a p.423.

affine is a package to work with groups of polynomials.

load(affine) loads these functions.

fast_linsolve ([expr_1, ..., expr_m], [x_1, ..., x_n])
Solves the simultaneous linear equations expr_1, ..., expr_m for the variables x_1, ..., x_n. Each expr_i may be an equation or a general expression; if given as a general expression, it is treated as an equation of the form expr_1 = 0.

The return value is a list of equations of the form [x_1 = a_1, ..., x_n = a_n] where a_1, ..., a_n are all free of x_1, ..., x_n.

fast_linsolve is faster than linsolve for system of equations which are sparse.

grobner_basis ([expr_1, ..., expr_m])
Returns a Groebner basis for the equations expr_1, ..., expr_m. The function polysimp can then be used to simplify other functions relative to the equations.

polysimp(f) yields 0 if and only if f is in the ideal generated by expr_1, ..., expr_m, that is, if and only if f is a polynomial combination of the elements of expr_1, ..., expr_m.

(%i1) load (affine)$

(%i2) grobner_basis ([3*x^2+1, y*x])$
eliminated one
 . 0 . 0
(%i3) polysimp (y^2*x + x^3*9 + 2);
(%o3)/R/                          (- 3 x) + 2

set_up_dot_simplifications (eqns, check_through_degree)
set_up_dot_simplifications (eqns)
The eqns are polynomial equations in non commutative variables. The value of current_variables is the list of variables used for computing degrees. The equations must be homogeneous, in order for the procedure to terminate.

If you have checked overlapping simplifications in dot_simplifications above the degree of f, then the following is true: dotsimp (f) yields 0 if and only if f is in the ideal generated by the equations, i.e., if and only if f is a polynomial combination of the elements of the equations.

The degree is that returned by nc_degree. This in turn is influenced by the weights of individual variables.

declare_weights (x_1, w_1, ..., x_n, w_n)
Assigns weights w_1, ..., w_n to x_1, ..., x_n, respectively. These are the weights used in computing nc_degree.

nc_degree (p)
Returns the degree of a noncommutative polynomial p. See declare_weights.

dotsimp (f)
Returns 0 if and only if f is in the ideal generated by the equations, i.e., if and only if f is a polynomial combination of the elements of the equations.

fast_central_elements ([x_1, ..., x_n], n)
If set_up_dot_simplifications has been previously done, finds the central polynomials in the variables x_1, ..., x_n in the given degree, n.

Non sono riuscito a replicare l’esempio 😡

check_overlaps (n, add_to_simps)
Checks the overlaps thru degree n, making sure that you have sufficient simplification rules in each degree, for dotsimp to work correctly. This process can be speeded up if you know before hand what the dimension of the space of monomials is. If it is of finite global dimension, then hilbert should be used. If you don’t know the monomial dimensions, do not specify a rank_function. An optional third argument reset, false says don’t bother to query about resetting things.

mono ([x_1, ..., x_n], n)
Returns the list of independent monomials relative to the current dot simplifications of degree n in the variables x_1, ..., x_n.

monomial_dimensions (n)
Compute the Hilbert series through degree n for the current algebra.

extract_linear_equations ([p_1, ..., p_n], [m_1, ..., m_n])
Makes a list of the coefficients of the noncommutative polynomials p_1, ..., p_n of the noncommutative monomials m_1, ..., m_n. The coefficients should be scalars. Use list_nc_monomials to build the list of monomials.

list_nc_monomials ([p_1, ..., p_n])
list_nc_monomials (p)
Returns a list of the non commutative monomials occurring in a polynomial p or a list of polynomials p_1, ..., p_n.

Default value: false.

When all_dotsimp_denoms is a list, the denominators encountered by dotsimp are appended to the list. all_dotsimp_denoms may be initialized to an empty list [] before calling dotsimp.

By default, denominators are not collected by dotsimp.

cit. & loll – 126

A quando le feste? oggi quella della rassegna cit.osa & lollosa 😜


Six degrees of Kevin Bacon, Paul Erdos, and Wikipedia
::: NetworkFact

::: dvIpr

::: hashtag

TFW you have to think about how to reword an email to sound more human because your first attempt gets flagged as spam and bounces
::: jeanqasaur

Can confirm: I said this once
::: jakevdp

Fancy algorithms are buggier than simple ones
::: RichRogersIoT

I’m old enough to remember when the Internet wasn’t a group of five websites, each consisting of screenshots of text from the other four
::: tveastman

Open source was coined to help businesses serve the ideals of free software, not the other way round.
::: webmink

lets set some realistic goals here : jokes banned by 2016. sex banned by 2020. a cop in every household by 2025
::: dril

Monads are not hard, they are not easy; just like in chess, where the simple rules of the game have many nontrivial and nonobvious “emergent” properties – which, of course, is what makes them profound
::: manisha72617183

Would you trust your own code?
::: LukasStefanko

I found the #lisp monument in Buenos Aires
::: DrummerHead


And so it begins
::: ianbremmer

Today a friend who takes every opportunity possible to tell me how much Edge sucks, suddenly said he likes it and demanded we don’t kill it
::: spoofyroot

My brain is lake a browser
::: ThatJeshka

infinite series, continued fraction, e, and pi
::: pickover

Every time, without fail
::: matthewdbooth

And programming computers was so fascinating. You create your own little universe, and
::: CodeWisdom

Code vs Powerpoint
::: CommitStrip_fr

The way to get started is to quit talking & begin doing
::: RichRogersIoT

I’m teaching usable security today
::: random_walker

The Release Uncertainty Principle says you can accurately know
::: RichRogersIoT

China Launches ‘Spy Bird’ Drones To Monitor Citizens
::: UnbeatableTit


Production-ready computer program, created from a prototype
::: pickover

A thumbnail image of DOOM
::: mikko

Rarely seen “eat your vegetables or we’re buying a puppy and going to Disneyland” parenting tactic there
::: JimMFelton

Porche istituzioni – Google Maps insiste
::: MauroV1968

::: RainerJoswig

Perspective matters
::: DoveyWan

To recap, software developers spent decades discussing stuff like “vim vs. emacs”, but there are some of us who don’t want twitts on politics because it’s “too divisive” 😂
::: mariofusco

Be odd
::: RichRogersIoT

Captcha: click on all the squares that are not a pipe
::: qwrrty

Periodic reminder that the Red Hat logo is actually a T-rex punching a triceratops
::: willrad

When all you have is a hammer
::: cashbonez