| Documentation Contents |
extcheck detects version conflicts between a target jar file and currently installed extension jar files.
extcheck [ -verbose ] targetfile.jar
The extcheck utility checks a specified Jar file for title and version conflicts with any extensions installed in the JavaTM SDK. Before installing an extension, you can use this utility to see if the same or a more recent version of the extension is already installed.
The extcheck utility compares the
Specification-title
andSpecification-version
headers in the manifest of thetargetfile.jar
file against the corresponding headers in all Jar files currently installed in the extension directory. (The extension directory is jre/lib/ext by default.) The extcheck utility compares version numbers in the same way as the method java.lang.Package.isCompatibleWith.If no conflict is detected, the return code is 0.
If the manifest of any jar file in the extensions directory has the same
Specification-title
and the same or a newerSpecification-version
number, a non-zero error code is returned. A non-zero error code is also returned iftargetfile.jar
does not have theSpecification-title
orSpecification-version
attributes in its manifest.
- -verbose
- Lists Jar files in the extension directory as they are checked. Additionally, manifest attributes of the target jar file and any conflicting jar files are also reported.
- -Joption
- Pass option to the Java virtual machine, where option is one of the options described on the reference page for the java application launcher. For example, -J-Xms48m sets the startup memory to 48 megabytes.
Copyright © 1993, 2011, Oracle and/or its affiliates. All rights reserved. Please send comments using this Feedback page. |
Java Technology |


If we are feeling stressed and overwhelmed by the circumstances of our own lives, it sometimes helps to look outside ourselves to the needs of others. That seems counterintuitive. If our resources are scarce and our lives frazzled, shouldn’t we stay focused on solving our own problems? Isn’t it true that “God helps those who help themselves”? Actually, that phrase is nowhere to be found in the Bible. Instead, Scripture offers us a different prescription.
Read Philippians 2:3-4. Write verse 4 below:
This is a remedy best applied to our own wounds, not to others. When someone is struggling or in pain, a listening ear is almost always the best help we can offer. But if we apply this medicine to our own hurts, it often turns out that our example of caring for the needs of others, even when our needs are great, can inspire those who are watching to do the same. That was certainly true in Ruth’s case. Her goodness and hard work were noticed and rewarded.
First, Boaz, the owner of the fields in which Ruth worked each day, noticed her determination. He perceived that Ruth was a remarkable young woman. He saw that she wasn’t wallowing in self-pity or waiting for someone to take care of her problems for her. And her take-charge attitude inspired Boaz to help her succeed.
Reread Ruth 2:5-16. List the things that Boaz does for Ruth out of kindness.
|
1. |
|
|
2. |
|
|
3. |
|
|
4. |
|
|
5. |
Why does he tell her he is doing these things (vv. 11-12)?
When Ruth returned home with an amount of barley that was obviously more than she could have gathered under normal circumstances, Naomi knew something was up. Ruth obviously had help.


Tesla Demo Fail: ‘Transparent Metal’ Armored Glass Smashed During Cybertruck Reveal
by John KoetsierHave you ever heard a major public company CEO say OMFG on-stage?You have now.
Tesla’s futuristic new Cybertruck has armored glass windows that founder Elon Musk referred to as “transparent metal” during tonight’s reveal. Unfortunately, it’s not as tough as Musk thought it would be, and the vehicle’s glass was smashed after being hit with a large steel ball bearing during a demo.
Which meant that Musk had to do the rest of the Cybertruck reveal with a damaged truck behind him.
“It didn’t go through. That’s the plus side,” said Musk after Tesla chief designer Franz von Holzhausen smashed the windows.
And after he collected himself from his original profane outburst.
Tesla is not really a middle-America brand. Not the kind of America that drives pickup trucks, rolls coal, and head down to the creek with the boys to catch fish.
So Tesla is emphasizing how tough the truck is.
Musk initially suggested that they shoot the truck – probably jokingly – but fortunately cooler heads must have prevailed on that front.
Then the Cybertruck successfully withstood several hits from a sledgehammer that dented an ordinary truck’s door. And in a glass-strength demo, a pane of the same glass that is in Cybertruck withstood multiple hits from large metal ball bearings dropped on it from up to 15 feet.
“If you want a truck that’s really tough ... not fake tough,” Musk said, suggesting that people who want a serious truck will need to buy Tesla’s pickup truck.
But hitting the actual window with the ball bearing didn’t go quite as Musk hoped.
The front and rear driver’s side windows smashed on successive blows from a ball bearing, leaving the truck scarred for the rest of the evening.
On the positive side, most vehicles would have been damaged by the sledgehammer blows, and most windows would have been completely shattered. Cybertruck’s windows were smashed, but maintained structural integrity.
Ultimately, Musk and Tesla made their point: Cybertruck is tough and capable.
Even if they lost a few style points in the process.
Tesla’s Cybertruck comes in three models ranging from a single motor rear-wheel drive $40,000 model to a triple-motor all-wheel drive $70,000 version ... plus an additional $7,000 for self-driving technology.
Pre-orders are open now, and initial purchasers can reserve their truck for just a $100 deposit. They can start to expect to receive their vehicles “as production nears in late 2021.”


--- title: Responsive Web Design is Solid Gold excerpt: '
Brilliant follow-up article by @grigs: Responsive Web Design is Solid Gold. Default approach is now #RWD. At a minimum, you need parts of #RWD in any solution.
' date: '2013-08-22 14:36:19 +0200' date_gmt: '2013-08-22 12:36:19 +0200' categories: - Webdev ---Brilliant follow-up article by @grigs: Responsive Web Design is Solid Gold. Default approach is now #RWD. At a minimum, you need parts of #RWD in any solution.


§54-67 Service of process; claims. Except as otherwise provided by the county charter, section 54-31 shall apply. [L 1949, c 86, §18; RL 1955, §146-116; HRS §54-67; am L 1973, c 134, §4]
Rules of Court
Service upon agency of county, HRCP rule 4(d)(7).


Advisor
Lovett '20 | CHBE | Lincoln, MA
If you’re reading this, then you are soon to be graced by the presence of the wonderful Claire Telfer!
Claire, a junior originally from Lincoln, Massachusetts (near Boston), is an extraordinarily kind and
attentive human being, a great listener, and she is quick to provide love and support. Musically inclined,
Claire will serenade you with a variety of songs on her trumpet and then teach you inspirational quotes
in German (fluency courtesy of her several summers spent in Germany and Austria!). When she’s not
busy studying Chemical Engineering, Claire can be found relaxing in her luscious bean bag, painting
with watercolors, cross country skiing, or rock climbing! She is adventurous and brave (shoutout to her
time as a walk-on on the men’s lacrosse team) and is one of the warmest, sweetest people out there. You
couldn’t have landed a better Advisor than Claire.
- Sarah Lasater (Lovett '20)
Advisor
Lovett '20 | COMP | Portland, OR
import Makobo
#a fun, caring, Junior Computer Science major from Portland, Oregon.
if board_games = ‘your_thing’:
then Mak = ‘your_guy’
for every_advisor in Lovett:
#they’ll have at least one story of how Mak did something that was just so…Mak…
#Like the time Mak wrote “Floor 1.5” with a sharpie on the stairs in between floors 1 and 2.
#That said, Mak is a Menger Sponge of curiosity and knowledge, and his quirkiness will
#surely leave an im
print ‘on you.’
#a crispy flame of energy that’s always on the Pokémon Go, Mak is always down to run, play
#soccer, or hang out with his friends. Mak will travel anywhere Near and Far for the people he
#cares about, which turns out to be pretty much everyone.
while others_may_take_time_to = ‘idk...sleep’:
Mak = ‘always looking for the next puzzle to solve, the next student to help with HW.’
#and the next friend to hang out with. You will never get board of his games.’
#Trust me, Makobo (aka Ma’Robo) will Sm4sh any expectations that you have for him. He’s
#a humble guy that never beats his half-Japanese chess (or Shogi). You will not be Sorry!
#as you take a Ticket to Ride Around the World in 6310 Days. When you
return ‘you’ll definitely be glad you came.’
- Alex Young (Lovett '17)
Co-Advisor
Wiess '19 | COMP, BUSI | Weslaco, TX
Hailing from the Valley or what he affectionately calls “North Mexico”, Marcos De La Garza is full of quirks that make him a truly
unique and wonderful person. From being fashionably late 100% of the time (otherwise known as Marcos Standard Time) to saying
“ahh” after his own jokes (it’s a Valley thing), this senior from Wiess College is someone you will instantly take a liking to because of just
how friendly (read: flirty) he is to everyone he meets. Majoring in Computer Science and minoring in Business, Marcos has a variety of
different interests, including but not limited to: philosophical discussions, computer sciency nerd stuff, and random deep talks at 3am.
Despite snoozing through all of his alarms in the morning, Marcos is an incredibly hard working, genuine, and dedicated person, who
gives his best to everything he does (especially to his O-Week groups!). The combination of all these amazing traits makes Marcos so
special and you could not have asked for a better Co-Advisor, friend, and mentor at Rice
- Mike Dai and Megha Sheth (Wiess '19)
Diversity Facilitator
Duncan '21 | PSYCH | Norwalk, CT
Honestly, there’s so much to say about this Diversity Facilitator from Duncan (‘21). Coming all the way from Norwalk, Connecticut,
Lindsay lives and breathes Vine references (if you ever go driving with her, there’s a 100% chance she’ll say “Road work ahead. Uh,
yeah, I sure hope it does.”) This Psychology major has a slightly unreasonable hatred towards bananas and is averse to all vegetables and
fruits in general, but you’ll get used to her interesting food choices over time. If you ever want to go cloud watching in the Engineering
Quad, have a spontaneous dance party, see someone flawlessly rap the entirety of Childish Gambino’s “IV. Sweatpants”, or bike to Rice
Village late at night to grab froyo, then Lindsay’s your girl! Seriously though, get pumped to meet this ultimate mom friend in August
- she is guaranteed to make your day 10x better even when she’s feeling stressed herself. You truly have one of the funniest, kindest
people on Rice’s campus to help you through your first year of college, and to remain as a source of hilarious stories and entertainment
for the rest of your time here at Rice.
- Varsha Veer and Jiatian Qu (Duncan '21)
Advisor
Lovett '19 | HIST, VADA, PLST | Houston, TX
Hannah Tyler is a marvelous, intelligent, and incredibly kind human being. Hannah is a great listener
and is very approachable. A native Houstonian, she knows all the best places to eat and how to give a
warm Texas welcome. The moment we met as roommates, I felt a sense of comfort and ease. You can
catch her on the stage in her signature comic roles with the Rice Theatre Department. And here at
Lovett, she lends her talents and resources as the Theatre Coordinator. You can also strike up a riveting
conversation about her senior history thesis on Berlin. Or heck, switch to German completely as Hannah
spends her summers back home in Austria and is fluent in the language. She also studied abroad in
Vienna this past Spring and has lots of great stories to tell. Right when you think two humanities majors
(Visual and Dramatic Arts plus History) is enough, you’ll find out Hannah is also pursuing the Politics,
Law, and Social Thought (PLST) minor. Outside class, Hannah is an active Lovetteer. Even as a rising
senior, she is always meeting people from different years and is very excited to meet the New Students.
No matter if she’s your Advisor or not, I highly recommend you get to know this lovely person!
- Molly Turner (Lovett '19)


Monkey Patching Considered Harmless (When Done Right)
24 Jul 2014Monkey patching is universally considered a bad practice. Many people avoid having anything to do with it (and with projects that use it, like gevent), without considering if the actual reasons for avoiding it apply to their case. So what are these reasons? I think the important ones are:
The patched code works very differently from the unpatched, breaking assumptions the rest of the code has about it.
Monkey patches making assumptions about the code they patch that are implementation detail and change between versions
(Aside: Most nontrivial errors are about programmer coding wrong assumptions. These can be low level assumptions about how the code behaves or higher level assumptions about the domain that is being modeled.)
Monkey patching is too general so it's easy to slip into one of these. Note that the same applies about things like inheritance (vs composition). You can avoid these problems with monkey patching if you:
Write code to monkey patch functions or methods as decorators. Make that decorator general, i.e. assume as little about the modified code as possible.
It is the second sentence that takes care of the problems above, but it is the decorators that make it possible to write such code (this is not strictly true, any higher order function will do, but decorators provide a nice convention with syntax sugar as an added bonus). We can apply Python decorators on existing functions and methods to permanently modify their behavior. Let's see how it's done concretely.
Decorators
If you haven't actually created decorators, you may think about them as magic syntax sugar and not realize what decorators are actually designed to do is to be functions that take another function as an argument and modify it's behavior. However, decorators are usually applied at the moment of defining the function they apply to, this is when their special syntax is designed to be used:
@decorator
def func(arg1, arg2):
pass
Without the syntax sugar, the way to do the same would be (note you can do this also in e.g. Javascript, so this style of monkey patching is available to you in other dynamic languages besides Python):
def func(arg1, arg2):
pass
func = decorator(func)
If the last line is separate from the function declaration, and the function wasn't specifically written to be decorated, you will effectively do monkey patching. Some decorators (e.g. doing logging) don't make any assumptions about the functions they decorate, and the decorated functions could be used without any decorator. Others (like bottlepy's routing decorators or memoize
that you'll see bellow) make only a few assumptions.
If you do monkey patching with decorators, you avoid the problems with them, because decorators are written to modify the function's behavior in an orthogonal way. Let's see a specific real-world example.
High volume HTTP requests and DNS resolution
A common gotcha when writing a crawler is that the bottleneck you will likely hit first is the DNS resolution. I also hit this problem when prototyping https://t1mr.com (pronounced 'timer', a website availability tool whose basic function is to make an http request to your site every minute and notify you if it's down). It is weird to diagnose because, depending on your DNS infrastructure, you can get various failures:
- your home / office router may crash
- the DNS infrastructure of your hosting provider may start to return random errors for some of the requests - some timeouts, some other failures (I experienced this with both Hetzner and Amazon EC2)
- Google's Public DNS service would actually behave quite nicely by servicing all your requests, although rate limiting them to 10 resolutions per second.
I eventually settled to use Google's DNS because it's solid and predictable. But I wanted to make the basic service for t1mr free, so it had to be cheap to run and scale well on a single machine. 10 req/second are just 600 per minute, and I really wanted to saturate the network link.
Normally one would set up a DNS cache on his server and use that. I didn't quite get this to work (perhaps I exhausted the cache), but I didn't really try because I wanted maximum control over when and how the domain names are resolved. So how can you implement such a cache in the application?
DNS resolutions are normally handled by the OS. When you open a socket to a remote server specified by name, the OS blocks that system call and resolves it (unless it is already cached). Resolution can take 100s of milliseconds, that's why high level frameworks that allow non-blocking code (Python with gevent or node.js) has their own way of doing it (they both use c-ares or blocking OS syscalls in threadpools depending on configuration).
You can modify the http call to use an IP address and set the Host header appropriately. This works, although you have to do it yourself because http libraries typically lack support for it. But in t1mr.com I want to provide checking other types of services besides http, say ICMP ping or SMTP check. The other protocols lack the option to use an IP and specify the domain name separately.
What I did instead was monkey-patch getaddrinfo
(the function that resolves domain names) with a memoization decorator. Here is a generic memoizer:
def memoize(f):
global cache
cache= {}
def memf(*x):
if x not in cache:
cache[x] = f(*x)
return cache[x]
return memf
It is very general and can be used with pretty much any function, like:
@memoize
def fib(n):
if n<2:
return 1
else:
return fib(n-1)+fib(n-2)
In our case, it is good enough for prototyping. Here is how to monkey-patch socket.getaddrinfo
with it:
import socket
socket.getaddrinfo = memoize(socket.getaddrinfo)
In production we use gevent for efficient networking and a different decorator (that behaves mostly like a cache with expiration). Any networking code will now use under the hood our modified getaddrinfo
, resolve the domain name only the first time and use a cached value from now on (until the memoizer decides it is time to refresh).
This might seem like an isolated example where it's a good idea to patch lower level function, but it's not.
Layered abstractions
Basically all computing is built on layers upon layers of abstractions. It is considered a good idea to implement a layer relying only upon the layer bellow, and it is. Networks are probably the canonical example. One of the actual limits of this model is that you have to expose the low level abstractions to the high level for tweaking. If you don't have a mechanism to do this, low level abstractions often leak in a way that is not fixable from the high level code. Monkey patching the lower levels is not a panacea, but it can help here.
Conclusion
Monkey patching is seen as an ugly kludge, but is still used quite a lot because people lack better ways to accomplish their goals using the abstractions available in their language. One way to do safe and useful monkey patching is to write the monkey patch as a decorator, making very few assumptions about the function being decorated, and get a nice orthogonal abstraction in this way.


When the vm starts, it starts executing code at 0x00000000
| Address | Size | Description |
|---|---|---|
| 0x00000000 | 0x00100000 | RAM |
| 0xF0000000 | 0x0003E800 | VGA buffer |
| 0xF1000000 | 0x000007D0 | Text video buffer |
| 0xF2000000 | 0x00000010 | video card control registers |
| 0xF3000000 | 0x00000002 | keyboard control registers |
A total of 16 32bit registers including 14 general purpose registers (r0-r13), a stack pointer (r14) and an instruction pointer (r15). There is also a Flags register that is not directly accessible. The format of the Flags register is:
| Z (zero) | c (carry) | i (ints enabled) | e (exception) |
|---|
No floating points nor signed integers. Only the "CMP" instruction modifies Z and C flags The assembler recognizes the format: {label:} mnemonic{.condition} {operand1}{,operand2}. Each instruction is (very inneficiently) encoded on 64bit:
| Bits | Description |
|---|---|
| 0-7 | instruction |
| 8-12 | operand1 register if applicable |
| 13-17 | operand2 register if applicable |
| 18-21 | condition |
| 22-31 | reserved |
| 32-64 | 32bit int for op1 or op2 if applicable |
Every instruction have the ability to be conditionally executed with the following suffixes
| Opcode | Mnemonic | Description |
|---|
| Opcode | Mnemonic | Description |
|---|
| Number | Description |
|---|---|
| 0 | Breakpoint |
| 1 | Undefined instruction |
| 2 | Invalid operands |
| 3 | Divide by zero |
| 4 | Illegal memory access |
At the end of an instruction, and after r15 has been updated, the CPU checks if a device has any pending IRQ if and only if the "i" flag is set. if an IRQ is pending, the CPU will check if a handler was registered for that IRQ with the "ireg" instruction. If a handler is found, the following occurs:
A handler should return using the "iret" instruction. The iret instruction restore the general register bank and pop the flags out of the stack
to switch video mode, write a 8bit value to 0xF2000000. A value of 0 will switch to vga mode 320x200 (the default) and a value of 1 will switch to 80x25 text mode.
The keyboard will trigger an IRQ #1 when a key is pressed. So a consumer must register a handler with the "ireg" instruction to receive those interrupts and the "i" flag must be set using the "sti" instruction. Once the consumer is ready to process the event, the key can be read from address 1 of the keyboard control memory. After a key is read from the buffer, the buffer will be updated with the new key if any. Failure to at address 1 will make the keyboard driver continue to raise IRQ 1 continuously.


KUTE.js was developed with best practices in mind for fastest code execution and memory efficiency, but performance varies from case to case, as well as for all the other Javascript based animation engines. As a quick note on how it works, well for the most part values are cached for the entire duration of the animation so that the repetitive tasks run smoothly, uninterruptible and avoid layout thrashing. We all know the more properties used or the more elements to animate at the same time, the more power is required.
Of course some would argue on many aspects, but we all trade something for the sake of something else, such as convenience and/or flexibility or fork a project that's already great to make it.. better. For the sake of performance or simply willing to provide a feature, some trade/neglect other elements such as syncronisation (check this video), code simplicity (lots of CSS for a custom animation) and more other.
To learn more about how performance can vary from case to case, check out this section, it's very informative.
KUTE.js already packs quite alot of features, and that is thanks to its flexible nature that allows you to easily extend to your heart's desire. Whether you like to extend with CSS properties, easing functions, HTML presentation attributes or anything that Javascript can touch, even if it's not possible with CSS transitions or other Javascript libraries, KUTE.js makes it super easy.
For instance if you want to be able to animate the filter
property, you only need three functions: one for preparing the property values needed for tween object build-up, a second function
to read current value and the last one for the DOM update callback, everything else is nicely taken care of. KUTE.js also provides very useful utilities for processing strings, HEX/RGBA colors and other
tools you can use for your own plugin's processing.
You may want to head over to the extend page for an indepth guide on how to write your own plugin/extension.
KUTE.js uses a simple function to determine the vendor prefix and checks if the prefix is required. In any case it caches the prefixed/unprefixed property name in a variable to make it available when needed.
This applies to the following CSS3 properties: transform
, perspective
, perspective-origin
, border-radius
and the requestAnimationFrame
Javascript method.
We aren't only targeting properly browsers for CSS3 styling, but also increase performance because we don't need to update the styling on every frame for all browsers (and their versions) at once, just the right and only one; less string concatenation = more performance. This asumes you are NOT styling the above CSS3 properties using your stylesheets to avoid glitches with legacy browsers.
This feature is useful mostly for Safari, older Firefox and Opera versions and Internet Explorer 9.
KUTE.js covers all modern browsers but also provides fallback options for legacy browsers. The prefix free feature mentioned above is one way to enable smooth Javascript
based animations on older versions Gecko/Webkit/IE browsers for transform
and border-radius
. Generally, KUTE.js is built around most used properties, so I highly recommend checking
the can I use website for a very detailed properties support list on many browsers and versions. For instance, some legacy browsers may support
2D transforms or 3D transforms so make sure you know what browsers support and
how to target them before you get to work with a complete browser supported animation setup.
I've put a lot of work in making KUTE.js work with all Internet Explorer versions starting with IE8 (compatibility mode OFF) and it really works with the help of
polyfills and the appropriate code to detect them. All you need to do is to let the browser breathe, espectially IE8 needs to have resize handlers as minimal
as possible. On the other side, IE9 really shines with 2D transforms animation, something that's impossible with CSS transition
.
Speaking of polyfills, KUTE.js no longer requires window.requestAnimationFrame()
for the main thread, but it does require the window.performance.now()
for checking the current time,
.indexOf()
for array/string checks, window.getComputedStyle()
for the .to()
method and .addEventListener()
for scroll animation. Unlike other developers
I didn't include these polyfills in the code to keep it clean, so that YOU decide whether your project need them or not. Also know that when using the recommended
polyfill service some browser detection will not work because they fill the gap and your code won't work as expected. For instance this would
check for IE8 browser var isIE = document.all && !document.addEventListener;
but the polyfill covers .addEventListener()
so you will never succeed. This very demo is a great solution
for targeting Microsoft's legacy browsers.
As of Safari, we did some tests there too, KUTE.js does it really well.
KUTE.js allows you to create tween objects with the help of .to()
and .fromTo()
methods for a single element, with distinctive functionalities, and the other .allTo()
and
.allFromTo()
that use the first two for collections of elements.
KUTE.to('selector', toValues, options) method is super simple and straightforward and requires a polyfill for window.getComputedStyle()
Javascript method on IE8 and more other legacy
browsers in order to read the current property value. If no value is set in the stylesheets or inline style, a property specific value will be used. It also computes the value on animation start, delaying the
actual animation and potentially creating sync issues on large amounts of elements, but it has the great ability to stack transform
properties as they come in chained tweens. However fixing the
sync issues is not that hard, see the example at start() method API.
KUTE.fromTo('selector', fromValues, toValues, options) is the other method that's most powerful in terms of performance, flexibility and control on the animation. As an example, while the first method may not process properties' measurement units properly, this method will never fail in that regard, because you can set for both starting values and end values the exact values with the right unit you need.
It doesn't stack transform
properties for chained tweens but you can set all properties to be used in all tweens if you want (end values from previous tween become start values for the next AND
unchanged start values become end values), and make sure nothing is left unchecked, to avoid animation glitches. Still, this method is the fastest and bestest for super performance and super control.
KUTE.allTo('selector', toValues, options) and KUTE.allFromTo('selector', fromValues, toValues, options) inherit all functionality from the .to()
and .fromTo()
method respectively, but they apply to collections of elements. Unlike the first two methods that create single element tween objects, these two create collections of tween objects. Be sure to check the
API documentation on all the methods.
Unlike previous versions where animations started right away, starting with version 0.9.5 KUTE.js gives you great animation control methods such as: .start()
, .stop()
, .pause()
and .resume()
. These public methods work either when animation is not running, running or is paused. You need to see the documentation to learn how these work.
Aside from the usual options such as duration, delay, easing, repeat or yoyo, it also comes with specific tween options for transform
. For instance 3D rotations require a perspective
or
a perspective-origin
, right? Well, make sure to check that out.
Another important KUTE.js feature is the solid callback system. This allows you to schedule functions to run on animation start, on each frame, on pause / resume, on stop and on complete. The functions bound at start or resume will delay the animation, while the functions running on each frame can potentially influence performance on large amounts of elements so you must use them wisely.
KUTE.js sports some fine tuned addons: SVG Plugin, Text Plugin, Attributes Plugin, CSS Plugin, cubic bezier easing functions and also physics based easing functions. It also features an extensive guide on how to extend, but I'm open for more features in the future.
Check the documentation on these methods and the examples page for more.
You can develop with KUTE.js for free thanks to the MIT License terms. The terms in short allow you to use the script for free in both personal and commercial application as long as you give proper credits to the original author. Also a link back would be appreciated.
Also KUTE.js is super documented, all features and options are showcased with detailed examples so you can get your hands really dirty.


Hi, I'm Mark. I'm a software developer with experience in various client-facing roles. Before that, I studied Marketing and Business Analytics at Indiana University and worked in management consulting for a couple years. These experiences gave me broad exposure to the many different parts of a business.
It was during this time that I first got to see programming in action. From there, I started to do more exploration on my own. I enjoyed the feeling of getting code to work for the first time and of new concepts that were starting to click.
After several months of self-study, I decided to go all in on learning to code and making this a full-time career. I'm looking forward to building stuff that people will like and find useful.
In addition to coding, a few of my other interests include travel, music, language learning, biking, yoga, and watching football.
Ruby on Rails
Vue.js, Node.js
Bootstrap
PostgreSQL
Project Mgmt., Public Speaking
Excel, PowerPoint, Visio
Power BI
Spanish
Full-stack web app to facilitate the collaborative planning of trips across multiple users.
Photo by: Jeremy Bishop
Feel free to reach out. I'd be glad to learn about what you do, chat about potential opportunities, or just connect in general!


AP Source: 2024 Champions League final won't be held in US
by ROB HARRIS, AP Global Soccer WriterA person with knowledge of the situation says the Champions League final will not be played in the United States in 2024.
The person told The Associated Press that UEFA could potentially stage the showpiece club soccer final outside Europe one day but that cannot happen for the first time in 2024 just before the European Championship in Germany.
The person spoke on condition of anonymity to discuss UEFA's internal planning.
American media outlet Morning Consult reported Friday that UEFA's marketing agency had talked to potential commercial partners about a move to bring the 2024 final to the U.S. with MetLife Stadium in New Jersey a potential venue.
UEFA's leadership first revealed in 2016 that it was open to taking one of its finals outside Europe.
A Spanish broadcasting chief last year said UEFA was exploring the possibility of staging the 2021 Champions League final in the U.S. The claim was denied by UEFA, which eventually awarded the hosting rights to St. Petersburg.
UEFA has also settled on the hosts for the next four years, with this season's final in Istanbul in May, Munich staging the 2022 showpiece and Wembley in 2023.
___
More AP soccer: https://apnews.com/Soccer and https://twitter.com/AP_Sports


Check that visitor information is logged and stored for at least three months. Verify that the visitor log includes each visitor's name, the firm represented, and the name of the employee authorizing access.
Visitor information should be logged to assist with an audit if needed. In the event of a compromise, the list of visitors provides a list of suspects.
Examine the visitor log to verify that it exists and has information for at least the past three months. Review the visitor log to make sure it includes the following information about each visitor: the visitor's name, the firm represented, and the name of the employee authorizing access.
Start a visitor's log, recording the following information for each visitor: the visitor's name, the firm represented, and the name of the employee authorizing access. One way of keeping a visitor log is to make a spreadsheet with columns for the required information, print it out, give it to the receptionist, and ask visitors to fill it out before granting them access.


This website was made using basic HTML and basic CSS. Mkaing this helped me gain experience with these two languages and better understand how tey work
Doing this project made me become more familiar with Illustrator. I learned how to use various tools and to create the illustrations and then import into inDesign to set the layout.
Using Figma, I recreated 3 interfaces. This helped me understand how UI are made and how they are layed out.
Doing this project made me become more familiar with IllustraUsing Illustrator. I used various tools and effects to create the illustratoin. I learned how to export in different file types to keep quality.
I am a VCD Student at EWU. My goal is to gain skills and experience while doing different projects to get a career in Web/UX design
brangel3@eagles.ewu.edu


Before Change
"srsly>=0.0.5",
"tqdm>=4.19.6",
]
EXTRAS_REQUIRE = {
"viz": ["matplotlib>=1.5.0"],
}
EXTRAS_REQUIRE["all"] = list({pkg for pkgs in EXTRAS_REQUIRE.values() for pkg in pkgs})
def read_file(fname, encoding="utf-8"):
After Change
about = {}
root_path = os.path.abspath(os.path.dirname(__file__))
with io.open(os.path.join(root_path, "textacy", "about.py")) as f:
exec(f.read(), about)
// NOTE: Package configuration, including the name, metadata, and other options,
// are set in the setup.cfg file.
setup(
version=about["__version__"],
packages=find_packages(),
)


I have put together most of my work here in this website!
Dive Right InTry to make my apps and websites right for any screen, any place.
Freshly redesigned ideas.
Hundreds of users my work!
I prefer to work with professionals or alone...
An App Which Shows Movie Rating And Overview Using TMDb API and React Native.
An App Which Shows Movie Rating And Overview Using TMDb API and Flutter.
Ledger App For Tracking Finances. It tells a vague view of what money was spent where, or where a user got income from.
Started as a Flutter Engineer For Headstrt, a California Based Startup, from 13th March to 26th April.
Contract For Melange Fest of AMC Engineering College, for registration of the events.
Contract For Melange Fest of AMC Engineering College, for Development of the Website for Melange 2020
Guest Lecturer for VR Concepts in PESIT South Campus.
Workshop conducted in AMC Engineering College about AR and Unity Engine.
College Level Winner of Youth Money Olympiad 2018 held at AMC Engineering College.


--- layout: archive title: Zulip Chat Archive permalink: /stream/144837-PR-reviews/topic/.231160.20fundamental.20groupoid.html ---
@Kenny Lau Is there a bigger plan behind this PR? How will this tie in to more general approaches to algebraic topology, higher homotopy groups, (co)homology, etc...
Do you need this soonish for some other thing?
it just seemed... fundamental to me
can't homotopy groups be interpreted as some infinity category thing related to the fundamental groupoid?
Sure they can...
@Kenny Lau This is certainly fundamental... but it might still be a side effect of other fundamental things (-;
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Simon Cowell addresses ‘grudge' against Little Mix
Simon Cowell has denied holding a grudge against Little Mix, after he announced he is launching another version of the X Factor to rival the girl group’s upcoming talent show.
The music mogul, who celebrated his 60th birthday last month, said he owed the band “a lot” but that “sometimes you want to be the first one to do it”.
Cowell reportedly axed a proposed X Factor: All Stars series, which had been set to premiere next month and feature previous winners including Leona Lewis and Alexandra Burke.
Instead, he will premiere X Factor: The Band to find all-male and all-female groups.
It will be a direct rival to The Search, the talent show set to be launched by Little Mix on BBC One next year.
Speaking on Amanda Holden and Jamie Theakston’s Heart radio show, Cowell said he had always intended to launch a group version of the X Factor in the UK and had simply fast-tracked the project.
He told fellow Britain’s Got Talent judge Holden: “We have worked together for 14 years. It’s the same with music, radio, TV. Sometimes you have just got to do something quick.
“I have a group show which I launched in America four or five years ago. We had always decided to do a group show in the UK.
“We had agreed with ITV that we were going to do the X Factor groups in 2020. That was all fine. Then we were going to do the all-stars version this year.
“Then when we found out that the Little Mix show was going to go out in 2020 I didn’t want to follow their show since we had already planned it years ago.
“I thought, well, we will just bring it forward. Simple as that. It wasn’t like some grudge against Little Mix or whatever, because I owe those girls a lot.
“Even though we gave them a launch pad, they sold a lot of records. I thought their idea was a great idea but sometimes you want to be the first one to do it.”
Perrie Edwards, Jesy Nelson, Leigh-Anne Pinnock and Jade Thirlwall won the 2011 series of the X Factor as a group having been formed on the show after originally auditioning as solo singers.
They were signed to Cowell’s record label Syco Music but parted ways last year.
Cowell also suggested that in the future the X Factor’s original, group and celebrity versions could rotate on a yearly basis.
He also hinted he would be making an announcement of “very good news” about Britain’s Got Talent “very shortly”.


HOME
ABOUT
RECIPE
SIGN UP
Food
doesn't have
a religion.
It is a religion.
EXPLORE
Subscribe easy youtube channel and never miss any updates.
PREV
NEXT


Congratulations to {{ winner }} on winning
Here is the final standings
Name
Position
Won
Lost
Head to head
{% for player in PLAYERS %}
{% for x in range(5) %}
{{ player[x] }}
{% endfor %}
{% endfor %}


Yaya Toure Reveals His Pre-Match Superstition
by Kurt BuckerfieldFormer FC Barcelona and Manchester City midfielder Yaya Toure, considered one of Africa's greatest ever exports for his exploits in Europe, has revealed what his pre-match superstition is.
The ex-Ivory Coast international spent many years at the top, mainly at the Citizens in England, where he became one of the most dominant midfielders in world football.
Prior to taking to the field, however, Toure believed his game was influenced by what he was doing in the dressing room, with something as simple as lacing up his footwear.
Asked on a recent talk show if he had any specific pre-match traditions that he followed on, the 36-year-old revealed he always put his left boot on first.
Download The Soccer Laduma Social Media App & Earn Airtime for Selfies!
"My only one is I always start from my left leg," he told Amazon Prime's new show called Back Of The Net.
"I put the boot on first, and yeah, it I put it on the left leg (first), that's perfect.
"And after that, we're all good."
Yaya Sent Off After 10 Seconds
Toure is currently playing for Qingdao Huanghai in China, but is expected to leave the club for a new adventure elsewhere soon.


“Augmented Reality.” mmsys2016.itec.aau.at/wp-content/uploads/Augmented_Reality.jpg.
Accessed 13 May 2017.
“Augmented Reality.” www.ourtechart.com/wp-content/uploads/2015/01/augmented-reality-
300x300.jpg. Accessed 23 May 2017.
Augmented Reality Smart Glasses. media02.hongkiat.com/augmented-reality-smart-
glasses/meta.jpg. Accessed 4 Apr. 2017.
Boxal, Andy. “WE TRIED ON AN AUGMENTED REALITY DINOSAUR T-SHIRT, AND IT
WAS AWESOME.” digital trends, 19 Apr. 2016, assets-
jpcust.jwpsrv.com/thumbs/cE2PXhUe.jpg. Accessed 1 Apr. 2017.
“Future of Social Networking.” www.matthewbuckland.com/wp-
images/futureofsocialnetworking01.png. Accessed 1 Apr. 2017.
“Heads Up Display Car.” rdice.net/a/c/n/10/13030augmentedreality.07feb05a.jpg.
“Microsoft Hololens.” Augment, www.augment.com/blog/wp-
content/uploads/2016/08/augmented-reality-Augment-blog.jpg. Accessed 3 Apr. 2017.
“Pokemon Go London.” uqvk92z67p11sbpjb3nr4qo1-wpengine.netdna-ssl.com/wp-
content/uploads/2016/07/pokemon-go-london-1400x788.jpg. Accessed 5 Mar. 2017.

“Will Augmented Reality Transform The Way You Work?” TeamViewer, 19 July 2016,
blog.teamviewer.com/wp-content/uploads/2016/07/will-augmented-reality-transform-
work.jpg. Accessed 1 Apr. 2017.
What Is Augmented Reality
"Augmented Reality." Oxford Dctionary, en.oxforddictionaries.com/definition/
augmented_reality.
"Astucemedia provides US Election graphics and data solutions for Vizrt
customers." Vizrt, 9 Jan. 2013, www.vizrt.com/news/30257/
US2012_0011_PODIUM_ELECTCOLL_1.jpg/alternates/w940up/
US2012_0011_PODIUM_ELECTCOLL%20(1).jpg. Accessed 6 Apr. 2017.
American Football Line Of Scrimmage. userscontent2.emaze.com/images/
14d6fe8b-4ec2-4453-848b-8699831d95d3/7e5d6a2b-a61d-4992-bfcb-e8ef14b0b24e.jpg.
Google Translate English to Spanish. 4.bp.blogspot.com/-FQpYkXk-9so/U30m4K3Kz4I/
AAAAAAAABb4/XIN03dt0PGc/s1600/word-lens.png.
"Niantic Pokemon Go." www.augment.com/blog/wp-content/uploads/2016/08/
pokemon-go-Augment-app.jpg.
The Future
“Hyper Reality.” http://geekologie.com/2016/05/20/augmented-reality-future.jpg
Graph of Increase in Hardware and Software. Grandviewresearch, www.grandviewresearch.com/static/img/research/augmented-reality-market.png.
Safety
"6 cool uses for augmented reality in healthcare." Tech Republic,
www.techrepublic.com/article/6-cool-uses-for-augmented-reality-in-healthcare/.
"AccuVein Evidence." AccuVein, www.accuvein.com/evidence/.
"On The Road" information
“The Real-Life Dangers of Augmented Reality.” IEEE Spectrum, spectrum.ieee.org/consumer-electronics/portable-devices/the-reallife-dangers-of-augmented-reality.
Quote from James Clapper, Former US Director of National Intelligence
"US intelligence chief: we might use the internet of things to spy on you."
The Guardian, www.theguardian.com/technology/2016/feb/09/internet-of-things-smart-home-devices-government-surveillance-james-clapper.
Picture
"First Responder Wearing Augmented Reality Glasses."
abm-website-assets.s3.amazonaws.com/mdtmag.com/s3fs-public/legacyimages/
Medical-Augmented-Reality_0.jpg.
About Us
Career Lessons to Learn Early In Your Career. On Target Talent,
ontargettalent.com/wp-content/uploads/2016/11/brightfuture.jpg?189db0.


VSL // Maps That Tell Stories
* Ever wanted to see which parts of the U.S. have absolutely nobody living in them
today’s Very Short List:
tech 28 Apr 2014
Maxwell Neely-Cohen is the author of the novel Echo of the Boom
Subscribe
* An enterprising fan accomplished the impossible
* For moments of dark curiosity, Cold War historian Alex Wellerstein created a version of Google Maps which shows the effects of various nuclear weapons
http://link.nyobserver.com/516ca68465217dc6e1b9a3a61jv6t.bhi/TvnrKi0WTdwTHwxwC150a
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a61jv6t.bhi/UHyHCJsf7NZSKXrPCc6d8
Subscribe
Forward
My Account
Unsubscribe
food 24 Apr 2014
Jenny Nguyen takes us all underground.
tech 23 Apr 2014
William Pearce on discovery technology.
culture 21 Apr 2014
Alexa Jaccarino on non-profit organizations with the future in mind.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2014
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


HEALING BUDZ
PRIVACY POLICY
WELCOME - You’ve arrived at Healing Budz, the Community for Natural Healing!

Our Welcome Statement on our Privacy Policy
This Privacy Policy explains how Healing Budz, Inc. (“we,” “us,” and/or “our”) collect, use, share, and guard personal and non-personal data on our website, mobile application, services, technology, phone, paper and software (the “Healing Budz Platform”).
We hold the right to revise and update this Privacy Policy, and we may revise and update the Privacy Policy at any time. If we make a material change to this Privacy Policy, we will inform you of such change by one of several ways, including (a) e-mail notification at the e-mail provided by you to us, or (b) push notification on our Healing Budz mobile application, which would require you acknowledge receipt of notice of the material change. After any such material change to this Privacy Policy, your continued usage of the Healing Budz Platform means you agree to any such changes and shall be governed by such change.
We may collect information that enables us to identify or contact you (“Personal Data”) in connection with your use of the Healing Budz Platform to carry out our business purpose(s) including, but not limited to:
General data (e.g., names, dates of birth, age, home and business addresses, email addresses, Internet protocol addresses and mobile/landline business/personal telephone numbers and facsimile numbers that are provided);
Other identification information, for example like photographs;
Financial information (e.g., credit and debit card numbers, passwords and PIN numbers) for any purchase transactions of our services or products, like advertising or merchandise in our Healing Budz Store;
Sensitive Personal Data (e.g., sexual orientation, disability, ailments, medical conditions, or medical or health-related information); and
Information on your order history, if any, and preferences with respect to any orders placed, or statistic boards for advertising paid or created.
We may also collect information that does not directly identify you as you interact with our Healing Budz Platform (“Non-Personal Data”). The types of Non-Personal Data we collect includes, but is not limited to:
Healing Budz Platform usage and activity (e.g., browsing history, search terms, number of clicks, page visits, date/time stamp, time on the Healing Budz Platform);
Products and services viewed, including advertisements for such products and services;
Computer type, operating system and platform type;
IP address, browser type, type of computer or mobile device, browser language, mobile carrier, phone number, unique device identifier, advertising identifier, and requested and referring URLs; and
Information you allow us to receive through your device settings you turn on, such as access to your GPS location.
Even if we do not retain such data in this Privacy Policy, data must still be transmitted to our Healing Budz Platform initially and stored long enough to process.
Account Information: While you may use portions of the Healing Budz Platform without registering an account (either a user or business user account), if you create a Healing Budz account (either a user or business user account), we may store and use the information provided including, but not limited, to:
Provide the Healing Budz Platform functionality,
Improve the Healing Budz Platform functionality,
Engage in research, analysis, and business development in connection with the Healing Budz Platform,
Track usage and activity of the Healing Budz Platform, fulfill your experience expectations and requests relating to the Healing Budz Platform,
Provide feedback, analysis, and insight to third party businesses that may be available, listed, or displayed on the Healing Budz Platform,
Publish, distribute or display advertising, market us or the Healing Budz Platform,
Provide or satisfy any purchases of products or services,
Interact with us or the Healing Budz Platform,
Provide customer support,
Back up or preserve our Healing Budz Platform,
Permit any disaster recovery,
Improve security, and
Achieve and comply with legal obligations.
Public Content: Your contributions of information to the Healing Budz Platform through any post to the Healing Budz Platform, like its message boards, social walls, question and answers, postings, messages, comments, user reviews, etc. (the “Budz Community”), is intended for public display and consumption. We may use or display this data through the Healing Budz Platform or Budz Community, share it with businesses, and further distribute it to a wider audience through third-party sites and services. ANY INFORMATION (INCLUDING PERSONAL INFORMATION OR MEDICAL CONDITIONS) YOU SHARE IS BY DESIGN OPEN TO THE BUDZ COMMUNITY, TO THE PUBLIC, AND ALSO IS NOT PRIVATE IN ANY FORM.  WHAT YOU POST CAN BE SEEN, DISCLOSED TO OR COLLECTED BY THIRD PARTIES AND MAY BE USED BY OTHERS IN WAYS WE CANNOT CONTROL OR PREDICT, INCLUDING TO CONTACT YOU FOR UNAUTHORIZED PURPOSES.  If you mistakenly post personal information in our message board areas and would like it removed, you can send us an e-mail to request that we remove it. In some cases we may not be able to remove your personal information.
Communications: When you sign up for an account, you are opting to receive messages from user accounts, other businesses and us. We may track your actions and activity. If you exchange messages with others, we may store them, allow you to manage them and we may review and disclose them in connection with investigations related to the operation and use of the Healing Budz Platform. We may also store information that you provide through communications to us, including from phone calls, letters, e-mails and other electronic messages. If you are a representative of a business listed on the Healing Budz Platform, we may contact you, including by phone or e-mail, using the contact information you provide us, make publicly available or that we have on record for your business.
Activity: We may store information about your use of the Healing Budz Platform, such as your search activity, the pages you view, the actions you take, the date and time of your visit, businesses you call or e-mail using our mobile applications and purchases you make.
How We Use Your Data
In addition to the uses described herein, we use your Personal Data, sometimes combined with Non-Personal Data, in a variety of ways including, but not limited to the below, in order to:
Personal Data
Identify you when you visit our Sites;
Provide service communications such as bill reminders, order confirmations, program registrations and customer service messages;
Deliver and process surveys, such as market research;
Personalize and improve the usability of the Sites;
Fulfill and/or deliver our products and services; and
Tailor content, advertising and marketing to you.
Non-Personal Data
We use Non-Personal Data to improve the usability of our Healing Budz Platform and for other business reasons. We or other third-party companies also use the Non-Personal Data to provide advertisements and targeted advertisements to you (ads based on the Non-Personal Data). We do not provide Personal Data to third parties with whom we share your Non-Personal Data.
We use location-related information, such as your current location, the places you like to go, and the businesses and people you're near, to provide, personalize and improve our services and products, including ads, for you and others. Location-related information can be based on things like precise device location and IP addresses.
How We Share Your Data
We share your Personal Data, sometimes combined with Non-Personal Data, in a variety of ways including, but not limited to the below:
Share data with third parties to fulfill service requests and to perform business functions, advertising (e.g., third parties purchasing search words, our contracts with third parties to provide services on our behalf such as data hosting services, packaging, mailing and delivering services, and customer support and consulting services).
Share data with third parties as required by law or to protect us in the good-faith belief that such action is necessary.
Share data with third parties to offer you products and services that may be of interest to you (e.g., businesses).
Share data in the aggregate with third parties, such as businesses that are listed on the Healing Budz Platform and content distributors.
We may share data from or about you with our subsidiaries, joint ventures, or other companies under common control, in which case we will require them to honor this Privacy Policy. If another company acquires us, or all or substantially all of our assets, that company will possess the same information, and will assume the rights and obligations with respect to that information as described in this Privacy Policy.
We may share data from or about you, your devices, and your use of the Healing Budz Platform with businesses listed on the Healing Budz Platform. Keep in mind that businesses may still see your activity and posts in the Public.
If you sign up for, or log into, the Healing Budz Platform using a third party service like Facebook or Google+, we may receive information about you from such third party service. If you post content to a third party service through the Healing Budz Platform, that third party service may also receive that content.
California Privacy Rights
In addition to the rights as explained in this Privacy Policy, under California’s "Shine the Light" law, California residents who provide personal information (as defined in the statute) to obtain products or services for personal, family, or household use are entitled to request and obtain from us, once a calendar year, information about the personal information we shared, if any, with other businesses for marketing uses. If applicable, this information would include the categories of personal information and the names and addresses of those businesses with which we shared such personal information for the immediately prior calendar year (e.g., requests made in the current year will receive information about the prior year). To obtain this information please write to us at:
Healing Budz, Inc.
Attn: Support Budz
6826 NW 169th Street
Hialeah, Florida 33015
<EMAIL_ADDRESS>Please include your full name and address.
The Healing Budz Platform is intended for persons at least the age of 21. We do not knowingly collect Personal Data from or market to persons under the age of 21, including 13 and under. If you become aware that a child has provided us with personal information without parental consent, please contact us here.
How We Protect Personal Data
We implement commercially reasonable security measures to help protect against unauthorized access to or unauthorized alteration, disclosure, or destruction of data. Except the sharing of information as set forth in this Privacy Policy, we restrict access to Personal Data to certain companies who need the data to operate, develop, or improve our services. Unfortunately, no data transmission over the Internet or electronic storage is fully secure. Accordingly, and despite our reasonable efforts to protect your Personal Data from unauthorized access, use, or disclosure, we cannot guarantee or warrant the security of the Personal Data you transmit to us, or to or from our online Sites.
How You May Suspend Your Account
We rely on you to update and correct your Personal Data. We retain your Personal and Non-Personal Data in order to fulfill the purposes outlined in this Privacy Policy as long as retention is required or permitted by law. This may include retaining your data indefinitely, even after you no longer use the Healing Budz Platform.  WHEN WE SUSPEND YOUR ACCOUNT, YOUR PERSONAL DATA AND NON-PERSONAL DATA WILL NOT BE REMOVED AND WILL REMAIN IN OUR HEALING BUDZ PLATFORM, AND ARCHIVES. You can choose to suspend your account by clicking here. We may remove certain information from the Budz Community after you suspend your account but we are not required to do so.
Cookies and Other Web Devices
We, and third parties with whom we partner, may use cookies, web beacons, tags, scripts, local shared objects such as HTML5 and Flash (sometimes called "flash cookies"), advertising identifiers (including mobile identifiers such as Apple’s IDFA or Google’s Advertising ID) and similar technology ("Cookies") in connection with your use of the Healing Budz Platform. Cookies may have unique identifiers, and reside, among other places, on your computer or mobile device. Cookies may transmit information about you and your use of the Healing Budz Platform, such as your browser type, search preferences, IP address, location, data relating to advertisements that have been displayed to you or that you have clicked on, and the date and time of your use. Cookies may be persistent or stored only during an individual session.
If you view our Healing Budz Platform without changing your cookie settings (if your browser preference allows it), you are indicating your consent to receive all cookies from our Healing Budz Platform. If you do not allow cookies, some features and functionality of our Healing Budz Platform may not operate as expected. In addition to cookies, we place technological tools (and allow certain third parties to place technological tools) such as tags and beacons, Internet Protocol addresses, and other tools, to collect your data for the purposes listed in this Privacy Policy.
Transmission of Data in the United States
Breach Notification
In the event we determine the occurrence of a data security incident, we will notify you by email, U.S. mail, telephone, or other means as permitted by law.
Effective Date: October 31, 2018


I apologize for my three day absence but I was unconscious for two days at the Vidant Medical Center in North Carolina and just woke up. My enemies maged to spike something that i ingested. However, I am more difficult to kill than anyone can possibly imagine. I am back.


My Ostrich Gertrude:
One
Two
Three
The in the .
No book can ever be finished. While working on it we learn just enough to find it immature the moment we turn away from it.
The launch code is 00000000.
I have two feet.
I'm boxed in
Now strong text is italic and grey.


 My first real game console was a PlayStation 2, which was later upgraded to the PlayStation 3 and then a PlayStation 4 and PS4 Pro. I even rocked a PSP Go for quite a few years, and some of my favorite gaming memories have come from exclusives like Uncharted, The Last of Us, and Infamous.
It's safe to say that PlayStation has been a big part of my gaming lifestyle throughout the years, which makes what I'm about to say next all the more impactful — At just $149 during Black Friday 2019, the Xbox One S All Digital is the very best gaming deal out there.
Best Black Friday deals: Over 215 deals updated in real time
The Google Pixel 3a XL is the phone to buy on Black Friday!
PlayStation is still great and will always hold a special place in my heart, but considering everything the Xbox brings to the table, I just may have to pick one up for myself.
Game on
Xbox One S 1TB All-Digital Edition console
This bundle includes the console, 1-Month of Xbox Live Gold, and download codes for Minecraft, Sea of Thieves and Fortnite Battle Royale.
$149.00 $199.00 $50 off
As the name suggests, this version of the Xbox One S is entirely digital. In other words, it doesn't use physical discs to play games. That might sound like a deal-breaker, but at least for me, it makes a ton of sense. My PS4 game library is already mostly digital, and I'm sure if you went and looked through the games that you have, you'd find something similar.
Digital games are so much more convenient, as you don't have to bother with physical boxes taking up space or getting the disc scratched, and it resulting in a broken game. I get that not everyone is convinced about digital games being the future, but as someone that's been embracing it for a few years now, I can't see myself ever going back to physical copies.
You get a generous 1TB of storage with this version of the One S to ensure you have plenty of room to store all of your games, along with a controller, a one-month trial of Xbox Live Gold, and download codes for Minecraft, Sea of Thieves, and a copy of Fortnite with 2000 V-Bucks for you to spend in-game along with a premium skin to get you started.
That's a great set of games to get you playing right out of the box, but for me, the real draw to the One S is that it's an affordable way to get started with Xbox Game Pass.
Game Pass is, unequivocally, the best deal in gaming right now. For just $10 every month, you gain access to over 100 games that you can play as much as you'd like. And we're not talking about throwaway games no one cares about. Some of the highlights for titles available in Game Pass right now include The Outer Worlds, Gears 5, Halo: The Master Chief Collection, and RAGE 2, just to name a few.
You can get even more value with Xbox Game Pass Ultimate, giving you access to Game Pass titles on your Xbox, PC, and a subscription to Xbox Live Gold — all for just $15/month. Plus, if you're a new subscriber, you can currently get three months of Ultimate for just $1. Seriously.
It can be difficult to stay on a budget while still being able to play the games that you want, but considering everything you get with the Xbox One S All Digital, it's hard to ignore during this Black Friday sale.
$149 is an absolute steal for the console, and when you then remember that the One S All Digital also supports 4K Ultra HD video streaming, HDR games, and can be controlled with both Alexa and Google Assistant, it becomes a really well-rounded entertainment package that anyone can get a lot of value out of — even if you're a die-hard PlayStation fan.
Black Friday!
- The Best Black Friday Deals
- Find Your Black Friday Deal: All Deals Updated Live, Sortable By Category
- Nintendo Switch Deals
- Best Phone Deals
- Best iPad Deals
- Best Chromebook Deals
- Black Friday VPN Deals: ExpressVPN, PIA, NordVPN, & more
We may earn a commission for purchases using our links. Learn more.


Technical Blog On Arrays and Hashes
Created By Sagar Rathi
Date: 10/26/2014
Arrays & Hashes are almost similar concepts in programing
Ruby's arrays and hashes are indexed collections. Both store collections of objects, accessible using a key. With arrays, the key is ainteger, and Hashes support any obiect as a key. Both arrays and hashes grow as required to hold new element. Array elements are more efficient to access but Hashes provides flexibility. Array or Hashes can hold objects of different types; So one can have array or hashes containing an integer, float number and string.
One can create and initialize a new array using an array literal -- A set of elements between square brackets. Given an array object, one ca access individual elements by supplying an index between square brackets.
You can create empty arrays by using an array literal with no elements or using the array object's constructor, Array.new
Sometimes creating array of words can be pain, with all the quotes and commas. So here is shortcut : %w does just put commas and quotes.
Ruby Hashes are similar to array. A hash literal uses braces rather than square brackets. The literal must supply two objects for every entry that is key-value pair.
Example you might want to map musical instruments to their orchestral sections.
Hashes are indexed using the same square bracket notation as arrays to access elements
As the last example shows, a hash by default returns nil when indexed by a key it doesn't contain. Normally this is convenient, as nil means false when used in conditional expressions. Sometimes you'll want to change this default. For example, if you're using a hash to count the number of times each key occurs, it's convenient to have the default value be zero. This is easily done by specifying a default value when you create a new, empty hash.


2 Time and Time Correction in Erlang
2.1 New Extended Time Functionality
As of OTP 18 (ERTS version 7.0) the time functionality of Erlang has been extended. This both includes a new API for time, as well as time warp modes which alters the behavior of the system when system time changes.
The default time warp mode has the same behavior as before, and the old API will still work, so you are not required to change anything unless you want to. However, you are strongly encouraged to use the new API instead of the old API based on erlang:now/0. erlang:now/0 has been deprecated since it is and forever will be a scalability bottleneck. By using the new API you will automatically get scalability and performance improvements. This will also enable you to use the multi time warp mode which improves accuracy, and precision of time measurements.
2.2 Some Terminology
In order to make it easier to understand this document we first define some terminology. This is a mixture of our own terminology (Erlang/OS system time, Erlang/OS monotonic time, time warp) and globally accepted terminology.
Monotonically Increasing
In a monotonically increasing sequence of values, all values that have a predecessor are either larger than, or equal to its predecessor.
Strictly Monotonically Increasing
In a strictly monotonically increasing sequence of values, all values that have a predecessor are larger than its predecessor.
UT1
Universal Time. Based on the rotation of the earth. Conceptually mean solar time at 0° longitude.
UTC
Coordinated Universal Time. UTC almost align with UT1, however, UTC uses the SI definition of a second which is not exactly of the same length as the second used by UT1. This means that UTC slowly drifts from UT1. In order to keep UTC relatively in sync with UT1, leap seconds are inserted, and potentially also deleted. That is, an UTC day may be 86400, 86401, or 86399 seconds long.
POSIX Time
Time since Epoch. Epoch is defined to be 00:00:00 UTC, January 1, 1970. A day in POSIX time is defined to be exactly 86400 seconds long. Strangely enough Epoch is defined to be a time in UTC, and UTC have another definition of how long a day is. Quoting the Open Group "POSIX time is therefore not necessarily UTC, despite its appearance". The effect of this is that when an UTC leap second is inserted, POSIX time either stops for a second, or repeats the last second. If an UTC leap second would be deleted (has never happened yet), POSIX time would make a one second leap forward.
Time Resolution
The shortest time interval that can be distinguished when reading time values.
Time Precision
The shortest time interval that can be be distinguished repeatedly and reliably when reading time values. Precision is limited by the resolution, but resolution and precision might differ significantly.
Time Accuracy
The correctness of time values.
Time Warp
A time warp is a leap forwards or backwards in time. That is, the difference of time values taken before and after the time warp will not correspond to the actual elapsed time.
OS System Time
The operating systems view of POSIX time. It can be retrieved by calling os:system_time(). This may or may not be an accurate view of POSIX time. This time may typically be adjusted both backwards and forwards without limitation. That is, time warps may be observed. You can get information about the Erlang runtime system's source of OS system time by calling erlang:system_info(os_system_time_source).
OS Monotonic Time
A monotonically increasing time provided by the operating system. This time does not leap and have a relatively steady frequency although not completely correct. However, it is not uncommon that the OS monotonic time stops if the system is suspended. This time typically increase since some unspecified point in time that is not connected to OS system time. Note that this type of time is not necessarily provided by all operating systems. You can get information about the Erlang runtime system's source of OS monotonic time by calling erlang:system_info(os_monotonic_time_source).
Erlang System Time
The Erlang runtime systems view of POSIX time. It can be retrieved by calling erlang:system_time(). This time may or may not be an accurate view of POSIX time, and may or may not align with OS system time. The runtime system works towards aligning the two system times. Depending on time warp mode used, this may be achieved by letting the Erlang system time perform a time warp.
Erlang Monotonic Time
A monotonically increasing time provided by the Erlang runtime system. The Erlang monotonic time increase since some unspecified point in time. It can be retrieved by calling erlang:monotonic_time(). The accuracy, and precision of Erlang monotonic time heavily depends on the accuracy and precision of OS monotonic time, the accuracy and precision of OS system time as well as on the time warp mode used. On a system that is lacking OS monotonic time, the Erlang monotonic time can only guarantee monotonicity and can more or less not give any other guarantees. The frequency adjustments made to the Erlang monotonic time depends on the time warp mode used.
Internally in the runtime system the Erlang monotonic time is the "time engine" that is used for more or less everything that has anything to do with time. All timers regardless of it is a receive ... after timer, BIF timer, or a timer in the timer module are triggered relative Erlang monotonic time. Even Erlang system time is based on Erlang monotonic time. By adding current Erlang monotonic time with current time offset you get current Erlang system time. Current time offset can be retrieved by calling erlang:time_offset/0.
2.3 Introduction
Time is vital to an Erlang program and, more importantly, correct time is vital to an Erlang program. As Erlang is a language with soft real time properties and we have the possibility to express time in our programs, the Virtual Machine and the language has to be very careful about what is considered a correct point in time and in how time functions behave.
In the beginning, Erlang was constructed assuming that the wall clock time in the system showed a monotonic time moving forward at exactly the same pace as the definition of time. That more or less meant that an atomic clock (or better) was expected to be attached to your hardware and that the hardware was then expected to be locked away from any human (or unearthly) tinkering for all eternity. While this might be a compelling thought, it's simply never the case.
A "normal" modern computer can not keep time. Not on itself and not unless you actually have a chip level atomic clock wired to it. Time, as perceived by your computer, will normally need to be corrected. Hence the NTP protocol that together with the ntpd process will do it's best to keep your computers time in sync with the "real" time in the universe. Between NTP corrections, usually a less potent time-keeper than an atomic clock is used.
But NTP is not fail safe. The NTP server can be unavailable, the ntp.conf can be wrongly configured or your computer may from time to time be disconnected from the internet. Furthermore you can have a user (or even system administrator) on your system that thinks the right way to handle daylight saving time is to adjust the clock one hour two times a year (a tip, that is not the right way to do it...). To further complicate things, this user fetched your software from the internet and has never ever thought about what's the correct time as perceived by a computer. The user simply does not care about keeping the wall clock in sync with the rest of the universe. The user expects your program to have omnipotent knowledge about the time.
Most programmers also expect time to be reliable, at least until they realize that the wall clock time on their workstation is of by a minute. Then they simply set it to the correct time, maybe or maybe not in a smooth way. Most probably not in a smooth way.
The amount of problems that arise when you expect the wall clock time on the system to always be correct may be immense. Therefore Erlang introduced the "corrected estimate of time", or the "time correction" many years ago. The time correction relies on the fact that most operating systems have some kind of monotonic clock, either a real time extension or some built in "tick counter" that is independent of the wall clock settings. This counter may have microsecond resolution or much less, but generally it has a drift that is not to be ignored.
2.4 Time Correction
If time correction is enabled, the Erlang runtime system will make use of both OS system time and OS monotonic time, in order to make adjustments of the frequency of the Erlang monotonic clock. Time correction will ensure that Erlang monotonic time will not warp, and that the frequency is relatively accurate. The type of adjustments made to the frequency depends on the time warp mode used. This will be discussed in more details in the time warp modes section below.
By default time correction will be enabled if support for it on the specific platform exist. Support for it includes both an OS monotonic time provided by the OS, and an implementation in the Erlang runtime system utilizing the OS monotonic time. You can check if your system has support for OS monotonic time by calling erlang:system_info(os_monotonic_time_source), and you can check if time correction is enabled on your system by calling erlang:system_info(time_correction).
Time correction is enabled or disabled by passing the +c [true|false] command line argument to erl.
If time correction is disabled, Erlang monotonic time may warp forwards, it may stop and even freeze for extended periods of time, and there are no guarantees that the frequency of the Erlang monotonic clock is accurate or stable.
You typically never want to disable time correction. Previously there was a performance penalty associated with time correction, but nowadays it is most often the other way around. By disabling time correction you are likely to get bad scalability, bad performance, and bad time measurements.
2.5 Time Warp Safe Code
Time warp safe code is code that is able to handle a time warp of Erlang system time.
erlang:now/0 behaves very bad when Erlang system time warps. When Erlang system time do a time warp backwards, the values returned from erlang:now/0 will freeze (if you disregard the micro second increments made due to the actual call) until OS system time reach the point of the last value returned by erlang:now/0. This freeze might continue for very long periods of time. It might take years, decades, and even longer than this until the freeze stops.
All uses of erlang:now/0 are not necessarily time warp unsafe. If you do not use it to get time, it will be time warp safe. However all uses of erlang:now/0 are suboptimal from a performance and scalability perspective. So you really want to replace the usage of it with other functionality. For examples of how to replace the usage of erlang:now/0, see the Dos and Donts section.
2.6 Time Warp Modes
Current Erlang system time is determined by adding current Erlang monotonic time with current time offset. The time offset is managed differently depending on which time warp mode you use. The time warp mode is set by passing the +C [no_time_warp|single_time_warp|multi_time_warp] command line argument to erl.
No Time Warp Mode
The time offset is determined at runtime system start and will after this not change. This is the default behavior. Not because it is the best mode (which it isn't). It is default only because this is how the runtime system always has behaved up until ERTS version 7.0, and you have to ensure that your Erlang code that may execute during a time warp is time warp safe before you can enable other modes.
Since the time offset is not allowed to change, time correction needs to adjust the frequency of the Erlang monotonic clock in order to smoothly align Erlang system time with OS system time. A big downside of this approach is that we on purpose will use a faulty frequency on the Erlang monotonic clock if adjustments are needed. This error may be as big as 1%. This error will show up in all time measurements in the runtime system.
If time correction is not enabled, the Erlang monotonic time will freeze when the OS system time leap backwards. The freeze of the monotonic time will continue until OS system time catch up. The freeze may continue for a very long time. When OS system time leaps forwards, Erlang monotonic time will also leap forward.
Single Time Warp Mode
This mode is more or less a backwards compatibility mode as of its introduction.
 The system clock on such a system will typically be way off when the system boots. If the no time warp mode is used, and the Erlang runtime system is started before the OS system time has been corrected, the Erlang system time may be wrong for a very long time, even centuries or more.
If you for some reason need to use Erlang code that is not time warp safe, and you need to start the Erlang runtime system before the OS system time has been corrected, you may want to use the single time warp mode. Note that there are limitations to when you can execute time warp unsafe code using this mode. If it is possible to only utilize time warp safe code, it is much better to use the multi time warp mode instead.
Using the single time warp mode, the time offset is handled in two phases:
- Preliminary Phase
-
The preliminary phase starts when the runtime system starts. A preliminary time offset based on current OS system time is determined. This offset will from now on be fixed during the whole preliminary phase.
If time correction is enabled, adjustments to the Erlang monotonic clock will be made to keep its frequency as correct as possible, but no adjustments will be made trying to align Erlang system time and OS system time. That is, during the preliminary Erlang system time and OS system time might diverge from each other, and no attempt to prevent this will be made.
If time correction is disabled, changes in OS system time will effect the monotonic clock the same way as when the no time warp mode is used.
- Final Phase
-
The final phase begin when the user finalize the time offset by calling erlang:system_flag(time_offset, finalize). The finalization can only be performed once.
During finalization, the time offset is adjusted and fixated so that current Erlang system time align with current OS system time. Since the time offset may change during the finalization, the Erlang system time may do a time warp at this point. The time offset will from now on be fixed until the runtime system terminates. If time correction has been enabled, the time correction will from now on also make adjustments in order to align Erlang system time with OS system time. When the system is in the final phase it behaves exactly as in the no time warp mode.
In order for this to work properly there are two requirements that the user needs to ensure are satisfied:
- Forward Time Warp
The time warp made when finalizing the time offset can only be done forwards without encountering problems. This implies that the user has to ensure that the OS system time is set to a time earlier or equal to actual POSIX time before starting the Erlang runtime system. If you are not completely sure the OS system time is correct, set it to a time that is guaranteed to be earlier than actual POSIX time before starting the Erlang runtime system just to be safe.
- Finalize Correct OS System Time
The OS system time needs to be correct when the the user finalizes the time offset.
If these requirements are not fulfilled, the system may behave very bad.
Assuming that the requirements above are fulfilled, time correction is enabled, and that the OS system time is adjusted using some time adjustment protocol like NTP or similar, only small adjustments of the Erlang monotonic time should be needed in order to keep system times aligned after finilization. As long as the system is not suspended, the largest adjustments needed should be for inserted (or deleted) leap seconds.
In order to be able to use this mode you have to ensure that all Erlang code that will execute in both phases are time warp safe.
Code that only execute in the final phase does not have to be able to cope with the time warp.
Multi Time Warp Mode
Multi time warp mode in combination with time correction is the preferred configuration. This since, on almost all platforms, the Erlang runtime system will have better performance, will scale better, will behave better, and since the accuracy, and precision of time measurements will be better. Only Erlang runtime systems executing on ancient platforms will benefit from another configuration.
The time offset may change at any time without limitations. That is, Erlang system time may perform time warps both forwards and backwards at any time. Since we align the Erlang system time with the OS system time by changing the time offset, we can enable a time correction that tries to adjust the frequency of the Erlang monotonic clock to be as correct as possible. This will make time measurements using the Erlang monotonic time more accurate and precise.
If time correction is disabled, Erlang monotonic time will leap forward if OS system time leaps forward. If the OS system time leaps backwards, Erlang monotonic time will stop briefly but it does not freeze for extended periods of time. This since the time offset is changed in order to align Erlang system time with OS system time.
In order to be able to use this mode you have to ensure that all Erlang code that will execute on the runtime system is time warp safe.
2.7 The New Time API
The old time API is based on erlang:now/0. The major issue with erlang:now/0 is that it was intended to be used for so many unrelated things. This tied these unrelated operations together and unnecessarily caused performance, scalability as well as accuracy, and precision issues for operations that do not need to have such issues. The new API spreads different functionality over multiple functions in order to improve on this.
In order to be backwards compatible erlang:now/0 will remain as is, but you are strongly discouraged from using it. A lot of uses of erlang:now/0 will also prevent you from using the new multi time warp mode which is an important part of this new time functionality improvement.
Some of the new BIFs on some systems, perhaps surprisingly, return negative integer values on a newly started run time system. This is not a bug, but a memory usage optimization.
The new API consists of a number of new BIFs:
and a number of extensions of existing BIFs:
The New Erlang Monotonic Time
The Erlang monotonic time as such is new as of ERTS version 7.0. It has been introduced in order to be able to detach time measurements such as elapsed time from calender time. It is very common that one is interested in measuring elapsed time or specifying a time relative to another point in time without having any need to know what the involved times are in UTC or any other globally defined time scale. By introducing a time scale that has a local definition of where it starts, it is possible to manage time that do not concern calender time on that time scale. Erlang monotonic time use such a time scale with a locally defined start.
The introduction of Erlang monotonic time gives us the possibility to adjust the two Erlang times (Erlang monotonic time and Erlang system time) separately. By doing this, accuracy of elapsed time does not have to suffer just because the system time happened to be wrong at some point in time. Separate adjustments of the two times are only performed in the time warp modes, and only fully separated in the multi time warp mode. All other modes than the multi time warp mode are there for backwards compatibility reasons, and when using these the accuracy of Erlang monotonic time suffer since the adjustments of Erlang monotonic time in these modes are more or less tied to the Erlang system time.
The adjustment of system time could have been made smother than using a time warp approach, but we think that would be a bad choice. Since we are able to express and measure time that aren't connected to calender time by the use of Erlang monotonic time, it is better to expose the change in Erlang system time immediately. This since it makes it possible for the Erlang applications executing on the system to react on the change in system time as soon as possible. This is also more or less exactly how most OSes handle this (OS monotonic time and OS system time). By adjusting system time smoothly we would just hide the fact that system time changed and make it harder for the Erlang applications to react to the change in a sensible way.
In order to be able to react to a change in Erlang system time you have to be able to detect that it happened. The change in Erlang system time occurs when current time offset is changed. We have therefore introduced the possibility to monitor the time offset using erlang:monitor(time_offset, clock_service). A process monitoring the time offset will be sent a message on the following format when the time offset is changed:
{'CHANGE', MonitorReference, time_offset, clock_service, NewTimeOffset}
Unique Values
Besides reporting time erlang:now/0 also produce unique and strictly monotonically increasing values. In order to detach this functionality from time measurements we have introduced erlang:unique_integer().
Dos and Don'ts
Previously erlang:now/0 was the only option for doing quite a lot of things. We will look at a few different things erlang:now/0 could be used for, and how you want to do this using the new API:
Retrieve Erlang System Time
use erlang:now/0 in order to retrieve current Erlang system time.
use erlang:system_time/1 in order to retrieve current Erlang system time on the time unit of your choice.
If you want the same format as returned by erlang:now/0, use erlang:timestamp/0.
Measure Elapsed Time
take timestamps with erlang:now/0 and calculate the difference in time with timer:now_diff/2.
take timestamps with erlang:monotonic_time/0 and calculate the time difference using ordinary subtraction. The result will be in native time unit. If you want to convert the result to another time unit you can do this using erlang:convert_time_unit/3.
Another easier way of doing this is to use erlang:monotonic_time/1 with desired time unit. However, you may lose accuracy, and precision this way.
Determine Order of Events
determine the order of events by saving a timestamp with erlang:now/0 when the event happens.
determine the order of events by saving the integer returned by erlang:unique_integer([monotonic]) when the event happens. These integers will be strictly monotonically ordered on current runtime system instance corresponding to creation time.
Determine Order of Events With Time of the Event
determine the order of events by saving a timestamp with erlang:now/0 when the event happens.
determine the order of events by saving a tuple containing monotonic time and a strictly monotonically increasing integer like this:
Time = erlang:monotonic_time(), UMI = erlang:unique_integer([monotonic]), EventTag = {Time, UMI}
These tuples will be strictly monotonically ordered on the current runtime system instance according to creation time. Note that it is important that the monotonic time is in the first element (the most significant element when comparing 2-tuples). Using the monotonic time in the tuples, you can calculate time between events.
If you are interested in the Erlang system time at the time when the event occurred you can also save the time offset before or after saving the events using erlang:time_offset/0. Erlang monotonic time added with the time offset corresponds to Erlang system time.
If you are executing in a mode where time offset may change and you want to be able to get the actual Erlang system time when the event occurred you can save the time offset as a third element in the tuple (the least significant element when comparing 3-tuples).
Create a Unique Name
use the values returned from erlang:now/0 in order to create a name unique on the current runtime system instance.
use the value returned from erlang:unique_integer/0 in order to create a name unique on the current runtime system instance. If you only want positive integers, you can use erlang:unique_integer([positive]).
Seed Random Number Generation With a Unique Value
seed random number generation using erlang:now().
seed random number generation using a combination of erlang:monotonic_time(), erlang:time_offset(), erlang:unique_integer(), and other functionality.
To sum this section up: Don't use erlang:now/0!
2.8 Supporting Both New and Old OTP Releases
Your code may be required to be able to run on a variety of OTP installations of different OTP releases. If so, you can not just use the new API out of the box, since it will not be available on old pre OTP 18 releases. The solution is not to avoid using the new API, since your code then won't be able to benefit from the scalability and accuracy improvements made. Instead you want to use the new API when available, and fall back on erlang:now/0 when it is not available. Fortunately almost all of the new API can easily be implemented using existing primitives (except for erlang:system_info(start_time), erlang:system_info(end_time), erlang:system_info(os_monotonic_time_source), and erlang:system_info(os_system_time_source)). By wrapping the API with functions that fall back on erlang:now/0 when the new API is not available, and using these wrappers instead of using the API directly the problem is solved. These wrappers can for example be implemented as in $ERL_TOP/erts/example/time_compat.erl.


Currently v1.0
heki.css provides a minimal set of styles for a clean start at only 2kb gzipped. It is intentionally not a UI framework and a great start if you feel that you don't need all the functionality provided by a larger framework.
The easist way to get started is to download heki.css.
heki.css is available via npm
Add the stylesheet link tag in the head.
CSS3 introduced the rem unit, which stands for "root em". The rem
unit is relative to the font-size of the root element html
. This
means we can define a single font size on the root element and define all rem units as a percentage of that.
The typography basis is Helvetica served by Google fonts, set at 1em using a "perfect-fit" modular scale of 1.5
.
h1
3.9remh2
2.8remh3
1.9remh4
1.4remh5
1remh6
0.7rem
We support the unordered and ordered lists
The blockquote represents a section quoted from another source.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s
| Element | Example |
|---|---|
<strong> |
This is strong text |
<em> |
This is emphasized text |
<u> |
This is underlined text |
<s> |
|
<a> |
This is link text |
<small> |
This is small text |
<sup> |
This is superscript text |
<sub> |
This is subscript text |
<code> |
This is code text |
<samp> |
This is sample text |
<var> |
This is variable text |
<kbd> |
This is keyboard text |
<abbr> |
This is abbreviation text |
<del> |
|
<ins> |
This is inserted text |
<mark> |
This is marked text |
Buttons come in two basic styles, an filled button and an outline only button.
Use thead
and tbody
for proper formatting.
| Firstname | Lastname | Money |
|---|---|---|
| Donald | Duck | $5 |
| Dagobert | Duck | a lot |
Styling forms can be a pain in the ass. All inputs are normalized to use a common cross-browser height so then can be easily stacked or placed alongside each other.


[gecode-users] Re: Waiting for stability
Luis Quesada
luque at info.ucl.ac.be
Thu Jun 15 15:02:01 CEST 2006
Dear all,
I am trying to use LinExpr in order to implement a (naive) order
propagator for graph variables.
Is the following use of LinExpr correct?
template <class SPACE>
LinExpr
graph_order(SPACE* space, OutAdjSetsGraphView g){
OutAdjSetsGraphView::LubNodeIterator g_ub = g.iter_nodes_UB();
LinExpr Sum(IntVar(space,0,0));
for (;g_ub();++g_ub){
int n=g_ub.val();
BoolVar a(space,0,1);
dom(space, g.nodes, SRT_SUP, n, a);
LinExpr BoolVarLinExpr(a);
Sum=LinExpr(Sum,BoolVarLinExpr,1);
}
return Sum;
}
In order to post the constraint, what I am doing is the following:
LinExpr SumBoolVars(graph_order(this,fg));
LinRel Order(SumBoolVars,IRT_LQ,fg_lubOrder);
Order.post(this,true,ICL_DOM);
Where fg_lubOrde is an integer.
However, it seems I am doing something wrong since there is no
propagation taking place.
Thanks in advance for your answer,
Luis
More information about the gecode-users
mailing list


The goal of decido is to provide an R binding to the Mapbox library earcut.hpp for constrained polygon triangulation. Decido is aimed at package developers at the moment, there are not high-level classes or objects but the earcut functionality can be easily used in higher-level tools or just used directly.
Ear cutting (or ear clipping) applies constrained triangulation by successively ‘cutting’ triangles from a polygon defined by path/s. Holes are supported, the earcut library works with single-island-with-holes polygons, analogous to the POLYGON type in simple features.
This augments the Javascript version available in rearcut (also an R wrapper of the JS version by Mapbox). Only very minimal comparison testing has yet been done to compare these implementations.
Install the released version from CRAN.
## install.packages("remotes") remotes::install_cran("decido")
You can install the development version from GitHub with the following code. You will need the set of development tools for building source packages with binary code.
## install.packages("devtools") devtools::install_github("hypertidy/decido", build_vignettes = TRUE)
This is a basic example of triangulating a single-ring polygon. The output is a vector of triplet indices defining each triangle.
library(decido) x <- c(0, 0, 0.75, 1, 0.5, 0.8, 0.69) y <- c(0, 1, 1, 0.8, 0.7, 0.6, 0) earcut(cbind(x, y)) #> [1] 2 1 7 7 6 5 5 4 3 2 7 5 5 3 2
See the documentation and vignette for more.
Open the getting started vignette.
vignette("decido", package = "decido")
This is motivated by the topology aspirations of silicate. We need tools for decomposing shape data into primitives for analysis and visualization. Decomposition into graph types is already well supported and exercised, but triangulations of paths versus triangulations from edges are two key facilities needed for greater control.
This broader project is fairly well advanced in silicate which provides ear-cutting triangulations and enhanced with high-quality methods in hypertidy/anglr.
To triangulate sf polygons see function here. For high-quality triangulations of sf polygons directly see sfdct.
Ear clipping (or ear cutting) is also available in the rgl function triangulate
(implemented in R), and in the lawn function lawn_tesselate
(implemented via the Mapbox Javascript library earcut). In rgl the function also classifies input coordinates according to their nesting, a necessary first step if the relaionship between holes and islands is not known. The INLA
package has some kind of constraint-based triangulation, but I don’t yet know the details.
In comparison to path-based ear-clipping, other libraries ‘Triangle’ and ‘CGAL’ provide edge-based mostly Delaunay triangulation. The Triangle library is available in the R package RTriangle and for (some) R spatial formats in sfdct. Experimental implementations binding CGAL are in rcgal and laridae.
Do you know of others? Let me know! Triangulation is common across many R packages, but constrained algorithms are pretty rare (it’s hard). There are many Delaunay and other non-constrained implementations in many packages, and I’m compiling a list of those as well. OTOH there’s rgeos, sf, deldir, geometry, tripack, spatstat, akima, several mesh-related packages Rvcg, meshsimp, icosa, webglobe …
Please note that the decido project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.