Thursday, June 24, 2021

 

Fascinating article, If you read one article about American politics this month, I recommend this one:
 
"It’s common these days to hear people talk about sick America, dying America, the end of America. The same kinds of things were said in 1861, in 1893, in 1933, and in 1968. The sickness, the death, is always a moral condition. Maybe this comes from our Puritan heritage. If we are dying, it can’t be from natural causes. It must be a prolonged act of suicide, which is a form of murder.
 
I don’t think we are dying. We have no choice but to live together—we’re quarantined as fellow citizens. Knowing who we are lets us see what kinds of change are possible. Countries are not social-science experiments. They have organic qualities, some positive, some destructive, that can’t be wished away. Our passion for equality, the individualism it produces, the hustle for money, the love of novelty, the attachment to democracy, the distrust of authority and intellect—these won’t disappear. A way forward that tries to evade or crush them on the road to some free, smart, real, or just utopia will never arrive and instead will run into a strong reaction. But a way forward that tries to make us Equal Americans, all with the same rights and opportunities—the only basis for shared citizenship and self-government—is a road that connects our past and our future."

https://www.theatlantic.com/magazine/archive/2021/07/george-packer-four-americas/619012/

Friday, May 21, 2021

Public Domain Books to Restart Computer Technology

CollapseOS is a project to make an operating system and tools that can help restart technology after a civilization collapse: https://collapseos.org/

Of course, the software is only part restarting computer technology.  The other part is building things like transistors or vacuum tubes and turning those into computers. 

If you only had one book to take back, I would recommend Understanding Digital Computers by Paul Siegel, which includes overviews of how transistors, vacuum tube, magnetic core memory and other things work. It shows how to make memory and logic gates from these, and how to put them together into a full computer. And more importantly the 1961 edition of this book does not seem to have the copyright renewed (checked at Stanford and LOC) so it is public domain and available at: https://archive.org/details/understanding_digital_computers

Of course, you might want more detail if you have to recreate computers, since manufacturing something with feature size smaller than a millimeter and control of the composition at better than parts per million. So I made a list of books that I believe are public domain (either because they were written by the government or because they are US books publish 1963 or before and the copyright was not renewed). This list includes ones with much more detail on transistors, vacuum tubes, magnetic core memory and also basic materials and science information that can be useful.


General Computer Information:



Numbers with Computers:



Transistors:



Vacuum Tubes:


Alternative Computer Construction:


Basic Science:


Materials:

This list is unfortunately missing the technology that made computers cheap in the 1970s: mask produced integrated circuits using complementary metal oxide semiconductors (CMOS), since that was just starting to be developed in 1964 when copyright still applies. (Transistor Technology Volume II chapter 9 discusses field effect transistors and Transistor Technology Volume III chapter 5 discusses photo engraving which are precursors technologies.)

Never the less, having a paper copy of these books would help you greatly should you ever wish to restart computer technology after a civilization collapse.

Sunday, March 14, 2021

Internet doesn't have to be awful

"This way of thinking has some distinct advantages. Right now companies fight intensely to retain their exemption from “intermediary liability,” guaranteed to them by the now-infamous Section 230 of the Communications Decency Act. This frees them from legal responsibility for nearly all content posted on their platform. Yet striking down Section 230 could mean that the companies will either be sued out of existence or start taking down swaths of content to avoid being sued. Focusing on regulating algorithms, by contrast, would mean that companies wouldn’t be liable for each tiny piece of content, but would have legal responsibility for how their products distribute and amplify material. This is, after all, what these companies actually do: organize, target, and magnify other people’s content and data. Shouldn’t they take responsibility for that?"

https://www.theatlantic.com/magazine/archive/2021/04/the-internet-doesnt-have-to-be-awful/618079/

Sunday, January 17, 2021

Equifax doesn't actually send yearly credit reports

Equifax doesn't actually send an annual credit report. What they will send is a credit report if it has been 365 days since the last time they sent an annual credit report, and since they will not send it on a weekend, if you order one on the same day, you will not always get it if you ask for it on the exact same day.  So some years you actually have to wait more than one year for their "annual" credit year. For me, this year I got a letter from them "We received your request for a copy of your annual free credit report from Equifax. However, our records indicate that a free copy already has been sent to you in the past 12 months." This is BS since I requested it last year on January 1, 2020, and I ordered it this year on January 1, 2021.  (Experian and Transunion do not have this problem.)
Another comment is that it would be better for consumers if the law just required sending a credit report every year instead of every 365 days.

Friday, December 4, 2020

circuitpython example with text

Now with some text as well (and I grant this python code to the public domain as well.)

import time

import board
import displayio
import digitalio

import vectorio
import gamepadshift
import terminalio

BUTTON_LEFT = 128
BUTTON_UP = 64
BUTTON_DOWN = 32
BUTTON_RIGHT = 16
BUTTON_SELECT = 8
BUTTON_START = 4
BUTTON_A = 2
BUTTON_B = 1

print('About to begin.')
for i in range(3,0,-1):
    print(i)
    time.sleep(0.2)


circle = vectorio.Circle(10)
circle2 = vectorio.Circle(6)

display = board.DISPLAY

palette = displayio.Palette(2)
palette[0] = 0x000000
palette[1] = 0xFFFFFF
palette.make_transparent(0)

def get_char_tile(c, x, y):
    g = terminalio.FONT.get_glyph(ord(c))
    tile = displayio.TileGrid(g.bitmap, pixel_shader=palette,  tile_width=g.width, tile_height=g.height, default_tile=g.tile_index, x=x, y=y)
    return tile

def get_string_group(s, x, y):
    text_w, text_h = terminalio.FONT.get_bounding_box()
    group = displayio.Group(max_size=len(s))
    for i, c in enumerate(s):
        group.append(get_char_tile(c, x+text_w*i, y))
    return group


palette2 = displayio.Palette(2)
palette2[0] = 0xFF0000
palette2[1] = 0x0000FF
palette2.make_transparent(0)

vect = vectorio.VectorShape(shape=circle, pixel_shader=palette)
vect2 = vectorio.VectorShape(shape=circle2, pixel_shader=palette2, x=5, y=-5)
s = get_string_group("Hey World!",15,0)
vect3 = vectorio.VectorShape(shape=vectorio.Rectangle(2, 10), pixel_shader=palette2)

move_group = displayio.Group()
move_group.append(vect)
move_group.append(vect2)
group = displayio.Group()
group.append(move_group)
group.append(s)
group.append(vect3)


display.show(group)
#display.show(group2)

group.x = 20
group.y = 20

pad = gamepadshift.GamePadShift(digitalio.DigitalInOut(board.BUTTON_CLOCK),
                                digitalio.DigitalInOut(board.BUTTON_OUT),
                                digitalio.DigitalInOut(board.BUTTON_LATCH))
button = 0
while button != BUTTON_START:
    button = pad.get_pressed()
    if button & BUTTON_UP == BUTTON_UP:
        move_group.y += -1
    if button & BUTTON_DOWN == BUTTON_DOWN:
        move_group.y += 1
    if button & BUTTON_LEFT == BUTTON_LEFT:
        move_group.x += -1
    if button & BUTTON_RIGHT == BUTTON_RIGHT:
        move_group.x += 1
    time.sleep(0.01)
    move_group.x %= display.width
    move_group.y %= display.height