Module: Sprockets::Resolve
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Included In:
| |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Instance Chain:
|
|
| Defined in: | lib/sprockets/resolve.rb |
Constant Summary
PathUtils
- Included
Instance Method Summary
-
#resolve(path, load_paths: config[:paths], accept: nil, pipeline: nil, base_path: nil)
Public: Find Asset URI for given a logical path by searching the environment’s load paths.
-
#resolve!(path, **kargs)
Public: Same as resolve() but raises a
FileNotFound
exception instead of nil if no assets are found.
HTTPUtils
- Included
| #find_best_mime_type_match | Internal: Find the best qvalue match from an Array of available mime type options. |
| #find_best_q_match | Internal: Find the best qvalue match from an Array of available options. |
| #find_mime_type_matches | Internal: Find the all qvalue match from an Array of available mime type options. |
| #find_q_matches | Internal: Find all qvalue matches from an Array of available options. |
| #match_mime_type? | Public: Test mime type against mime range. |
| #match_mime_type_keys | Public: Return values from Hash where the key matches the mime type. |
| #parse_q_values | Internal: Parse Accept header quality values. |
PathDependencyUtils
- Included
| #entries_with_dependencies | Internal: List directory entries and return a set of dependencies that would invalid the cached return result. |
| #stat_directory_with_dependencies | Internal: List directory filenames and associated Stats under a directory. |
| #stat_sorted_tree_with_dependencies | Internal: List directory filenames and associated Stats under an entire directory tree. |
PathUtils
- Included
| #absolute_path? | On Windows, ALT_SEPARATOR is \ Delegate to Pathname since the logic gets complex. |
| #atomic_write | Public: Write to a file atomically. |
| #directory? | Public: Like |
| #entries | Public: A version of |
| #file? | Public: Like |
| #find_matching_path_for_extensions | Internal: Match paths in a directory against available extensions. |
| #find_upwards | Internal: Find target basename checking upwards from path. |
| #join | Public: Joins path to base path. |
| #match_path_extname | Internal: Match path extnames against available extensions. |
| #path_extnames | Internal: Get path’s extensions. |
| #path_parents | Internal: Returns all parents for path. |
| #paths_split | Internal: Detect root path and base for file in a set of paths. |
| #relative_path? | Public: Check if path is explicitly relative. |
| #relative_path_from | Public: Get relative path from |
| #set_pipeline | Public: Sets pipeline for path. |
| #split_subpath | Internal: Get relative path for root path and subpath. |
| #stat | Public: Like |
| #stat_directory | Public: Stat all the files under a directory. |
| #stat_sorted_tree | Public: Recursive stat all the files under a directory in alphabetical order. |
| #stat_tree | Public: Recursive stat all the files under a directory. |
URIUtils
- Included
| #build_asset_uri | Internal: Build Asset URI. |
| #build_file_digest_uri | Internal: Build file-digest dependency URI. |
| #encode_uri_query_params | Internal: Serialize hash of params into query string. |
| #join_file_uri | Internal: Join file: URI component parts into String. |
| #join_uri | Internal: Join URI component parts into String. |
| #parse_asset_uri | Internal: Parse Asset URI. |
| #parse_file_digest_uri | Internal: Parse file-digest dependency URI. |
| #parse_uri_query_params | Internal: Parse query string into hash of params. |
| #split_file_uri | Internal: Parse file: URI into component parts. |
| #split_uri | Internal: Parse URI into component parts. |
| #valid_asset_uri? | Internal: Check if String is a valid |
Instance Method Details
#resolve(path, load_paths: config[:paths], accept: nil, pipeline: nil, base_path: nil)
Public: Find Asset URI for given a logical path by searching the environment’s load paths.
resolve("application.js")
# => "file:///path/to/app/javascripts/application.js?type=application/javascript"
An accept content type can be given if the logical path doesn’t have a format extension.
resolve("application", accept: "application/javascript")
# => "file:///path/to/app/javascripts/application.coffee?type=application/javascript"
The String Asset
URI is returned or nil if no results are found.
# File 'lib/sprockets/resolve.rb', line 24
def resolve(path, load_paths: config[:paths], accept: nil, pipeline: nil, base_path: nil) paths = load_paths if valid_asset_uri?(path) uri, deps = resolve_asset_uri(path) elsif absolute_path?(path) filename, type, deps = resolve_absolute_path(paths, path, accept) elsif relative_path?(path) filename, type, path_pipeline, deps, index_alias = resolve_relative_path(paths, path, base_path, accept) else filename, type, path_pipeline, deps, index_alias = resolve_logical_path(paths, path, accept) end if filename uri = build_asset_uri(filename, type: type, pipeline: pipeline || path_pipeline, index_alias: index_alias) end return uri, deps end
#resolve!(path, **kargs)
Public: Same as resolve() but raises a FileNotFound
exception instead of nil if no assets are found.
# File 'lib/sprockets/resolve.rb', line 46
def resolve!(path, **kargs) uri, deps = resolve(path, **kargs) unless uri = +"couldn't find file '#{path}'" if relative_path?(path) && kargs[:base_path] load_path, _ = paths_split(config[:paths], kargs[:base_path]) << " under '#{load_path}'" end << " with type '#{kargs[:accept]}'" if kargs[:accept] load_paths = kargs[:load_paths] || config[:paths] << "\nChecked in these paths: \n #{ load_paths.join("\n ") }" raise FileNotFound, end return uri, deps end


The product of my own creative aspirations. “The Coffee Stain,” is my own homegrown, self-produced podcast series. It focuses on the promotion and celebration of creativity as a whole, and, through the each episode’s guest of honor, the various forms that creativity can manifest itself as.


More than a manual, a small list of reminders for me. If you find it useful, good for you.
git reset
git reset --hard git clean -f -d
#Say you want to move folder source-repo/FOLDER_TO_KEEP to target-repo/NEW_FOLDER with its whole history and content. #create a dummy work folder mkdir temp-repo cd temp-repo #checkout source-repo there git clone [source-repo-url] #remove immediately the link to the origin to avoid messing up the original one cd source-repo git remote rm origin #there, now even if you mess-up your changes won't be pushed to github #now a command you don't often type: it will delete everything in your repo EXCEPT the FOLDER_TO_KEEP # and !!surprise!!, it will move the content of FOLDER_TO_KEEP to the root of the repo git filter-branch --subdirectory-filter [FOLDER_TO_KEEP] -- --all #pruning & cleaning violently git reset --hard git gc --aggressive git prune git clean -fd #now your repo is clean as a whistle of any record of information except the FOLDER_TO_KEEP part BUT now the files are at the root of the repo [OPTIONAL] #maybe you want the files in a subfolder of your repo, not at the root? so let's do it mkdir NEW_FOLDER mv -R * NEW_FOLDER/ #make sure everything is committed git add -A . git commit [/OPTIONAL] #now go to your target-repo cd ../target-repo #plug a reference to your modified copy of the source-repo. Not the real source-repo, the one you just cleaned up in temp-repo/ folder #"dummy-name" is just to give a label to the reference. anything is fine, you'll delete it in 2 minutes. I will go with "dummy-name" git remote add dummy-name [path-to-temp-repo-folder] #now the magical mariage of the 2 repos history git pull dummy-name master --allow-unrelated-histories #remove that dummy reference git remote rm dummy-name #and now the local target-repo has gained all the files and history of source-repo concerning FOLDER_TO_KEEP, time to push to github git push #go grab your preferred drink, you earned it


TOSS is The One Stop Shop for all products that you could ever need. We save you time by listing the product you want from all of the websites across the web. By putting everything in one spot, the customer is in control, and can make choices based on their criteria
Our site's search and sort algorithm pulls products and their information including price, shipping prices, and taxes, then lists the products from cheapest to most expensive to give you everything that you need to make an informed purchase.
TOSS has a plethora of filters that allow you to get specific when you are searching for items across the web. We want to show you the product that you are looking for, whether it's PS4's or shoes, our filters give unique options to narrow your search.


§96-7 Notice to complainant and agency. If the ombudsman decides not to investigate, he shall inform the complainant of that decision and shall state his reasons.
If the ombudsman decides to investigate, he shall notify the complainant of his decision and he shall also notify the agency of his intention to investigate. [L 1967, c 306, §8; HRS §96-7]


---
title: "Submission Guidelines"
permalink: '/submission'
current: submission
---
The LSE Law Review Blog is dedicated to publishing short articles on topical legal issues in Public, Private, International and Criminal Law. All submissions to the Blog undergo the same stringent process of selection by the Editorial Board as articles submitted to the Main Journal. We accept submissions to the Blog throughout the academic year and summer holidays.The best submissions to the Blog each year also stand the chance of being selected for publication in the Main Journal and winning cash prizes sponsored by the LSE Law Review.
Submission Checklist
- The word count for submissions (excluding footnotes) should be between 1,000-4,000 words.
- The submission file should be in the Microsoft Word file format (.doc or .docx). All submissions in PDF format will be returned.
- A cover page should be included with the title of the essay, the author’s full name, the category in which the submission falls (Public, Private, International, or Criminal), and a short description containing the following information:
- the stage of the author’s studies (year, academic programme, affiliation) or career, area(s) of interest, practice or specialty in the law;
- the context in which the work was written (e.g. for a class, for a competition, in response to a recent judicial decision, out of personal interest etc.), final word count, and;
- a declaration that the submitted work has not been published elsewhere.
- Include a short blurb (not exceeding 200 words) preceding the article’s introduction. This will be be posted together with the submission, if accepted, on our social media platforms (such as Facebook and Linkedin).
- The main body of your submission should be in in Times New Roman with 1 inch margins, font size 12, and 1.5 line spacing. Footnotes are in Times New Roman, font size 10. Paragraphs should be indented and with no extra space in between. Figures and tables should be included only if they are essential to the content of the submission
- All citations should follow OSCOLA.
- Please provide a declaration that the submission is entirely the author's own. Any work of others, whether published or not, must be properly identified and referenced.
Submissions should be sent to<EMAIL_ADDRESS>(We are currently accepting submissions to the LSE Law Review Blog.)


Grade Calculator
Activities
Give grades to the numeric activities
Name
Short Name
Weight
Grade
Percentage
Activity 1
A1
/
Activity 2
A2
/
Activity 3
A3
/
Activity 4
A4
/
New Assignment
Delete Assignment
Result:
WEIGHTED
MEAN


{% extends 'base.html' %} {% load static %} {% block head %}
You don't have any tasks. Create some new tasks.
{{ task.description }}
Complete Task Update Task Delete Task


|
|
|
|
| Get coached by a FORMER LCS PRO |
| wewillfailerCHALLENGER 1 $30/HR |
Time played for mcplums (euw) |
| GAMES | ESTIMATED GAME TIME (MINS) | TOTAL TIME (HRS) | |
| Normal 5v5 | 852 | 35 | 497.0 |
| S3 Ranked 5v5 Solo | 437 | 35 | 254.9 |
| S4 Ranked 5v5 Solo | 124 | 35 | 72.3 |
| S3 Ranked 3v3 | 102 | 30 | 51.0 |
| TeamBuilder | 48 | 35 | 28.0 |
| Dominion | 52 | 20 | 17.3 |
| S3 Ranked 5v5 Team | 26 | 35 | 15.2 |
| Normal 3v3 | 26 | 30 | 13.0 |
| S5 Ranked 5v5 Solo | 21 | 35 | 12.3 |
| Hexakill TT | 14 | 30 | 7.0 |
| URF | 14 | 30 | 7.0 |
| Co-op vs AI 5v5 | 16 | 25 | 6.7 |
| ARAM | 14 | 25 | 5.8 |
| S4 Ranked 5v5 Team | 9 | 35 | 5.3 |
| S4 Ranked 3v3 | 8 | 30 | 4.0 |
| NightmareBot | 4 | 35 | 2.3 |
| S5 Ranked 5v5 Team | 2 | 35 | 1.2 |
| S3 Ranked 3v3 | 2 | 30 | 1.0 |
| 1,001 hours 41.7 days |
| Losses are not recorded except for ranked games, therefore in other queues total games has been estimated at 2 * wins (1.2 * wins for AI games). Does not include Season 1 and 2 ranked games at all as this is not available from Riot's API (riot pls?). |
| Top 1000 Addicted Summoners Reaction speed test Help me quit Unrelated movie review site Donate Contact |


I recently applied to gSchool. The code I submitted was my answer to Problem 7 at Project Euler:
By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10,001st prime number?
This was a fun problem to work on. Initially the method I wrote to test if a number (x) is prime involved testing each number that made up x. It resembled something like this:
def prime? number
return false if number == 0 || number == 1
integers = *(2..number)
integers.each do |i|
return false if number % i == 0
end
true
end
Although this approach worked. It took far too long to compute. So I did some research on Wikipedia and came across an integer factorization called Trial division. Incorporating this into the final solution below drastically reduced the time to compute the answer.
def prime? number
return false if number == 0 || number == 1
integers = *(2..Math.sqrt(number).round)
integers.each do |i|
return false if number % i == 0
end
true
end
def findPrime order
count = 0
number = 0
while count != order
number += 1
count += 1 if prime? number
end
number
end


GFTOPK(1) GFTOPK(1) NAME gftopk - convert generic font files to packed font files SYNOPSIS gftopk [-v] gf_file_name [pk_file_name] DESCRIPTION This manual page is not meant to be exhaustive. The complete documenta‐ tion for this version of TeX can be found in the info file or manual Web2C: A TeX implementation. The gftopk program converts a generic font file output by, for example, mf(1), to a packed font file for use by DVI-reading programs. Packed font files (pk files) are much smaller than the corresponding gf files, so they are generally the font format of choice. The gf_file_name on the command line must be complete. Because the reso‐ lution is part of the extension, it would not make sense to append a default extension as is done with TeX or DVI-reading software. The pk_file_name defaults to the same (stripped) name as gf_file_name, and it is placed in the current working directory with the pk suffix replacing gf. For example, the input file cmr10.300gf would become cmr10.300pk. OPTIONS Unless the -v switch is given, gftopk operates silently. With -v, the version number of the program and statistics about the packing are output to stdout. ENVIRONMENT gftopk looks for gf_file_name first in the current directory. If it is not present there, it uses the environment variable GFFONTS. If that is not set, it uses the variable TEXFONTS. If that is not set, it uses the system default. See tex(1) for the details of the searching. SEE ALSO gftype(1), pktogf(1), pktype(1). Donald E. Knuth et al., Metafontware. AUTHORS Tomas Rokicki wrote the program. It was published as part of the Meta‐ fontware technical report, available from the TeX Users Group. Paul Richards originally ported it to Unix. Web2C 2012 14 December 1993 GFTOPK(1)


--- layout: post esbma_id: 1097 title: We're moving! date: 2005-07-14 19:54:52 keywords: sourcegear ---
Actually it will take a few months for the space to be remodeled, so we're not moving right away.
But it's official now. We signed the lease today for new office space. Sometime this fall, SourceGear will be relocating to the fourth floor of a classy old building in downtown Champaign, just down the street from Volition and just one mile from the world's smartest building.
We're really excited. The new space is currently an empty shell but it's going to be set up just the way we want it, including a server room with extra cooling and special room for our pool table. Every employee will have a private office with a window looking out over the downtown area. Within a two block radius, we'll have a great selection of restaurants and coffee shops as well as a park.
I dread the actual move, but I'm so eager to start settling into our new location.


| DOSE: T+ 0:00 |
2 hits |
sublingual |
LSD |
(blotter / tab) |
| T+ 1:00 |
200 mg |
insufflated |
MDMA |
(powder / crystals) |
| T+ 9:30 |
100 mg |
insufflated |
MDMA |
(powder / crystals) |
| T+ 11:30 |
200 mg |
insufflated |
MDMA |
(powder / crystals) |
This was a crazy ass experience I want to discuss, but first I want everyone to know my past experience with LSD and Molly…
I've been using LSD for over 4 years now. Usually tripping once or twice every other month or so.  Usually I take just 1 or 2 hits at a time. The most I've ever taken at once is 4. LSD is my favorite drug besides marijuana. I usually have really good trips and much control over myself while on the drug. I've never had a problem what so ever on LSD, mentally or physically.
The first time I did 'Molly' was about 2 years ago. First time I did it, I just did 1 tenth and hardly felt its effects. Over the next 2 years I did it maybe 4 or 5 times. I never really cared for the drug because I would hardly feel its effects from only 1 or 2 tenths. Now recently in the past 2 months I've been going pretty hard on the Molly (my best friend sells it, he hooks me up with cheap prices and free lines). So I have been doing molly almost every weekend and sometime during the week. Usually dosing myself with around 0.4 - 0.8 grams. Also I've been mixing the drug with 2C-B and alcohol a few times. I always have snorted the drug too.
Now for the actual story I wanna talk about. A little over a week ago my friends and I got together at my buddies apartment to trip off LSD and roll off sum Molly for the 4th of July fireworks. I ate 2 hits of acid around 7:30 p.m. After about an hour of coming up on the acid, I traded my friend 1 hit of LSD for 2 tenths of Molly. I snorted all the Molly right there. Now before I snorted the Molly, I was coming up on acid quite easily and calmly, it was enjoyable. But when I snorted the Molly the drugs effects made me feel very uneasy, hot, and uncomfortable. I literally had to sit on the couch for an hour and drink gatorade as the drugs drip went down my throat and my body settled down.
Once I felt reasonable I walked to the park with my friends. We watched the fire works, had a great time tripping and seeing everyone. I was what they call 'Candy flipping' and I had some really cool visuals from the acid. After that, we walked back to my friends for the after party of course. By this time the 'roll' effect had worn off from the Molly and I was feeling the peak of the LSD. I had a great night tripping with my friends and smoking weed and just chillin.
Around 5 a.m I was coming down from the acid. My friend then gave me a free line of Molly (around 1 tenth). It picked me up a little bit, for I felt a little speedy and somewhat euphoric. Then about 2 hours later I purchased and snorted 2 more tenths of Molly from him. I felt pretty good and was keeping myself decently hydrated with water.
[Erowid Note: Driving while intoxicated or tripping is dangerous and irresponsible because it endangers other people. Don't do it!] I've pretty much come down completely from the acid and molly so I said good bye to my friends and got in my car to leave.
this is where all hell breaks loose…
I started driving home. After only about 1 or 2 minutes of driving I turn on this back road to go towards my house. Then after like 30 seconds of driving on this road I start to feel fuckin strange.  I quickly turned left down this alley to be safer off the road.
After this I completely lost train of thought. When I woke up my car was crashed into a telephone pole.  I didn't know what the hell was going on, I have never had a seizure before so at first I was very confused. The EMT's told me I had to be taken to the emergency room so I just went along with it. They put me on a stretcher and took me to the hospital.  The only drug they detected in my body was marijuana.
I had a good feeling acid was not gonna show up. I have always heard most drug tests do not detect it because its such a small amount so its nearly impossible to show up. Plus I kept my fuckin cool at the hospital, cuz the last thing I wanted them to know was the fact that I was on drugs.
Now about the drug Molly. I live in a small town in Ohio, about an hour outside of Columbus and Molly is becoming quite the popular drug around here. Almost everyone I know and hang out with are convinced that Molly is pure MDMA which I have come to realize is total BULLSHIT. Now I could be wrong, I am no scientist or drug expert but I don't believe Molly around here is pure MDMA. I don't even think it has MDMA or even MDA in it. I've read that this drug is usually made in a bathtub, sink, or even toilet and includes products such as baking soda, caffeine, lactose, and calcium phosphate and its cut with chemicals and over the counter drugs such as TFMpp, BZP, Procaine, Mathylone, Lidocaine, mCPP and many more to mention.
 I am 19 years old. I weigh about 135-140 pounds. I have never had a seizure in my life so what I wanna know is…
Was it the acid?
Was it the molly?
Was it the combination?
Do you think my past 2 months of basically abusing Molly had a big part to do with it?
I know that it was definitely the drugs that over-heated my brain to cause the seizure but I truly think it would of never happened if I didn't do Molly that night and especially for the last 2 months. I am going to do LSD by itself sometime this week and see what happens. It is the same blotter that I ate last week too. If I don't geek out again then I am convinced that Molly is fully responsible for my seizure and near death experience.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Validator on Celo, Graph, Centrifuge, Kusama, Polkadot, HydraDX, Regen, Oasis, Stafi, Mina, Moonbeam.
New website coming soon. Follow us on Twitter or get in touch via email or Telegram.


Essence
Select size:
Hashtag edison bulb blue bottle mustache, authentic franzen plaid chambray copper mug umami occupy tumblr banh mi flexitarian. Offal echo park chartreuse food truck whatever hoodie. XOXO equality twee, air plant tousled cold-pressed gastropub tbh artisan 3 wolf moon roof party truffaut single-origin coffee hot chicken lo-fi. Echo park gastropub air plant, thundercats pop-up man bun neutra franzen bushwick shoreditch paleo chillwave master cleanse health goth. Cred migas readymade meggings. Mlkshk polaroid shoreditch keytar twee, art party kitsch beard chia gluten-free portland taxidermy plaid venmo humblebrag. Chartreuse pop-up asymmetrical actually.


Honor Watch Magic 2 launch date confirmed - and we've got the first images
by Tom BedfordHonor Watch Magic 2 launch date confirmed - and we've got the first images
Exclusive: We've got pictures of Honor's new watch
(Image credit: Honor)
Honor is set to unveil its Watch Magic 2 smartwatch on November 26 in China, and more than a week ahead of the launch TechRadar can share some exclusive pictures of the smartwatch.
While they're not hugely revealing, they show us enough about the upcoming wearable to give us a good idea of what to expect when it launches.
- Could this be one of the best smartwatches?
- What do we expect to see in the Honor View 30?
- These are the best cheap smartwatches
Something we can tell from the images is that the body of the Honor Watch Magic 2 has seen a re-design from its predecessor – the bezel looks to be thinner, and rises less from the screen of the watch.
This indicates a departure from the 'classic' look of a wristwatch, which many smartwatches mimic.
The Watch Magic 2 also looks more monochromatic than before, with the device all black (save a red ring on the crown, like in the original Watch Magic), and white text around the dial instead of pink like before.
Of course, this could be just the style of the one device TechRadar was shown, with other colored variants available at launch. It's also possible this is a design decision to make the Watch Magic 2 look more sleek.
The strap also looks to be leather, like the Watch Magic, but again it's monochromatic black, unlike the older device which had a brown leather strap with white cotton threads.
The images show the Honor Watch Magic 2 as a more modern-looking device, shirking the classic wristwatch look of old for a more decidedly 'smartwatch' feel. We don't know much about the specs or internals of the device yet, but there's not long to go until it's officially unveiled.
That's set to happen alongside the Honor V30 launch in China, which is happening in Beijing on November 26.


Sweden says it is dropping Assange rape investigation
STOCKHOLM, Nov 19 — A Swedish prosecutor said today she would not proceed with an investigation into an allegation of rape against WikiLeaks founder Julian Assange after a review of the evidence.
Deputy Chief Prosecutor Eva-Marie Persson said that the complainant’s evidence was deemed credible and reliable, but that after nearly a decade, witnesses’ memories had faded.
“After conducting a comprehensive assessment of what has emerged during the course of the preliminary investigation I then make the assessment that the evidence is not strong enough to form the basis for filing an indictment,” Persson told a news conference.
The 48 year-old Australian citizen has repeatedly denied the allegation against him, made in 2010.
The move by the prosecutor heads off a possible dilemma for the British courts which could potentially have had to decide between competing extradition requests from the United States and Sweden. However, the prosecutor said the decision to drop the investigation could be appealed.
Assange is being held in a British jail pending a hearing in February on extradition to the United States, which wants the 48 year-old Australian citizen over 18 criminal counts including conspiring to hack government computers and violating an espionage law.
He was dragged from the Ecuadorian embassy in London in April this year after spending almost seven years holed up there to avoid extradition on the Swedish allegations. Since then, he has served a British jail sentence for skipping bail. — Reuters


PLAY MY GAME:
I made this game over four years ago on Scratch under a different account name and no one has ever played it. You move the two sets of cavemen around with the arrow keys. The up and down arrows move the cavemen
up and down the brontosauruses. The left and right arrows make the other caveman pull the rock left and right. Hit the spacebar to launch the rock and hit the UFO.
Click here to play: Paleolithic Encounters
It's easy. Just click the green flag to start it. You can click the blue rectangle in the upper left to make it fullscreen if you want but who cares.
Do you think my game sucks? Email me<EMAIL_ADDRESS>© Copyright 2018 by laconiclizard


CSE 6331 - Cloud Computing | Avinash Chavan -<PHONE_NUMBER>
Upload Image
View Image(Storage)
View Image(Database)
Picture Viewing For {{msg}}
Upload file in Database
Title:
Author:
Browse File:
Submit
Reset
Upload file in Container
Title:
Author:
Browse File:
Submit
Reset


|
Gephi Toolkit Javadoc | ||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Interface Summary | |
|---|---|
| Attributable | Attributable is an interface for graph elements (i.e. nodes and edges) and represent the ability to carry attribute values. |
| Attributes | Get and set any object to this attributes class. |
| DirectedGraph | Graph with directed edges. |
| Edge | Edge interface. |
| EdgeData | Contains all extended data related to an edge, including access to its attributes. |
| EdgeIterable | Proxy iterable for iterating edges, users can either get EdgeIterator
or directly getting an Edge array. |
| EdgeIterator | Iterator wrapper for edge elements |
| Graph | Main interface for accessing the graph structure and develop algorithms. |
| GraphController | Controller that maintain the graph models, one per Workspace. |
| GraphEvent | Graph event interface, that GraphListener receives when the graph is
modified. |
| GraphEventData | Wrap graph event elements, like added nodes. |
| GraphFactory | Graph factory that builds node and edges elements. |
| GraphListener | Basic graph listener for global events. |
| GraphModel | Root interface that contains the complete graph structure and build
Graph objets on demand. |
| GraphSettings | |
| GraphView | Graph view define a subgraph, i.e. a subset of the original graph. |
| Group | |
| GroupData | |
| HierarchicalDirectedGraph | Hierarchical directed graph. |
| HierarchicalGraph | Implementation of graphs within graphs concept, by proposing methods to manipulate the hierarchy of nodes. |
| HierarchicalMixedGraph | Hierarchical mixed graph. |
| HierarchicalUndirectedGraph | Hierarchical undirected graph. |
| ImmutableTreeNode | Wrapper for Java TreeNode to more easily build Tree models
from hierarchical graph. |
| MetaEdge | Meta edges are edges between a group and a leaf or between two groups. |
| MixedGraph | Graph that contains both directed and undirected edges. |
| Model<ObjectType extends Renderable> | Graphical 2D/3D model. |
| Node | A graph node. |
| NodeData | Contains all extended data related to a node, including access to its attributes. |
| NodeIterable | Proxy iterable for iterating nodes, users can either get NodeIterator
or directly getting an Node array. |
| NodeIterator | Iterator wrapper for node elements |
| Renderable | All graphic attributes an element can have. |
| Spatial | Spatial data interface. |
| TextData | Contains all extended data related to text display. |
| UndirectedGraph | Graph with only undirected edges. |
| Enum Summary | |
|---|---|
| GraphEvent.EventType | - ADD_NODES_AND_EDGES:Add nodes and edges to the graph - REMOVE_NODES_AND_EDGES:Remove nodes and edges from the graph, with their edges - MOVE_NODE:Move nodes on the hierarchy, parent node is changed - VISIBLE_VIEW:Current visible view is changed - NEW_VIEW:A new view is created - DESTROY_VIEW:A view is destroyed - EXPAND:Expand nodes in the hierarchy - RETRACT:Retract nodes in the hierarchy - META_EDGES_UPDATEMeta-Edges are updated |
General API that defines the graph structure.
All graphs in Gephi are defined and stored with the Graph API. Graphs can be read or written from its interface.
The GraphController
is managing models and is the
access door to the system. This controller is a service, and can be
retrieved by using the following command:
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
|
Gephi Toolkit Javadoc | ||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


{{ site.owner.bio | markdownify | remove:'
' | remove:'
connect {% include _svg-twitter.html %} {% include _svg-tumblr.html %} {% include _svg-github.html %} {% include _svg-envelope.html %} {% include _svg-feed.html %}


Except where otherwise noted, the contents of this document are Copyright 2019 Scott Uk-Jin Lee. All rights reserved. Any redistribution, reproduction, transmission, or storage of part or all of the contents in any form is prohibited without the author's expressed written permission.
Lab 3: CSS Design & Layout - style "Scott's Favorite Things" page.
(See example screenshot on next slide.)
First download the ScottsFav.html
file.
Then open it in your Textpad++ editor, and also open the HTML page on your hard drive in Firefox or Chrome.
Add id
s, class
es, span
s and div
s to ogranize the "Scott's Favorite Things" page.
Then, add borders around these sections by creating and editing your layout.css
.
5px
thick and solid
.
red
.
id
and class
attributes, consider using CSS context selectors.
The only major changes to make to the HTML are adding id
s, class
es, div
s, and span
s.
Your page should look like this when you are done:
(See example screenshot on next slide.)
Add padding, margins, and backgrounds to the page. Change only your layout.css
file.
white
.#99CCFF
.
5px
(on all sides) and margin of 10px
only on the top of the box.
10%
, and the following background image:
This output is Scott's Favorite Things page with padding/margins and backgrounds:
(See example screenshot on next slide.)
Now we'll practice float
, overflow
, and alignment. You may have to edit ScottsFav.html
code as well as layout.css
.
bleedinto the other content below it.
This output is Scott's Favorite Things page with floating and alignment:
(See example screenshot on next slide.)
#1D2475
, with a 15px rounded border radius.
#1D2475
, change font color to white, and get rid of its border.
Cars, Sports, and Musicarea to 14pt, font color to
#CCCCCC
, and get rid of its border.
This output is Scott's beautified page:
(See example screenshot on next slide.)
Add a second column to the layout. Copy and paste the following code into ScottsFav.html
:

Links

SE Lab.

CSE @ HYU

W3Schools

CSS Zen Garden

liquidlayout -- that is, all parts of it should adjust in size accordingly when the browser size changes.
150px
wide with #3366CC
background color. In addiiton, there should be 10px
space between two columns.
This output is Scott's Favorite Things page with the related links list:
Style your CSS so that if you hover over any element (i.e. any header, paragraph, image, etc), the element is highlighted in #A6CE39
color.
Complete this exercise by adding one-selector with one-property to your stylesheet (no commas in selector are allowed!).
Search Google to find out How can one rule apply to all elements?
!
This output is Scott's Favorite Things page with green highlight:
The new HTML5 introduces more semantic (and descriptive) tags than div and id/class.
div
and id
/class
tags in your ScottsFav.html
to HTML5 semantic tags where possible.
Then save the html as semanticScottsFav.html
.
layout.css
and save it as semanticLayout.css
.
Then, link semanticLayout.css
to semanticScottsFav.html
instead of old layout.css
.
ScottsFav.html
and semanticScottsFav.html
in your browser and check whether they have the same style and layout.
If you finish all the exercises:
sizing and positioningpart of the page layout on your page
html
& css
files to your Git
repository under lab03
folderGreat work!


[define fullbody] [# this file uses 'format raw' because the variables were constructed using 'define', so they're fully escaped. ]


Clever House Cat Owns Dad Amid Blind Brawl
Carrot, a too-smart-for-school cat hailing from Redding, California, recently showed his owner that he’s the one who wears the trousers in their home after he managed to keep the living room blinds open despite a few human-caused setbacks.
Video footage of the November 9 encounter begins with the pair already going back and forth about the blinds, with Nick, Carrot’s dad, flipping them closed; however, not one to easily back down from a fight, Carrot continues reopening them with every chance he gets.
In the end, Carrot took the win by sneakily opening a second set blinds that his flustered dad was unable to reach from his seat.
In a statement obtained by Viral Hog, the video’s filmer stated that Nick and Carrot “are always fighting for dominance in the house,” further explaining that the living room blinds are kept closed to keep Carrot’s doggie siblings from barking at “everything they see.”


You can enter data in an XML file in two places:
Inside the node, for example, <lastname>Jones</lastname>. In this example, Jones is the value of the node.
As an attribute of a node, for example, employee id="120585". In this example, id is an attribute of the node. The attribute name is id and the value of the attribute is “120585”.
This node and value structure works well for simple data. If the data is more complex, however (for example, if it has special characters, or perhaps HTML code), you need to wrap these nodes in a CDATA container. You can do this by following this example:
<formula><![CDATA[6 > 5 and 5 < 6]]> </formula>
CDATA tells the parser to ignore everything within the CDATA tag, so if you wrap text in CDATA, you can have HTML code, or any number of special characters within the value of the node.
The CDATA structure is as follows:
< ! [CDATA [your code]] >


| Tracking Code | XXXXXX-9876-5432-1100 |
|---|---|
| Status | Giao nhận xong |
| Restaurant | Vinakook ... |
| Total Item | 2 |
| Total Quantity | 5 |
| Total Price | 210000 |
| Order Note | abcdefghijklmnopqrstuvwxyz |
| Time Request | 2021-05-01 23:29:22 |
| Time Accept | 2021-05-01 23:33:22 |
| Time Complete | 2021-05-01 23:39:22 |
| Time Receive | 2021-05-01 23:59:22 |
| Time Return | |
| Time Cancel |
Order details
|
|
|
|


Hide Page | Reload Cached
The goal of this page is to show how Typekit fonts load into an iframe.
You must load the fonts on "localhost" for this demo to work.


Hi,
New here and just build my first EmonGLCD. I have uploaded the Tester sketch and all works fine except for the temperature indication which always reads 0.0°C. I have checked my soldering and everything seems OK. Is there some way I can test the DS18B20 Digital Thermometer with a multimeter to see where it's going wrong?
Re: EmonGLCD Temperature Sensor always reads 0°C
Basically - no. It sends back a digital stream of data. A multimeter will tell you whether the supply is there (3.3 V), but little else - the output (Data - DQ on the data sheet) will be 3.3 V but pulled down as it is interrogated and responds.
The normal fault indication is not 0.0°C, with no sensor connected you normally see "-127.0C". Connecting only GND & Data I get "85.0C".
You haven't accidentally edited the sketch, by any chance?
Re: EmonGLCD Temperature Sensor always reads 0°C
Hi,
Not done any editing of the sketch at all. The 3.3V at GND are both OK. Connection of data line to processor checks out OK with multimeter.
After that I did edit the sketch to display instead of temperature a device count using:
numberOfDevices = sensors.getDeviceCount();
This returns 0 so I'm guessing the sensor can't be seen. Other than getting a new sensor I can't see what the problem would be unless there is a mistake in the downloaded tester sketch that I can not spot (guessing, as it's downloaded and nobody else has reported this problem, there are no mistakes in the sketch).
Re: EmonGLCD Temperature Sensor always reads 0°C
That's weird. As you've checked continuity I think it has to be a faulty sensor.
If you can get the sensor out and tack it into an emonTx, download the temperature_search sketch to get its serial number and that can't see it, then it's almost proven it's the sensor.
If it is faulty, drop an email to the shop (if it came in the kit).
Re: EmonGLCD Temperature Sensor always reads 0°C
After a little more investigation it was noted sometimes when I connect the power the EmonGLCD powers up (3.3V OK) and nothing happens except the LCD backlight just flashes but other times it works OK (except the temperature reading 0.0°C). If I disconnect the Vcc from pin 3 of the DS18B20 then it powers up OK every time but still reads 0.0°C. I tried the DS18B20 in parasite power mode and it power up OK every time but still reads 0.0°C. I've ordered a new DS18B20 and disconnected the existing one. However, as said above it seems strange the indicated temperature is 0.0°C and not -127°C.


Your Browser
Doesn`t
Support This Sites Features! Please
Update
Your Browser;)
Hi! I`m
Pouya!
Use Arrow Keys Or Space To Navigate;)
I Was Borned In
Karaj
in
07-07-1999
Then I Ended My HighSchool Education In
Panahi HighSchool
And Currently Educating At
IKIU {Field} Computer Engineering
My Career History
Dec 2017 - Currently:
Hacka{Iran}
dehaze
Web Developer
subject
Working With Love As A Developer.
Dec 2017 - Currently:
TestHub
dehaze
Web Developer
subject
Working With Love As A Developer.
Aug 2017 - Sep 2017:
Paskco
dehaze
Web UI Coder
subject
Working For Two Months For Designing Web Panels For Apps. Their
Site
Was(Is) Also Created By Me.
What Am I Good At?
PHP - Laravel
NodeJs - Express
JS - jQuery - jQueury UI
HTML - PUG - BootStrap - Propeller
CSS - SASS - BootStrap - Propeller
Want To Connect? I'm Ready:)
Want To Connect? I'm Ready:)


---
layout: post
title: A Telescope Stretches From Brooklyn to London - New York Times
date: '2008-05-21T12:07:13+01:00'
tags: []
tumblr_url: http://backlog.robbevan.com/post/35541539/a-telescope-stretches-from-brooklyn-to-london
---
A Telescope Stretches From Brooklyn to London - New York Times


acl acl2013 acl2013-360 acl2013-360-reference knowledge-graph by maker-knowledge-mining
Source: pdf
Author: Camillo Lugaresi ; Barbara Di Eugenio
Abstract: We present a corpus analysis of how Italian connectives are translated into LIS, the Italian Sign Language. Since corpus resources are scarce, we propose an alignment method between the syntactic trees of the Italian sentence and of its LIS translation. This method, and clustering applied to its outputs, highlight the different ways a connective can be rendered in LIS: with a corresponding sign, by affecting the location or shape of other signs, or being omitted altogether. We translate these findings into a computational model that will be integrated into the pipeline of an existing Italian-LIS rendering system. Initial experiments to learn the four possible translations with Decision Trees give promising results.


...loading...
requests permission to access your data.
Please make sure that
...loading... is a trusted source.
...loading...
requests permission to access your data.
Please make sure that
...loading... is a trusted source.


TO OUR LADY OF THE ROSARYO Virgin Mary, grant that the recitation of thy Rosary may be for me each day, in the midst of my manifold duties, a bond of unity in my actions, a tribute of filial piety, a sweet refreshment, an encouragement to walk joyfully along the path of duty. Grant, above all, O Virgin Mary, that the study of thy fifteen mysteries may form in my soul, little by little, a luminous atmosphere, pure, strengthening, and fragrant, which may penetrate my understanding, my will, my heart, my memory, my imagination, my whole being. So shall I acquire the habit of praying while I work, without the aid of formal prayers, by interior acts of admiration and of supplication, or by aspirations of love. I ask this of thee, O Queen of the holy Rosary, through Saint Dominic, thy son of predilection, the renowned preacher of thy mysteries, and the faithful imitator of thy virtues. Amen. |


5.7. deep learning¶
5.7.1. neural networks¶
basic perceptron update rule
if output is 0 but should be 1: raise weights on active connections by d
if output is 1 but should be 0: lower weights on active connections by d
perceptron convergence thm - if data is linearly separable, perceptron learning algorithm wiil converge
transfer / activation functions
sigmoid(z) = \(\frac{1}{1+e^{-z}}\)
Binary step
TanH (always preferred to sigmoid)
Rectifier = ReLU
Leaky ReLU - still has some negative slope when <0
rectifying in electronics converts analog -> digital
rare to mix and match neuron types
deep - more than 1 hidden layer
regression loss = \(\frac{1}{2}(y-\hat{y})^2\)
classification loss = \(-y log (\hat{y}) - (1-y) log(1-\hat{y})\)
can’t use SSE because not convex here
multiclass classification loss \(=-\sum_j y_j ln \hat{y}_j\)
backpropagation - application of reverse mode automatic differentiation to neural networks’s loss
apply the chain rule from the end of the program back towards the beginning
\(\frac{dL}{dx_i} = \frac{dL}{dz} \frac{\partial z}{\partial x_i}\)
sum \(\frac{dL}{dz}\) if neuron has multiple outputs z
L is output
\(\frac{\partial z}{\partial x_i}\) is actually a Jacobian (deriv each \(z_i\) wrt each \(x_i\) - these are vectors)
each gate usually has some sparsity structure so you don’t compute whole Jacobian
pipeline
initialize weights, and final derivative (\(\frac{dL}{dL}=1\))
for each batch
run network forward to compute outputs at each step
compute gradients at each gate with backprop
update weights with SGD
5.7.2. training¶
vanishing gradients problem - neurons in earlier layers learn more slowly than in later layers
happens with sigmoids
dead ReLus
exploding gradients problem - gradients are significantly larger in earlier layers than later layers
RNNs
batch normalization - whiten inputs to all neurons (zero mean, variance of 1)
do this for each input to the next layer
dropout - randomly zero outputs of p fraction of the neurons during training
like learning large ensemble of models that share weights
2 ways to compensate (pick one)
at test time multiply all neurons’ outputs by p
during training divide all neurons’ outputs by p
softmax - takes vector z and returns vector of the same length
makes it so output sums to 1 (like probabilities of classes)
5.7.3. tricks to squeeze out performance¶
ensemble models
(stochastic) weight averaging can help a lot
test-time augmentation
this could just be averaging over dropout resamples as well
gradient checkpointing (2016 paper)
10x larger DNNs into memory with 20% increase in comp. time
save gradients for a carefully chosen layer to let you easily recompute
5.7.4. CNNs¶
kernel here means filter
convolution G- takes a windowed average of an image F with a filter H where the filter is flipped horizontally and vertically before being applied
G = H \(\ast\) F
if we do a filter with just a 1 in the middle, we get the exact same image
you can basically always pad with zeros as long as you keep 1 in middle
can use these to detect edges with small convolutions
can do Guassian filters
convolutions typically sum over all color channels
1x1 conv - still convolves over channels
pooling - usually max - doesn’t pool over depth
people trying to move away from this - larger strides in conversation layers
stacking small layers is generally better
most of memory impact is usually from activations from each layer kept around for backdrop
visualizations
layer activations (maybe average over channels)
visualize the weights (maybe average over channels)v
feed a bunch of images and keep track of which activate a neuron most
t-SNE embedding of images
occluding
weight matrices have special structure (Toeplitz or block Toeplitz)
input layer is usually centered (subtract mean over training set)
usually crop to fixed size (square input)
receptive field - input region
stride m - compute only every mth pixel
downsampling
max pooling - backprop error back to neuron w/ max value
average pooling - backprop splits error equally among input neurons
data augmentation - random rotations, flips, shifts, recolorings
siamese networks - extract features twice with same net then put layer on top
ex. find how similar to representations are
famous cnns
LeNet (1998)
first, used on MNIST
AlexNet (2012)
landmark (5 conv layers, some pooling/dropout)
ZFNet (2013)
fine tuning and deconvnet
VGGNet (2014)
19 layers, all 3x3 conv layers and 2x2 maxpooling
GoogLeNet (2015)
lots of parallel elements (called Inception module)
Msft ResNet (2015)
very deep - 152 layers
connections straight from initial layers to end
only learn “residual” from top to bottom
Region Based CNNs (R-CNN - 2013, Fast R-CNN - 2015, Faster R-CNN - 2015)
object detection
Karpathy Generating image descriptions (2014)
RNN+CNN
Spatial transformer networks (2015)
transformations within the network
Segnet (2015)
encoder-decoder network
Unet (2015)
Ronneberger - applies to biomedical segmentation
Pixelnet (2017)
predicts pixel-level for different tasks with the same architecture
convolutional layers then 3 FC layers which use outputs from all convolutional layrs together
Squeezenet
Yolonet
Wavenet
Densenet
NASNET
5.7.5. architectural components¶
coordconv - break translation equivariance by passing in i, j coords as extra filters
deconvolution = transposed convolution = fractionally-strided convolution - like upsampling
attention
attention ovw: https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html
vector of importance weights: in order to predict or infer one element, such as a pixel in an image or a word in a sentence, we estimate using the attention vector how strongly it is correlated with (or “attends to” as you may have read in many papers) other elements and take the sum of their values weighted by the attention vector as the approximation of the target.
attention born to solve problem of going from arbitrary length -> fixed length encoding -> arbitrary length output
5.7.6. recent trends¶
architecture search: learning to learn
optimal brain damage - starts with fully connected and weeds out connections (Lecun)
tiling - train networks on the error of previous networks
5.7.7. RNNs¶
feedforward NNs have no memory so we introduce recurrent NNs
able to have memory
could theoretically unfold the network and train with backprop
truncated - limit number of times you unfold
\(state_{new} = f(state_{old},input_t)\)
ex. \(h_t = tanh(W h_{t-1}+W_2 x_t)\)
train with backpropagation through time (unfold through time)
truncated backprop through time - only run every k time steps
error gradients vanish exponentially quickly with time lag
<IP_ADDRESS>. LSTMs¶
have gates for forgetting, input, output
easy to let hidden state flow through time, unchanged
gate \(\sigma\) - pointwise multiplication
multiply by 0 - let nothing through
multiply by 1 - let everything through
forget gate - conditionally discard previously remembered info
input gate - conditionally remember new info
output gate - conditionally output a relevant part of memory
GRUs - similar, merge input / forget units into a single update unit \vert
5.7.8. adversarial attacks¶
adversarial attack - designing an input to get the wrong result from the model
targeted - try to get specific wrong class
fast gradient step method - keep adding gradient to maximize noise (limit amplitude of pixel’s channel to stay imperceptible)
5.7.9. transformers¶
transformers: https://arxiv.org/pdf/1706.03762.pdf
spatial transformers: https://papers.nips.cc/paper/5854-spatial-transformer-networks.pdf
http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/
Highly accurate protein structure prediction with AlphaFold | Nature (2021)
the standard way to obtain the 3D structure of a protein is X-ray crystallography. It takes about a year and costs about $120,000 to obtain the structure of a single protein through X-ray crystallography [source]
on average, a protein is composed of 300 amino acids (residues)
21 amino acid types
the first residue is fixed
multiple-sequence-alignment (MSA) - alignment of 3 or more amino acid (or nucleic acid) sequences, which show conserved regions within a protein family which are of structural and functional importance.
model
uses attention on graph network
5.7.10. graph neural networks¶
Theoretical Foundations of Graph Neural Networks
inputs are graphs
e.g. molecule input to classification
one big study: “a deep learning appraoch to antibiotic discovery” - using GNN classification of antibiotic resistance, came up with 100 candidate antibiotics and were able to test them
e.g. traffic maps - nodes are intersections
invariances in CNNs: translational, neighbor pixels relate a lot more
simplest setup: no edges, each node \(i\) has a feature vector \(x_i\) (really a set not a graph)
X is a matrix where each row is a feature vector
note that permuting rows of X shouldn’t change anything
permutation invariant: \(f(PX) = f(X)\) for all permutation matrices \(P\)
e.g. \(\mathbf{P}_{(2,4,1,3)} \mathbf{X}=\left[\begin{array}{llll}0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0\end{array}\right]\left[\begin{array}{lll}- & \mathbf{x}_{1} & - \\ - & \mathbf{x}_{2} & - \\ - & \mathbf{x}_{3} & - \\ - & \mathbf{x}_{4} & -\end{array}\right]=\left[\begin{array}{lll}- & \mathbf{x}_{2} & - \\ - & \mathbf{x}_{4} & - \\ - & \mathbf{x}_{1} & - \\ - & \mathbf{x}_{3} & -\end{array}\right]\)
ex. Deep Sets model (zaheer et al. ‘17): \(f(X) = \phi \left (\sum_k \psi(x_i) \right)\)
permutation equivariant: \(f(PX) = P f(X)\) - useful for when we want answers at the node level
graph: augment set of nodes with edges between them (store as an adjacency matrix)
permuting permutation matrix to A requires operating on both rows and cols: \(PAP^T\)
permutation invariance: \( f\left(\mathbf{P X}, \mathbf{P A P}^{\top}\right)=f(\mathbf{X}, \mathbf{A})\)
permutation equivariance: \(f\left(\mathbf{P X}, \mathbf{P A P}^{\top}\right)=\mathbf{P} f(\mathbf{X}, \mathbf{A})\)
can now write an equivariant function that is extracts features not only of X, but also its neighbors: \(g(x_b, X_{\mathcal N_b})\)
tasks: node classification, graph classification, link (edge) prediction)
3 flavors of GNN layers for extracting features from nodes / neighbors: simplest to most complex
message-passing actually passes vectors to be sent across edges
previous approaches map on to gnns well
GNNs explicitly construct local features, much like previous works
local objectives: features of nodes i and j should predict existence of edge \((i, j)\)
random-walk objectives: features should be similar if i and j co-occur on a short random walk (e.g. deepwalk, node2vec, line)
similarities to NLP if we think of words as nodes and sentences as walks
we can think of transformers as fully-connect graph networks with attentional form of GNN layers
one big difference: positional embeddings often used, making the input not clearly a graph
these postitional embeddings often take the form of sin/cos - very similar to DFT eigenvectors of a graph
spectral gnns
operate on graph laplacian matrix \(L = D - A\) where \(D\) is degree matrix and \(A\) is adjacency matrix - more mathematically convenient
probabilistic modeling - e.g. assome markov random field and try to learn parameters
this connects well to a message-passing GNN
GNN limitations
ex. can we tell whether 2 graphs are isomorphic - often no?
cank make GNNs more powerful by adding positional features, etc.
can also embed sugraphs together
things are more difficult in continuous case…
geometric deep learning: invariances and equivariances can be appllied generally to get a large calss of architectures between convolutions and graphs
5.7.11. misc¶
adaptive pooling can help deal with different sizes
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
given multiple views, generate depth map + continuous volumetric repr.
dnn is overfit to only one scene
inputs: a position and viewing direction
output: for that position, density (is there smth at this location) + color (if there is smth at this location)
then, given new location / angle, send a ray through for each pixel and see color when it hits smth
Implicit Neural Representations with Periodic Activation Functions
similar paper


The most simple connection you can make with jsPlumb looks like this:
jsPlumb.connect({source:"element1", target:"element2"});
In this example we have created a Connection from 'element1' to 'element2'. Remember that a Connection in jsPlumb consists of two Endpoints, a Connector, and zero or more Overlays. But this call to 'connect' supplied none of those things, so jsPlumb uses the default values wherever it needs to. In this case, default values have been used for the following:
Bottom
.So this call will result in an 8px Bezier, colored "#456", from the bottom center of 'element1' to the bottom center of 'element2', and each Endpoint will be a 10px radius Dot Endpoint, colored "#456".
Let's beef up this call a little and tell jsPlumb what sort of Endpoints we want, and where we want them:
jsPlumb.connect({
source:"element1",
target:"element2",
anchors:["Right", "Left" ],
endpoint:"Rectangle",
endpointStyle:{ fill: "yellow" }
});
This is what we have told jsPlumb we want this time:
anchors
you can use anchor
, if you want the source and target Endpoints to be located at the same place on their parent elements.Rectangle
Endpoint for both the source and target of the Connection. As with anchors, endpoint
has a plural version that allows you to specify a different Endpoint for each end of the Connection.A fairly common situation you will find yourself in is wanting to create a bunch of Connections that have only minor differences between them. To support that, jsPlumb.connect
takes an optional second argument. For example:
var common = {
anchors:[ "BottomCenter", "TopCenter" ],
endpoints:["Dot", "Blank" ]
};
jsPlumb.connect({ source:"someElement", target:"someOtherElement" }, common);
jsPlumb.connect({ source:"aThirdElement", target:"yetAnotherElement" }, common);
If you supply an element id or selector for either the source or target, jsPlumb.connect will automatically create an Endpoint on the given element. These automatically created Endpoints are not marked as drag source or targets, and cannot be interacted with. For some situations this behaviour is perfectly fine, but for more interactive UIs you should set things up using one of the drag and drop methods discussed below.
Note: given that jsPlumb.connect
creates its own Endpoints in some circumstances, in order to avoid leaving orphaned Endpoints around the place, if the Connection is subsequently deleted, these automatically created Endpoints are deleted too. Should you want to, you can override this behaviour by setting deleteEndpointsOnDetach
to false in the connect call:
jsPlumb.connect({
source:"aThirdElement",
target:"yetAnotherElement",
deleteEndpointsOnDetach:false
});
By default, connections made with jsPlumb.connect
will be detachable via the mouse. You can prevent this by either setting an appropriate default value:
jsPlumb.importDefaults({
...
ConnectionsDetachable:false
...
});
...or by specifying it on the connect call like this:
jsPlumb.connect({
source:"aThirdElement",
target:"yetAnotherElement",
detachable:false
});
To support drag and drop connections, you first need to set a few things up. Every drag and drop connection needs at least a source Endpoint that the user can drag a connection from. Here's a simple example of how to create an Endpoint:
var endpointOptions = { isSource:true };
var endpoint = jsPlumb.addEndpoint('elementId', endpointOptions);
This Endpoint will act as a source for new Connections, and will use the jsPlumb defaults for its own appearance and that of any Connections that are drawn from it.
One thing that happens quite often is that you have an Endpoint whose appearance and behaviour is largely the same between usages on different elements, with just a few differences.
var exampleGreyEndpointOptions = {
endpoint:"Rectangle",
paintStyle:{ width:25, height:21, fill:'#666' },
isSource:true,
connectorStyle : { stroke:"#666" },
isTarget:true
};
Notice there is no anchor
set. Here we apply it to two elements, at a different location in each:
jsPlumb.addEndpoint("element1", {
anchor:"Bottom"
}, exampleGreyEndpointOptions));
jsPlumb.addEndpoint("element2", {
anchor:"Top"
}, exampleGreyEndpointOptions));
Now that you have a source Endpoint, you need to either create a target Endpoint on some element, or notify jsPlumb that you wish to make an entire element a drop target. Let's look at how to attach a target Endpoint first:
var endpointOptions = { isTarget:true, endpoint:"Rectangle", paintStyle:{ fill:"gray" } };
var endpoint = jsPlumb.addEndpoint("otherElementId", endpointOptions);
This Endpoint, a gray rectangle, has declared that it can act as a drop target for Connections.
jsPlumb also supports turning entire elements into Connection sources and targets, using the methods makeSource
and makeTarget
. With these methods you mark an element as a source or target, and provide an Endpoint specification for jsPlumb to use when a Connection is established. makeSource
also gives you the ability to mark some child element as the place from which you wish to drag Connections, but still have the Connection on the main element after it has been established.
These methods honour the jsPlumb defaults - if, for example you set up the default Anchors to be this:
jsPlumb.importDefaults({
Anchors : [ "Left", "BottomRight" ]
});
... and then used makeSource
and makeTarget
without specifying Anchor locations, jsPlumb would use Left
for the makeSource
element and BottomRight
for the makeTarget
element.
A further thing to note about makeSource
and makeTarget
is that any prior calls to one of these methods is honoured by subsequent calls to jsPlumb.connect
. This helps when you're building a UI that uses this functionality at runtime but which loads some initial data, and you want the statically loaded data to have the same appearance and behaviour as dynamically created Connections (obviously quite a common use case).
For example:
jsPlumb.makeSource("el1", {
anchor:"Continuous",
endpoint:["Rectangle", { width:40, height:20 }],
maxConnections:3
});
...
jsPlumb.connect({source:"el1", target:"el2"});
In this example, the source of the connection will be a Rectangle of size 40x20, having a Continuous Anchor. The source is also configured to allow a maximum of three Connections.
You can override this behaviour by setting a newConnection
parameter on the connect call:
jsPlumb.makeSource("el1", {
anchor:"Continuous",
endpoint:["Rectangle", { width:40, height:20 }],
maxConnections:1,
onMaxConnections:function(params, originalEvent) {
// params contains:
// {
// endpoint:..
// connection:...
// maxConnections:N
// }
//
}
});
...
jsPlumb.connect({
source:"el1",
target:"el2",
newConnection:true
});
Note the onMaxConnections
parameter to this call - it allows you to supply a function to call if the user tries to
drag a new Connection when the source has already reached capacity.
As with jsPlumb.connect
, makeSource
can take an optional third argument consisting of parameters that may be common across several different calls:
var common = {
anchor:"Continuous",
endpoint:["Rectangle", { width:40, height:20 }],
};
jsPlumb.makeSource("el1", {
maxConnections:1,
onMaxConnections:function(params, originalEvent) {
console.log("element is ", params.endpoint.element, "maxConnections is", params.maxConnections);
}
}, common);
This method takes two arguments, the first of which specifies some element (or list of elements); the second specifies
the Endpoint you wish to create on that element whenever a Connection is established on it. In this example we will use
the exact same target Endpoint we used before - the gray rectangle - but we will tell jsPlumb that the element
aTargetDiv
will be the drop target:
var endpointOptions = {
isTarget:true,
maxConnections:5,
endpoint:"Rectangle",
paintStyle:{ fill:"gray" }
};
jsPlumb.makeTarget("aTargetDiv", endpointOptions);
The allowed values in 'endpointOptions' are identical for both the jsPlumb.addEndpoint
and jsPlumb.makeTarget
methods,
but makeTarget
supports an extended Anchor syntax that allows you more control over the location of the target endpoint.
This is discussed below.
Notice in the endpointOptions
object above there is a parameted called isTarget
- this may seem incongruous, since
you know you're going to make some element a target. Remember that the endpointOptions
object is the information
jsPlumb will use to create an Endpoint on the given target element each time a Connection is established to it. It
takes the exact same format as you would pass to addEndpoint
; makeTarget
is essentially a deferred addEndpoint
call followed by a connect
call. So in this case, we're telling jsPlumb that any Endpoints it happens to create on
some element that was configured by the makeTarget
call are themselves Connection targets. You may or may not want
this behaviour in your application - just control it by setting the appropriate value for that parameter (it defaults
to false).
makeTarget
also supports the maxConnections
and onMaxConnections
parameters, as makeSource
does, but note that
onMaxConnections
is passed one extra parameter than its corresponding callback from makeSource
- the Connection
the user tried to drop:
jsPlumb.makeTarget("aTargetDiv", {
isTarget:true,
maxConnections:5,
endpoint:"Rectangle",
paintStyle:{ fill:"gray" },
maxConnections:3,
onMaxConnections:function(params, originalEvent) {
console.log("user tried to drop connection", params.connection, "on element", params.endpoint.element, "with max connections", params.maxConnections);
}
};
As with jsPlumb.connect
and jsPlumb.makeSource
, jsPlumb.makeTarget
can take an optional third argument consisting
of parameters that may be common across several different calls:
var common = {
anchor:"Continuous",
endpoint:["Rectangle", { width:40, height:20 }],
};
jsPlumb.makeTarget("el1", {
maxConnections:1,
onMaxConnections:function(params, originalEvent) {
console.log("element is ", params.endpoint.element, "maxConnections is", params.maxConnections);
}
}, common);
In vanilla jsPlumb only, you can instruct jsPlumb to prevent loopback connections without having to resort to a beforeDrop interceptor. You do this by setting allowLoopback:false
on the parameters passed to the makeTarget
method:
jsPlumb.makeTarget("foo", {
allowLoopback:false
});
By default, any Endpoints created using makeTarget have deleteEndpointsOnDetach
set to true, which means that once all Connections to that Endpoint are removed, the Endpoint is deleted. You can override this by setting the flag to true on the makeTarget
call:
var endpointOptions = {
isTarget:true,
maxConnections:5,
uniqueEndpoint:true,
deleteEndpointsOnDetach:false,
endpoint:"Rectangle",
paintStyle:{ fill:"gray" }
};
jsPlumb.makeTarget("aTargetDiv", endpointOptions);
In this setup we have told jsPlumb to create an Endpoint the first time aTargetElement
receives a Connection, and to not delete it even if there are no longer any Connections to it. The created Endpoint will be reused for subsequent Connections, and can support a maximum of 5.
As with jsPlumb.connect
, Connections made with the mouse after setting up Endpoints with one of the functions we've just covered will be, by default, detachable. You can prevent this in the jsPlumb defaults, as previously mentioned:
jsPlumb.importDefaults({
...
ConnectionsDetachable:false,
...
});
And you can also set this on a per-endpoint (or source/target) level, like in these examples:
jsPlumb.addEndpoint("someElementId", {
connectionsDetachable:false
});
jsPlumb.makeSource("someOtherElement", {
...
connectionsDetachable:false,
...
});
jsPlumb.makeTarget("yetAnotherElement", {
...
connectionsDetachable:false,
...
});
Note that in the jsPlumb defaults, by convention each word in a parameter is capitalised ("ConnectionsDetachable"), whereas for a call to one of these methods, we use camel case ("connectionsDetachable").
When using the makeTarget
method, jsPlumb allows you to provide a callback function to be used to determine
the appropriate location of a target Anchor for every new Connection dropped on the given target. It may be the case that you want to take some special action rather than just relying on one of the standard Anchor mechanisms.
This is achieved through an extended Anchor syntax (note that this syntax is not supported in the jsPlumb.addEndpoint
method) that supplies a "positionFinder" to the anchor specification. jsPlumb provides two of these by default; you can register your own on jsPlumb and refer to them by name, or just supply a function. Here's a few examples:
jsPlumb.makeTarget("someElement", {
anchor:[ "Assign", {
position:"Fixed"
}]
});
Fixed
is one of the two default position finders provided by jsPlumb. The other is Grid
:
jsPlumb.makeTarget("someElement", {
anchor:[ "Assign", {
position:"Grid",
grid:[3,3]
}]
});
The Grid position finder takes a grid
parameter that defines the size of the grid required. [3,3] means 3 rows and 3 columns.
To supply your own position finder to jsPlumb you first need to create the callback function. First let's take a look at what the source code for the Grid
position finder looks like:
function(eventOffset, elementOffset, elementSize, constructorParams) {
var dx = eventOffset.left - elementOffset.left, dy = eventOffset.top - elementOffset.top,
gx = elementSize[0] / (constructorParams.grid[0]),
gy = elementSize[1] / (constructorParams.grid[1]),
mx = Math.floor(dx / gx), my = Math.floor(dy / gy);
return [ ((mx * gx) + (gx / 2)) / elementSize[0], ((my * gy) + (gy / 2)) / elementSize[1] ];
}
The four arguments are:
The return value of this function is an array of [x, y] - proportional values between 0 and 1 inclusive, such as you can pass to a static Anchor.
To make your own position finder you need to create a function that takes those four arguments and returns an [x, y] position for the anchor, for example:
jsPlumb.AnchorPositionFinders.MyFinder = function(dp, ep, es, params) {
... do some maths ...
console.log("my custom parameter is ", params.myCustomParameter);
return [ x, y ];
};
Then refer to it in a makeTarget call:
jsPlumb.makeTarget("someElement", {
anchor:[ "Assign", {
position:"MyFinder",
myCustomParameter:"foo",
anInteger:5
}]
});
There are two use cases supported by this method. The first is the case that you want to drag a Connection from the element itself and have an Endpoint attached to the element when a Connection is established. The second is a more specialised case: you want to drag a Connection from the element, but once the Connection is established you want jsPlumb to move it so that its source is on some other element.
Here's an example code snippet for the basic use case of makeSource:
jsPlumb.makeSource(someDiv, {
paintStyle:{ fill:"yellow" },
endpoint:"Blank",
anchor:"BottomCenter"
});
Notice again that the second argument is the same as the second argument to an addEndpoint
call. makeSource
is, essentially, a type of addEndpoint
call. In this example we have told jsPlumb that we will support dragging Connections directly from someDiv
. Whenever a Connection is established between someDiv
and some other element, jsPlumb assigns an Endpoint at BottomCenter of someDiv
, fills it yellow, and sets that Endpoint as the newly created Connection's source.
Configuring an element to be an entire Connection source using makeSource
means that the element cannot itself be draggable. There would be no way for jsPlumb to distinguish between the user attempting to drag the element and attempting to drag a Connection from the element. To handle this there is the filter
parameter.
filter
parameterYou can supply a filter
parameter to the makeSource call, which can be either a function or a selector. Consider this markup:

FOO
<button>click me</button>

Let's suppose we do not want to interfere with the operation of the "click me" button.
We can supply a selector filter to the makeSource
call to do so:
jsPlumb.makeSource("foo", {
filter:":not(button)"
});
Valid values for a filter selector are as per the spec.
One of the limitations of CSS3 selectors is that the contents of a :not
selector are restricted to what are called simple selectors. What this means is that only one item may appear inside a :not
, eg. :not(.someClass)
, :not(button)
etc. You cannot, however, do something like this: :not(.myClass button)
.
To allow for these sorts of negation selectors, you can set the filterExclude:true
flag and re-write your selector:
jsPlumb.makeSource("foo", {
filter:"span",
filterExclude:true
});
Alternatively, you can supply a function as the filter:
jsPlumb.makeSource("foo", {
filter:function(event, element) {
return event.target.tagName !== "BUTTON";
}
});
In this example, if the filter returns anything other than a boolean false, the drag will begin. It's important to note that only boolean false will prevent a drag. False-y values will not.
There are many things you can set in an Endpoint options object; for a thorough list see the API documentation for Endpoint.
Here's an example of specifying that you want an Arrow overlay halfway along any Connection dragged from this Endpoint:
var exampleGreyEndpointOptions = {
endpoint:"Rectangle",
paintStyle:{ width:25, height:21, fill:'#666' },
isSource:true,
connectorStyle : { stroke:"#666" },
isTarget:true,
connectorOverlays: [ [ "Arrow", { location:0.5 } ] ]
};
This is an Endpoint that moves around the element it is attached to dependent on the location of other elements in the connections it is attached to (a 'dynamic' anchor):
var exampleGreyEndpointOptions = {
endpoint:"Rectangle",
paintStyle:{ width:25, height:21, fill:'#666' },
isSource:true,
connectorStyle : { stroke:"#666" },
isTarget:true,
connectorOverlays: [ [ "Arrow", { location:0.5 } ] ]
anchor:[ "TopCenter","RightMiddle","BottomCenter","LeftMiddle" ]
};
You can test if some element has been made a connection source or target using these methods:
isTarget(some id, selector or DOM element)
isSource(some id, selector or DOM element)
The return value is a boolean.
You can toggle the state of some source or target using these methods:
setTargetEnabled(some id, selector or DOM element)
setSourceEnabled(some id, selector or DOM element)
The return value from these methods is the current jsPlumb instance, allowing you to chain them:
jsPlumb.setTargetEnabled("aDivId").setSourceEnabled($(".aSelector"));
Note that if you call either of these methods on an element that was not originally configured as a target or source, nothing will happen.
You can check the enabled state of some target or source using these methods:
isTargetEnabled(some id, selector or DOM element)
isSourceEnabled(some id, selector or DOM element)
makeTarget
and/or makeSource
callsjsPlumb offers four methods to let you cancel previous makeTarget
or makeSource
calls. Each of these methods returns the current jsPlumb instance, and so can be chained:
unmakeTarget(some id, selector or DOM element)
unmakeSource(some id, selector or DOM element)
unmakeEveryTarget
unmakeEverySource
These last two are analogous to the removeEveryConnection
and deleteEveryEndpoint
methods that have been in jsPlumb for a while now.
unmakeTarget
and unmakeSource
both take as argument the same sorts of values that makeTarget
and makeSource
accept - a string id, or a selector, or an array of either of these:
jsPlumb.unmakeTarget("aDivId").unmakeSource($(".aSelector"));
jsPlumb will create a new Endpoint using the supplied information every time a new Connection is established on a source or target element, by default, but you can override this behaviour and tell jsPlumb that it should create at most one Endpoint, which it should attempt to use for subsequent Connections:
var endpointOptions = {
isTarget:true,
uniqueEndpoint:true,
endpoint:"Rectangle",
paintStyle:{ fill:"gray" }
};
jsPlumb.makeTarget("aTargetDiv", endpointOptions);
Here, the uniqueEndpoint
parameter tells jsPlumb that there should be at most one Endpoint on this element.
Notice that maxConnections
is not set: the default is 1, so in this setup we have told jsPlumb that aTargetDiv
can receive one Connection and no more.
The same parameter can be supplied to makeSource
:
var endpointOptions = {
isSource:true,
uniqueEndpoint:true,
endpoint:"Rectangle",
paintStyle:{ fill:"gray" }
};
jsPlumb.makeSource("aSourceDiv", endpointOptions);
You can instruct jsPlumb to create a new Endpoint using the supplied information before any Connections have been established on a source or target element:
var endpointOptions = {
isTarget:true,
createEndpoint:true,
endpoint:"Rectangle",
paintStyle:{ fill:"gray" }
};
jsPlumb.makeTarget("aTargetDiv", endpointOptions);
Setting createEndpoint
to true
will cause jsPlumb to also implicitly set uniqueEndpoint
to be true. The characteristics of
the behaviour of this Endpiont will be as discussed above in the section on uniqueEndpoint
.
The same parameter can be supplied to makeSource
:
var endpointOptions = {
isSource:true,
createEndpoint:true,
endpoint:"Rectangle",
paintStyle:{ fill:"gray" }
};
jsPlumb.makeSource("aSourceDiv", endpointOptions);
These are options that will be passed through to the supporting library's drag API. jsPlumb passes everything you supply here through, inserting wrapping functions if necessary for the various lifecycle events that jsPlumb needs to know about. So if, for example, you pass a function to be called when dragging starts, jsPlumb will wrap that function with a function that does what jsPlumb needs to do, then call yours.
At the time of writing, jsPlumb supports jQuery, as well as having its own built-in support (actually supplied by a bundled library called Katavorio. If you're using jQuery you can supply jQuery drag option as values on the dragOptions; the best drag library to use, though, is Katavorio, which is bundled in vanilla jsPlumb from 1.6.0 onwards: it supports everything jQuery drag supports, as well as multiple scopes and multiple element dragging.
Given that the options here are library-specific, and they are all well-documented, we're going to discuss just the three drag options that behave the same way in all (see below for hoverClass):
For more information about drag options, take a look at the Katavorio docs.
Drop options are treated by jsPlumb in the same way as drag options - they are passed through to the underlying library.
Here are three common Katavorio droppable options that you might want to consider using:
jsPlumb borrowed the concept of 'scope' from jQuery's drag/drop implementation: the notion of which draggables can be dropped on which droppables.
In jsPlumb you can provide a 'scope' entry when creating an Endpoint. Here's the example grey Endpoint example with 'scope' added:
var exampleGreyEndpointOptions = {
endpoint:"Rectangle",
paintStyle:{ width:25, height:21, fill:"#666" },
isSource:true,
connectionStyle : { stroke:"#666" },
isTarget:true,
scope:"exampleGreyConnection"
};
If you do not provide a 'scope' entry, jsPlumb uses a default scope. Its value is accessible through this method:
jsPlumb.getDefaultScope();
If you want to change it for some reason you can do so with this method:
jsPlumb.setDefaultScope("mySpecialDefaultScope");
You can also, should you want to, provide the scope value separately on the drag/drop options, like this:
var exampleGreyEndpointOptions = {
endpoint:"Rectangle",
paintStyle:{ width:25, height:21, fill:'#666' },
isSource:true,
connectionStyle : { stroke:"#666" },
isTarget:true,
dragOptions:{ scope:"dragScope" },
dropOptions:{ scope:"dropScope" }
};
If you're using vanilla jsPlumb you can assign multiple scopes to some Endpoint, or element configured via makeSource
or makeTarget
. To do so, provide the scopes as a space-separated list, as you would with CSS classes:
var exampleGreyEndpointOptions = {
endpoint:"Rectangle",
paintStyle:{ width:25, height:21, fill:"#666" },
isSource:true,
connectionStyle : { stroke:"#666" },
isTarget:true,
scope:"foo bar baz"
};
jsPlumb offers a few methods for changing the scope(s) of some element configured via makeSource
or makeTarget
:
setScope(el, scopeString)
Sets both the source and target scope(s) for the given element.setSourceScope(el, scopeString)
Sets the source scope(s) for the given element.setTargetScope(el, scopeString)
Sets both the target scope(s) for the given element.By default, jsPlumb will allow you to detach connections from either Endpoint by dragging (assuming the Endpoint allows it;
Blank Endpoints, for example, have nothing you can grab with the mouse). If you then drop a Connection you have dragged
off an Endpoint, the Connection will be detached. This behaviour can be controlled using the detachable
and reattach
parameters, or their equivalents in the jsPlumb Defaults.
Some examples should help explain:
jsPlumb.connect({ source:"someElement", target:"someOtherElement" });
jsPlumb.connect({ source:"someElement", target:"someOtherElement", detachable:false });
jsPlumb.connect({ source:"someElement", target:"someOtherElement", reattach:true });
This behaviour can also be controlled using jsPlumb defaults:
jsPlumb.importDefaults({
ConnectionsDetachable:true,
ReattachConnections:true
});
The default value of ConnectionsDetachable is true, and the default value of ReattachConnections is false, so in actual fact those defaults are kind of pointless. But you probably get the idea.
Endpoints support the detachable
and reattach
parameters too. If you create an Endpoint and mark detachable:false
,
then all Connections made from that Endpoint will not be detachable. However, since there are two Endpoints involved in
any Connection, jsPlumb takes into account the detachable
and reattach
parameters from both Endpoints when establishing
a Connection. If either Endpoint declares either of these values as true, jsPlumb assumes the value to be true. It is
possible that in a future version of jsPlumb the concepts of detachable and reattach could be made more granular, through the
introduction of parameters like sourceDetachable
/targetReattach
etc.
If you drag a Connection from its target Endpoint you can then drop it on another suitable target Endpoint - suitable
meaning that it is of the correct scope and it is not full. If you try to drop a Connection on another target that is full,
the drop will be aborted and then the same rules will apply as if you had dropped the Connection in whitespace: if
reattach
is set, the Connection will reattach, otherwise it will be removed.
You can drag a Connection from its source Endpoint, but you can only drop it back on its source Endpoint - if you try
to drop it on any other source or target Endpoint jsPlumb will treat the drop as if it happened in whitespace. Note
that there is an issue with the hoverClass
parameter when dragging a source Endpoint: target Endpoints are assigned the
hover class, as if you could drop there. But you cannot; this is caused by how jsPlumb uses the underlying library's
drag and drop, and is something that will be addressed in a future release.


xmake is a lightweight cross-platform build tool based on Lua. It uses xmake.lua to maintain project builds. Compared with makefile/CMakeLists.txt, the configuration syntax is more Concise and intuitive, it is very friendly to novices, and you can get started quickly in a short time, allowing users to focus more on actual project development.
In version 2.5.5, we continue to improve the experience of remote package integration, realize the pre-compiled package in the cloud, and then directly download the integrated pre-compiled binary package. This can greatly reduce the installation time of some packages that are very slow to compile.
In addition, in the new version, we have also re-implemented the new version of the local package generation scheme, which fully supports add_requires
and add_packages
seamlessly. From then on, remote packages and local packages can be maintained in a unified way.
New feature introduction
Download and install the pre-compiled package
Each time you install a package by the built-in package manager of xmake, you must download the corresponding package source code, and then perform local compilation and installation integration. This is for some large packages that compile very slowly, and some packages that rely on a lot of compilation tools. It will be very slow.
Especially on windows, not only the dependence of the third party package on the compilation environment is more complicated, but also many packages and compilation are very slow, such as boost, openssl and so on.
To this end, we implement cloud pre-compilation of packages based on github action, and pre-compile all commonly used packages, and then store them in build-artifacts under Releases of the repository.
Then, when we install the package, we will automatically download it from the binary image package source to achieve rapid integration (currently only pre-compiled windows packages are supported, and will be gradually released to other platforms in the future).
We will pre-compile various configuration combinations such as plat/arch/MT/MD/static/shared of each package, and accurately pull the packages that users actually need according to the unique buildhash. All compiled products will be compressed and packaged with 7zip, as follows Picture:
Configure mirror source to accelerate download
Since our pre-compiled products are all placed on github, for Chinese users, considering that access to github is not very stable, we can also use the xmake mirror proxy function to automatically switch the actual download to fastgit and other mirror sites to speed up the download.
We can configure mirror proxy rules through a pac.lua file, for example, access to all github.com domain names is switched to the hub.fastgit.org domain name to speed up downloading packages.
pac.lua configuration:
function mirror(url)
return url:gsub("github.com", "hub.fastgit.org")
end
Then we set this pac.lua file, the default path is ~/.xmake/pac.lua
, or you can manually configure pac.lua using the specified location.
$ xmake g --proxy_pac=/tmp/pac.lua
Then, when we install the package, if we encounter the package source under the github.com domain name, it will automatically switch to the fastgit mirror to accelerate the download when downloading.
$ xrepo install libpng
> curl https://hub.fastgit.org/glennrp/libpng/archive/v1.6.37.zip -o v1.6.37.zip
Therefore, all downloads of pre-compiled products will also be speeded up. Of course, more than Fastgit provides github mirror acceleration in China, and users can also switch to other mirror sources, such as cnpmjs.org and so on.
How to trigger cloud pre-compilation
By default, xmake will not actively perform cloud pre-compilation and caching of all packages, which is too time-consuming and labor-intensive. Currently, only the pr is submitted to xmake-repo The official package repository, when a new package is included or the package version is updated, the cloud pre-compilation behavior of the corresponding package will be automatically triggered.
Therefore, if users want to contribute packages to our warehouse, they can basically be precompiled and cached (except for headeronly libraries), and if users do not want to contribute packages, but also want to get the precompilation acceleration of the corresponding package, it is also possible.
Just submit pr to the build branch of the build-artifacts repository, edit build.txt file, just modify the package name and version list that needs to trigger pre-compilation, for example:
build.txt
{
name = "asmjit",
versions = {
"2021.06.27"
}
}
As long as pr is merged, it will automatically trigger the pre-compilation behavior, and then generate the final compilation product to releases.
Mandatory source code compilation and installation
Although we provide a pre-compilation, download and installation method, if users still want to compile and install from source code, we can also manually pass in the --build
parameter to the xrepo command to force switch to source code compilation and installation mode.
$ xrepo install --build openssl
In xmake.lua, we can also support source code compilation and installation.
add_requires("openssl", {build = true})
If it is not specified, then xmake will automatically try to download and install the precompiled package first.
Add a private pre-compiled package warehouse
Our official pre-compiled package repository is at: build-artifacts.
Similarly, we can also configure and add our own pre-compiled warehouse, the way to add is similar:
$ xmake repo --add local-repo git@github.com:xmake-mirror/myrepo-artifacts.git
You can also add in xmake.lua:
add_repositories("local-repo git@github.com:xmake-mirror/myrepo-artifacts.git")
New version of the land package plan
Default packaging format
In the new version, we provide a new local package packaging solution that will seamlessly connect add_requires
and add_packages
.
We can execute the xmake package
command to generate the default new version of the packaging format.
$ xmake package
package(foo): build/packages/f/foo generated
It will generate the file build/packages/f/foo/xmake.lua
with the following content:
package("foo")
set_description("The foo package")
set_license("Apache-2.0")
add_deps("add", "sub")
on_load(function (package)
package:set("installdir", path.join(os.scriptdir(), package:plat(), package:arch(), package:mode()))
end)
on_fetch(function (package)
local result = {}
result.links = "foo"
result.linkdirs = package:installdir("lib")
result.includedirs = package:installdir("include")
return result
end)
In fact, it uses package()
to define and describe local packages, just like remote packages.
The generated directory structure is as follows:
$ tree build/packages/f/foo/
build/packages/f/foo/
├── macosx
│ └── x86_64
│ └── release
│ ├── include
│ │ └── foo.h
│ └── lib
│ └── libfoo.a
└── xmake.lua
We can also use the add_requires
/add_repositories
interface to seamlessly integrate this package.
add_rules("mode.debug", "mode.release")
add_repositories("local-repo build")
add_requires("foo")
target("bar")
set_kind("binary")
add_files("src/*.cpp")
add_packages("foo")
Among them, the add_repositories
configuration specifies the warehouse root directory of the local package, and then this package can be referenced through add_requires
.
In addition, the generated local package has another feature, which is to support target/add_deps
, which automatically associates the dependencies of multiple packages, and automatically connects all dependency links during integration.
Here is the complete test example.
"/usr/bin/xcrun -sdk macosx clang++" -o build/macosx/x86_64/release/bar build/.objs/bar/macosx/x86_64/release/src/main.cpp.o -arch x86_64 -mmacosx-version -min=10.15 -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -stdlib=libc++
-L/Users/ruki/projects/personal/xmake/tests/actions/package/localpkg/bar/build/packages/f/foo/macosx/x86_64/release/lib
-L/Users/ruki/projects/personal/xmake/tests/actions/package/localpkg/bar/build/packages/s/sub/macosx/x86_64/release/lib
-L/Users/ruki/projects/personal/xmake/tests/actions/package/localpkg/bar/build/packages/a/add/macosx/x86_64/release/lib
-Wl,-x -lfoo -lsub -ladd -lz
Note: The previous old version of the local packaging format is an early product and will still be retained, but it is not recommended to continue to use. If you want to continue to use it, you can execute the following command to package:
$ xmake package -f oldpkg
Generate remote package
In addition to the local package format, xmake package
now also supports generating remote packages, so that users can quickly submit them to remote warehouses.
We only need to modify the package format when packaging.
$ xmake package -f remote
He will also generate packages/f/foo/xmake.lua file.
package("foo")
set_description("The foo package")
set_license("Apache-2.0")
add_deps("add", "sub")
add_urls("https://github.com/myrepo/foo.git")
add_versions("1.0", "<shasum256 or gitcommit>")
on_install(function (package)
local configs = {}
if package:config("shared") then
configs.kind = "shared"
end
import("package.tools.xmake").install(package, configs)
end)
on_test(function (package)
- TODO check includes and interfaces
- assert(package:has_cfuncs("foo", {includes = "foo.h"})
end)
Compared with the local package, the package definition configuration has more actual installation logic, as well as the settings of urls and versions,
We can also modify urls, versions and other configuration values through additional parameters, for example:
$ xmake package -f remote --url=https://xxxx/xxx.tar.gz --shasum=xxxxx --homepage=xxxxx`
xmake will also read the relevant configuration information from the target’s set_license
and set_version
configurations.
Search for packages from third-party warehouses
The built-in xrepo package manager command of xmake previously supported searching the built-in packages in the xmake-repo repository.
$ xrepo search zlib "pcr*"
zlib:
-> zlib: A Massively Spiffy Yet Delicately Unobtrusive Compression Library (in xmake-repo)
pcr*:
-> pcre2: A Perl Compatible Regular Expressions Library (in xmake-repo)
-> pcre: A Perl Compatible Regular Expressions Library (in xmake-repo)
And now, we can also search for their packages from third-party package managers such as vcpkg, conan, conda and apt, just add the corresponding package namespace, for example:
$ xrepo search vcpkg::pcre
The package names:
vcpkg::pcre:
-> vcpkg::pcre-8.44#8: Perl Compatible Regular Expressions
-> vcpkg::pcre2-10.35#2: PCRE2 is a re-working of the original Perl Compatible Regular Expressions library
$ xrepo search conan::openssl
The package names:
conan::openssl:
-> conan::openssl/1.1.1g:
-> conan::openssl/1.1.1h:
Modify the target file name
We know that for the modification of the target file name, we can use set_basename
or use the set_filename
interface to configure the implementation. The former modifies the name of the xxx
part of libxxx.so
and the latter can modify the complete file name.
But in some cases, we just want to modify: extension .so
, prefix name lib
, or adding suffix name such as: libxxx-d.so
will be very troublesome, or use set_filename
for complete modification.
Now, we newly provide three independent interfaces set_prefixname
, set_suffixname
and set_extension
to configure them more flexibly.
Set the leading name of the target file
For example, change the default: libtest.so
to test.so
target("test")
set_prefixname("")
Set the postname of the target file
For example, change the default: libtest.so
to libtest-d.so
target("test")
set_suffixname("-d")
Set the extension of the target file
For example, change the default: libtest.so
to test.dll
target("test")
set_prefixname("")
set_extension(".dll")
Default target type
In the new version, if the user does not specify the target type in the target setting set_kind
, then the default is the binary program.
Therefore, we can achieve smaller configurations, such as:
target("test")
add_files("src/*.c")
Compilation of some small projects can be completed in just two lines, or even shorter:
target("test", {files = "src/*.c"})
New appletvos compilation platform
We have also added a new appletvos compilation platform to support the compilation of programs on Apple’s TVOS system. All you need is:
$ xmake f -p appletvos
$ xmake
Import and export compile configuration
We can also import and export the configured configuration set to facilitate the rapid migration of the configuration.
Export configuration
$ xmake f --export=/tmp/config.txt
$ xmake f -m debug --xxx=y --export=/tmp/config.txt
Import configuration
$ xmake f --import=/tmp/config.txt
$ xmake f -m debug --xxx=y --import=/tmp/config.txt
Export configuration (with menu)
$ xmake f --menu --export=/tmp/config.txt
$ xmake f --menu -m debug --xxx=y --export=/tmp/config.txt
Import configuration (with menu)
$ xmake f --menu --import=/tmp/config.txt
$ xmake f --menu -m debug --xxx=y --import=/tmp/config.txt
vs2022 support
In addition, in the new version, we have also added support for the preview version of vs2020.
Improve xrepo shell environment
In the last version, we supported customizing some package configurations by adding the xmake.lua file in the current directory, and then entering a specific package shell environment.
add_requires("zlib 1.2.11")
add_requires("python 3.x", "luajit")
$ xrepo env shell
> python --version
> luajit --version
And now, we can also configure and load the corresponding toolchain environment in xmake.lua, for example, load the VS compilation environment.
set_toolchains("msvc")
Changelog
New features
- #1421: Add prefix, suffix and extension options for target names
- #1422: Support search packages from vcpkg, conan
- #1424: Set binary as default target kind
- #1140: Add a way to ask xmake to try to download dependencies from a certain package manager
- #1339: Improve
xmake package
to generate new local/remote packages - Add
appletvos
platform support for AppleTV,xmake f -p appletvos
- #1437: Add headeronly library type for package to ignore
vs_runtime
- #1351: Support export/import current configs
- #1454: Support to download and install precompiled image packages from xmake-mirror
Change
- #1425: Improve tools/meson to load msvc envirnoments
- #1442: Support to clone package resources from git url
- #1389: Support to add toolchain envs to
xrepo env
- #1453: Support to export protobuf includedirs
- Support vs2022


three.js
webgl demo : Earth diffuse and city lights by
Sean Ward
Low Dynamic Range
Static Tone Mapping
High Dynamic Range
Static Tone Mapping
High Dynamic Range
Adaptive Tone Mapping


This page provides an interactive demo of <fjs-text>. It's also used by the Protractor integration tests (so be careful about changing it).


iPuzzler
A JavaScript web component for publishing interactive crossword puzzles in iPuz format
{{ content }}


A day to bring together the designers and developers of the future of the web.
On Wednesday 9th April, back-to-back with JSConf AU, the historic Melbourne Arts House will be filled with international and local experts, tasty food, great coffee, and plenty to talk about.
Melbourne Arts House, 1874
It will be a special one-track, one-day conference following on from the fantastic CSSConf US and CSSConf EU events. There’ll also be some fun activities around the conference day, allowing you to see parts of wonderful Melbourne and hang out with some new friends.
Tickets go on sale early 2014 and will be strictly limited.
Ticket availability will be announced via our mailing list and the @cssconfau Twitter account. Sign up below to ensure you don’t miss out:
A number of student and scholarship tickets will be available to those who need them.
Team
The core organising group is @benschwarz, @mobywhale, @xzyfer, @glenmaddern and @toolmantim. We’ve run community events all around Australia including JSConf, RubyConf, SydCSS and Rails Camp.
Sponsorship
We’re looking for fantastic companies to help make this event possible. If you think your company could help, please drop an email to sponsors@THISDOMAIN.
Talk Proposals
There’ll be a number of slots open for talk proposals. We’ll announce shortly what the submission and selection process will be.
Spread the word
If you know someone that you’d like to be at the first CSSConf Australia, either to speak or just to hang out with, then let them know. If you don’t know anyone in particular, ask your Twitter peeps! Let’s try to get as many great people together as we can.
Code of Conduct
CSSConf Australia strives to be an inclusive, safe, accessible and fun event for everyone involved. It’s an important condition of participation that all organisers, sponsors and attendees follow the Conference Code of Conduct at the conference and related events.
Get in touch
You can contact us on Twitter at @cssconfau and by email at team@THISDOMAIN.


SPO Teller Affiliate provides a complimentary bonus when users share a SPO Teller Affiliate link to their friends, it is a secure and smart program invented by SPO.
If your referral purchases SPO via your affiliate link, you will receive a complimentary bonus.
When purchases coming from you or your affiliate accumulate to a certain level, you will receive different levels of bonuses.