m-labs / artiq Goto Github PK
View Code? Open in Web Editor NEWA leading-edge control system for quantum information experiments
Home Page: https://m-labs.hk/artiq
License: GNU Lesser General Public License v3.0
A leading-edge control system for quantum information experiments
Home Page: https://m-labs.hk/artiq
License: GNU Lesser General Public License v3.0
Compared to the current solution, PPP adds robustness, error detection/correction and support for multiplexing monitoring/injection data, with maximum code reuse.
PPP should already be supported by lwip.
(This is low priority)
With a short period to detect network problems quickly.
Of course, the instructions from the lwip documentation do not work.
Formatters (%) result in bogus values being printed.
AFAICT the various packages that are installed from anaconda can be combined into one:
https://github.com/m-labs/artiq/blob/master/.travis/get-anaconda.sh#L8
https://github.com/m-labs/artiq/blob/master/.travis.yml#L16
https://github.com/m-labs/artiq/blob/master/.travis.yml#L20
On 6/19 PHASE_MODE_CONTINUOUS was working but PHASE_MODE_TRACKING was broken.
On 6/20 PHASE_MODE_TRACKING was fixed but PHASE_MODE_CONTINUOUS was not retested.
On 6/21 PHASE_MODE_TRACKING works but PHASE_MODE_CONTINUOUS is broken.
class TestDDSPhase(Experiment, AutoDB):
class DBKeys:
core = Device()
dds_bus = Device()
dds0 = Device()
dds1 = Device()
ttl0 = Device()
ttl1 = Device()
@kernel
def run(self):
self.dds0.set_phase_mode(PHASE_MODE_CONTINUOUS)
self.dds1.set_phase_mode(PHASE_MODE_CONTINUOUS)
for i in range(10):
# force DDSs to be phase synchronized at outset of experiment
# this is a temporary override of the default phase mode
with self.dds_bus.batch:
self.dds0.set(3*MHz, phase_mode=PHASE_MODE_ABSOLUTE, phase_offset=0)
self.dds1.set(3*MHz, phase_mode=PHASE_MODE_ABSOLUTE, phase_offset=0)
# emit experiment start pulse on TTL0
self.ttl0.pulse(1*us)
# demonstrate simple spin-echo type pulse sequence
self.dds0.set(3*MHz, phase_offset=0, phase_mode=PHASE_MODE_CONTINUOUS)
self.ttl1.pulse(1*us) # first pi/2 pulse
self.dds0.set(3*MHz, phase_offset=0.25, phase_mode=PHASE_MODE_CONTINUOUS)
delay(2*us) # arm time
self.ttl1.pulse(2*us) # middle pi pulse
self.dds0.set(3*MHz, phase_offset=0, phase_mode=PHASE_MODE_CONTINUOUS)
delay(2*us) # arm time
self.ttl1.pulse(1*us) # final pi/2 pulse
# delay to let Core_uP catch up
delay(1*ms)
14:42 < rjo> ysionneau: good that you added the -or1k suffix to the llvmlite package.
14:43 < rjo> ysionneau: but: it would be really great if we could also install that under that name
(llvmlite_or1k) in the package tree
14:43 < rjo> because then you can actually install your regular native llvmlite in parallel with the
one linked against the or1k-llvm
14:45 < rjo> afaict there would just be a bunch of s/llvmlite/llvmlite_or1k/ in the artiq source.
14:45 < rjo> the native llvmlite is used by numba, which i tend to use.
14:46 < ysionneau> ah ok
14:46 < rjo> ok if i file an issue for this to keep track?
14:46 < ysionneau> yes sure
14:46 < ysionneau> but I'm not sure I understand exactly how to do that
14:46 < ysionneau> in $HOME/miniconda3/pkgs the name of the package is already -or1k
14:47 < rjo> yes. but in the install tree.
14:47 < ysionneau> ah in pkgs/llvmlite-or1k-0.2.1-py34_0/lib/python3.4/site-packages
14:47 < ysionneau> ok
14:47 < ysionneau> I guess it's a setup.py option?
14:47 < ysionneau> to change the package name
14:47 < rjo> less an option. more a field.
14:47 < rjo> exactly.
14:48 < rjo> would need to patch that.
This was marked for compiler optimization.
from artiq import *
class LED(Experiment, AutoDB):
class DBKeys:
core = Device()
@kernel
def run(self):
L = 10000
buf = [int64(0) for _ in range(L)]
count = 0
for i in range(L):
if buf[i] > 0:
count += 1
print(count)
master...fallen:influxdb_bridge
The full change rate of the parameter db will be more than we want to archive. We could simply use a few entries to control it. A list of regexps or globs history_filter
to limit the logging by parameter name (probably something like the gitignore style precedence rules and syntax) and a history_rate
rate limiter.
Also, the schema (ha!) should be changed a little looking at influxdb 0.9: series name should be "lab-name.parameter" (e.g. "rfjunction2.parameter") and then using tags for the parameter name and the only column should be "value". And afaict things like arrays might break the current implementation as json will not immediately be able to serialize them.
Finally, could the influxdb_bridge be just a concurrently running experiment in its own queue or does that break?
This will be mostly useful for RPCs.
This experiment script was marked for bug reporting. SB, do you recall the problem? I'm applying a 1 MHz external pulse train to PMT1.
timestamps_compiler_opt_fail.py
from artiq import *
class LED(Experiment, AutoDB):
class DBKeys:
core = Device()
ttl0 = Device()
pmt1 = Device()
def process(self, x):
print(x)
print([t1-t0 for t0, t1 in zip(x, x[1:])])
@kernel
def run(self):
L = 100
buf = [int64(0) for _ in range(L)]
self.pmt1.gate_rising(1000*ms)
count = 0
for i in range(L):
t = time_to_cycles(self.pmt1.timestamp())
if t > 0:
count += 1
buf[i] = t
print(count)
self.process(buf)
Output is below.
rabi2@vboxartiq:~/artiq/examples/master$ artiq_run repository/timestamps_compiler_opt_fail.py
100
[244726, 369726, 494726, 619726, 744726, 869726, 994726, 1119726, 1244726, 1369726, 1494726, 1619726, 1744726, 1869726, 1994726, 2119726, 2244726, 2369726, 2494726, 2619726, 2744726, 2869726, 2994726, 3119726, 3244726, 3369726, 3494726, 3619726, 3744726, 3869725, 3994725, 4119725, 4244725, 4369725, 4494725, 4619725, 4744725, 4869725, 4994725, 5119725, 5244725, 5369725, 5494725, 5619725, 5744725, 5869725, 5994725, 6119725, 6244725, 6369725, 6494725, 6619725, 6744725, 6869725, 6994725, 7119725, 7244725, 7369725, 7494725, 7619725, 7744725, 7869725, 7994725, 8119724, 8244724, 8369724, 8494724, 8619724, 8744724, 8869724, 8994724, 9119724, 9244724, 9369724, 9494724, 9619724, 9744724, 9869724, 9994724, 10119724, 10244724, 10369724, 10494724, 10619724, 10744724, 10869724, 10994724, 11119724, 11244724, 11369724, 11494724, 11619724, 11744724, 11869724, 11994724, 12119724, 12244723, 12369723, 12494723, 12619723]
[125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 124999, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 124999, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000, 124999, 125000, 125000, 125000]
One dock within the GUI will be showing logging messages from the scheduler, the workers, the experiments, the controllers, the core device. Probably, the master will act as a hub rceiving aggregating messages and then save them to files and re-emit them to the GUI. The GUI can then filter on severity, source, or other metadata within the LogRecord (like experiment name). We need to decide whether python-logging fits the requirements (metadata with LogRecords, networking, interaction with asyncio, lazy formatting) or whether we need to roll our own.
Loops should be unrolled in py2llvm when required by control flow (e.g. interleaving). Other unrollings should be left to LLVM.
future feature: Built-in monitoring of status of critical PHY's that trigger idle_kernel if violated. For example, too high duty cycle for a particular device. Or, too long between cooling pulses.
rabi@vboxartiq:~/artiq-dev/artiq$ nosetests3 test/py2llvm.py
Looks like this is a bug.
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/nose/case.py", line 198, in runTest
self.test(*self.arg)
TypeError: test_base_types() missing 1 required positional argument: 'choice'
Ran 23 tests in 81.667s
FAILED (errors=1)
This line raises an exception:
https://github.com/m-labs/artiq/blob/master/artiq/frontend/artiq_ctlmgr.py#L69
as it ends up doing https://github.com/m-labs/artiq/blob/master/artiq/tools.py#L98 but the process is created with stdout=None
Repeated pattern is not noise. Using Penning lab test setup.
test> clksrc 1
test> ddstest 5
readback fail on DDS 0, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 0, 0xffffffff != 0x55555555
readback fail on DDS 0, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 0, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 0, 0xffffffff != 0x00000000
readback fail on DDS 0, 0xffffffff != 0x12345678
readback fail on DDS 0, 0xffffffff != 0x87654321
readback fail on DDS 0, 0xffffffff != 0x0000ffff
readback fail on DDS 0, 0xffffffff != 0xffff0000
readback fail on DDS 0, 0xffffffff != 0x00ff00ff
readback fail on DDS 0, 0xffffffff != 0xff00ff00
readback fail on DDS 1, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 1, 0xffffffff != 0x55555555
readback fail on DDS 1, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 1, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 1, 0xffffffff != 0x00000000
readback fail on DDS 1, 0xffffffff != 0x12345678
readback fail on DDS 1, 0xffffffff != 0x87654321
readback fail on DDS 1, 0xffffffff != 0x0000ffff
readback fail on DDS 1, 0xffffffff != 0xffff0000
readback fail on DDS 1, 0xffffffff != 0x00ff00ff
readback fail on DDS 1, 0xffffffff != 0xff00ff00
readback fail on DDS 2, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 2, 0xffffffff != 0x55555555
readback fail on DDS 2, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 2, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 2, 0xffffffff != 0x00000000
readback fail on DDS 2, 0xffffffff != 0x12345678
readback fail on DDS 2, 0xffffffff != 0x87654321
readback fail on DDS 2, 0xffffffff != 0x0000ffff
readback fail on DDS 2, 0xffffffff != 0xffff0000
readback fail on DDS 2, 0xffffffff != 0x00ff00ff
readback fail on DDS 2, 0xffffffff != 0xff00ff00
readback fail on DDS 3, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 3, 0xffffffff != 0x55555555
readback fail on DDS 3, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 3, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 3, 0xffffffff != 0x00000000
readback fail on DDS 3, 0xffffffff != 0x12345678
readback fail on DDS 3, 0xffffffff != 0x87654321
readback fail on DDS 3, 0xffffffff != 0x0000ffff
readback fail on DDS 3, 0xffffffff != 0xffff0000
readback fail on DDS 3, 0xffffffff != 0x00ff00ff
readback fail on DDS 3, 0xffffffff != 0xff00ff00
readback fail on DDS 4, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 4, 0xffffffff != 0x55555555
readback fail on DDS 4, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 4, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 4, 0xffffffff != 0x00000000
readback fail on DDS 4, 0xffffffff != 0x12345678
readback fail on DDS 4, 0xffffffff != 0x87654321
readback fail on DDS 4, 0xffffffff != 0x0000ffff
readback fail on DDS 4, 0xffffffff != 0xffff0000
readback fail on DDS 4, 0xffffffff != 0x00ff00ff
readback fail on DDS 4, 0xffffffff != 0xff00ff00
readback fail on DDS 5, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 5, 0xffffffff != 0x55555555
readback fail on DDS 5, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 5, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 5, 0xffffffff != 0x00000000
readback fail on DDS 5, 0xffffffff != 0x12345678
readback fail on DDS 5, 0xffffffff != 0x87654321
readback fail on DDS 5, 0xffffffff != 0x0000ffff
readback fail on DDS 5, 0xffffffff != 0xffff0000
readback fail on DDS 5, 0xffffffff != 0x00ff00ff
readback fail on DDS 5, 0xffffffff != 0xff00ff00
readback fail on DDS 6, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 6, 0xffffffff != 0x55555555
readback fail on DDS 6, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 6, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 6, 0xffffffff != 0x00000000
readback fail on DDS 6, 0xffffffff != 0x12345678
readback fail on DDS 6, 0xffffffff != 0x87654321
readback fail on DDS 6, 0xffffffff != 0x0000ffff
readback fail on DDS 6, 0xffffffff != 0xffff0000
readback fail on DDS 6, 0xffffffff != 0x00ff00ff
readback fail on DDS 6, 0xffffffff != 0xff00ff00
readback fail on DDS 7, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 7, 0xffffffff != 0x55555555
readback fail on DDS 7, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 7, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 7, 0xffffffff != 0x00000000
readback fail on DDS 7, 0xffffffff != 0x12345678
readback fail on DDS 7, 0xffffffff != 0x87654321
readback fail on DDS 7, 0xffffffff != 0x0000ffff
readback fail on DDS 7, 0xffffffff != 0xffff0000
readback fail on DDS 7, 0xffffffff != 0x00ff00ff
readback fail on DDS 7, 0xffffffff != 0xff00ff00
readback fail on DDS 0, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 0, 0xffffffff != 0x55555555
readback fail on DDS 0, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 0, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 0, 0xffffffff != 0x00000000
readback fail on DDS 0, 0xffffffff != 0x12345678
readback fail on DDS 0, 0xffffffff != 0x87654321
readback fail on DDS 0, 0xffffffff != 0x0000ffff
readback fail on DDS 0, 0xffffffff != 0xffff0000
readback fail on DDS 0, 0xffffffff != 0x00ff00ff
readback fail on DDS 0, 0xffffffff != 0xff00ff00
readback fail on DDS 1, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 1, 0xffffffff != 0x55555555
readback fail on DDS 1, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 1, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 1, 0xffffffff != 0x00000000
readback fail on DDS 1, 0xffffffff != 0x12345678
readback fail on DDS 1, 0xffffffff != 0x87654321
readback fail on DDS 1, 0xffffffff != 0x0000ffff
readback fail on DDS 1, 0xffffffff != 0xffff0000
readback fail on DDS 1, 0xffffffff != 0x00ff00ff
readback fail on DDS 1, 0xffffffff != 0xff00ff00
readback fail on DDS 2, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 2, 0xffffffff != 0x55555555
readback fail on DDS 2, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 2, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 2, 0xffffffff != 0x00000000
readback fail on DDS 2, 0xffffffff != 0x12345678
readback fail on DDS 2, 0xffffffff != 0x87654321
readback fail on DDS 2, 0xffffffff != 0x0000ffff
readback fail on DDS 2, 0xffffffff != 0xffff0000
readback fail on DDS 2, 0xffffffff != 0x00ff00ff
readback fail on DDS 2, 0xffffffff != 0xff00ff00
readback fail on DDS 3, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 3, 0xffffffff != 0x55555555
readback fail on DDS 3, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 3, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 3, 0xffffffff != 0x00000000
readback fail on DDS 3, 0xffffffff != 0x12345678
readback fail on DDS 3, 0xffffffff != 0x87654321
readback fail on DDS 3, 0xffffffff != 0x0000ffff
readback fail on DDS 3, 0xffffffff != 0xffff0000
readback fail on DDS 3, 0xffffffff != 0x00ff00ff
readback fail on DDS 3, 0xffffffff != 0xff00ff00
readback fail on DDS 4, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 4, 0xffffffff != 0x55555555
readback fail on DDS 4, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 4, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 4, 0xffffffff != 0x00000000
readback fail on DDS 4, 0xffffffff != 0x12345678
readback fail on DDS 4, 0xffffffff != 0x87654321
readback fail on DDS 4, 0xffffffff != 0x0000ffff
readback fail on DDS 4, 0xffffffff != 0xffff0000
readback fail on DDS 4, 0xffffffff != 0x00ff00ff
readback fail on DDS 4, 0xffffffff != 0xff00ff00
readback fail on DDS 5, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 5, 0xffffffff != 0x55555555
readback fail on DDS 5, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 5, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 5, 0xffffffff != 0x00000000
readback fail on DDS 5, 0xffffffff != 0x12345678
readback fail on DDS 5, 0xffffffff != 0x87654321
readback fail on DDS 5, 0xffffffff != 0x0000ffff
readback fail on DDS 5, 0xffffffff != 0xffff0000
readback fail on DDS 5, 0xffffffff != 0x00ff00ff
readback fail on DDS 5, 0xffffffff != 0xff00ff00
readback fail on DDS 6, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 6, 0xffffffff != 0x55555555
readback fail on DDS 6, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 6, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 6, 0xffffffff != 0x00000000
readback fail on DDS 6, 0xffffffff != 0x12345678
readback fail on DDS 6, 0xffffffff != 0x87654321
readback fail on DDS 6, 0xffffffff != 0x0000ffff
readback fail on DDS 6, 0xffffffff != 0xffff0000
readback fail on DDS 6, 0xffffffff != 0x00ff00ff
readback fail on DDS 6, 0xffffffff != 0xff00ff00
readback fail on DDS 7, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 7, 0xffffffff != 0x55555555
readback fail on DDS 7, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 7, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 7, 0xffffffff != 0x00000000
readback fail on DDS 7, 0xffffffff != 0x12345678
readback fail on DDS 7, 0xffffffff != 0x87654321
readback fail on DDS 7, 0xffffffff != 0x0000ffff
readback fail on DDS 7, 0xffffffff != 0xffff0000
readback fail on DDS 7, 0xffffffff != 0x00ff00ff
readback fail on DDS 7, 0xffffffff != 0xff00ff00
readback fail on DDS 0, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 0, 0xffffffff != 0x55555555
readback fail on DDS 0, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 0, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 0, 0xffffffff != 0x00000000
readback fail on DDS 0, 0xffffffff != 0x12345678
readback fail on DDS 0, 0xffffffff != 0x87654321
readback fail on DDS 0, 0xffffffff != 0x0000ffff
readback fail on DDS 0, 0xffffffff != 0xffff0000
readback fail on DDS 0, 0xffffffff != 0x00ff00ff
readback fail on DDS 0, 0xffffffff != 0xff00ff00
readback fail on DDS 1, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 1, 0xffffffff != 0x55555555
readback fail on DDS 1, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 1, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 1, 0xffffffff != 0x00000000
readback fail on DDS 1, 0xffffffff != 0x12345678
readback fail on DDS 1, 0xffffffff != 0x87654321
readback fail on DDS 1, 0xffffffff != 0x0000ffff
readback fail on DDS 1, 0xffffffff != 0xffff0000
readback fail on DDS 1, 0xffffffff != 0x00ff00ff
readback fail on DDS 1, 0xffffffff != 0xff00ff00
readback fail on DDS 2, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 2, 0xffffffff != 0x55555555
readback fail on DDS 2, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 2, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 2, 0xffffffff != 0x00000000
readback fail on DDS 2, 0xffffffff != 0x12345678
readback fail on DDS 2, 0xffffffff != 0x87654321
readback fail on DDS 2, 0xffffffff != 0x0000ffff
readback fail on DDS 2, 0xffffffff != 0xffff0000
readback fail on DDS 2, 0xffffffff != 0x00ff00ff
readback fail on DDS 2, 0xffffffff != 0xff00ff00
readback fail on DDS 3, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 3, 0xffffffff != 0x55555555
readback fail on DDS 3, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 3, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 3, 0xffffffff != 0x00000000
readback fail on DDS 3, 0xffffffff != 0x12345678
readback fail on DDS 3, 0xffffffff != 0x87654321
readback fail on DDS 3, 0xffffffff != 0x0000ffff
readback fail on DDS 3, 0xffffffff != 0xffff0000
readback fail on DDS 3, 0xffffffff != 0x00ff00ff
readback fail on DDS 3, 0xffffffff != 0xff00ff00
readback fail on DDS 4, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 4, 0xffffffff != 0x55555555
readback fail on DDS 4, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 4, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 4, 0xffffffff != 0x00000000
readback fail on DDS 4, 0xffffffff != 0x12345678
readback fail on DDS 4, 0xffffffff != 0x87654321
readback fail on DDS 4, 0xffffffff != 0x0000ffff
readback fail on DDS 4, 0xffffffff != 0xffff0000
readback fail on DDS 4, 0xffffffff != 0x00ff00ff
readback fail on DDS 4, 0xffffffff != 0xff00ff00
readback fail on DDS 5, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 5, 0xffffffff != 0x55555555
readback fail on DDS 5, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 5, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 5, 0xffffffff != 0x00000000
readback fail on DDS 5, 0xffffffff != 0x12345678
readback fail on DDS 5, 0xffffffff != 0x87654321
readback fail on DDS 5, 0xffffffff != 0x0000ffff
readback fail on DDS 5, 0xffffffff != 0xffff0000
readback fail on DDS 5, 0xffffffff != 0x00ff00ff
readback fail on DDS 5, 0xffffffff != 0xff00ff00
readback fail on DDS 6, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 6, 0xffffffff != 0x55555555
readback fail on DDS 6, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 6, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 6, 0xffffffff != 0x00000000
readback fail on DDS 6, 0xffffffff != 0x12345678
readback fail on DDS 6, 0xffffffff != 0x87654321
readback fail on DDS 6, 0xffffffff != 0x0000ffff
readback fail on DDS 6, 0xffffffff != 0xffff0000
readback fail on DDS 6, 0xffffffff != 0x00ff00ff
readback fail on DDS 6, 0xffffffff != 0xff00ff00
readback fail on DDS 7, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 7, 0xffffffff != 0x55555555
readback fail on DDS 7, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 7, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 7, 0xffffffff != 0x00000000
readback fail on DDS 7, 0xffffffff != 0x12345678
readback fail on DDS 7, 0xffffffff != 0x87654321
readback fail on DDS 7, 0xffffffff != 0x0000ffff
readback fail on DDS 7, 0xffffffff != 0xffff0000
readback fail on DDS 7, 0xffffffff != 0x00ff00ff
readback fail on DDS 7, 0xffffffff != 0xff00ff00
readback fail on DDS 0, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 0, 0xffffffff != 0x55555555
readback fail on DDS 0, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 0, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 0, 0xffffffff != 0x00000000
readback fail on DDS 0, 0xffffffff != 0x12345678
readback fail on DDS 0, 0xffffffff != 0x87654321
readback fail on DDS 0, 0xffffffff != 0x0000ffff
readback fail on DDS 0, 0xffffffff != 0xffff0000
readback fail on DDS 0, 0xffffffff != 0x00ff00ff
readback fail on DDS 0, 0xffffffff != 0xff00ff00
readback fail on DDS 1, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 1, 0xffffffff != 0x55555555
readback fail on DDS 1, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 1, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 1, 0xffffffff != 0x00000000
readback fail on DDS 1, 0xffffffff != 0x12345678
readback fail on DDS 1, 0xffffffff != 0x87654321
readback fail on DDS 1, 0xffffffff != 0x0000ffff
readback fail on DDS 1, 0xffffffff != 0xffff0000
readback fail on DDS 1, 0xffffffff != 0x00ff00ff
readback fail on DDS 1, 0xffffffff != 0xff00ff00
readback fail on DDS 2, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 2, 0xffffffff != 0x55555555
readback fail on DDS 2, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 2, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 2, 0xffffffff != 0x00000000
readback fail on DDS 2, 0xffffffff != 0x12345678
readback fail on DDS 2, 0xffffffff != 0x87654321
readback fail on DDS 2, 0xffffffff != 0x0000ffff
readback fail on DDS 2, 0xffffffff != 0xffff0000
readback fail on DDS 2, 0xffffffff != 0x00ff00ff
readback fail on DDS 2, 0xffffffff != 0xff00ff00
readback fail on DDS 3, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 3, 0xffffffff != 0x55555555
readback fail on DDS 3, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 3, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 3, 0xffffffff != 0x00000000
readback fail on DDS 3, 0xffffffff != 0x12345678
readback fail on DDS 3, 0xffffffff != 0x87654321
readback fail on DDS 3, 0xffffffff != 0x0000ffff
readback fail on DDS 3, 0xffffffff != 0xffff0000
readback fail on DDS 3, 0xffffffff != 0x00ff00ff
readback fail on DDS 3, 0xffffffff != 0xff00ff00
readback fail on DDS 4, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 4, 0xffffffff != 0x55555555
readback fail on DDS 4, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 4, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 4, 0xffffffff != 0x00000000
readback fail on DDS 4, 0xffffffff != 0x12345678
readback fail on DDS 4, 0xffffffff != 0x87654321
readback fail on DDS 4, 0xffffffff != 0x0000ffff
readback fail on DDS 4, 0xffffffff != 0xffff0000
readback fail on DDS 4, 0xffffffff != 0x00ff00ff
readback fail on DDS 4, 0xffffffff != 0xff00ff00
readback fail on DDS 5, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 5, 0xffffffff != 0x55555555
readback fail on DDS 5, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 5, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 5, 0xffffffff != 0x00000000
readback fail on DDS 5, 0xffffffff != 0x12345678
readback fail on DDS 5, 0xffffffff != 0x87654321
readback fail on DDS 5, 0xffffffff != 0x0000ffff
readback fail on DDS 5, 0xffffffff != 0xffff0000
readback fail on DDS 5, 0xffffffff != 0x00ff00ff
readback fail on DDS 5, 0xffffffff != 0xff00ff00
readback fail on DDS 6, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 6, 0xffffffff != 0x55555555
readback fail on DDS 6, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 6, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 6, 0xffffffff != 0x00000000
readback fail on DDS 6, 0xffffffff != 0x12345678
readback fail on DDS 6, 0xffffffff != 0x87654321
readback fail on DDS 6, 0xffffffff != 0x0000ffff
readback fail on DDS 6, 0xffffffff != 0xffff0000
readback fail on DDS 6, 0xffffffff != 0x00ff00ff
readback fail on DDS 6, 0xffffffff != 0xff00ff00
readback fail on DDS 7, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 7, 0xffffffff != 0x55555555
readback fail on DDS 7, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 7, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 7, 0xffffffff != 0x00000000
readback fail on DDS 7, 0xffffffff != 0x12345678
readback fail on DDS 7, 0xffffffff != 0x87654321
readback fail on DDS 7, 0xffffffff != 0x0000ffff
readback fail on DDS 7, 0xffffffff != 0xffff0000
readback fail on DDS 7, 0xffffffff != 0x00ff00ff
readback fail on DDS 7, 0xffffffff != 0xff00ff00
readback fail on DDS 0, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 0, 0xffffffff != 0x55555555
readback fail on DDS 0, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 0, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 0, 0xffffffff != 0x00000000
readback fail on DDS 0, 0xffffffff != 0x12345678
readback fail on DDS 0, 0xffffffff != 0x87654321
readback fail on DDS 0, 0xffffffff != 0x0000ffff
readback fail on DDS 0, 0xffffffff != 0xffff0000
readback fail on DDS 0, 0xffffffff != 0x00ff00ff
readback fail on DDS 0, 0xffffffff != 0xff00ff00
readback fail on DDS 1, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 1, 0xffffffff != 0x55555555
readback fail on DDS 1, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 1, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 1, 0xffffffff != 0x00000000
readback fail on DDS 1, 0xffffffff != 0x12345678
readback fail on DDS 1, 0xffffffff != 0x87654321
readback fail on DDS 1, 0xffffffff != 0x0000ffff
readback fail on DDS 1, 0xffffffff != 0xffff0000
readback fail on DDS 1, 0xffffffff != 0x00ff00ff
readback fail on DDS 1, 0xffffffff != 0xff00ff00
readback fail on DDS 2, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 2, 0xffffffff != 0x55555555
readback fail on DDS 2, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 2, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 2, 0xffffffff != 0x00000000
readback fail on DDS 2, 0xffffffff != 0x12345678
readback fail on DDS 2, 0xffffffff != 0x87654321
readback fail on DDS 2, 0xffffffff != 0x0000ffff
readback fail on DDS 2, 0xffffffff != 0xffff0000
readback fail on DDS 2, 0xffffffff != 0x00ff00ff
readback fail on DDS 2, 0xffffffff != 0xff00ff00
readback fail on DDS 3, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 3, 0xffffffff != 0x55555555
readback fail on DDS 3, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 3, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 3, 0xffffffff != 0x00000000
readback fail on DDS 3, 0xffffffff != 0x12345678
readback fail on DDS 3, 0xffffffff != 0x87654321
readback fail on DDS 3, 0xffffffff != 0x0000ffff
readback fail on DDS 3, 0xffffffff != 0xffff0000
readback fail on DDS 3, 0xffffffff != 0x00ff00ff
readback fail on DDS 3, 0xffffffff != 0xff00ff00
readback fail on DDS 4, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 4, 0xffffffff != 0x55555555
readback fail on DDS 4, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 4, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 4, 0xffffffff != 0x00000000
readback fail on DDS 4, 0xffffffff != 0x12345678
readback fail on DDS 4, 0xffffffff != 0x87654321
readback fail on DDS 4, 0xffffffff != 0x0000ffff
readback fail on DDS 4, 0xffffffff != 0xffff0000
readback fail on DDS 4, 0xffffffff != 0x00ff00ff
readback fail on DDS 4, 0xffffffff != 0xff00ff00
readback fail on DDS 5, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 5, 0xffffffff != 0x55555555
readback fail on DDS 5, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 5, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 5, 0xffffffff != 0x00000000
readback fail on DDS 5, 0xffffffff != 0x12345678
readback fail on DDS 5, 0xffffffff != 0x87654321
readback fail on DDS 5, 0xffffffff != 0x0000ffff
readback fail on DDS 5, 0xffffffff != 0xffff0000
readback fail on DDS 5, 0xffffffff != 0x00ff00ff
readback fail on DDS 5, 0xffffffff != 0xff00ff00
readback fail on DDS 6, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 6, 0xffffffff != 0x55555555
readback fail on DDS 6, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 6, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 6, 0xffffffff != 0x00000000
readback fail on DDS 6, 0xffffffff != 0x12345678
readback fail on DDS 6, 0xffffffff != 0x87654321
readback fail on DDS 6, 0xffffffff != 0x0000ffff
readback fail on DDS 6, 0xffffffff != 0xffff0000
readback fail on DDS 6, 0xffffffff != 0x00ff00ff
readback fail on DDS 6, 0xffffffff != 0xff00ff00
readback fail on DDS 7, 0xffffffff != 0xaaaaaaaa
readback fail on DDS 7, 0xffffffff != 0x55555555
readback fail on DDS 7, 0xffffffff != 0xa5a5a5a5
readback fail on DDS 7, 0xffffffff != 0x5a5a5a5a
readback fail on DDS 7, 0xffffffff != 0x00000000
readback fail on DDS 7, 0xffffffff != 0x12345678
readback fail on DDS 7, 0xffffffff != 0x87654321
readback fail on DDS 7, 0xffffffff != 0x0000ffff
readback fail on DDS 7, 0xffffffff != 0xffff0000
readback fail on DDS 7, 0xffffffff != 0x00ff00ff
readback fail on DDS 7, 0xffffffff != 0xff00ff00
It worked on the KC705 during the tests we did in the lab 2 weeks ago. It was broken before the Quantity
removal and machine units refactoring.
Attempting to allocate all 16 TTLs for KC705 results in KeyError: 'LA00_CC_P'
so that the controller does not have to be run as root.
The transport example is currently broken:
https://github.com/m-labs/artiq/blob/master/examples/master/repository/transport.py
Put in FAQ:
import serial.tools.list_ports
import pprint
pprint.pprint(serial.tools.list_ports.comports())
If TCP connection is open to Master as when loading a new kernel, does idle_kernel automatically run if the Master hangs? No. SB is working on this. He's looking into using LWIP_TCP_KEEPALIVE.
that would reduce code size for experiments needing large tables of data (e.g. randomized benchmarking).
from artiq import *
class PulseNotReceived(Exception):
pass
class LED(Experiment, AutoDB):
class DBKeys:
core = Device()
ttl0 = Device()
pmt1 = Device()
@kernel
def run1(self):
# usual Artiq syntax
# This takes 55 us to generate ttl0 rising edge
self.pmt1.gate_rising(3*ms)
t0 = self.pmt1.timestamp()
#if t0 < 0*s:
# raise PulseNotReceived
at(t0)
delay(55*us)
self.ttl0.pulse(10*ms)
@kernel
def run2(self):
# bypass compiler and optimize away all rational math
# This takes 2.1 us to generate ttl0 rising edge
self.pmt1.gate_rising(3*ms)
syscall('ttl_set_o', syscall('ttl_get', 1, now) + time_to_cycles(2100*ns), 2, True)
def run(self):
self.run1()
#self.run2()
There is some race condition that intermittently causes a complete freeze of the comms CPU when doing lots of RPC over TCP. The rpc_timing.py benchmark is good at causing the problem. Things work fine with serial.
Fix this bug properly and revert commit 37ac6c4.
The GUI needs UDP to talk to the core device in the TTL and DDS panels. On Windows, the quamash event loop is based on ProactorEventLoop which does not support UDP.
Uniprocessor systems and therefore the Papilio Pro are no longer supported. Build for KC705 instead as this it is the main board to be used with ARTIQ.
artiq/tools.py : asyncio_process_wait_timeout(process, timeout)
Remove this when it will not be needed anymore (when yield from asyncio.wait_for(process.wait())
will not have any issue anymore).
Likely when Python 3.5 is out (September 13th)
union seek
, *(unsigned int *)addr == END_MARKER
, etc.). I guess you can remove union seek
.write_at_offset
may access buffers beyond their length due to the added alignment padding. Likely harmless, but not a clean programming practice.fs_write
will break if the data contains the FFFFFFFF pattern. Forgot to use goto_next_record
?int
(instead of unsigned int
) everywhere.strlen
may crash if a record is corrupted. Use strnlen
. Generally make the code resistant to broken data.buflen
vs. key_len
)fs_write
should return a status code indicating if the data was successfully written or not.NB: All those bugs would have been prevented by using YAFFS.
Using KC705 in Penning lab. Connected to legacy Penning hardware using FMC-LVDS adapter.
In test mode run DDS tests on AD9858. Generates all 1111's.
when terminating the tdc controller in simulation mode.
How do I install flterm? The following instructions don't work.
http://lekernel.net/blog/2009/10/debian-packages-for-milkymist-development-tools/
http://installion.co.uk/fedora/19/os/f/flterm/en/install/index.html
Command to reset all DDSs on DDS bus without requirement to reset FPGA.
To be able to debug and solve RTIOUnderflow
s, we should add a few easily reachable pieces of information to the exception:
now()
Metadata in exceptions would be required for this. Full debugging information (AST nodes to ELF debugging symbols) is for later.
The logging message formatting is a inconsistent. Let's do the following:
style="{"
should be added to https://github.com/m-labs/artiq/blob/master/artiq/tools.py#L61logger.level("format {}", *arguments)
instead of logger.level("format {}".format(*arguments))
. The latter is always evaluated which the former is evaluated only on message emission.%
to {}
formatting.I encounter an error running $ make.py -X ~/artiq-dev/artiq/soc -t artiq all
following the instructions here
https://github.com/m-labs/artiq/blob/master/doc/manual/installing.rst
rabi@vboxartiq:~/artiq-dev/misoc$ sudo python3 make.py -X ~/artiq-dev/artiq/soc -t artiq all
[sudo] password for rabi:
__ ___ _ ____ _____
/ |/ / (_) / __/__ / ___/
/ /|_/ / / / _\ \/ _ \/ /__
/_/ /_/ /_/ /___/\___/\___/
a high performance and small footprint SoC based on Migen
====== Building for: ======
Platform: papilio_pro
Target: artiq
Subtarget: ARTIQMiniSoC
CPU type: or1k
===========================
make: Entering directory `/home/rabi/artiq-dev/misoc/software/libcompiler-rt'
rm -f divsi3.o modsi3.o comparedf2.o negsf2.o negdf2.o addsf3.o subsf3.o mulsf3.o divsf3.o lshrdi3.o muldi3.o divdi3.o ashldi3.o ashrdi3.o udivmoddi4.o floatsisf.o floatunsisf.o fixsfsi.o fixunssfsi.o adddf3.o subdf3.o muldf3.o divdf3.o floatsidf.o floatunsidf.o floatdidf.o fixdfsi.o fixunsdfsi.o clzsi2.o ctzsi2.o udivdi3.o umoddi3.o moddi3.o divsi3.ts modsi3.ts comparedf2.ts negsf2.ts negdf2.ts addsf3.ts subsf3.ts mulsf3.ts divsf3.ts lshrdi3.ts muldi3.ts divdi3.ts ashldi3.ts ashrdi3.ts udivmoddi4.ts floatsisf.ts floatunsisf.ts fixsfsi.ts fixunssfsi.ts adddf3.ts subdf3.ts muldf3.ts divdf3.ts floatsidf.ts floatunsidf.ts floatdidf.ts fixdfsi.ts fixunsdfsi.ts clzsi2.ts ctzsi2.ts udivdi3.ts umoddi3.ts moddi3.ts divsi3.d modsi3.d comparedf2.d negsf2.d negdf2.d addsf3.d subsf3.d mulsf3.d divsf3.d lshrdi3.d muldi3.d divdi3.d ashldi3.d ashrdi3.d udivmoddi4.d floatsisf.d floatunsisf.d fixsfsi.d fixunssfsi.d adddf3.d subdf3.d muldf3.d divdf3.d floatsidf.d floatunsidf.d floatdidf.d fixdfsi.d fixunsdfsi.d clzsi2.d ctzsi2.d udivdi3.d umoddi3.d moddi3.d libcompiler-rt.a .*~ *~
make: Leaving directory `/home/rabi/artiq-dev/misoc/software/libcompiler-rt'
make: Entering directory `/home/rabi/artiq-dev/misoc/software/libbase'
rm -f exception.o libc.o errno.o crc16.o crc32.o console.o system.o id.o uart.o time.o qsort.o strtod.o exception.d libc.d errno.d crc16.d crc32.d console.d system.d id.d uart.d time.d qsort.d strtod.d crt0-or1k.o vsnprintf.o vsnprintf.d vsnprintf-nofloat.o vsnprintf-nofloat.d
rm -f libbase.a libbase-nofloat.a .*~ *~
make: Leaving directory `/home/rabi/artiq-dev/misoc/software/libbase'
make: Entering directory `/home/rabi/artiq-dev/misoc/software/libnet'
rm -f microudp.o tftp.o microudp.ts tftp.ts microudp.d tftp.d libnet.a .*~ *~
make: Leaving directory `/home/rabi/artiq-dev/misoc/software/libnet'
make: Entering directory `/home/rabi/artiq-dev/misoc/software/bios'
rm -f isr.o sdram.o main.o boot-helper-or1k.o boot.o dataflow.o isr.d sdram.d main.d boot-helper-or1k.d boot.d dataflow.d bios.elf bios.bin .*~ *~
make: Leaving directory `/home/rabi/artiq-dev/misoc/software/bios'
make: Entering directory `/home/rabi/artiq-dev/misoc/software/bios'
CC isr.o
CC sdram.o
CC main.o
CC boot-helper-or1k.o
CC boot.o
CC dataflow.o
make -C ../../software/libcompiler-rt
make[1]: Entering directory `/home/rabi/artiq-dev/misoc/software/libcompiler-rt'
make[1]: *** No rule to make target `divsi3.o', needed by `libcompiler-rt.a'. Stop.
make[1]: Leaving directory `/home/rabi/artiq-dev/misoc/software/libcompiler-rt'
make: *** [libs] Error 2
make: Leaving directory `/home/rabi/artiq-dev/misoc/software/bios'
Traceback (most recent call last):
File "make.py", line 169, in <module>
raise OSError("BIOS build failed")
OSError: BIOS build failed
The layout of artiq-dev on my machine is the following.
rabi@vboxartiq:~/artiq-dev$ ls
artiq compiler-rt migen nist_secureconfigscript xc3sprog
bitstreams Drivers misoc openrisc
Stuck at 0, e.g.
artiq.coredevice.runtime_exceptions.RTIOUnderflow: at 0 ps on channel 0, violation 0 ps
move_home is blocking
move_jog(direction, async=False) has blocking option
move_absolute() does not have blocking option
move_relative() does not have blocking option
Previously the bitstream was not build on pull-requests (no access to the secrets), using BUILD_SOC
. With the conda builds, we still can not build bitstreams for pull-requests (yet we should still run the testsuite). We can keepl building the bitstreams for non-master builds. But more importantly we should not upload the packages to binstar if TRAVIS_BRANCH!=master
.
The text "sync()" appears in the artiq manual but using the web-based search for "sync()" doesn't find it.
The QC2 (clock lab) DDS hardware has one-hot selection signals, which makes it possible to FUD several channels at the same time.
The reference plane for "time" is defined to be the rtio-clock side of the FIFOs, where the rtio counter lives. Latency compensation for delays happening from this plane to any other point in the downstream signal path (DDS DAC output, DDS amplifiers, TTL driver output, cable ends, shutter delays) should be done in software and be configurable in the ddb
.
We need an example how to do configurable delay compensation for TTL (rising and falling edges independently), DDS, and DAC outputs. Latencies will be in the ns-µs range but the required compensation may be negative. The case of a TTL-shutter with several ms latency might be a bit tricky because of the required headroom of the rtio counter w.r.t. now
but also educationally interesting in demonstating "how to alter the past".
(c.f. #36 for a DDS latency contribution)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.