Author's email: dlypka@futurelogic.com
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 |
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 |
2017-10-01:
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.
AZURE CLOUD BASIC NON-CLUSTER INSTALL OF MULTICHAIN:
Scenario:
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. 10.0.0.4) 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.
2012-09-17:
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://groups.google.com/group/google-appengine/browse_thread/thread/113020d7cbd69d8d
http://appengineguy.com/2008/06/how-to-full-text-search-in-google-app.html or
http://appengineguy.com/search?q=full+text+search
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:
http://groups.google.com/group/web2py/browse_thread/thread/19ba7b69cde0a93d
I found I could use
form.components[0].append(myfield)
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
-------------------------------------
db.define_table('testtable',SQLField('testfield1','string'),SQLField('testfield2','string'))
db.testtable.testfield1.requires=IS_NOT_EMPTY()
In the Controller
-----------------------
form=crud.update(db.testtable,id)
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">
<table>
<tr>
<td>
<label for="testtable_testfield1" id="testtable_testfield1__label">My Custom Testfield1: </label>
</td>
<td>
{ {=myField1INPUT} }
</td>
</tr>
</table>
</form>
{ {=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):
Example:
{ {=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:
Example:
@expose
def mock_markets(parentId, leafId, rndval, callback):
Submit Created by David Lypka - Powered by web2py