Toolkits > SampleDNSMessageParser 2.0.0 > sample > LiveDNSMessageParserBasic.spl
composite LiveDNSMessageParserBasic { param expression<rstring> $networkInterface: getSubmissionTimeValue("networkInterface", "eth0"); expression<rstring> $inputFilter: getSubmissionTimeValue("inputFilter", "udp port 53"); expression<float64> $metricsInterval: (float64)getSubmissionTimeValue("metricsInterval", "1.0" ); expression<float64> $timeoutInterval: (float64)getSubmissionTimeValue("timeoutInterval", "10.0" ); expression<uint32> $lookupPort: (uint32)getSubmissionTimeValue("lookupPort", "23456" ); type // packet output from PacketLiveSource operator PacketType = float64 captureTime, // time that packet was captured, in seconds since Unix epoch rstring ipSourceAddress, // IP source address rstring ipDestinationAddress, // IP destination address blob dnsMessage; // the DNS message from a packet, excluding all network headers // metrics output from PacketLiveSource operator MetricsType = float64 metricsTime, // time that metrics were produced, in seconds since Unix epoch float64 averagePacketsReceived, // average number of packets received during last metrics interval float64 averagePacketsDropped, // average number of packets dropped during last metrics interval float64 averagePacketsProcessed,// average number of packets processed during last metrics interval float64 averageBytesProcessed; // average number of bytes processed during last metrics interval DNSResponseMessageType = rstring captureTime, // time that packet was captured, in seconds since Unix epoch rstring ipSourceAddress, // IP source address rstring ipDestinationAddress, // IP destination address rstring questionName, rstring questionType, rstring answerAddress, list<rstring> answerNames, list<rstring> answerData; graph ( stream<PacketType> PacketStream as PacketsOut ; stream<MetricsType> MetricsStream as MetricsOut ) = PacketLiveSource() { param networkInterface: $networkInterface; metricsInterval: $metricsInterval; inputFilter: $inputFilter; promiscuous: true; outputFilters: true, metricsUpdated(); output PacketsOut: captureTime = (float64)CAPTURE_SECONDS() + (float64)CAPTURE_MICROSECONDS() / 1000000.0, ipSourceAddress = convertIPV4AddressNumericToString(IPV4_SRC_ADDRESS()), ipDestinationAddress = convertIPV4AddressNumericToString(IPV4_DST_ADDRESS()), dnsMessage = PAYLOAD_DATA(); MetricsOut: metricsTime = getTimestampInSecs(), averagePacketsReceived = (float64)metricsIntervalPacketsReceived() / metricsIntervalElapsed(), averagePacketsDropped = (float64)metricsIntervalPacketsDropped() / metricsIntervalElapsed(), averagePacketsProcessed = (float64)metricsIntervalPacketsProcessed() / metricsIntervalElapsed(), averageBytesProcessed = (float64)metricsIntervalBytesProcessed() / metricsIntervalElapsed(); } //() as PacketSink = FileSink(PacketStream) { param file: "debug.LiveDNSMessageParserBasic.PacketStream.out"; format: txt; hasDelayField: true; flush: 1u; } () as MetricsSink = FileSink(MetricsStream) { param file: "debug.LiveDNSMessageParserBasic.MetricsStream.out"; format: txt; hasDelayField: true; flush: 1u; } ( stream<DNSResponseMessageType> DNSResponseMessageStream as OutMessage ; stream<rstring lookup> DNSLookupStream as OutLookup ) = DNSMessageParser(PacketStream) { logic state: { map<uint16,rstring> dnsTypes = { 1: "A", 2: "NS", 3: "MD", 4: "MF", 5: "CNAME", 6: "SOA", 7: "MB", 8: "MG", 9: "MR", 10: "NULL", 11: "WKS", 12: "PTR", 13: "HINFO", 14: "MINFO", 15: "MX", 16: "TXT", 28: "AAAA" }; map<uint16,rstring> dnsLookupTypes = { 1: "A", 12: "PTR", 28: "AAAA" }; map<uint8,rstring> dnsResponseCodes = { 0: "OK", 1: "Format Error", 2: "Server Failure", 3: "Name Error", 4: "[not implemented]", 5: "Server Refused" }; } param messageAttribute: dnsMessage; outputFilters: DNS_RESPONSE_FLAG() && DNS_RESPONSE_CODE()==0ub && !parseError(), DNS_RESPONSE_FLAG() && DNS_RESPONSE_CODE()==0ub && DNS_QUESTION_TYPE() in dnsLookupTypes && length(DNS_ANSWER_ADDRESS())>0 && !parseError(); output OutMessage: captureTime = formatEpochTime(captureTime), questionName = DNS_QUESTION_NAME(), questionType = DNS_QUESTION_TYPE() in dnsTypes ? dnsTypes[DNS_QUESTION_TYPE()] : (rstring)DNS_QUESTION_TYPE(), answerAddress = DNS_ANSWER_ADDRESS(), answerNames = DNS_ANSWER_NAMES(), answerData = DNS_ANSWER_DATA(); OutLookup: lookup = formatEpochTime(captureTime, 3u) + " IP address " + ipDestinationAddress + " looked up '" + DNS_QUESTION_NAME() + "'" + " and found '" + DNS_ANSWER_ADDRESS() + "'"; } () as DNSMessageSink = FileSink(DNSResponseMessageStream) { param file: "debug.LiveDNSMessageParserBasic.DNSResponseMessageStream.out"; format: txt; hasDelayField: true; flush: 1u; } () as DNSLookupSink = TCPSink(DNSLookupStream) { param port: $lookupPort; role: server; format: line; flush: 1u; } () as Timeout = Custom() { logic onProcess: { block($timeoutInterval); shutdownPE(); } } }


Introduction Komodo is a complete ecosystem for the creation of any blockchain-based project. The founder and lead developer jl777 sought to find a solution to the main bottlenecks of crypto: s…
Cassius18-Nov-18 05:38 PM
How is everything going anyway?
Thank you @KomodoWorld
KomodoWorld18-Nov-18 05:39 PM
all fine, a lot of exciting progress from technical point of view. Price not so friendly yet
polycryptoblog18-Nov-18 05:40 PM
pretty good, james tech has been coming to fruition from the nxt days ( jumblr, dex, crypto,pangea, ) along with some new things. ( crosschain communication/contracts, utxo lodger) I mean move from waves token to your own independent blockchain
1
Cassius18-Nov-18 05:41 PM
Well, nothing is friendly now re: price
1
LarryBird18-Nov-18 07:05 PM
spanish ham
Cassius18-Nov-18 07:44 PM
Nice overview @KomodoWorld will get my teeth into the wp this week
1
AlvinLeito18-Nov-18 09:23 PM
Hey @all, I have a general question about the Komodo platform.. If we make an assetchain (what the planning is to go do with the ViisiitCoin), but the SEC sees the essence of the coin as an utility- and security token. So, that in essence we’ll be doing a dSTO in a couple of years after the private sale.
Is that something that is actually (technically) true? Can we say that we’re doing a dSTO on the Komodo platform?
Also something totally different.. just saw the telegram community in here linked with a bot... how do you connect the bot with the telegram channel/group?
polycryptoblog18-Nov-18 10:13 PM
STO is just another name for stock offering. Consult with a securities lawyer on how you should proceed and what is all needed to do such an offering . The tech can do what you make it do, but tech is agnostic when it comes to the law it's up to the user / issuer to fulfill whatever compliance they need to
PTYX18-Nov-18 11:25 PM
It doesn't matter which blockchain platform you use. If you issue a token, offer rewards or benefits to buyers, promise any sort of a return, and allow any US person to participate in the token sale then you must register with the Sec for approval or exemption
1
ecbuddy19-Nov-18 01:35 AM
hey guys, just wondering...if I am running AGAMA lite wallet
can I create different receiving addresses?
Alright19-Nov-18 01:37 AM
one seed = one address
blackjok3r19-Nov-18 01:37 AM
New aees
Alright19-Nov-18 01:37 AM
create a different seed
ecbuddy19-Nov-18 01:38 AM
how do i create a new seed?
bascially create a new wallet on the lite menu page?
Alright19-Nov-18 01:41 AM
yes
ecbuddy19-Nov-18 01:48 AM
alright, I figured as much...
also, how come when I send KMD to a friend, it send out a huge amount from which his small amount gets sent then a another amounts gets returned to me
its such a strange way to keep things accounted for
is UTXO the reason?
I also had a reward of 1.33 listed on my wallet and then when i made a transaction to send to my friend, my reward dropped to .5 KMD
Alright19-Nov-18 01:57 AM
UTXOs is the exact reason
polycryptoblog19-Nov-18 01:57 AM
You didn't spend the utxo
ecbuddy19-Nov-18 01:58 AM
and the reward discrepancy?
did I somehow claim it partially?
Alright19-Nov-18 01:58 AM
if you would have sent the full balance of the wallet in that transaction, you would receive the full amount of rewards
instead, like poly said, you only spent partial balance of the wallet
if you want the rest, send the full balance back to yourself
otherwise, it just keeps accruing. You didn't lose anything
ecbuddy19-Nov-18 01:59 AM
yes I spent a small amount, and in a large amount went out, and the balance came back to my wallet...but my rewards accrued showed a it had gone down
yeah, I am figuring I didnt lose anything, just wondering why it got auto sent in sense of speaking
Alright19-Nov-18 02:00 AM
research UTXOs and change addresses
what you're talking about is a change address
and is a fundamental principal of bitcoin itself
ecbuddy19-Nov-18 02:01 AM
alright I will research it
yes, bitcoin seems to be the same
sorry, I am not as familiar with KMD as I should be...
Alright19-Nov-18 02:02 AM
no worries, if you have any questions, feel free to ping me
or just ask here, I'm sure there will be someone to answer
ecbuddy19-Nov-18 02:02 AM
I am kinda invested or used to ARK and Pivx as longer holds, but I always thought KMD had great tech and visions
so I finally got it at these prices...really a no brainer lol
even thought I started buying at 3$
lmao
thanks @Alright
shaider1119-Nov-18 06:19 AM
@SHossain it’s too bad, seem like no future for kmd mining on gpu.
@ComputerGenie 👴👴👴 144 and k = 5 will be better like other real decentralized coins(edited)
ComputerGenie 👴👴👴19-Nov-18 08:14 AM
@shaider11 pleas tell me you're ing...
shaider1119-Nov-18 08:17 AM
Good luck guys
Be happy with equi...200.9
ComputerGenie 👴👴👴19-Nov-18 08:20 AM
@shaider11 Why would you complain about "no future for kmd mining on gpu" and then suggest a change that cuts out 100 million GPUs?
The protocol transcript (and other assets) from the original Sprout MPC have been restored to our S3 bucket. Check out the https://github.com/zcash/mpc repository for more information. I currently can’t archive these on the Internet Archive or put a torrent up, but I hope t...
1
nille19-Nov-18 09:16 AM
good morning
Raybobo19-Nov-18 09:51 AM
Good morning guys
2
PTYX19-Nov-18 01:48 PM
Morning feller
Cassius19-Nov-18 02:44 PM
@KomodoWorld Who wrote the white paper?
Cryptoon19-Nov-18 02:54 PM
@Bryan_Beus
PTYX19-Nov-18 02:55 PM
Actually James wrote it. Siddhartha was the editor.
@Cassius do you have a question about the whitepaper?
Cassius19-Nov-18 02:57 PM
Not yet. Just wanted to say it was a decent piece of work(edited)
Having written a few white papers and seen a good many more, that's not always a given
Audo19-Nov-18 02:58 PM
Are you the same Cassius who was here long time ago? I haven't seen you in a while
back in the Slack days
Cassius19-Nov-18 02:59 PM
Yes I was closely involved in Nxt, and with SuperNET/BTCD back in the day.
Audo19-Nov-18 02:59 PM
Yeah, I remember you. Great to have you back here lurking
Cassius19-Nov-18 02:59 PM
At the start of 2016 I had some personal stuff to deal with, then Sasha asked me to help with Waves, Incent took off as a company, etc
Audo19-Nov-18 02:59 PM
what are you up to nowadays?
Cassius19-Nov-18 03:00 PM
Still working with Waves on content, but because it has coalesced as a Russian initiative my workload is less now and it's less creative. Will be sticking around there indefinitely but I have capacity and interest in more now
Similarly Incent is doing well, creating some really cool software, but post-ICO and after the early days, there's less of a role and I'm not cut out for corporate life anyway
I have various other clients, started my own comms company (www.blockworm.net)
But looking for something where I can get my hands properly dirty again and help shape something from the start. I'm involved in one or two grassroots initiatives, which is fun
My favourite projects are the ones where I not only get to communicate the ideas, but help shape them from the start
Audo19-Nov-18 03:06 PM
Ok, cool. Feel free to shoot a message to @Steve Lee incase you are interested of getting involved with Komodo. I'm not sure if there are any positions immediately avialable though.
We have been thinking of ways to build a platform that would better empower the Komodo community. Part of that is to encourgae people to blog / write about Komodo. We will definitely need more ideas and help there.
Cassius19-Nov-18 03:07 PM
Maybe, thanks. Mostly looking to find out more at this point.
Audo19-Nov-18 03:08 PM
I remember talking with one guy in a conference, and he was explaining me how P2P technology requires a P2P community. Otherwise there's just a centralized hub for information (website), and the normal social media channels, and that makes it more like a corporate project versus an open source project largely dirven by its community.
Cassius19-Nov-18 03:08 PM
Haven't finished the wp yet and there's a lot to get my head around. I'm curious about the custom chain launcher though
For sure - though people use 'decentralised' as a one-stop-shop without really grasping that you can have centralised/decentralised infrastructure (blockchain), company, information, community... in different combinations
Audo19-Nov-18 03:09 PM
The whitepaper might a bit out of date too. We have upgraded our marketing messageing. Best place to get fast up to speed with what we have is our website and the recent blog posts
Cassius19-Nov-18 03:09 PM
Sure, thanks
How's everything going with you anyway?
Audo19-Nov-18 03:12 PM
oh good, thanks for asking. I have been doing some travelling and I keep hustling
Cassius19-Nov-18 03:17 PM
Cool
Are you still involved with Nxt or Ardor/Ignis (I lost track)?
Bryan_Beus19-Nov-18 03:59 PM
@Cassius@PTYX
Thank you for the compliment.
James is responsible for the concepts, I just put his concepts to words.
You're welcome to reach out to Steve Lee to see if there are any bounties. I believe we have someone new just hired for writing content, so it may be awhile before we have another opening.
Cassius19-Nov-18 04:07 PM
Yep - not looking for anything specific at the moment, but thanks, will bear it in mind
Mainly getting the lie of the land at this point and catching up on some things I'm behind on
Audo19-Nov-18 04:12 PM
It has been just Komodo for me
1
Cassius19-Nov-18 04:18 PM
I didn't think there would be too many who had a foot in both camps. That well was pretty well poisoned, sadly (and to mix metaphors)


SDN SENSE End Site Monitoring
Topology
Frontend Configuration
Models
Deltas
Debugging tools
Request new debug action
Debug history
Dashboard


Source: U.S. Department of Labor
The indices have different dimensions and scales but here they have been normalized to better expose relationships in trends. Move your mouse over the plots to obtain the individual values.


First off, a bit about my drug usage: Iím a daily pot-smoker and have been for the past 3 years. Iíve dabbled with oxycodone and hydromorphone a bit in the past with no ill effects. Mushrooms a few times. Lately, Iíve been taking 4-6 generic diphenhydramine or dimenhydrinate pills an hour or so before bedtime, maybe a bit too frequently, which I find produces a pleasant light-sedation that, especially when combined with pot, helps me get to sleep. This was my first and definitely last time with poppy seed tea.
Set and setting: Victoria Day long weekend in Canada. I was house-sitting for my uncle and had the house to myself. I had no plans or responsibilities for the weekend and figured Iíd brew up some poppy-seed tea for the evening.
Preparation: 500 grams of poppy seeds were purchased at the local Bulk Barn. There were bits of poppy-pod mixed in with the seeds which I knew was a good sign the seeds hadnít been washed and therefore should still contain some morphine/codeine. The seeds were funnelled into a 2 litre pop bottle, a generous squeeze of lemon juice was added and the whole thing toped up with boiling water. The mixture was shaken periodically and allowed to sit for an hour. The seeds were then strained and the resulting 4 cups of opaque yellow-brown liquid was cooled in the refrigerator for several hours.
Experience: I started drinking the foul-tasting brew at 8:00 pm. Since I had no opiate tolerance and this was my first time with poppy-seed tea, I chose to titrate my dosage to be safe; a precaution Iím glad I took. By 9:00 pm (T+1:00), I had drunk approximately 1 cup of the brew. By this time I hadnít really felt any effects to note, aside from a mild nausea.
Its around this time, I got a phone call from the Ďrents which lasted 15 minutes or so. During the course of the phone call my nose began to run and my skin became itchy. By the end of the call (T+1:15), the itchiness had increased to an uncomfortable level and my nose became completely stuffed up. I checked myself in the mirror and found my skin was quite red and blotchy. I shortly thereafter developed hives which covered my entire body. I knew of the itchiness some people get from opiates and that it is caused by histamines, but clearly this was not typical.
Luckily, I had Benadryl on hand and took 4 pills which I chewed to speed up absorption. Within 30 minutes (T+1:45), the itchiness had subsided to a more tolerable level and the hives began to go away. I still had hives when I went to bed (T+4:00) though, but was able to ignore them and get to sleep eventually. By morning (T+12:00), the allergy symptoms were gone and I was back to normal.
Throughout this experience I did not experience any of the contentment or euphoria associated with opiates, only the unpleasant allergy symptoms. Thank goodness I only drank 1 of the 4 cups of tea I produced, otherwise the allergic reaction would surely have been too much to handle.
My intention is not to scare people, Iím all for trying new drugs, but there is a lesson to be learnt here. And itís not a new one. Start off slow when trying new drugs, namely poppy-tea, you never know how your body might react and can never be too safe.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Bio
I come from a small countryside village in South-West England which sits in an area called the Jurrasic Coast. This part of the UK is known for its beautiful scenary, with rolling green hills and incredible beaches.
I studied MPhys Astrophysics with a Year Abroad at the University of Southampton. I got involved with many different clubs and ended up being the Secretary for the Piano Society, captaining the University Men's Badminton 2nd Team, and enjoyed being the Events Secretary for the Badminton Society, the largest society on campus. I got the chance to observe using professional telescopes in Tenerife, and completed two summer internships in the Supernovae Group. I spent my final year at the Harvard-Smithsonian Center for Astrophysics. There, I worked alongside Dr Cecilia Garraffo and Dr Jeremy Drake, simulating the environments surrounding binary star systems.
Whilst applying to PhD programs in the US, I started to audit a series of classes with topics ranging from astrobiology to sleep science to the neurobiology of perception and decision making. During those classes, I started getting really interested in neuroscience and decided to switch fields.
This led me to London, where I studied for one year at Goldsmiths College, enrolled in a course entitled MSc Music, Mind and Brain. It was a unique program combining music psychology with neuroscience, focusing on both the biological and cognitive aspects of musical behaviour.
This was a really fun year and it allowed me to get back into my music, whilst learning some very cool things about how sound affects our brain! I founded the Goldsmiths Jazz and Improv Society and got more interested in coding — attending hackathons and taking a class on machine learning.
My masters project was an EEG study investigating the neural correlates of a crossmodal correspondence between pitch and visual motion, supervised by Prof Joydeep Bhattacharya FRSA.
Currently, I'm working as a technical research assistant in Prof Aude Oliva's Computational Perception and Cognition Lab at MIT.
----------
I've played piano for most of my life and enjoy funk, blues, jazz, and contemporary styles as well as anything improvised. In my spare time, I love to compose piano music, play badminton, draw, juggle, and travel. Whenever I'm in a city, I try to check out a jazz club that I haven't been to before. You can see some of my music and art here.


fileutil::magic::rt - Runtime core for file type recognition engines written in pure Tcl
This package provides the runtime core for file type recognition engines written in pure Tcl and is thus used by all other packages in this module, i.e. the two frontend packages fileutil::magic::mimetypes and fileutil::magic::filetypes, and the two engine compiler packages fileutil::magic::cgen and fileutil::magic::cfront.
This command initializes the runtime and prepares the file filename for use by the system. This command has to be invoked first, before any other command of this package.
The command returns the channel handle of the opened file as its result.
This command closes the last file opened via ::fileutil::magic::rt::open and shuts the runtime down. This command has to be invoked last, after the file has been dealt with completely. Afterward another invokation of ::fileutil::magic::rt::open is required to process another file.
This command returns the empty string as its result.
This command marks the start of a magic file when debugging. It returns the empty string as its result.
This command returns the current result and stops processing.
If msg is specified its text is added to the result before it is returned. See ::fileutil::magic::rt::emit for the allowed special character sequences.
This command returns the current result. In contrast to ::fileutil::magic::rt::result processing continues.
If msg is specified its text is added to the result before it is returned. See ::fileutil::magic::rt::emit for the allowed special character sequences.
This command adds the text msg to the result buffer. The message may contain the following special character sequences. They will be replaced with buffered values before the message is added to the result. The command returns the empty string as its result.
This sequence is removed
Replaced with the last buffered string value.
Replaced with the last buffered numeric value.
See above.
This command fetches the numeric value with type from the absolute location offset and returns it as its result. The fetched value is further stored in the numeric buffer.
If qual is specified it is considered to be a mask and applied to the fetched value before it is stored and returned. It has to have the form of a partial Tcl bit-wise expression, i.e.
& number
For example:
Nv lelong 0 &0x8080ffff
For the possible types see section NUMERIC TYPES.
This command behaves mostly like ::fileutil::magic::rt::Nv, except that it compares the fetched and masked value against val as specified with comp and returns the result of that comparison.
The argument comp has to contain one of Tcl's comparison operators, and the comparison made will be
<val> <comp> <fetched-and-masked-value>
The special comparison operator x signals that no comparison should be done, or, in other words, that the fetched value will always match val.
This command behaves like ::fileutil::magic::rt::Nv, except that it additionally remembers the location in the file after the fetch in the calling context, for the level atlevel, for later use by ::fileutil::magic::rt::R.
This command behaves like ::fileutil::magic::rt::N, except that it additionally remembers the location in the file after the fetch in the calling context, for the level atlevel, for later use by ::fileutil::magic::rt::R.
This command behaves like ::fileutil::magic::rt::N, except that it fetches and compares strings, not numeric data. The fetched value is also stored in the internal string buffer instead of the numeric buffer.
This command behaves like ::fileutil::magic::rt::S, except that it additionally remembers the location in the file after the fetch in the calling context, for the level atlevel, for later use by ::fileutil::magic::rt::R.
This command sets the current level in the calling context to newlevel. The command returns the empty string as its result.
This command handles base locations specified indirectly through the contents of the inspected file. It returns the sum of delta and the value of numeric type fetched from the absolute location base.
For the possible types see section NUMERIC TYPES.
This command handles base locations specified relative to the end of the last field one level above.
In other words, the command computes an absolute location in the file based on the relative offset and returns it as its result. The base the offset is added to is the last location remembered for the level in the calling context.
8-bit integer
16-bit integer, stored in native endianess
see above, stored in big endian
see above, stored in small/little endian
32-bit integer, stored in native endianess
see above, stored in big endian
see above, stored in small/little endian
All of the types above exit in an unsigned form as well. The type names are the same, with the character "u" added as prefix.
32-bit integer timestamp, stored in native endianess
see above, stored in big endian
see above, stored in small/little endian
32-bit integer timestamp, stored in native endianess
see above, stored in big endian
see above, stored in small/little endian
This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category fileutil :: magic of the Tcllib SF Trackers. Please also report any ideas for enhancements you may have for either package and/or documentation.
Programming tools


[gecode-users] Uninstallation problem
Joe Porter
joe.porter at gmail.com
Wed Apr 16 19:11:28 CEST 2008
A long while ago I installed Gecode 1.3.1 using the Windows installer
package. Now that I'm no longer using it, I can't uninstall. I get a
message that says "could not access network location 1". It takes a while,
and hitting Retry sends it off thinking before returning the same message.
Can anyone help me figure out how to uninstall this?
I am currently using the binary zipfile distributions, but it would be nice
to install and use the real thing (including Gist).
Thanks,
-Joe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20080416/765d1054/attachment.htm>
More information about the gecode-users
mailing list


{% extends "base_layout.html" %} {% block content %}
Welcome to the Cisco Health Report and Online Information Center


|
|
Sunday, February 1, 2004 Updated 2:07 a.m. CST
|
|
Two shot downtown during Super Bowl festivities
Two people were shot in the 500 block of Main shortly before midnight and were taken to area hospitals. The identities and conditions of the victims were not immediately available. Robert Hurst, Houston Police Department spokesman, said homicide detectives were investigating the crime scene.
|
Political stipends sweeten state pay
Journeys of grief continue for shuttle families
Diocese handles old allegations with new rules
Security concerns ground flights from Europe
Fire Museum aims to raise money for new digs
Southern Dem vote Tuesday could shift tide
Eagles' Henley protecting Texas' Caddo Lake
Metropolitan
$70 million Lotto ticket sold in Houston
Police still searching for missing boy, man
Leaders divided over surplus of whitetails
Nation
Suspects' kids ok after abduction; ex-wife missing
Plane diverted as Bush leaves Philadelphia
Bush backs off on budget plan With audio.
Opportunity finds evidence in water quest
Study shows financial prosperity adds to sex appeal
Democrats sacrifice visibility over time, funding
737 jetliner a refuge for undersea life
World
More than 100 Iranian legislators resign
Peru chief vows probe into 'secret meeting' charges
Khatami calls off Cabinet meeting
12 die in two Iraq bomb attacks
Forsake terrorism, Muslims are urged
Sports
Elway, Sanders chosen for Hall With audio
Nets charge past Rockets in second half
Rice's precision passing dazzles San Jose St.
UH downs South Florida 65-53
Texas puts A&M in frozen zone
Federer wins Austrailian Open by sweeping Safin
Business
Limousine firms a driving force
Immigrants built up from the barrios to big business
McDonald's to put Burger King through grinder
Safeway's leader could get sacked
Key to jobless recovery may be lost in figures
Patent holder has major bone to pick with ham rival
Arts and Entertainment
Listen to clips from `Walkie Talkie' by Air
Comedy is the star of 'The Producers'
Cerati collaborates for musical experiment
Cheating hearts help chat shows boost ratings
Back to top
|
|
|
|
|
WEATHER
|
Today:
|
High: 68°
Low: 47°
Current: 52°
Overcast
Humidity: 88%
Wind: ENE 6
Pollen: Moderate
Ozone: Good
|
|
|
TODAY IN HOUSTON
|
|
|
GETTING AROUND • Road closings: Southwest Freeway, southbound, West Airport to Corporate, alternate lane closed 7 a.m.-3 p.m.
• Real-time traffic
DATEBOOK JUST FOR FUN • The Thang: The after-party features performances by Nelly, Murphy Lee, Juvenile, Tank, DJ Swift and others, starting at 8 p.m. at 610 Arena, 5115 South Loop East. Call<PHONE_NUMBER>. ON TV: • Survivor: All Stars: 18 players from the seven previous Survivor competitions play for $1 million. At 9 p.m. on CBS. • TV listings
|
A dozen family members have inherited a piece of property, and all except one wants to sell. In State Your Case, Ronald Lipman tackles the dispute. Monday in Business.
|
| INSIDE |
Watch 'Em is back! Got a problem with potholes, broken light posts, clogged drainage ditches? The Chronicle puts the spotlight on problems the bureaucrats just can't seem to get fixed.
McClain Q&A: Ask NFL writer John McClain a question about the Texans or the NFL. We'll post his answers to the best questions.
The News Bizarre: Check out the news that's odd, funny or just downright weird.
| |
|
|
|
|
|


introduction
Beagle is a simple document management software originally designed to annotate and store scanned newspaper articles but is also useful to manage pictures and other files. Files that are loaded into the software can be annotated with free text and are saved in a database. Beagle has a powerful search mechanism that allows the retrieval of stored documents based on their annotation and file name. Retrieved documents are sorted due to the similarity of their annotation to the entered search terms and are displayed in a document view.
video
The following short video clip shows how to use Beagle. The video requires JavaScript to be enabled and a recent version of Adobe Flash Player.
elements
This section explains the elements of the user interface.
- function tabs: The software has three main function pages that are selected via the function tabs.
- Search & Edit: The search & edit page manages the documents.
- Settings: Basic settings such as language, tool tips and other are handled on this page.
- About The about page displays version and copyright information.
- search bar: To find documents search terms are entered in the search field and the search button starts the search.
- search results: The documents found during a search are displayed in the search results field and are ranked according to the goodness of the match.
- document information: The document number the original file path are displayed in the document information bar.
- annotation field: To edit or extend the annotation of a document enter text in the annotation field.
- document view: Documents that are pictures (BMP, PNG, GIF, JPEG) are displayed in the document view. Other file types are shown as icons. Clicking on a displayed documents opens the registered application for this file type, e.g. a PDF viewer if the document is a PDF file.
- document zoom: Picture documents can be enlarged with the zoom slider.
- functions bar: The function bar contains the basic document functions.
- Add: To add documents to the database press this button. It opens a file selector dialog and copies all selected files into the database.
- Open: The open button starts the application registered for the file type of the currently displayed document and loads the document. Documents can then be edited within their native application.
- Print: The print button sends the currently displayed document to the printer.
- Delete: To remove a document from the database press this button. The button might be disabled (see Settings page)
settings
The settings page contains switches for the basic settings.
- Show tool tips: Toggle the display of tool tips.
- Enable delete: Enable or disable delete button on Search & Edit page
- Ask before delete: Toggle confirmation dialog when deleting documents.
- Language: Choose the language of the user interface. This setting becomes active only after a restart.
about
The about page shows version and copyright information.


Speaking At ML4ALL
Hi there! We’re stoked that you want to be a speaker at our conference.
We welcome you to our stage: both expert level speakers and absolute beginners who have never given a talk before.
Here’s what you can expect as a speaker for ML4ALL:
Step 1: Submit a Proposal
The first step to becoming a speaker for ML4ALL is to submit a proposal for a talk. We accept proposals at any time, via email, but each year we open a Call For Proposals (CFP) and there is a cut off date for the talks we’ll consider for that year’s schedule.
The 2019 CFP has closed.
Please reach out via email with ideas for talks at<EMAIL_ADDRESS>Also, consider signing up to giving a 5min Lightning Talk!
Step 2: Proposal Selected
After the CFP closes, our organizer team uses a two step selection process. The first step involves voting/judging all of the talks by the Program Committee experts. The voting scores create a sorted list of talks. From that, the Agenda Director will select the talks they think will make an interesting schedule (not necessarily the most highly voted talks).
At that point, we will reach out to you, to let you know your talk was accepted, and ask you to confirm that you can still make it to the conference. If you say yes, we’ll move on to the next step.
Once the schedule is filled with confirmed speakers, the Agenda Director will send out notices to everyone whose talk didn’t get selected with an offer for a discounted ticket and invitation to deliver a lightning talk during the conference.
Step 3: Preparing For The Conference
Once you are a confirmed speaker on our schedule there are a number of things we need to do to prepare you for the conference:
Update the Website
We’ll need a square photo, and a link to your preferred online presence (typically Twitter or GitHub account). We’ll add you to the site and place you on the schedule.
Promote Your Talk
Once you’re on the site, we’ll tweet about your talk from our official @ml4all account. We encourage you to follow that account, and to retweet anything related to your talk. It’d also be great if you tweeted about your talk. We’ll RT that if you do. :)
We’ll also send out regular emails to the attendees letting them know about confirmed speakers.
Book Travel
ML4ALL will gladly help you with travel costs if you are a speaker at our conference. We will reimburse up to $1000 for domestic travelers (USA/Canada) and $1500 for international travelers. This flat reimbursement limit applies to both travel and lodging expenses.
Generally, we expect you to book your own travel and lodging, then deliver receipts, so we can reimburse you at the end of the conference. If your funds are particularly tight, on a case-by-case basis we can help you book travel, and cost-effective lodging that is close to the venue.
Step 4: Deliver Your Talk
The next big step is preparing your talk and delivering it at the conference. If you’re a first time speaker, this can be particularly intimidating. We’re glad to help you out and can pair you up with an experienced mentor to work through all the nuances.
Some important things to check:
- Content: Have you reviewed our Code of Conduct? Is the material in your slides appropriate and inclusive?
- Network: Does your talk depend on a network connection? We do our best to ensure WiFi will be available to our speakers and audience, but sometimes these things flake out. It’s best to make your talk as network-independent as possible.
- Display: Do you have the right display ports and adapters on your laptop? Typically our system will be HDMI or VGA. Do you know how to configure an external display (the projector)? Do you need speaker notes on one display but not on the other? Have you tested your software in this configuration?
- Microphone: We’ll have an over-the-ear microphone for you. Are you able to wear that and comfortable speaking into an amplified mic in front of a crowd? Might be helpful to practice at home or at a private karaoke lounge.
- Stage Fright: We find it’s helpful to get up on the stage before you have to deliver the talk so that you’re comfortable in the environment. We can work out a time during a break or when the venue is closed to the public so you can get comfortable up there ahead of time.
- Questions After The Talk: We have found it’s best not to do on-stage Q/A during talks. Please don’t offer to answer questions while you’re still on stage. Instead, we prefer that speakers make themselves available during the break after their talk for 1:1 Q/A, off stage. Typically, our speakers will just hang around near the stage after their talk and audience members will approach you.
Step 5: Publish Your Talk
Great! You’ve given your talk and everyone loved it. Now is the time to upload your slides to the interwebs somewhere so folks can reference them later. You’re welcome to host those in our Github repo, just file a PR! Once they are up there, it’s best to tweet out a link to the slides, and we’ll RT you if you do.
We also record video of all the talk and release those shortly after the conference. The videos are released with title slides and are licensed under Creative Commons. This is a great way to make the content available to a much wider audience and functions as a handy resume of your prior speaking experience. If you don’t want your video published, please let us know as early as possible.


| Invoice No. |<PHONE_NUMBER>169 |
| Date | 19.09.2023 |
| Payment Status | unpaid |
| Customer No. |<PHONE_NUMBER> |
| VAT-ID-No. | DE000000000 |
| Rechnungsadresse | Max Mustermann |
| Mustermannstrasse 10 | |
| Stuttgart | |
| Germany |
| Lieferadresse | Max Mustermann |
| Mustermannstrasse 10 | |
| Stuttgart | |
| Germany |
Position |
Description |
Quantity |
VAT |
Amount (€) |
|---|---|---|---|---|
| 1 | Article 23784628 | 1 | 19% | 12.00 |
| 2 | Article 34895789 | 1 000 | 19% | 11,111.11 |
| 3 | Article 89054373 | 2 | 7% | 1.15 |
| Sub-Total (gross) | 27,689.22 € | |||
| Sub-Total (net) | 23,384.22 € | |||
| + VAT 19% | 4,224.50 € | |||
| + VAT 7% | 80.50 € | |||
| To be paid | 27,689.22 € |
Please transfer the money to the following account:
| Bank | Deutsche Bank AG |
| IBAN | DE60200700000000000000 |
| BIC | DEUTDEXXXXX |
| Purpose |<PHONE_NUMBER>169 |
Terms, terms, terms.
Yours sincerely,
The VCL Team!


See Yourself Winning
It’s the Fire Within
To well explain the truth that the secret behind every single success is a strong purpose, its really interesting to see how Socrates’ gave insight to a young man who approached him to find the key to success. Both Socrates and the young man met at a river and as instructed by the former, they walked into it. When they reached the middle, Socrates ducked the man into the water and kept him submerged for quite some time. After pulling him out, Socrates asked the man: “What did you want the most when your head was underwater?” He replied: “Air”, to which Socrates said: “That is the secret to success. When you want success as badly as you wanted the air, then you will get it. There is no other secret.”
Your Mind is Endless
Besides extreme enthusiasm to attain success, memory power performs a crucial role. Each and every person is aware of the fact that a fantastic memory can make a tremendous difference in their lives; it could even better the opportunities that lie ahead. Michael J Gelb rightly said, “Your brain has a capacity for learning that is virtually limitless, which makes every human a potential genius”.
But, in reality, what happens is that we fail to recognize that no supercomputers in the digital age can match the efficient performance of a wholesome human brain and thus we go on battling with a handicap, just making unreasonable justifications. But, as our minds have an infinite ability, little hard work and persistence can develop this particular faculty to the full.
Hints and Tips
For centuries, bragging about poor memory, man has been trying out several means to keep up an accurate memory. Many methods arose throughout and proved successful. First of all, psychology has attributed three stages to memory: memories are formed through the process of ‘encoding’, held through ‘storage’, and recollected through ‘retrieval’. To prevent memory decay and boost up long-term memory, one is supposed to practice and relearn the traffic of information that floods in the brain after getting through all the above-mentioned stages. Here are some tips and tricks you can implement regularly, to sharpen your recall system.
1. “The force of passion is balanced by the force of interest”, stated Jose Marti. It is absolutely significant for the learners to enrich a keen interest in their subjects of study so as to make the task of memorizing easier.
2. The key points to be engraved in mind are to develop a strong sense of powerful observation and careful selection. One should always possess an eye for detail to capture every essential information and junk the superfluous data.
3. You can recall any novel idea if you associate it with something you are familiar with or you are extremely curious about. You can also use colorful and pleasant images to correlate sections or make ACRONYMS. Group similar concepts.
4. To connect a list of seemingly distinct objects or places, you can weave a simple story.
5. “Good order is the foundation of all things”, said Edmund Burke. Likewise, always be careful enough to learn everything in a well-organized manner.
6. Be coherent with every fact (avoiding tough words), making it as simple as possible because it would lessen your burden while revising the portions just hours before your examination.
7.
8. Never imagine that everything you have learned remains intact in your brain unless you find time to review the portions without delay. Keep in mind to concentrate on areas you find more hard to remember.
9. Steve Brunkhorst said, “The more often you share what you have learned, the stronger that information will become in your memory”. Visualize yourself teaching the material.
10. Never forget that health matters the most; so have healthy food and sound sleep. Basic meditation helps you improve your concentration.
Stick on to the techniques of your choice and make winning a habit, and as Ralph Waldo Emerson has said, “Once you make a decision, the universe conspires to make it happen
By –
Dawn Mariat Mathew
Tags: #corruption, #EvilsOfCorruption, #socialevil, #ECONOMIC EVIL, # POLITICAL EVIL, #notespickup, #notes, #trends
Leave a Suggestion


#KogiDecides: APC sweeps 10 out of 15 announced LGs, Melaye suffers home defeat
by Emmanuel LekeThe All Progressives Congress has taken a massive lead in the governorship and senatorial elections held in Kogi State on Saturday.
The Court of Appeal had ordered a rerun election between Senator Dino Melaye of the Peoples Democratic Party and the candidate of the APC, Senator Smart Adeyemi.
Melaye lost his Local Government Area, Kabba, to the APC by 8,974 votes to 15,037 polled by the PDP.
For the governorship election, the incumbent and candidate of the APC, Yahaya Bello, is in a comfortable lead.
Bello won massively in 10 out of the 15 local government areas announced so far by the Independent National Electoral Commission.
His closest challenger and candidate of the PDP, Musa Wada, has won in five local government areas as at press time.
Yagba West LGA:
APC: 7,868
PDP: 8,860
SDP: 211
Mopa Moro LGA
APC: 4,953
PDP: 3,581
SDP 95
Olamaboro LGA
APC: 16,876
PDP: 8,155
SDP: 262
Idah LGA
APC: 4,602
PDP: 13,962
SDP: 221
Ajaokuta LGA
APC: 17,952
PDP: 5,565
SDP: 323
Okehi LGA
APC: 36,954
PDP: 478
SDP: 3,095
Okene LGA
APC: 112,764
PDP: 139
Adavi LGA
APC: 64,657
PDP: 366
SDP: 279
Igalamela/Odolu LGA
APC: 8,075
PDP: 11,195
SDP: 208
Yagba East LGA
APC: 6,735
PDP: 7,546
Kotor Karfe LGA
APC: 14,097
PDP: 9,404
Kabba Bunu LGA
APC: 15,364
PDP: 8,084
Omala LGA
APC: 8,473
PDP: 14,403
SDP: 567
Ijumu LGA
APC: 11,425
PDP: 7,587
SDP – 223
Ogori-Magongo LGA
PDP: 2,145
APC: 3,679
SDP: 244
For the Senatorial District:
Kabba LGA
APC: 15,037
PDP: 8,974.
Previous Post
Baby Face, Bobby Girl shine at first GOtv Boxing Night Mini
Next Post
Photos as Fayemi attends Fayose’s son’s wedding


--- title: "Coaxing AWS Amplify to play well with Azure DevOps" output: blogdown::html_page: toc: false toc_depth: 1 fig_width: 8 dev: "svg" author: "Houston Haynes" date: '2020-05-11T14:59:43+05:30' featuredpath: img featured: ADO_Amplify_thumb.png ogfeatured: H3_og_wide_ADO_Amplify_thumb.png description: Using a simple Azure DevOps Build Pipeline to feed Amplify for Continuous Integration and Deployment draft: false tags: - AWS - CodeCommit - Amplify - Azure - DevOps - Hugo - Git categories: - Sidebar weight: editor_options: chunk_output_type: inline ---
The client I’m working with operates only in AWS - however - they manage all of their code in Azure DevOps. In building out a rapid prototyping site, I needed a mechanism that was light and fast. It seemed that AWS Amplify fit the bill - at least at first. I have years of experience building machine learning workloads, data stores, micro-services and streaming services in AWS, but Amplify was relatively new to me. I started with integrating against a private GitHub repo (instead of an Azure DevOps repo) as a crutch since it was so easy to configure with Amplify. There was no out-of-the-box ADO integration, so I initially took the path of lesser resistance. I figured that if the web app matured from a proof-of-concept to a fully fledged product, I could just move it over to the company’s Azure Dev Ops instance - update the endpoint and PAT - and that, as they say, would be that.
When it came time to make the move over to a company managed repo, I spent some time looking into how to mirror my Azure DevOps repo into AWS CodeCommit, and let Amplify take things from there. Azure DevOps has a task for handling Git mirroring, so it was a matter of wiring things up and letting a simple build pipeline do the heavy lifting. AWS CodeCommit has an odd wrinkle to it that it doesn’t support generation of a PAT - or personal access token. After some research (mainly by reading open-ended support questions in various forums) I found that using the Git credentials for a service account is a proper substitute. The construction is akin to
$(AccessID:AccessKey)
where the value is stuffed into a variable within the Azure DevOps build task context. The rest of the task setup is pretty garden-variety boilerplate work.
I tried to cheat/short-cut the process by simply using my own AWS Admin (Git) credentials in the ADO Pipeline task, and it failed quite spectacularly. It turned out that the constructor for passing in the PAT would lop off the first part of my my Access ID (my email address) at the “@” symbol. That caused a few minutes of head-scratching, but fortunately the Git Mirror Task in ADO returned a pretty straight-forward error message. So - I did what I should have done to begin with and created an “Amplify” service account with the correct (minimal) permissions and everything worked as expected. But let this be a warning that if you use an account that uses an email address pattern for the AccessID, the script will break.
If you’re accustomed to setting up a highly instrument process per-branch in ADO (or any other build orchestrator) then Git mirroring is going to feel a bit light. But don’t let it fool you. It’s a bit counter-intuitive to set up a single build process (that only points to the repo level - not the branch) to perform the sync for any and all of your branches. But if you think about it - with a disciplined code promotion procedure you’re only acting on one branch at a time. So even if the mirroring process reflexively updates both - only the branch with an active delta will be updated. So on the receiving end the CodeCommit repo will “see” an update only for branches where a change exists. In this case, with each environment (I just have an “int” and “main” branch) CodeCommit picks up the changes and Amplify performs the build and deployment for each branch respectively.
I created this time-compressed video to illustrate a quick walkthrough of how the process operates. It includes a sample push to int and then merge to main - with the respective sync to the CodeCommit and follow-on Amplify deployments per environment. {{% vimeo "435604451" %}}
There are still some wrinkles to iron out - mainly on the Azure DevOps side. It’s a fairly naive` process - in that it “expects” to work every time - and for now I consider that a relatively low risk. However there should be some error/recovery processes instrumented - even if it’s just a notification on an error condition.
Really this sidebar is about two nits: 1. the PAT that’s not a PAT, and 2. a wrinkle in the Access ID name pattern that could cause an error. Otherwise it’s a relatively straight-forward and surprisingly light-weight process. The video is a fairly complete picture of how the mechanism operates, so feel free to watch and pause at the important highlights to see the working model. I really like it, and getting two occasionally antagonistic cloud spheres to play well together is always fun.


Exercise 3: Use the native platform network stack
In this final exercise, we will modify the bookshelf client to use the native platform's networking stack to improve the performance of the network activity and allow us to integrate tighter to the platform. You can either continue from the prior exercise, or use the completed project from the prior exercise if you'd like to start fresh.
To complete the exercise, you will need Visual Studio for Windows or macOS with the Xamarin development tools installed. You will also need either an emulator/simulator or a device to run the exercise on. Please see the setup page if you need help installing the Xamarin development environment.
Techniques for using a native handler
We will modify the iOS and Android projects to use the proper HTTP message handler. There are two ways we could do this:
- We could pass in the platform-specific message handler into the
HttpClient
constructor for iOS and Android. Since we are using a PCL to create the client, we'd have to pass (inject) in the proper implementation from each of our platform head projects. - We can use the IDE switch in iOS and an environment variable in Android to set the default message handler - by default it uses the Mono networking stack, but we can change the default handler supplied to the default
HttpClient
constructor to alter this behavior.
Feel free to experiment with both approaches. The provided instructions use technique #2.
Install a native handler in iOS
Here we will specify the native HTTP handler we would like HttpClient
to use in iOS.
- Open the project properties for BookClient.iOS.
- Go to the iOS Build properties.
- Select the Advanced tab.
- Change the HttpClient implementation to be NSUrlSession (iOS 7+).
- Run the application. The iOS project might now throw an exception because we are using an untrusted/insecure endpoint. This will only happen if you happen to be using iOS9 or later. We could fix this by switching to an HTTPS endpoint, or by adding an ATS exclusion.
- Change the HttpClient implementation to be NSUrlSession (iOS 7+).
- Run the application. The iOS project might now throw an exception because we are using an untrusted/insecure endpoint. This will only happen if you happen to be using iOS9 or later. We could fix this by switching to an HTTPS endpoint, or by adding an ATS exclusion.
Install a native handler in Android
Here we will specify the native HTTP handler we would like HttpClient
to use in Android.
- Open the BookClient.Droid project Properties and switch to the Android Options tab.
- Within the Advanced settings, find the HttpClient implementation drop-down selector.
- Change from Default to AndroidClientHandler.
- Open the BookClient.Droid project Options and switch to the Android Options tab.
- Within the General settings, find the HttpClient implementation drop-down selector.
- Change from Default to AndroidClientHandler.
- Run the application. The Android project should run just as it did before.
App transport security policy in iOS
In this final step, we will add keys into the info.plist for our iOS host application to allow the app to communicate with the book server even though it's not using TLS.
- Using an XML editor, open the info.plist file in the BookClient.iOS project. You can also use the GUI editor, but because this key is new, it may be difficult to add it in as a custom key until support is in the GUI.
- At the end of the XML file, just before the final
</dict>
, add a<key>
forNSAppTransportSecurity
with a child<dict>
section. - Fill it with the following code to setup the exclusion for <xam150.azurewebsites.net>.
...
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>xam150.azurewebsites.net</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
</dict>
</plist>
- Run the application a final time and verify that it is now capable of pulling data for the iOS app.
Exercise summary
We are now using an optimized, platform-specific web client implementation to access our REST based services.
You can view the completed solution in the Exercise 3 > Completed folder of your copy of the cloned or downloaded course materials.


#include <imgreg_manager.h>
Data Fields | |
| int | xosiz |
| int | yosiz |
| int | fx |
| offset from the origin of the reference grid at the decomposition level | |
| int | fy |
| offset from the origin of the reference grid at the decomposition level | |
| int | ox |
| frame size (fsiz) | |
| int | oy |
| frame size (fsiz) | |
| int | sx |
| offset (roff) | |
| int | sy |
| offset (roff) | |
| int | level |
| region size (rsiz) |
|
|
offset from the origin of the reference grid at the decomposition level
|
|
|
offset from the origin of the reference grid at the decomposition level
|
|
|
region size (rsiz)
|
|
|
frame size (fsiz)
|
|
|
frame size (fsiz)
|
|
|
offset (roff)
|
|
|
offset (roff)
|
|
|
|
|
|
|


Why is global modeling important for time series? For starters, the ability to forecast many time series with a single model that is trained on many time series groups was a winning strategy in recent Kaggle M5 Forecasting Competition. In fact, it’s the solution we recommend in our Time Series Course when forecasting many time series as part of a high-performance forecasting system. Why? Because it speeds up forecasting, allowing the data scientist to more rapidly experiment and find good solutions.
In general, there are two methods for forecasting at scale (a slow and accurate method and a fast and good method):
Iterative Forecasting (Slow and Accurate): Best for accuracy but takes much longer than global model (due to for-loop iteration), results in many models (more memory required), and is often needed to be run in parallel to scale to thousands of time series (otherwise it can take days to complete). But, iterative forecasting can yield great results. See Nested Forecasting for our Iterative Forecasting implementation.
Global Modeling (Fast and Good): Best for scalability to thousands of time series. Uses a Panel Data structure. Can scale to 10,000+ time series easily because only a single model is made that generates predictions (forecasts) for all of the time series. Requires feature engineering and parameter tuning to get best performance, which can be challenging for beginners.
Students can struggle with global modeling. To help, I have a few terms to cover that will help you understand how global modeling works (and how it differs from iterative modeling).
The panel data structure is the format used for global modeling. In it’s simplest form, Panel Data is a time series dataset that has more than one series. Each time series is stacked row-wise (on-top) of each other.
Traditional modeling techniques like ARIMA can only be used on one time series at a time. The widely accepted forecasting approach is to iterate through each time series producing a unique model and forecast for each time series identifier. The downside with this approach is that it’s expensive when you have many time series. Think of the number of products in a database. As the number of time series approaches the range of 1000-10,000, the iterative approach becomes unscalable.
Global Models are alternatives to the iterative approach. A Global Model is a single model that forecasts all time series at once. Global Models are highly scalable, which solves the problem of 1-10,000 time series. An example is an XGBoost Model, which can determine relationships for all 1000 time series panels with a single model.
The downside is that an global approach can be less accurate. To improve accuracy, feature engineering and localized model selection by time series identifier become critical to large-scale forecasting success. We recommend learning feature engineering techniques that are proven to get results in our Time Series Forecasting Course.
We’ll cover a short tutorial on global forecasting. The first thing to do is to load the following libraries:
Next, let’s use the walmart_sales_weekly
dataset that comes with timetk
.
data_tbl <- walmart_sales_weekly %>%
select(id, Date, Weekly_Sales) %>%
set_names(c("id", "date", "value"))
data_tbl
#> # A tibble: 1,001 × 3
#> id date value
#> <fct> <date> <dbl>
#> 1 1_1 2010-02-05 24924.
#> 2 1_1 2010-02-12 46039.
#> 3 1_1 2010-02-19 41596.
#> 4 1_1 2010-02-26 19404.
#> 5 1_1 2010-03-05 21828.
#> 6 1_1 2010-03-12 21043.
#> 7 1_1 2010-03-19 22137.
#> 8 1_1 2010-03-26 26229.
#> 9 1_1 2010-04-02 57258.
#> 10 1_1 2010-04-09 42961.
#> # … with 991 more rows
The dataset is that is already set up for panel data modeling. The important columns are:
“id”: This separates the time series groups (in this case these represent sales from departments in a walmart store)
“date”: This is the weekly sales period
“value”: This is the value for sales during the week and store/department
We can visualize this by time series group to expose the differences in sales by department.
data_tbl %>%
group_by(id) %>%
plot_time_series(
date, value, .interactive = F, .facet_ncol = 2
)
We can clearly see that there are 7 time series groups with different weekly sales patterns.
We can split the data into training and testing sets using time_series_split()
. We’ll investigate the last 3-months of the year to test a global model on a 3-month forecast. The message on overlapping dates is to let us know that multiple time series are being processed using the last 3-month window for testing.
splits <- data_tbl %>%
time_series_split(
assess = "3 months",
cumulative = TRUE
)
#> Using date_var: date
#> Data is not ordered by the 'date_var'. Resamples will be arranged by `date`.
#> Overlapping Timestamps Detected. Processing overlapping time series together using sliding windows.
splits
#> <Analysis/Assess/Total>
#> <917/84/1001>
Next, we need to preprocess the data. This is where we add good features to imporve our global model performance. We will use the recipes
workflow for generating time series features.
step_mutate_at()
: Applies a function to one or more columns. Used to remove extra unused levels in our categorical ID column.
step_timeseries_signature()
: Used to add calendar features based on our date column
step_rm()
: Used to remove the date column. Machine Learning algorithms like XGBoost don’t handle date columns very well.
step_zv()
: Used to remove any zero variance features. Features with no variance don’t add useful information to our model.
step_dummy()
: Used to convert categorical features to binary one-hot encoded features that algorithms like XGBoost can model more effectively.
This results in 37 derived features for modeling. We can certainly include more features such as lags and rolling features that are known to improve results. These concepts and more are covered in the High-Performance Time Series Course.
rec_obj <- recipe(value ~ ., training(splits)) %>%
step_mutate_at(id, fn = droplevels) %>%
step_timeseries_signature(date) %>%
step_rm(date) %>%
step_zv(all_predictors()) %>%
step_dummy(all_nominal_predictors(), one_hot = TRUE)
summary(prep(rec_obj))
#> # A tibble: 38 × 4
#> variable type role source
#> <chr> <chr> <chr> <chr>
#> 1 value numeric outcome original
#> 2 date_index.num numeric predictor derived
#> 3 date_year numeric predictor derived
#> 4 date_year.iso numeric predictor derived
#> 5 date_half numeric predictor derived
#> 6 date_quarter numeric predictor derived
#> 7 date_month numeric predictor derived
#> 8 date_month.xts numeric predictor derived
#> 9 date_day numeric predictor derived
#> 10 date_mday numeric predictor derived
#> # … with 28 more rows
We’ll create an xgboost
workflow by fitting the default xgboost model to our derived features from our in-sample training data set.
Training the global xgboost model takes approximately 50 milliseconds.
Conversely, an ARIMA model might take several minutes to iterate through possible parameter combinations for each of the 7 time series.
# Workflow
wflw_xgb <- workflow() %>%
add_model(
boost_tree() %>% set_engine("xgboost")
) %>%
add_recipe(rec_obj) %>%
fit(training(splits))
wflw_xgb
#> ══ Workflow [trained] ══════════════════════════════════════════════════════════
#> Preprocessor: Recipe
#> Model: boost_tree()
#>
#> ── Preprocessor ────────────────────────────────────────────────────────────────
#> 5 Recipe Steps
#>
#> • step_mutate_at()
#> • step_timeseries_signature()
#> • step_rm()
#> • step_zv()
#> • step_dummy()
#>
#> ── Model ───────────────────────────────────────────────────────────────────────
#> ##### xgb.Booster
#> raw: 58.3 Kb
#> call:
#> xgboost::xgb.train(params = list(eta = 0.3, max_depth = 6, gamma = 0,
#> colsample_bytree = 1, colsample_bynode = 1, min_child_weight = 1,
#> subsample = 1, objective = "reg:squarederror"), data = x$data,
#> nrounds = 15, watchlist = x$watchlist, verbose = 0, nthread = 1)
#> params (as set within xgb.train):
#> eta = "0.3", max_depth = "6", gamma = "0", colsample_bytree = "1", colsample_bynode = "1", min_child_weight = "1", subsample = "1", objective = "reg:squarederror", nthread = "1", validate_parameters = "TRUE"
#> xgb.attributes:
#> niter
#> callbacks:
#> cb.evaluation.log()
#> # of features: 37
#> niter: 15
#> nfeatures : 37
#> evaluation_log:
#> iter training_rmse
#> 1 46315.141
#> 2 33001.734
#> ---
#> 14 3676.542
#> 15 3373.945
We’ll step through the modeltime workflow, which is used to test many different models on the time series and organize the entire process.
The first step is to create a Modeltime Table with modeltime_table()
.
model_tbl <- modeltime_table(
wflw_xgb
)
model_tbl
#> # Modeltime Table
#> # A tibble: 1 × 3
#> .model_id .model .model_desc
#> <int> <list> <chr>
#> 1 1 <workflow> XGBOOST
Next, we need to calibrate, which calculates the forecast error on our test set. Use modeltime_calibrate()
to perform calibration. Note that when we add the id
, we are able to track the the out-of-sample residual error by the “id” column.
calib_tbl <- model_tbl %>%
modeltime_calibrate(
new_data = testing(splits),
id = "id"
)
calib_tbl
#> # Modeltime Table
#> # A tibble: 1 × 5
#> .model_id .model .model_desc .type .calibration_data
#> <int> <list> <chr> <chr> <list>
#> 1 1 <workflow> XGBOOST Test <tibble [84 × 5]>
Next, we measure the global and local accuracy on the global model.
The default is modeltime_accuracy(acc_by_id = FALSE)
, which returns a global model accuracy.
calib_tbl %>%
modeltime_accuracy(acc_by_id = FALSE) %>%
table_modeltime_accuracy(.interactive = FALSE)
| Accuracy Table | ||||||||
|---|---|---|---|---|---|---|---|---|
| .model_id | .model_desc | .type | mae | mape | mase | smape | rmse | rsq |
| 1 | XGBOOST | Test | 3254.56 | 7.19 | 0.1 | 7 | 4574.52 | 0.98 |
By toggling modeltime_accuracy(acc_by_id = TRUE)
, we can obtain the local model accuracy. This can be useful for identifying specifically which time series the model does well on (and which it does poorly on). We can then apply model selection logic to select specific global models for specific IDs.
calib_tbl %>%
modeltime_accuracy(acc_by_id = TRUE) %>%
table_modeltime_accuracy(.interactive = FALSE)
| Accuracy Table | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| .model_id | .model_desc | .type | id | mae | mape | mase | smape | rmse | rsq |
| 1 | XGBOOST | Test | 1_1 | 1138.25 | 6.19 | 0.85 | 5.93 | 1454.25 | 0.95 |
| 1 | XGBOOST | Test | 1_3 | 3403.81 | 18.47 | 0.57 | 16.96 | 4209.29 | 0.91 |
| 1 | XGBOOST | Test | 1_8 | 1891.35 | 4.93 | 0.86 | 5.07 | 2157.43 | 0.55 |
| 1 | XGBOOST | Test | 1_13 | 1201.11 | 2.92 | 0.53 | 2.97 | 1461.49 | 0.60 |
| 1 | XGBOOST | Test | 1_38 | 8036.27 | 10.52 | 0.99 | 10.64 | 8955.32 | 0.02 |
| 1 | XGBOOST | Test | 1_93 | 3493.69 | 4.50 | 0.34 | 4.64 | 4706.68 | 0.78 |
| 1 | XGBOOST | Test | 1_95 | 3617.45 | 2.83 | 0.46 | 2.83 | 4184.46 | 0.72 |
Next, we need to forecast the test dataset. This is useful to evaluate the model using a sampling of the time series within the panel dataset. We use modeltime_forecast(conf_by_id = TRUE)
to allow the confidence intervals (prediction intervals) to be calculated by time series identifier. Note, that the modeltime_calibrate()
must have been performed with an id
specified.
calib_tbl %>%
modeltime_forecast(
new_data = testing(splits),
actual_data = data_tbl,
conf_by_id = TRUE
) %>%
group_by(id) %>%
plot_modeltime_forecast(
.facet_ncol = 3,
.interactive = FALSE
)
We see that our global model performs well on this dataset. Now, we will forecast the future.
The refitting step is needed to incorporate the most recent information into our models. We use modeltime_refit()
to update the model(s) in our modeltime tables.
refit_tbl <- calib_tbl %>%
modeltime_refit(data = data_tbl)
refit_tbl
#> # Modeltime Table
#> # A tibble: 1 × 5
#> .model_id .model .model_desc .type .calibration_data
#> <int> <list> <chr> <chr> <list>
#> 1 1 <workflow> XGBOOST Test <tibble [84 × 5]>
Next, make a future dataset using future_frame()
from timetk
, which creates future time stamps that extend 52-weeks into the future for each ID in the same panel structure needed for our global forecast model.
future_tbl <- data_tbl %>%
group_by(id) %>%
future_frame(.length_out = 52, .bind_data = FALSE)
future_tbl
#> # A tibble: 364 × 2
#> # Groups: id [7]
#> id date
#> <fct> <date>
#> 1 1_1 2012-11-02
#> 2 1_1 2012-11-09
#> 3 1_1 2012-11-16
#> 4 1_1 2012-11-23
#> 5 1_1 2012-11-30
#> 6 1_1 2012-12-07
#> 7 1_1 2012-12-14
#> 8 1_1 2012-12-21
#> 9 1_1 2012-12-28
#> 10 1_1 2013-01-04
#> # … with 354 more rows
Finally, we can forecast the future using our future data.
refit_tbl %>%
modeltime_forecast(
new_data = future_tbl,
actual_data = data_tbl,
conf_by_id = TRUE
) %>%
group_by(id) %>%
plot_modeltime_forecast(
.interactive = F,
.facet_ncol = 2
)
We’ve now successfully completed a Global Forecast. You may find this challenging, especially if you are not familiar with the Modeltime Workflow, terminology, or tidymodeling in R. If this is the case, we have a solution. Take our high-performance forecasting course.
Become the forecasting expert for your organization
High-Performance Time Series Course
Time series is changing. Businesses now need 10,000+ time series forecasts every day. This is what I call a High-Performance Time Series Forecasting System (HPTSF) - Accurate, Robust, and Scalable Forecasting.
High-Performance Forecasting Systems will save companies by improving accuracy and scalability. Imagine what will happen to your career if you can provide your organization a “High-Performance Time Series Forecasting System” (HPTSF System).
I teach how to build a HPTFS System in my High-Performance Time Series Forecasting Course. You will learn:
Modeltime
- 30+ Models (Prophet, ARIMA, XGBoost, Random Forest, & many more)GluonTS
(Competition Winners)Become the Time Series Expert for your organization.


Identified Modules
Identified modules are modules that are installed and identifiable to the QML engine by a URI in the form of a dotted identifier string, which should be specified by the module in its qmldir
file. This enables such modules to be imported with a unique identifier that remains the same no matter where the module is located on the local file system.
When importing an identified module, an unquoted identifier is used, with a mandatory version number:
import QtQuick 2.0 import com.nokia.qml.mymodule 1.0
Identified modules must be installed into the import path in order to be found by the QML engine.
Locally Installed Identified Modules
A directory of QML and/or C++ files can be shared as an identified module if it contains a qmldir file with the module metadata and is installed into the QML import path. Any QML file on the local file system can import this directory as a module by using an import statement that refers to the module's URI, enabling the file to use the QML object types and JavaScript resources defined by the module.
The module's qmldir
file must reside in a directory structure within the import path that reflects the URI dotted identifier string, where each dot (".") in the identifier reflects a sub-level in the directory tree. For example, the qmldir
file of the module com.mycompany.mymodule
must be located in the sub-path com/mycompany/mymodule/qmldir
somewhere in the import path.
It is possible to store different versions of a module in subdirectories of its own. For example, a version 2.1 of a module could be located under com/mycompany/mymodule.2/qmldir
or com/mycompany/mymodule.2.1/qmldir
. The engine will automatically load the module which matches best.
Alternatively, versioning for different types can be defined within a qmldir file itself, however this can make updating such a module more difficult (as a qmldir
file merge must take place as part of the update procedure).
An Example
Consider the following QML project directory structure. Under the top level directory myapp
, there are a set of common UI components in a sub-directory named mycomponents
, and the main application code in a sub-directory named main
, like this:
myapp |- mycomponents |- CheckBox.qml |- DialogBox.qml |- Slider.qml |- main |- application.qml
To make the mycomponents
directory available as an identified module, the directory must include a qmldir file that defines the module identifier, and describes the object types made available by the module. For example, to make the CheckBox
, DialogBox
and Slider
types available for version 1.0 of the module, the qmldir
file would contain the following:
module myapp.mycomponents CheckBox 1.0 CheckBox.qml DialogBox 1.0 DialogBox.qml Slider 1.0 Slider.qml
Additionally, the location of the qmldir
file in the import path must match the module's dotted identifier string. So, say the top level myapp
directory is located in C:\qml\projects
, and say the module should be identified as "myapp.mycomponents". In this case:
- The path
C:\qml\projects
should be added to the import path - The qmldir file should be located under
C:\qml\projects\myapp\mycomponents\qmldir
Once this is done, a QML file located anywhere on the local filesystem can import the module by referring to its URI and the appropriate version:
import myapp.mycomponents 1.0 DialogBox { CheckBox { // ... } Slider { // ... } }
Remotely Installed Identified Modules
Identified modules are also accessible as a network resource. In the previous example, if the C:\qml\projects
directory was hosted as http://www.some-server.com/qml/projects
and this URL was added to the QML import path, the module could be imported in exactly the same way.
Note that when a file imports a module over a network, it can only access QML and JavaScript resources provided by the module; it cannot access any types defined by C++ plugins in the module.
Semantics of Identified Modules
An identified module is provided with the following guarantees by the QML engine:
- other modules are unable to modify or override types in the module's namespace
- other modules are unable to register new types into the module's namespace
- usage of type names by clients will resolve deterministically to a given type definition depending on the versioning specified and the import order
This ensures that clients which use the module can be certain that the object types defined in the module will behave as the module author documented.
An identified module has several restrictions upon it:
- an identified module must be installed into the QML import path
- the module identifier specified in the module identifier directive must match the install path of the module (relative to the QML import path, where directory separators are replaced with period characters)
- the module must register its types into the module identifier type namespace
- the module may not register types into any other module's namespace
- clients must specify a version when importing the module
For example, if an identified module is installed into $QML2_IMPORT_PATH/ExampleModule
, the module identifier directive must be:
module ExampleModule
If the strict module is installed into $QML2_IMPORT_PATH/com/example/CustomUi
, the module identifier directive must be:
module com.example.CustomUi
Clients will then be able to import the above module with the following import statement (assuming that the module registers types into version 1.0 of its namespace):
import com.example.CustomUi 1.0


As an object oriented programming language, Ruby uses something called classes to organize a group of objects that share certain attributes or methods.
Let's take one of my favorite TV shows as an example. If I wanted to write a program that stored data about some characters on futurama, I would start by creating a Futurama class.
The class declaration always starts with the keyword "class" followed by whatever name you assign to the class. Note that unlike variables, which start with lowercase, class names always start with an uppercase letter. The class closes much like you would expect with an "end" statement.
Now that we have created our class lets create and object of the class. When you create an object of a given class, that object is said to have been instantiated, or is now an instance of that class.
So now we have an object "character" which is an instance of the Futurama class, but it doesn't have any properties or methods yet. Let's say I wanted my Futurama class to store some data about some of the characters in the show. Let's start with some basics like name, species, and job description.
We've created a method called set_name which takes a string as an argument and then returns a string telling us that we have successfully created a character named Fry. Notice that much like pre-set methods in ruby, we call the method outside the class using dot notation and pass in the argument Fry as a string. We can follow similar protocols to add a couple more methods.
The first method in this code will run just fine, but something is not quite right about the set_species and the set_job methods. Specifically, Ruby tells me there is an undefined local variable in the method set_species. And Ruby is right; trying to use the local variable name outside the set_name method is just not possible using our current scope.
Lucky for us, this is an easy fix. In much the same way that we created instance objects of the Futurama class, we can also create instance variables using @ notation. It looks like this.
By assigning the local variable name to the instance variable @name we now have access to the instance variable @name throughout the Futurama class, not just in the set_name method. Now when we call each method outside the class, our output does exactly what we want it to
We could continue creating objects and adding new characters to our show, but the code would look remarkably similar. In fact, we might start to find that there would be an even easier way to manipulate all this data using an initialize method among other things outside the scope of this blog post.
While this quick tutorial shows the basics of using classes, instantiating objects, and instance variables to manipulate data, it hardly shows the power of class in Ruby. Once you master these basics and get comfortable using classes to encapsulate and manipulate data in no time.
Coming Soon!