on T3

Author's email: dlypka@futurelogic.com

This chart claims to predict the BTC ongoing 4 year Cycle Trendline: https://www.tradingview.com/chart/BTCUSD/UuzUBUTa-Bitcoin-4-Year-Cycle
NO. Actually this is the Trend Line of the PRE-BURST BTC Bubble It has now burst, so the Trend line beyond 2019 here is wrong. It is actually the inverse of the trend of the present value of the U.S.$ which is declining due to the out of control National Debt. So 1 BTC in the year 2024 will only buy the present value of approx $3,500 of goods in present day 2019.
bitcoin BTC Blockchain Useful Application: opentimestamps and how to verify an uploaded document hash
Refer to the opentimestamps website at: https://opentimestamps.org/
The opentimestamps webpage provides an easy to use form for uploading a document for which it will generate a document hash and the timestamp which are then stored in the bitcoin BTC blockchain.
However, to acquire the corresponding attestation of the document hash and timestamp, the opentimestamps webpage only provides some python code - no easy to use web form.
Therefore I am providing the following steps to run the python attestation code.
The opentimestamps verification process requires python 3 and luckily the virtual box with bitcoind has python 3.
I created a bitcoind full node in Virtual Box and got it up to date (took several days to update). I made sure I had a version of bitcoind (0.16.3) from after the recent bug patch in Sep 2018.
dlypka@dlypka-VirtualBox:~/.bitcoin$ pip3 install opentimestamps-client
cd /home/dlypka/.local/lib/python3.6/site-packages/otsclient
dlypka@dlypka-VirtualBox:~/.local/lib/python3.6/site-packages/otsclient$ ots verify ~/Downloads/UNCOLEWhitePaper.pdf.ots
/home/dlypka/Downloads/UNCOLEWhitePaper.pdf.ots is copied back to my linux VM from a folder on my local Windows harddrive. It is the meta file that was returned from doing the document upload to opentimestamps.
dlypka@dlypka-VirtualBox:~/.bitcoin$ bitcoind ( DO NOT USE bitcoin-qt with ots - must use bitcoind)
dlypka@dlypka-VirtualBox:~/.local/lib/python3.6/site-packages/otsclient$ ots verify ~/Downloads/UNCOLEWhitePaper.pdf.ots
Assuming target filename is '/home/dlypka/Downloads/UNCOLEWhitePaper.pdf'
Got 1 attestation(s) from cache
Success! Bitcoin block 539733 attests existence as of 2018-09-02 EDT
The genesis of UNCOLE: United Network Computing Organization for Logic Enforcement
Motivation: CryptoCurrency is being developed at a fast clip, but yet its foundation is current software tools and practices which it can be easily argued do not inspire confidence in the reliability of cryptocurrencies.
We want to prevent the creation of buggy money. Extrapolating further, we want to prevent the creation of a completely buggy world.
UNCOLE is an organization which will fight the buggy software forces encroaching on the world. For this undertaking, the effort to create UNCOLE and its support organization The Code Force, the guiding principle is To Remain Calm. It's just software and in software we can do anything.
UNCOLE exists to eliminate the root causes of the public's justified lack of confidence in software. developer's lack of confidence in sources of sample code regarding:
authenticity, reputation, tamper-resistance of the source
quality - no bugs, code follows appropriate standards
licensing terms
longevity of support team
is a complete test harness is available
is complete telemetry and logging is available
UNCOLE will use 5 key technologies to remedy this situation:
1. Cx which is a new language described here: Cx Overview
Information Technology (IT) is coming full circle: It began as the purview of Electrical Engineers and now is coming back that way via the availability of FPGA technology. Component Blocks will be published in a canonical language which promotes a hardware-first maximum performance reference sample with a path to translation and / or porting to traditional software languages
2. Blockchain TimeStamping Cryptographic Code Hash Service
3. Unity 3D for creating a new generation coding editor
4. Genesis component block: Minimal Perfect Hash
5. Logging will tell a story serving as an in depth tutorial
Out of #4, the Minimal Perfect Hash ("MPH") component block, all other components will follow. MPH will convert strings to enumerations and that is key to developing software of high quality.


Blockchain Development Notes:

https://www.multichain.com/ Open source private blockchain platform

Multichain is a self-contained Blockchain platform for implementing private (i.e. Corporate) blockchains.

Multichain is very quick to install and get going.

Multichain is implemented in C++.

Multichain can be installed on Windows or Linux.

The following examples are for installing on Linux in the Microsoft Azure Cloud.

I will follow in a future post with a Multichain install on Google Compute Engine example.



Installing Multichain on 2 independent standard Azure Canonical Ubuntu 16.04 VMs:

All Azure VMs have a subnet of internal "10." IP addresses (e.g. and

by default Azure blocks/disables ICMP ping queries on the public IP address.

Be sure to configure the public IP address to be "static".

The Azure Script to Install Multichain unfortunately only detects the internal "10." addresses

and there multiple Multichain nodes fail to inter connect.

There is a workaround for this issue:

In the Multichain configuration, replace all "10." IP addresses

with the public IP address and keep any port specifications

suffixed onto the "10." IPs, intact.

The 2 independent Ubuntu VMs cannot ping each other; however they can connect to each other if a port is specified.

Multichain does connect via ports, and so its connections will work on Azure.


Here are several other things I am researching how to do:

1. Resource Bundling

2. Convert T3 to use the new GAE Search API. I believe it means using a special datastore, not the regular GAE Entity store.

3. How to extract a sitemap from the T3 WIKI in a format suitable for input to the Google Spider Crawler so that Google will return substantial results on a search of the T3 Wiki site.

Two recommended steps to assist the Crawler are:

i) Submit general sitemap specified by sitemap.org, a joint effort by Google, Yahoo, Microsoft.
            ii) Declare sitemap URL in robots.txt

Here are several other things I recently figured out how to do:

1. Treeview using Asynchronous Ajax - I finally got this to work in web2py T3

2. Programming 'In the Cloud' in T3. - I got the first step working - see note on calling Procedures in T3 below.

4. web2py backend for PhoneGap apps. I recently got this to work. It needs web2py to return jsonp, and I have that working.

5. DALnr for web2py

   I got this to work using PolyModel

   my suggested "nativeRef" patch is now part of the DAL




GAE Datastore Full Text Searching

I found some links that explain how to do a simple Full Text Search on the datastore


http://appengineguy.com/2008/06/how-to-full-text-search-in-google-app.html   or





Overriding CRUD to use a custom View form


 There has been a lot of discussion lately about how to point CRUD to a custom .html. None of the proposed solutions appears to work for me.


Here is my own proposal #1 :

It is based on this clue Just In:

HTML helper and widget Component list manipulation example is here:



I found I could use 

The above clue will allow me to apply my "Scrounge for Scraps" software pattern to design the ulimate solution to this problem.  


  I would like to coin the new term 'Scavenger Software Design Pattern' to describe the approach used in this solution: To find the core object instances of an autogenerated context, and then house them in a new customized view.



 In the Database Definition



In the Controller



mycomponents = form.components[0]



myField1INPUT  = mycomponents[0]

mydict= dict(form=form, myField1INPUT = myField1INPUT )

     return mydict



In the View Markup:


 <form action="index" enctype="multipart/form-data" method="post">




    <label for="testtable_testfield1" id="testtable_testfield1__label">My Custom Testfield1: </label>

              { {=myField1INPUT} }




 { {=form.hidden_fields() } } 


Notable Tricks in the above snippet:

1. Do NOT include the { { =form } } at the top of the View .html

   =form is not desired in this case because it would generate the crud markup which we

   are trying to override.

2. Do put the special expression for form.hidden_fields() at the end

   It is used to enable the error messages per field such as 'cannot be empty'


There is an new way to do it now (as of Aug 2009):


{ {=form.custom.begin} }

{ {=form.custom.widget.email} }

{ {=form.custom.widget.password} }

{ {=form.custom.submit} }

{ {=form.custom.end} } 


Using Microsoft SQL Server from web2py


The MSSQL Driver is pymssql from  http://pymssql.sourceforge.net/   which had a major bug fix release on 2009-04-28.

I downloaded it and modified the web2py DAL code in sql.py to use pymssql drivers.

It works well. I was able to have 2 database connections active at the same time - the usual 'db' connection to SQL Lite, and the new  mssql connection which I named 'dbmssql'.  Internally the sql.py code uses a database cursor created by pymssql and then does a fetchall() to return the complete list of query results. It would also be possible to iterate on the cursor to visit the result rows individually, but in practice this should not be necessary as it is not a good idea to query for more rows than can reasonably fit into memory.

Calling a method you have typed into the T3 Procedures Page


For some bizarre reason, when you use @expose in T3 Manage .. Procedures,

you have to add 2 extra arguments with exactly these names:   rndval and callback:


         def mock_markets(parentId, leafId, rndval, callback):










Submit Created by David Lypka - Powered by web2py