CSS minification benchmark results
Providing a Public Salary History Page
Introducing Coalton: How to Have Our (Typed) Cake and (Safely) Eat It Too, in Common Lisp
WhatsApp – Security of End-to-End Encrypted Backups
Reflections on Burnout
Can we add the -graphy to the crypto tag?
Wireless Charging Power Side-Channel Attacks
Feature gate database designed for simplicity and efficiency
I trained a computer to do math (2020)
Exercism v3 has launched
An xrdesktop summer of code
L-arginine in severe Covid-19 decreases the length of hospitalization
POW Captcha: a lightweight, self-hosted proof-of-work captcha
Twitch Sues Users over Alleged ‘Hate Raids’ Against Streamers
AtoB (YC S20) – Stripe for Transportation – hiring early engineers and operators
5.14 and the future of MuQSS and -ck once again
Our Trip to the Prime Number Theorem
A second hexagon in the stratosphere of Saturn
Times Investigation: In U.S. Drone Strike, Evidence Suggests No ISIS Bomb
Facebook sent flawed data to misinformation researchers
~60x speed-up of Linux "perf"
They risked their lives on the Covid front line. Now France made them citizens
Ruby Type Conversion
Auction house selling “The first emoticons” -- or are they?
Windy.com
The ACLU's 2008 report on pandemic preparedness [pdf]
USB-C Hubs and Ethernet Warning (2020)
Tesla finds loophole to New Mexico’s ban by launching on tribal land
More than 100 headstones smashed at Jewish cemetery in Argentina
Some of the most iconic 9/11 news coverage is lost. Blame Adobe Flash
The Why and How of Rust Declarative Macros
Windows Subsystem for Linux GUI
Plugins in Rust: Getting Started
London's Oyster card: Are its days numbered?
The world's most influential conservation congress passed resolutions Friday calling for 80 percent of the Amazon and 30 percent of Earth's surface -- land and sea -- to be designated "protected areas" to halt and reverse the loss of wildlife
Google illegally underpaid thousands of workers
European civilization is built on ham and cheese. It's also why we have books
U.S. FDA may authorize COVID-19 vaccine for kids based on two months of safety data
The UK Government published their plans to water down GDPR. It is bad, bad
New Imaging Reveals Hidden Ice Age Landscapes Buried Deep in the North Sea
Trove of CRISPR-like gene-cutting enzymes found in microbes
San Francisco Schools Have Had No COVID-19 Outbreaks Since Classes Began Last Month
How to avoid lifetime annotations in Rust (and write clean code)
New Lebanese PM: We'll work with any country, 'except Israel, of course'
Broken Encapsulation
New study finds unvaccinated are 11 times more likely to die from Covid, CDC says
Codable synthesis for Swift enums
All about the Bool type in Swift
epilys/buke: toy manpage full text search cli, w/ gzip shim layer as sqlite3 extension in Rust FFI
Enter the Knight
Pandemics Initially Spread Among People of Higher (Not Lower) Social Status
NFT(s) are just money laundering
Quadratic algorithms are slow (and hashmaps are fast)
Prince Andrew served with paperwork in sexual assault lawsuit
Court rules for Florida governor, reinstates ban on mask mandates in state's schools
KrebsOnSecurity Hit by Huge New IoT Botnet “Meris”
Lisp-based extension and scripting language on macOS and iOS
W X Y Z
BioNTech to seek global approval to use its COVID-19 vaccine in 5-11 year-olds
Prince Andrew served with suit by Jeffrey Epstein accuser Giuffre in sex case
Super Typhoon Chanthu could impact the global automobile delivery and cause months of delays as destructive landfall and impact on Taiwan are expected on Sunday. Chanthu is now the 2nd strongest Earth storm of 2021 with 180 mph winds and 910 mbar.
Atomic Gardening
Denmark declares it no longer considers coronavirus a socially critical disease
How to build a search engine with Ruby on Rails
Electrifying New York: An Electric Vehicle Vision Plan for New York City [pdf]
Protonmail now keeps IP Logs
Coalton: How to Have Our (Typed) Cake and (Safely) Eat It Too, in Common Lisp
Revealed: Google illegally underpaid thousands of workers across dozens of countries
Ultraslow radio for decentralized global digital communication (2013)
WhatsApp – Security of End-to-End Encrypted Backups [pdf]
How do you create a cross-platform GUI without using Electron?
Facebook has vanity IPv6 ':face:b00c'
Texas law bans kicking people off social media for ‘viewpoint’
Google illegally underpaid thousands of workers across dozens of countries
Board: Docs can lose license spreading faux vaccine info
COVID-19 vaccines hold strong against Delta, protection waning in older adults
Unvaccinated people were 11 times more likely to die of covid-19, CDC report finds
YOLOv5 on CPUs: Sparsifying to Achieve GPU-Level Performance
Are Dockerfiles good enough?
Apple dealt major blow in Epic Games trial
Ask HN: When do you not give out stock options?
Modern Treasury (YC S18) is hiring new grad engineers for Jan. 2022
Postgres: Boundless `Text` and Back Again
Inside the cult of crypto
Pre-disclosure: upcoming critical fix for several popular Matrix clients
US military trial of 9/11 suspects drags on 20 years after attack
20 meat and dairy firms emit more greenhouse gas than Germany, Britain or France | Meat industry
The Dangers of Making War Less Dangerous
Cuba begins vaccinating children as young as two for Covid-19
How WhatsApp is enabling end-to-end encrypted backups
Rustacean Principles
Hollywood Sold Out to China
Apple Trial Ends in Mixed Verdict After Epic’s Monopoly Allegations
Married couple leave 7 children after dying from COVID-19 within hours of each other
Write More, but Shorter
Judge Orders Apple to Ease Restrictions on App Developers
Apple ordered to change how it handles App Store payments
Containers Don't Solve Everything
U.S. judge in 'Fortnite' case strikes down Apple's in-app payment restrictions
NIH Documents Provide New Evidence US Funded Gain-of-Function Research in Wuhan
Apple’s App Store Dealt Blow by Judge in Epic Antitrust Case
Oracle SQL Is the Devil
France bans unvaccinated American travelers
Court issues permanent injunction in Epic vs. Apple case
Ask HN: Who was the most competent person you worked or collaborated with?
Apple’s App Store Dealt Blow by Judge in Epic Antitrust Case
Stompie the Tank in South London
Apple can't force devs to use in-app purchasing, ruling in Epic Games case
Apple can no longer force developers to use in-app purchasing, judge rules in Epic Games case
Harvard University will divest itself from fossil fuels
PC DOS 1.1 from Scratch
Zero Covid isn’t realistic, for kids or anyone
Court issues permanent injunction in Epic vs. Apple case
Ask HN: How Do You Learn?
These mostly Latino crews cleaned up after Sept. 11. They still seek residency.
‘Sissy men’ have become the latest front in China’s campaign against big tech
Government audit of AI finds no AI
Eyeway's Retina-Tracking Foveated Display
Show HN: FINLO - Stock tracking & research tools built by retail investors
Russia's Yandex says it repelled biggest DDoS attack in history
'It’s a Big Day For Us': Taliban Deliberating on Inaugurating New Afghanistan Govt on 9/11
Okefenokee Joe, a massive alligator who may have been around since WWII has died
Afghanistan's cricket board signals Taliban backtrack on women’s cricket ban
Work on interesting problems. Not interesting tech
Canada urged to stop fuelling war in Yemen with Saudi arms sales, UN report says
Mexico activists celebrate abortion ruling as a sign of culture change
Travel planning software: The most common bad startup idea
The Northernmost Island in the World Was Just Discovered by Accident
Wide-ranging SolarWinds probe sparks fear in Corporate America
Uber ordered to pay taxi drivers damages in France
Show HN: Medusa – Open-source alternative to Shopify
Outdated Answers: accepted answer is now unpinned on Stack Overflow
Truck driver sentenced to 16 years for slashing neck of Black man in hate crime
Nuclear War Survival Skills
Afghanistan’s embassy in India refuses to pledge allegiance to Taliban’s government in Kabul
CISA Zero Trust Maturity Model
KrebsOnSecurity hit by same IoT botnet that hit a record DDoS on Cloudflare
SE aeronautics claims tri-wing aircraft could revolutionize commercial aviation
Arris Cable Modem Teardown
A Better Shell
Hong Kong: Police raid Tiananmen Square museum
Vivaldi Replaces Firefox as the Default Browser on Manjaro Linux Cinnamon
Jim Lanzone breaks up with Tinder, swipes right to take the CEO job at Yahoo
Biden reiterates plan to reopen Jerusalem consulate despite Israeli objections
Help still hasn’t arrived for Memorial Hospital healthcare workers, according to Mississippi Emergency Management Agency
Illinois legislature edges toward saving two nuclear power plants
Ask HN: What's the best way to learn mathematics outside of formal education?
Is Word Error Rate a Good Metric for Speech Recognition Models?
We (Still) Believe in Private Offices (2015)
A.I. Can Now Write Its Own Computer Code. That’s Good News for Humans
I Hate Reddit
Upside-down rhino research wins Ig Nobel Prize
China bans "effeminate" content
Turkish court finds police officers guilty of attempting to overthrow the Erdoğan government by uncovering a match-fixing scandal
France bans unvaccinated American travelers
UK ministers ‘met fossil fuel firms nine times more often than clean energy companies’
The United States of Comedy: 2035 (2012)
Meticulous (YC S21) Is Hiring #1 Founding Engineer
The Travel Agent Who Made More Than $250K During the Pandemic Lull
Squarespace's Block Editor
Why the world still loves 1970s detective show Columbo
UK faces 'permanent' food shortages and it will 'get worse'
A friendly introduction to machine learning compilers and optimizers
Germany’s left-wing socialists- leading election voter polls, are ready for power, former leader says
Denmark lifts all Covid restrictions as vaccinations top 80%. Scandinavian country declares it no longer considers coronavirus a ‘socially critical’ disease
Twenty legal battles that stand out across Ars’ 20 years of covering them (2019)
‘Vaccinate the children’: Fauci outlines the case for offering Covid shots to young people
Python Is a Bad Programming Language
Coin Authentication in Antiquity (1983) [pdf]
A Twitter user insulted a German politician. Police then raided his house.
Why Did So Many Doctors Become Nazis?
Revamped Apple Maps Rolls Out Across Italy
Using a laser pointer and a matrix LED as a two-dimensional input device
Employers Rejecting Millions of Qualified Workers, New Harvard Research Finds
California passes landmark bill targeting Amazon’s algorithm-driven rules
No Species Is an Island
What If the South Had Won the Battle of Gettysburg?
US team claims viable path to commercial fusion power
One camera in 9 forms: a 3D printed modular medium format film camera body
Women should give birth, they can't be ministers: Taliban
JSON Schema bundling finally formalised
Ivermectin: Australian regulator bans drug as Covid treatment after sharp rise in prescriptions
Austrian man mummifies dead mother to keep receiving her benefits
James Webb: Hubble successor given mid-December launch date
Justice Department sues Texas over six-week abortion ban
Pakistani village achieves full literacy and a 0% crime rate
Despite 95% vax rate, Cornell has five times more Covid cases than last year
Show HN: JSPaint.exe – Original Windows 95 Paint.exe as a cross-platform binary
Libreboot: Freedom-Respecting Boot Firmware
Apple fires Ashley Gjøvik, senior employee who alleged sexism at work
Denmark lifts all covid restrictions, with 73% of the population fully vaccinated
Texas passes law that bans kicking people off social media based on ‘viewpoint’
World’s biggest machine capturing carbon from air turned on in Iceland.
Ask HN: Books that teach you programming languages via systems projects?
Harvard University to end investment in fossil fuels
Tennessee teen talking about grandma who died of Covid heckled by adults at school board meeting
Upside-down rhino research wins Ig Nobel Prize
Billboard of BTS' Jungkook removed in Pakistan for "promoting homosexuality"
Show HN: An interactive guide on building a tiny van home
A cross-platform GUI for YouTube-dl
How Slow Is Python Compared To C? (2020)
Inai (YC S21) Is Hiring
Our fridge just emailed us to say we opened its door too many times
Ask HN: What’s the server architecture of Hacker News?
Twitter to label 'good' bot accounts
6 y.o. girl rescued after her family tried to gouge out her eye in cannibalistic black magic ritual | Coconuts Jakarta
World's Largest Carbon Dioxide-Sucking Plant 'Orca' is now online in Iceland
Solar Startup Born in a Garage Is Beating China to Cheaper Panels
Two students accused of plotting Columbine-style massacre at Harns Marsh Middle
Oracle Java Magazine
“Software Engineering at Google” favorite bits (part 1)
US officials in Berlin struck by ‘Havana syndrome’ symptoms
U.S. CDC chief says there will be no federal mandate on Covid-19 vaccine
Sweeping new vaccine mandates for 100M Americans
Show HN: Amtrak.js – A JavaScript library to interact with Amtrak's tracking API
NASA is going to slam a spacecraft into an asteroid. Things might get chaotic
Be more concerned about deliberate internet shutdowns
TrackerControl
How do I overcome chronic indecision and make progress with my life?
Company Scrip
How the lives of mothers matter to offspring survival in wild primates
‘Azurescape’ Kubernetes Attack Allows Cross-Container Cloud Compromise
Delta Air Lines’ $200 per month experiment for changing unvaccinated employees’ seems to be working
Japan officials escalate concerns about possible China attack on Taiwan
Apple fires senior engineering program manager Ashley for leaking information
Apple fires Ashley Gjøvik, senior employee who alleged sexism at work
Someone Dead Ruined My Life Again.
A supply chain catastrophe is brewing in the US
Biden Will Announce Vaccine Mandate for Companies with 100 Employees
Why many scientists say it’s unlikely that SARS-CoV-2 originated from a lab leak
Mandiant: CCP influence campaign prompting covid19 protests
Missouri teacher resigns after school tells him to remove Pride flag
Cuba begins vaccinating children as young as two for Covid-19
Mexico's Supreme Court on Thursday ruled that a state law defining life as beginning at conception and equating abortion with murder was unconstitutional in another victory for abortion rights campaigners
Protein and Transpacific Power
The ACLU switches its position on vaccine mandates
Biden Delivers Remarks on His Plan to Stop the Delta Variant, Boost Covid-19 Vax
Squats can boost brain activity [video]
The 31st First Annual Ig Nobel Prize Ceremony 2021
The Future Shape of Ruby Objects
Amazon to cover 100% of college tuition for U.S. hourly employees
A Twitter user insulted a German politician, then raided his house
Hong Kong police raid museum commemorating 1989 Tiananmen victims
Stop just using “Frontend” or “Backend” to describe the Engineering you like
Show HN: Poker MC – A simple web app to help you win Texas Hold'Em
California may require menstrual products in public schools
Judge Blocks Enforcement of Florida ‘Anti-Riot’ Law Championed by DeSantis
The Last Glimpses of California's Vanishing Hippie Utopias
Show HN: Automatically restrict permissions for the GITHUB_TOKEN
Why Don’t the French Celebrate Lafayette?
Dagster: Data flow engine from first principle; unlike AirFlow
Queen supports Black Lives Matter, says senior royal representative
Epic tests Apple with new request: let us relaunch Fortnite in Korea
Suspect in Florida quadruple homicide falsely believed he was saving sex-trafficking victim, police say
The KIMplement 0.2b: a KIM-1 emulator for the Commodore 64
Raspberry Pi 4 Car Dash Computer Takes Linux on the Road
A Battery Spot Welder Made from an Old Microwave and Excessive Mahogany [video]
Taiwan Navy launches 'carrier killer' with 28 missiles
Ask HN: Why salaries tend be lower for tech workers in UK compared to US
New Mexico State Fair to Require Vaccination
All COVID-19 patients under age 50 in B.C. ICUs are unvaccinated, health minister says
The new Roomba uses AI to avoid smearing dog poop all over your house
Jay Leiderman has died
Hong Kong: Police raid Tiananmen Square museum
US’s wealthiest 1% are failing to pay $160bn a year in taxes, report finds
Andrew Yang to launch a third party
Why Resist Blank Slate Thinking? For One, Look to No Child Left Behind
Sustainable Infrastructure
Hackers breached U.N. computer networks earlier this year
Ozzillate – send files over sound wave
2021 Ig Nobels
Epic is shutting down Houseparty
Using Wastewater Surveillance Data to Support the Covid-19 Response
California pushes rules on breath-restricting police holds
Razan Al Mubarak becomes first woman from the Arab world to head International Union for Conservation of Nature, one of the world’s largest and best-known conservation institutions
USA: All government employees will be vaccinated against Covid-19
Tesla Model S Plaid just set world speed record for a production electric car
How placebos work: an alternative theory of consciousness could hold some clues
Houseparty shut down by Epic, 2 years after acquisition
Putin and Lukashenko discuss integrating Russia and Belarus | Belarus
OSHA to require employers with 100 employees vaccinate or test workforce
CISA Lays Out Security Rules for Zero Trust Clouds
Mysterious blue flashes lit up the sky after Mexico earthquake
Analysis of Covid-19 Mask Mandates on Hospital Resources and Mortality
Biden to ask OSHA to mandate vaccines at businesses
TrueVault (YC W14) Is Hiring a VP of Eng to Help SMBs with Data Privacy Laws
What is known about the Russian Elbrus microprocessors?
Counterfeit Capitalism: Why a Monopolized Economy Leads to Inflation, Shortages
Coinbase Gets a Wells Notice
“I am angry today:” Jeffco’s top health official halts mobile COVID-19 vaccination clinics after medical staff harassed
NIST research reveals new details about a possible fifth force of nature
Hong Kong: Police Raid Tiananmen Square Museum
Ask HN: What non-software companies hire software engineers?
Biden to announce new vaccine mandates for federal workers and large employers
The IDE for Professional Data Scientists
Biden plans Covid vaccine mandate for 80M private sector employees
Biden to require companies of 100 employees to mandate vaccines or weekly tests
8 Tennessee public school employees dead from COVID in first month of school
TSA to double minimum fines for air travelers who refuse to wear masks to $500
FSF job opportunity: Outreach and communications coordinator
Sweeping new vaccine mandates for 100M Americans
Shipping Clubhouse on Android in 10 Weeks
Microsoft indefinitely delays employees' return to its offices
Money creation in the modern economy (2014) [pdf]
Sweeping new vaccine mandates for 100 million Americans
New horizons for SPJ
Undercover at a Troll Farm (2019)
Too much free time may be almost as bad as too little
Proud Boys leader urged group not to ‘turn on each other’ in riot probe
Microsoft indefinitely abandons plan to reopen US offices amid Covid worries
Technology Prediction for the 2020s
Jerry Maguire Mission Statement (2016)
PaddleOCR: Lightweight, 80 Langauge OCR
Covid inspires 1,200 new German words
Open-source backend-as-a-service startup Supabase raises $30M
Afghanistan cricket: Australia will cancel men's Test if women's team banned
Microsoft launches a personalized news service, Microsoft Start
Taiwan launches homegrown 'carrier killer' as China deterrent
Tasuku: The minimal task runner for Node.js
Ford is ending production in India and taking a $2B hit in the process
The Roomba j7 has poop-detecting artificial intelligence onboard
Steganography for the Computer Forensics Examiner (2015)
Trudeau says Rebel News spreads disinformation on vaccines
In which a laptop defies the trends
Ray-Ban and Facebook's Camera-Equipped Sunglasses Mix Cool with Creepy
Ask HN: Is Google, as an employer, losing its prestige?
ImageMagic/GhostScript 0-day vulnerability allows server compromise
Biden to mandate coronavirus vaccine for federal workers
Silicon Valley finds remote work is easier to begin than end
What the Most Powerful Server in the World Looks Like
An average Covid-19 hospitalization costs Medicare about 150 times more than it does to vaccinate one beneficiary
Three Stanford professors on the sensible regulation of Big Tech
Knee or Hip 'Replacement' Without Surgery? It's on the Horizon
Mad Max Fury Road vehicle auction
Student Calling for School Mask Mandate Heckled While Speaking About Dead Grandmother
The Disney+ Application Development Kit
Portland can’t make cops get Covid-19 vaccine despite city mandate, mayor says
Moderna reveals single-shot vaccine booster for Covid and flu
UC Berkeley ranked #1 college in America
Patton Oswalt cancels shows in Florida, Utah after venues fail to comply with his Covid requests
The Most Amazing Bubbles in History
Tell HN: Thanks to thehodge and littlewarden.com, this site is up today
SPDX Becomes Internationally Recognized Standard for Software Bill of Materials
Men Fall Behind in College Enrollment. Women Still Play Catch-Up at Work
Show HN: I made a fake VS Code so you can browse remote jobs in your office
Safer Usage of C++ (Chromium)
Twenty percent of a picture of a dog
Justice Department to announce lawsuit against Texas over law that bans nearly all abortions
NASA TV Begins Coverage of Russian Spacewalk to Outfit Science Module
Airborne Transmission of Respiratory Viruses
Show HN: Consent management, reinvented
Woman in video seen coughing on customers loses her job
Dear recruiter – a canned response to a canned email
Amazon to cover 100% of college tuition for U.S. hourly employees
Vessels return to Victoria after collecting 8 tonnes of trash from Great Pacific Garbage Patch
Summer 2021 Was Hottest on Record in the Contiguous U.S., NOAA Says
Moderna developing a combo booster shot for Covid and flu
How to launch on Product Hunt our experience on PH
Docker OS X – Run Mac OS Using QEMU in Docker
California QAnon believer indicted on charges of killing his 2 children with a spearfishing gun
Facebook, Ray-Ban debut picture-taking smart glasses
A novel technological approach to vector graphics (“Vector Graphics Complexes”)
Bad engineering managers think leadership is about power
Making semiconductor chips in India, for the world
Menstrual Synchrony
Musaeum Clausum
Ask HN: How to Get into Crypto as a Programmer?
Facebook, Ray-Ban launch smart glasses
Microsoft and LinkedIn share latest data and innovation for hybrid work
Ray-Ban and Facebook introduce Ray-Ban Stories, first-generation smart glasses
California bill passes, giving Amazon workers power to fight speed quotas
3-year-old boy killed after 150 shots fired into North Carolina home, police say
GameStop Has Big Advantages Technology Startups Would Die For
New math book rescues landmark topology proof
Show HN: Measure downloads and commercial adoption of any file you distribute
Afghan Journalists Beaten By Taliban For Covering Women's Protests
Brazil’s Bolsonaro Bans Social Networks from Removing Some Posts
Marvin's Dream – Children's story written and illustrated by ML models
HAProxy vulnerability enables HTTP request smuggling attacks
Elizabeth Holmes’s Last Pitch
Pro-China social media campaign hits new countries, blames U.S. for Covid
91% of IT teams have felt 'forced' to trade security for business operations
Russian cosmonauts conduct spacewalk despite smoke, alarm on space station
Google Cloud Startup Summit
Why Australia's 'Covid Zero' Is No Match for Delta
MasterCard Acquires CipherTrace
Microsoft indefinitely postpones return to U.S. offices as Covid cases surge
Amazon to pay full college tuition for its front-line employees
Taliban accused of torturing journalists for covering protests | Asia News
Call for police to get mandatory neurodiversity training after officer assaulted young autistic boy in school
Artificial Cells That Mimic Living Cells’ Ability to Capture, Process and Expel
Moderna developing single-dose booster shot for Covid and flu
Paid influencers must label some posts as ads, German court rules
Growing your own cannabis is legalized in Italy
Built with Workers – Projects across the web utilizing Cloudflare Workers
“Absolutely Mind-Boggling” New Animal Species Discovered 500M-Year-Old
Rust 1.55.0
Ask HN: What are your thoughts on the r/collapse community
Build Your Web 3.0 Startup on Bitcoin?
Paid influencers must label posts as ads, German court rules
Sayings of Spartan women
How a foil-wrapped home survived the Caldor Fire as everything around it burned
Study links too much free time to lower sense of wellbeing
Gay man who reported homophobic gang attack in Madrid admits he made it up: ‘It was consensual’
U.S. Broadband Wireless Speeds Climb to Pathetic 14th Place Globally
Climate: Majority of fossil fuels need to stay underground, study says
Sen. Amy Klobuchar reveals she was diagnosed with breast cancer
Qantas to ban unvaccinated travelers from international flights in new pandemic measure
Circuits Explained: The 3 Essential Components
Taliban bans all protests that don't have their approval
Witchery: tools for building distroless images with alpine
Ministry of Freedom – GNU+Linux laptops with Libreboot preinstalled
Thoughts on Clojure UI framework
Open source software boosted the EU economy by ‘between €65 to €95 bn’
Show HN: JLottie, the ultimate Lottie player for micro-animations
Show HN: A webcam made out of HTML checkboxes
Millennials Became the Burnout Generation (2019)
What if I were 1% charged? (2013)
UK government backs Apple, and wants to scan encrypted messages for CSAM
China to supply Afghanistan with 31 million dollars worth of food, COVID vaccines
Apple’s effort to court ‘ethical’ hackers draws poor reviews
Native Rust Support on Cloudflare Workers
France grants citizenship to 12,000 Covid frontline workers
France to offer free contraception to women under 25
Fortinet VPN hacker leaks 500k users’ passwords
Rails 7 will have three great answers to JavaScript in 2021
El Salvador’s new Bitcoin wallets could cost Western Union $400M a year
On the web today, we don't use servers, we use services
What they don’t tell you when you translate your app
Vermeer Restoration Reveals a Painting Within a Painting
Show HN: FractalCrypt 2.0 – free deniable encryption cryptoarchiver
‘Havana syndrome ’ and the mystery of the microwaves
60x speed-up of Linux “perf”
California aims to ban recycling symbols on things that aren’t recyclable
Show HN: Heroku Alternative for Python/Django apps
Smoke alarms go off at the International Space Station
‘You bloody fool’: Australian talking duck proves birds can imitate speech
Indian news channel uses Arma 3 gameplay footage to claim Pakistan bombed Afghanistan
Suez Canal blocked briefly as container ship runs aground
Good news for the ocean as tuna species bounce back from the brink of extinction
Facebook Sunglasses – No Thanks
Ghostscript zero-day allows full server compromises
‘Havana syndrome’ and the mystery of the microwaves
Chinese solar wafer makers suspend supply to overseas clients
AsyncAPI vs. OpenAPI: Answers to Your Burning Questions
Scott and Scurvy (2010)
The Fog of Random
Mēris botnet, climbing to the record
Using Saliency in progressive JPEG XL images
France extends free contraception benefits to women up to 25 years of age
Those Who Witnessed Castle Bravo Looked into Armageddon
Astronauts smell smoke, burning on Russia's ISS module
HiFive Unmatched – A RISC-V Linux development platform
China said to suspend approval for new online games
Strange, repeating radio signal near the center of the Milky Way
Why are developers so vulnerable to drive-by attacks?
Beatings, buried videos a pattern at Louisiana State Police
“Pest” vs. 0xFE
Time and Frequency (2009)
Fastest man-made object is a manhole cover that shot into space by nuclear test
France to offer free contraception to women under 25
Call for police to get mandatory neurodiversity training after officer assaulted young autistic boy in school
How JavaScript works: class static blocks and 6 proposed semantics
A Man Who Swam the Seine
World’s biggest machine capturing carbon from air turned on in Iceland
MDMA reopens child-like “critical periods” in the brain
Palantir – a federal market lesson for VCs
Liberals win most seats in Morocco's parliamentary election, routing Islamists
Everybody makes mistakes when writing comparison functions
Facebook Undermines Privacy Protections for Its 2B WhatsApp Users
Fossil fuels must remain in the ground to keep warming below 1.5°C, study says
Robot at 100
OWASP Top 10 2021
German Covid super-spreader event driven by poor ventilation, study finds
Bog-Standard Multimedia:Why PC industry standardized on multimedia in the 90s
Dürer's Rhinoceros
GitHub Actions checkspelling community workflow GitHub_TOKEN leakage via symlink
Hackers leak passwords for 500k Fortinet VPN accounts
Panama unveils bill to make Bitcoin legal tender
Vivaldi is the default browser on Manjaro Linux Cinnamon
mRNA cancer therapy now in human trials after shrinking mouse tumours
Komodo Dragons Are Now Endangered and ‘Moving Toward Extinction’
Facebook and Ray-Ban’s smart glasses leak before launch
Understanding ZFS Channel Programs
Altos Labs, Silicon Valley's latest wild bet on living forever
Pumpkin OS: x64 port/re-implementation of PalmOS
Tiananmen Massacre Vigil Organizers Arrested by Hong Kong Authorities
NLOS Keyhole Imaging Can See Inside a Closed Room
Safer Usage of C++ in Chrome
W X Y Z
An Introduction to Type Level Programming in Haskell
Monads are monoids in the category of endofunctors
Browsing the Web in 2021
Not so great experience interviewing at Twitter
When lightning strikes: managing impacts on wind turbines
Can mRNA vaccines do for cancer what they did with Covid-19?
In the Memory Ward: Britain's most eccentric and original library (2015)
The US Government tried to kill weed smokers with a toxic chemical in the 1980s
Unpacking Observability: The Observability Stack
SR-71's “R2-D2” May Be the Key to Future Battles in GPS Denied Environments
Eventbrite sheds most of its SF office space a year after mass layoffs
Event Horizon Telescope Traces Magnetic Fields Around a Black Hole
Domes are over-rated: common misconceptions in space journalism
mRNA cancer therapy now in human trials after shrinking mouse tumours
Amazon EKS Anywhere
Absorption of 5G Radiation in Brain Tissue
AI GPT-3 chatbot, helped a man speak again to late fiancée, OpenAI shut it down
Digital Currencies Pave Way for Deeply Negative Interest Rates
The web is swallowing the desktop whole (2017)
No One Ever Saw the Snow Cruiser Again (2019)
How a foil-wrapped home survived the Caldor Fire as everything around it burned
The Story of XEmacs (2019)
Video of a whale having a surf at Lennox Head (Australia)
Exploring the Amiga – Part 1 (2018)
Thoughts on Clojure UI Framework
Canada aims to block Chelsea Manning from entering country
Face masks for Covid pass their largest test yet
A Compiler for Standard ML in Rust
Rheumatoid arthritis: New ‘highly effective’ treatment on the way
New Details Emerge About Coronavirus Research at Chinese Lab
WhatsApp “end-to-end encrypted” messages aren’t that private after all
Amid a Pandemic, a Health Care Algorithm Shows Promise and Peril
Covid-19 surge in the US: The summer of hope ends in gloom
PicoCTF
Cold plasma could transform the sustainable farms of the future
Venture Communism
Is China Uninvestable? (FT)
Most physicians would forgo aggressive treatment for themselves at EOL (2014)
Twitch: “Software and Game Development” – A new streaming category
Google DEI training documents leaked
Datasette Desktop–a macOS desktop application for Datasette
NSW Health limits residents of locked-down tower block to six beers per day
We Predict the iPhone Will Bomb (2007)
Amazon Elasticsearch Service Is Now Amazon OpenSearch Service
Brad Smith warns that U.S. is repeating a key Sept. 11 mistake in digital era
Have something that NBC News' tech investigations team should be digging into?
Australia media can be sued for social media comments, court rules
Ask HN: London High-End Salaries
Coinbase Gets a Wells Notice
How strong would a magnetic field have to be to kill you?
Ineffective neutralization of the Mu variant by convalescent and vaccine sera [pdf]
Ask HN: What open source projects are you working on and why?
 It’s not like the rest of us (2016)
Show HN: PeeYork, Bathroom finder app for NY
ProtonMail Amends Its Policy After Giving Up an Activist’s Data
Ask HN: Why is Reddit so slow and unreliable?
Soar Cognitive Architecture
Wells Notice
Public Comment on Inflation Measurement
Amazon slams SpaceX, tells FCC that Musk-led companies are rule-breakers
LAPD's social media monitoring documents
NASA's James Webb Space Telescope Launch Delayed to December
Largest plant capturing carbon from air starts in Iceland
Pro-China Groups Used Fake Accounts to Urge Asian-Americans to Attend Protests
Linux kernel community protests about treating compiler warnings as errors
Should you delete social media? That’s the wrong question.
Coronavirus Policy: Few of Our Covid-19 Policies Make Any Sense
Predicting Your Area's Election Results Based on Cracker Barrel and Whole Foods
Amazon to Open $21M State-of-the-Art Warehouse in Tijuana Slum
How to Replace Docker with Podman on a Mac
Show HN: Stamp – A Cryptographic Identity System
Silanano launches the first new commercial battery chemistry since 1991
Massive animal species discovered in half-billion-year-old Burgess Shale
How We Went All In on sqlc/pgx for Postgres and Go
MIT-designed project achieves major advance toward fusion energy
Real yields on European junk bonds go negative for first time
FD 100
LAPD officers told to collect social media data on every civilian they stop
Ask HN: Are big tech companies not sponsoring H1B anymore?
The dark patterns of Network Solutions
Bringing Back ‘Geocities-Style’ Webrings
Amazon EKS Anywhere – Run EKS in Your Datacenter
Israeli company unveils electric vehicle battery that can recharge in 10 minutes
Show HN: errorpush – Minimalist Sentry alternative using PostgreSQL
Imaginary Numbers Protect AI from Real Threats
Repertoire of Mathematical Symbols
Flipper Zero Firmware Is Now Open Source
A cult I almost joined (2005)
Porous polymer offers methane storage solution
The bargain at the heart of the BBC is fraying
Island of Stability
FOSS for Amateur Radio
UK.gov is launching an anti-Facebook encryption push
GitHub Actions limitations and gotchas
California moves to be the first state to outlaw 'stealthing'
Microsoft Pres Brad Smith warns that U.S. is repeating a key Sept. 11 mistake
Microsoft acquires WASM-powered video creation startup Climpchamp
Show HN: Art by an AI – a daily prompt competition
Lending Bitcoins and the SEC
A dev built an chatbot so a man speak to his late fiancée. OpenAI shut it down
Show HN: Buildman.io – Cut your development build time instantly
Carbon removal technology reaches early milestone
Thoughts on Clojure UI Framework
Toyota to spend 1.5T yen on EV battery development
LSAT: Lightning Service Authentication Token
White House calls for solar to be nearly half of electricity supply by 2050
The Creative World’s Bullshit Industrial Complex
Ask HN: What's the best Linux distro for fullstack development?
Vehicle electrification: Opportunity to achieve large public health benefits
If You’re So Successful, Why Are You Still Working 70 Hours a Week?
Quantum mechanics and our part in creating reality
NASA Readies James Webb Space Telescope for Dec. 18 Launch
Arris Cable Modem Teardown
Ask HN: How do you keep track of your routines and habits?
How Docker broke in half
Next-gen 3D printed catalysts to propel hypersonic flight
Coinbase asks: why is lending a security?
Pedalboard: Spotify’s Audio Effects Library for Python
Generating a QR code with only ARM Assembly
Radical Simplicity in Technology
Maintain It with Zig
Show HN: An Interactive Jq Tutorial
The 'megacomet' Bernardinelli-Bernstein is the find of a decade
How do computers generate random numbers?

WHO: Covid will mutate like the flu and is likely here to stay
IBM mainframe beats other platforms for cost and performance
Show HN: Figstack – Automatically understand, document, and translate code
The Next DARPA X-Plane Won't Maneuver Like Any Plane Before It
Miegakure Update September 2021
Notion Acquires Automate.io
Deepfakes replace women on sextortion calls
My university sacrificed ideas for ideology, so today I quit
The Guardian view on changes to copyright law: book lovers beware
Ask HN: Online volunteering opportunities to improve own skills
Space station astronaut captures breathtaking view of the edge of the Earth
News sites liable for defamatory Facebook comments, rules Australia’s High Court
Interview: Larry Summers on the Threat of Inflation
The nightmarishly complex wheat genome finally yields to scientists (2018)
Twitter tests a new timeline with edge-to-edge picture and video
How the Wire’s Omar Changed TV
ByteDance in talks with banks to borrow over $3B
Disinformation-for-hire in Kenya
Show HN: Turn Pocketbook e-ink reader into computer monitor
Almost free serverless on-demand Minecraft server in AWS
Governments using targeted ads on search engines and social media
Animals ‘shapeshifting’ in response to climate crisis, research finds
Moral Majority Media Strikes Again
First Edition Unix Manual 'Miscellaneous' Section (1971) [pdf]
Show HN: WiFi thermometer. Useful things done dirt cheap
Disinformation Is Power
Ask HN: List your "brandable" domains to find them a new home
Britney Is Finally (Officially) Free
Building an IoT Product – Continuous Battery Lifetime Testing
Richard Feynman tries to improve school textbooks
Postman users are probably leaking their secrets to Postman's hosted servers
The House of Fame
A Poet’s Dublin
Licence to krill: the destructive demand for a ‘better’ fish oil
Chinese activist Ai Weiwei says Credit Suisse closing foundation's bank account
No laughing matter? what the Romans found funny
Lemmy – A link aggregator for the fediverse
The SEC has told us it wants to sue us over Lend. We don’t know why
Somali feminist: Facebook is being used to silence me
Sir Tim Berners-Lee joins Proton’s advisory board
Suspicious Discontinuities
Show HN: Unwonted.io – in-browser, offline tool for generative art, mainly NFTs
The Problems with Deliberate Practice (2020)
Seemingly Normal Lightning Cable Will Leak Everything You Type
Lonely Chairs at CERN
Disposition Matrix
Cheyenne Mountain Complex
On the shoulders of programmers: the power of free and open-source software
Some sketchy behavior coming out of the SEC recently
Show HN: A Christian Git wrapper for sanctifying your version control
The Plan to Stop Every Respiratory Virus at Once
The Great Boston Molasses Flood of 1919 (2018)
Let Your Top Performers Move Around the Company
NZ Battle to keep websites online
Why there won't be an open POWER10 workstation for awhile
Poka Yoke
FBI says Chinese authorities are hacking US-based Uyghurs
But down in the underground, you’ll find someone true
ACLU's 2008 stance on pandemics (now reversed)
Lung function appears to be unaffected after Covid-19 infection in young adults
Libreddit: Private front-end for Reddit written in Rust
OpenSSL 3.0 Has Been Released
Rearchitecting Linux Storage Stack for µs Latency and High Throughput
Australian High Court: media are "publishers" of users' defamatory FB comments
Ask HN: Any way for everyday programmers to help solve important problems?
We Could Brighten Clouds to Cool the Earth
Hurricanes Now Look Different
Ask HN: Would anyone in the Bay Area (not SF) be up to try a new dating app?
Free vs. Available Memory in Linux
The ACLU, Prior to Covid, Denounced Mandates and Coercive Measures for Pandemics
Hustle culture is not toxic
A New Basis for Shifters for Existing and Advanced Bit Manipulations (2009) [pdf]
China’s Hottest New Rental Service: Men Who Listen
Why are my gaming accounts more secure than my financial accounts?
Mangrove Restoration Frustration
Rust programs written entirely in Rust
Big Brothers Has Privatized
Show HN: An infinite record playlist of out-of-copyright works
Australia’s new mass surveillance mandate
Substrait: Cross-Language Serialization for Relational Algebra
Epic Iran: Some Zoroastrian Treasures
Chinese social media site Weibo suspends 22 K-pop accounts
What to Do When Your Team Quits
El Salvador: Bitcoin Day! How it went
Nvidia CUDA Ported to Open-Source RISC-V Gpgpu
A Science Corporation
DeepFaceLive: Live Deep Fake
James Webb Space Telescope launch media kit [pdf]
Private Information and the Missing Markets for Financing Human Capital
Ask HN: Books that impacted your work that few other people seem to care about?
Steven Pinker Thinks Your Sense of Imminent Doom Is Wrong
SBCL: Assembly code breadboard (2014)
Microsoft launches a personalized news service, Microsoft Start
Facebook Dating is infested by scammers who are themselves enslaved
How Slack changed Apple’s employee culture, with Zoë Schiffer
“If you want to speed up your old iPhone, change the Region setting to France.”
Edgar Allan Poe Needs a Friend
Ask HN: How do I concentrate more in meetings
90 Hours a Week and Loving It
Apple executive Doug Field joins Ford
Ex-Googlers raise $40M to democratize natural-language AI
Misbehaving Microsoft Teams ad brings down the entire Windows 11 desktop
What Every C Programmer Should Know About Undefined Behavior
Ask HN: It's 2021, where do I go to buy a prebuilt Linux compatible desktop?
Astronomers define new class of potentially habitable ocean worlds
NASA chief on Blue Origin protest: “They have every right” to sue
Anatomy of a Catastrophic Boiler Accident (1997)
Spice.ai – Open-source, time series AI for developers
My £4 a month server can handle 4.2M requests a day
Mexico Supreme Court rules criminalizing abortion is unconstitutional
Qubes Now a Preinstall Option for Librem 14 and Mini
Show HN: Spice.ai – open-source, time series AI for developers
SpaceX Starship 20 gets Raptors, heat shields, Booster 4 moves to the launch pad
The Tragedy of America’s Rural Schools
Full text: bin Laden's 'letter to America'
WhatsApp moderators can read your messages if someone you talk to reports them
Ford Hires Away Executive Leading Apple’s Car Project
Pedalboard – A Python library for adding effects to audio
Building Fizzbuzz in Fractran from the Bottom Up (2016)
John Carmack on Hiring
“It's open source! We’ll let our customers fix it.”
Why Does Coffee Sometimes Make Me Tired?
Triboelectric Effect
UK law: clicking on propaganda once could result in 15 years in prison (2019)
Intel NUC P14E Laptop Element Features Intel NUC 11 Compute Element
NRO Manned Orbiting Laboratory
A soft, wearable brain–machine interface
Church That Defied Gavin Newsom's Covid Rules to Get $800k in Legal Settlement
QuickBooks Desktop moves to subscription model
Unity patents ECS
El Salvador’s Bitcoin debut stumbles
Jenkins project succumbs to ‘mass exploitation’ of critical Atlassian Confluence
Legend
Interview candidate commits GCP credentials to code, racks up $78k in charges
Microsoft Joins Open Infrastructure Foundation
Matrix trailer dynamically uses current time
“FudCo” Spam Empire Tied to Pakistani Software Firm
Show HN: Euterpe is simple self-hosted music streaming server
Show HN: Erlang's Gen-Fsm in Go
Show HN: Web browser to help programmers think clearly
Netflix is not a tech company (2019)
One in 5k: The Real Chances of a Breakthrough Infection
The Universe Is Hostile to Computers
Art Gallery Datasets
Tech Epochs and the App Store Trap
Writing software that's reliable enough for production
Crafting “Crafting Interpreters” (2020)
Studies Find Evidence of 'Superhuman' Immunity to Covid-19 in Some Individuals
Show HN: Deep Learning for Computer Vision course with colabs and Anki cards
Three near-identical Boris Vishnevskys on St Petersburg election ballot
The Tarrant Tabor (2006)
An Introduction to Metaprogramming in Elixir
Sri Lanka’s overnight flip to organic farming has led to an economic disaster
Yad: Create ad-hoc GTK GUIs from shell
OpenSSL 3.0
Fans of a 2013 Japanese soccer game tracked down a bizarre floating point bug
Show HN: Peer to Peer Recruiting?
Show HN: Symbolica – Try our symbolic code executor in the browser
ProtonMail deletes 'we don't log your IP' from website after activist arrested
Zero Length Regular Expression (2010)
The Linux Experiments YouTube channel has been terminated
Researchers revive the dream of a Martian habitat in Arizona in miniature
Show HN: WebStor – Enumerate all your web technologies and find zero-days fast
Swap on HDD: Does placement matter?
Facebook Undermines Privacy Protections for Its 2B WhatsApp Users
New research shows smacking an asteroid may fracture but not shatter it (2019)
A VGA monitor may be easier to repair than you think
Zig 0.8.1 Release Notes
Intel CEO: Clients Want Custom x86-Based SoCs
How to Measure Option Grants – Implied Value Method
The Basics of Apache Kafka
Nuclear Weapon Archive (1994-2020)
Show HN: Arxiv.org on IPFS
Awk: The Power and Promise of a 40-Year-Old Language
Htmlq: like jq, but for html
Linux virtio without the “virt” (2019)
The First Soviet in Ireland
The Crypto-Currency Seastead
Peter Pan, Existentialist Fairy Tale? (2017)
Fantasy Cartography: Just Add Something Blotchy
An Idea with Bite
The JUXT Clojure Radar, 2021
Raspberry Pi Nixie Atomic Clock
Morashon
El Salvador will adopt Bitcoin as legal tender from today
Zero-Trust RDP and SSH Access to VMs on Google Cloud
Show HN: Load env vars from variety of sources with ease
MangaDex infrastructure overview
Low Cost Banana Pi BPI-R2 Pro 5-Port Gigabit Ethernet Router Board
DHCP Games with Smart Router Devices
Looking into Odin and Zig
Linux implementation of Homa, a protocol to replace TCP for low-latency RPC
The operating system: should there be one? (2013) [pdf]
Why admitting Covid is Airborne is so hard
The Unraveling of the Real 3D Mandelbulb (2009)
“The Book of All Skies” by Greg Egan
Nearly 1 in 3 Americans experienced a weather disaster this summer
Commodore 64 Ads from the 1980s
DOS VGA and Sound Blaster Games
Very Weird Solicitation Alert
Automated hiring software is mistakenly rejecting millions of job candidates
Intel’s Turnaround and the Future of Chipmaking
Banning Airbnb considered as housing crisis bites in coastal towns
Missing businesswoman urges ex-husband not to publish book critical of China
Libwebsockets a powerful and lightweight pure C library
Updating an App to Use Swift Concurrency
SystemE – A lightweight systemd replacement written in Emacs Lisp
Ask HN: Protonmail Alternatives?
On Falsifying the Simulation Hypothesis
document.designMode allows you to edit the web page directly
Intermediate Algebra
Micro-GPS: High-Precision Localization Using Ground Texture (2018)
A big hurdle to fixing the chip shortage: substrates
Covid Spike Protein Disrupts Human Cardiac Pericytes Function [pdf]
A multi-platform 256-byte intro
Learning Almost Nothing About LLVM
Hummingbirds can smell their way out of danger


Currency Converter
Exchange Rates
Info
Contact
Exchange Rates
Info
Contact
menu
refresh
Exchange Rates
Base Currency
refresh
Refresh


First, you're awesome {{name}}!
Let me introduce myself, i am Billel Guerfa, and today we're gonna play with Angular :)
This app is a set of quizes related to some friends of Angular, through the developement of this app we will learn Angular Fundamentals :


20 Dec 2002
Friends of the Earth today urged the Government to take action after the Environment Agency revealed that more than half of the 2,264 landfill sites in England and Wales are failing to comply with waste management licence conditions. The Agency revealed that:
More than half (56 per cent) of landfill sites assessed are failing to comply with licence conditions;
14 per cent are nowhere near compliance.
Friends of the Earths Waste campaigner Mike Childs said:
Communities living near landfills wont be surprised to hear that most sites in England and Wales are failing to meet their licence conditions. Many already suffer the misery of smell, noise and pollution on a daily basis. The Government must do more to protect the public from poorly managed landfills by providing the Environment Agency with the resources it needs to force these sites to comply with the rules. Those that fail should be heavily fined.
The Government must also do more to ensure that less of the worlds diminishing natural resources are dumped in holes in the ground and far more gets recycled. It can do this by supporting Joan Ruddocks Private Members Bill which aims to ensure that every household has access to a doorstep recycling service. The Doorstep Recycling Bill will be discussed in Parliament early next year.
A Friends of the Earth report, Communities Speak Out on Waste, tells of the nightmare of living next door to poorly-controlled landfills and their fears of incinerators being built in their neighbourhoods. See:
http://www.foe.co.uk/pubsinfo/infoteam/pressrel/2002/20020612103757.html
Contact details:
Friends of the Earth
26-28 Underwood St.
LONDON
N1 7JQ
Tel: 020 7490 1555
Fax: 020 7490 0881
Web: www.foe.co.uk/feedback.html
Media team


Git and Version Control
November 13, 2015
This week we began Phase 0 as the Squirrels 2016 cohort with Dev Bootcamp and I couldn't be more excited. Only a week and I feel like I've learned so much already! We learned about the Command Line Interface, Version Control, Git, GitHub, and how to use them togeher so that we can be prepared for our work in the coming weeks. Here's a little of what we learned about:
Version Control: Version Control is a very important part of individual work as well as collaborative work in the world of programming. It allows us to keep track of changes that occur in our work, and gives us the option to use it in case we run into issues with our current code. With version control, we can maintain a stable version of what we're working on, as well as experimental code without affecting our main code with the help of branches. We can make different branches to see how different techniques or processes will run together and pick the one that works best.
Git: Git helps us track changes by logging changes and storing each version of our updated work. These versions are called "commits." In each of these commits, we can see what has been added, removed or modified. You can view the current version of the file as well as previous versions, each with commit messages with a short description of what has been changed since the previous version.
GitHub: GitHub is a great place to store code due to its accessibility and ease. We can push our local repositories to GitHub straight from our terminals, and we can clone forked repositories to our computers. It makes collaborative work easier by providing a central location to store and combine code rather than working on a single file that has to be passed around through a flash drive. It also works as a place for you to allow others to look at your code for learning experiences and critique.
Before this week, I thought these things were ridiculous and complicated, and for the most part, I was right. But now that a little light has been shed upon them, everything is seeming a lot less arcane than it used to and I'm beginning to understand how useful these tools will be in our future as developers.


RT @Carnage4Life: Watching the solar eclipse in Seattle - http://i.imgur.com/Pryl9.jpg /via @reddit
5/20/2012, 8:38:18 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
RT @Carnage4Life: Watching the solar eclipse in Seattle - http://i.imgur.com/Pryl9.jpg /via @reddit
5/20/2012, 8:38:18 PM
Favs: 0
Retweets: 0
link


Page 2 of 2
Re: UPDATED Models, Map and Otherwise...
Posted:
Sat Oct 25, 2008 8:32 am
by Karl G.
The sickle looks really cool--but is there any chance you can make it use the same texture as some other models so I don't have to package yet another texture?
This might be asking a lot, but would it be possible to have one texture that can be used to a number of basic weapons? That way, I could make different versions of those weapons fairly easily--a whole fire set, for example, could be accomplished by tinging the single texture red.
Re: UPDATED Models, Map and Otherwise...
Posted:
Sat Oct 25, 2008 1:05 pm
by Burnt Ferret
yeah, i can do that pretty easily. I'll put together a 512x512 file with maybe 8 or so textures on it that can be utilized by most if not all of the models. I'll see how well i can compact it all.
Re: UPDATED Models, Map and Otherwise...
Posted:
Sat Oct 25, 2008 3:30 pm
by Karl G.
awesome
Re: UPDATED Models, Map and Otherwise...
Posted:
Sat Oct 25, 2008 7:13 pm
by Burnt Ferret
The following dagger was done with the new skin file...
Right now, there is a hell of a lot of room on it, and don't criticize it too much... it's not even close to being done.
Re: UPDATED Models, Map and Otherwise...
Posted:
Sat Oct 25, 2008 8:00 pm
by Karl G.
WOW! That dagger looks pimp
Re: UPDATED Models, Map and Otherwise...
Posted:
Sat Oct 25, 2008 10:27 pm
by Burnt Ferret
Glad you like it, and hope you're not just saying that just to be nice
matching sword:
Re: UPDATED Models, Map and Otherwise...
Posted:
Sun Oct 26, 2008 12:27 am
by Burnt Ferret
Asked my wife what type of weapon to draw, and since we're both from Hawai'i she said I should model up one of the typical Hawaiian weapons of old. This is typically a wooden club with shark teeth attached to the sides. White didn't look very good for the "teeth" so I used the "dark metal" texture I previously made for the sickle. Original image I based it off of is here:
Re: UPDATED Models, Map and Otherwise...
Posted:
Sun Oct 26, 2008 3:37 am
by Joe M.
Yikes! That's a scary-looking club!
For your model, a couple things bother me (though admittedly this is not something of which I know anything, so feel free to disregard ...):
1. The wood oval seems too wide--could those be brought closer together (less space between the sides) to make the weapon more compact/believable/threatening?
2. The wood texture itself isn't convincing me. The lines run in strange ways (down the length of the club instead of horizontally) and the material doesn't look dark enough to me. Now that's a texture thing, so limited resources &c. probably come in to play, but ...
Looking great!
Re: UPDATED Models, Map and Otherwise...
Posted:
Sun Oct 26, 2008 10:05 am
by Karl G.
Burnt Ferret wrote:Glad you like it, and hope you're not just saying that just to be nice
Not at all. I do really like them
I agree with Joe about the wood on the Hawaiian weapon, but it's not a huge deal. What is this thing called anyway?
Re: UPDATED Models, Map and Otherwise...
Posted:
Sun Oct 26, 2008 1:24 pm
by Burnt Ferret
Lei O Mano Puka is what this particular one is called. Lei = wreath, or some main backing that the individual pieces go on. O = just like "of". Mano = shark. Puka = hole, because of the hole in the middle.
Updated the texture as well as the orientation of the wood grain. Maybe it's better, maybe not.
Re: UPDATED Models, Map and Otherwise...
Posted:
Sun Oct 26, 2008 2:07 pm
by Joe M.
My brother now points out to me that lengthwise is the correct way for the grain to run: wood breaks along the grain, and the club would snap if the grain ran horizontally. I was looking at the picture you provided, but that's probably not the grain anyway, but carving on top of the grain.
But now that we've heard arguments both ways, I guess the only correct solution would be whatever looks good. New texture, vertical grain, horizontal grain. So it's up to you.
Re: UPDATED Models, Map and Otherwise...
Posted:
Sun Oct 26, 2008 7:35 pm
by Burnt Ferret
It's a panaba... or a wicked dagger... or whatever!
Re: UPDATED Models, Map and Otherwise...
Posted:
Sat Dec 13, 2008 2:01 pm
by Serenity
I kinda like these but the textures definitely do need to be updated. I've not done much texturing for models, but I can work on something if you let me know what you need and how to do it. (UV maps and whatnot?)
Re: UPDATED Models, Map and Otherwise...
Posted:
Wed Dec 17, 2008 7:23 pm
by Burnt Ferret
The thing is, you can't really have a detailed texture for each individual weapon. You COULD, but doing so would cause you to need to d/l a massive number of files.
They don't look that great with the current textures, but imagine the thing shrunken down to game size... you most likely won't be able to tell much difference.
Re: UPDATED Models, Map and Otherwise...
Posted:
Wed Dec 17, 2008 7:33 pm
by Karl G.
Burnt Ferret wrote:The thing is, you can't really have a detailed texture for each individual weapon. You COULD, but doing so would cause you to need to d/l a massive number of files.
They don't look that great with the current textures, but imagine the thing shrunken down to game size... you most likely won't be able to tell much difference.
Yeah, having the same texture for a set of weapons is definitely the way to go.
Re: UPDATED Models, Map and Otherwise...
Posted:
Mon May 11, 2009 6:45 am
by WACOO
Great work Burnt, may I ask what program you are using to make these?
Re: UPDATED Models, Map and Otherwise...
Posted:
Mon May 11, 2009 8:26 am
by Joe M.
Re: UPDATED Models, Map and Otherwise...
Posted:
Mon May 11, 2009 3:45 pm
by WACOO
Joe M. wrote:http://www.blender.org/
Thx Joe!
Was just curious and I was thinking to try it out and see what I may be able to create in the future
(maybe something that good so it might be putted into Evidyon :O )
Re: UPDATED Models, Map and Otherwise...
Posted:
Mon May 11, 2009 3:55 pm
by Joe M.
If you come up with anything be sure to post it. We're always happy to include content from the community.


DBus Support¶
PyQt5 provides two different modules that implement support for DBus. The
QtDBus
module provides wrappers for the standard Qt DBus
classes. The dbus.mainloop.pyqt5
module adds support for the Qt
event loop to the standard dbus-python
Python module.
QtDBus
¶
The QtDBus
module is used in a similar way to the C++ library
it wraps. The main difference is in the way it supports the demarshalling of
DBus structures. C++ relies on the template-based registration of types using
qDBusRegisterMetaType()
which isn’t possible from Python. Instead a slot
that accepts a DBus structure in an argument should specify a slot with a
single QDBusMessage
argument. The implementation of
the slot should then extract the arguments from the message using its
arguments()
method.
For example, say we have a DBus method called setColors()
that has a single
argument that is an array of structures of three integers (red, green and
blue). The DBus signature of the argument would then be a(iii)
. In C++
you would typically define a class to hold the red, green and blue values and
so your code would include the following (incomplete) fragments:
struct Color
{
int red;
int green;
int blue;
};
Q_DECLARE_METATYPE(Color)
qDBusRegisterMetaType<Color>();
class ServerAdaptor : public QDBusAbstractAdaptor
{
Q_OBJECT
public slots:
void setColors(QList<const Color &> colors);
};
The Python version is, of course, much simpler:
class ServerAdaptor(QDBusAbstractAdaptor):
@pyqtSlot(QDBusMessage)
def setColors(self, message):
# Get the single argument.
colors = message.arguments()[0]
# The argument will be a list of 3-tuples of ints.
for red, green, blue in colors:
print("RGB:", red, green, blue)
Note that this technique can be used for arguments of any type, it is only require if DBus structures are involved.
dbus.mainloop.pyqt5
¶
The dbus.mainloop.pyqt5
module provides support for the Qt event
loop to dbus-python
. The module’s API is almost identical to that of the
dbus.mainloop.glib
modules that provides support for the GLib event
loop.
The dbus.mainloop.pyqt5
module contains the following function.
-
DBusQtMainLoop
(set_as_default=False)¶ Create a
dbus.mainloop.NativeMainLoop
object that uses the the Qt event loop.Parameters: set_as_default – is optionally set to make the main loop instance the default for all new Connection and Bus instances. It may only be specified as a keyword argument, and not as a positional argument.
The following code fragment is all that is normally needed to set up the
standard dbus-python
language bindings package to be used with PyQt5:
from dbus.mainloop.pyqt5 import DBusQtMainLoop
DBusQtMainLoop(set_as_default=True)


Indoor flying¶
System Architecture¶
In order to start flying the quadcopter indoor, we need the position and orientation feedback for this.
This section will guide you how to use OptiTrack Motion Capture System, how to stream position and orientation data to ROS, and feed it to your flight controller. Finally you will be able to fly your drone inside the arena.
The overall systems has following main elements:
- OptiTrack Motion Capture System
- Object to be tracker, eg. quadcopter, ground vehicles.
- Controller
Let’s discuss each element in details
Motion capture system¶
OptiTrack motion capture system (Mocap hereinafter) works as follows. The overhead cameras send out pulsed infrared light using the attached infrared LEDs, which will then be reflected by markers on the object and detected by the OptiTrack cameras. Knowing the position of those markers in perspective of several cameras, the actual 3D position of the markers in the room can be calculated using triangulation. Simply Mocap provides high precision indoor local position and orientation estimation. Position is meters and orientation is in quaternion, which can be converted Euler angles in radians. In RISC lab we use twenty Prime17w cameras that are installed in the flying arena.
All cameras are connected to a single Mocap PC through network switches. Motive Optical motion capture software is installed on this PC.
Controller¶
Controllers are PCs or single board computer (SBC) which are used to control the objects in the flying arena. When a PC is used to control an object, this referred as OFFBOARD control. Also a controller can be a flight controller that runs an autopilot firmware to control a vehicle (e.g. quadcopter).
A companion computer is referred to SBC that is connected to a flight controller. Usually, SBC is used to perform more sophisticated/high computations that the flight controller can not. In other words, the flight controller is designed for low-level tasks, e.g. attitude control, motor driving, sensor data acquisition. However, the companion computer is used for high-level-control e.g. path planning, optimization.
Motion Capture Setup: OptiTrack¶
Camera calibration¶
Make sure that you remove any markers from the captured area and Area-C before performing calibration.
Make sure that you use clean markers on the Wanding stick.
The calibration involves three main steps
- Sample collections using the Wanding stick
- Ground setting using the L-shape tool
- Ground refinement
Follow this guide in order to perform the calibration.
Note
It is recommended to perform camera calibration on a weekly basis, or every couple of weeks.
Calibration video:
Motive setup¶
In this section, we mainly want to learn how to
- Create rigid bodies that represent objects to be tracked (e.g. quadcopter)
- Make an appropriate marker setup
Make sure that you have clean markers. Markers should not be placed in symmetric shape. Markers should not be close to each other.
Read this guide for detailed markers setup.
Follow this guide to create rigid bodies.
OptiTrack Interface to ROS¶
Getting positions of objects in the observable OptiTrack space to ROS works as follows.
Required Hardware¶
- Mocap machine. Runs Motive Motion Capture Software.
- Optitrack Motion Capture System
- WiFi router (5GHz recommended)
- A Linux based computer, normal PC or on-board embedded computer like ODROID XU4 will work. The Linux computer should be connected to the router either via Ethernet cable or WiFi connection.
Required Software¶
- Motive. It allows you to calibrate your OptiTrack system, stream tracking information to external entities.
- ROS Kinetic installed on your Linux computer.
- The package vrpn_client_ros for ROS to receive the tracking data from the Mocap computer.
Installation¶
Method 1. PC¶
Install vrpn_client_ros using following command.
sudo apt-get install ros-kinetic-vrpn-client-ros -y
Configure your IP address to be manual with the following values:
IP: 192.168.0.xxx (The *xxx* value shouldn't conflict with existing IP addresses)
Subnet Mask: <IP_ADDRESS>
Gateway: <IP_ADDRESS>
DNS Server: <IP_ADDRESS>
Check this video to set static IP on Ubuntu.
Method 2. Odroid XU4¶
Download Ubuntu 16 with ROS Kinetic minimal or Ubuntu 16 Full with GUI. It’s highly recommended to use minimal image.
Flash image with Etcher to ODROID XU4 eMMC.
No need to install vrpn_client_ros package as it’s already included. Now connect your ODROID XU4 to monitor using HDMI cable. You will also need a keyboard.
After powering the ODROID you will prompt to enter username and password. It’s all odroid
. Plug the WiFi Module 4 to the ODROID’s USB port.
Check the WiFi card number by typing following command
ifconfig -a
To set a static IP address open /etc/network/interfaces
file for editing by following command
sudo nano /etc/network/interfaces
Modify the file so it matches your WiFi network. It should look similar to this.
auto wlan0 # The following will auto-start connection after boot
allow-hotplug wlan0 # wlan0 WiFi card number
iface wlan0 inet static
address 192.168.0.xxx # Choose a static IP, usually you change the last number only for different devices
netmask <IP_ADDRESS>
broadcast <IP_ADDRESS>
gateway <IP_ADDRESS> # Your router IP address
dns-nameservers <IP_ADDRESS>
wpa-ssid "RISC-AreaC" # WiFi name
wpa-psk "risc3720" # WiFi password
Mocap computer settings¶
In Motive, choose View > Data Streaming from menu bar. Check the boxes Broadcast Frame Data
in OptiTrack Streaming Engine and VRPN Streaming Engine sections. Create a rigid body by selecting markers of interest. Refer to picture below.
Make sure you either turn off the Windows Firewall or create outbound rules for the VRPN port (recommended).
Right click on the body created, choose Properties and rename it such that there is no spaces in the name.
Streaming MOCAP Data¶
Check the IP address assigned to the Mocap machine, in our case it’s <IP_ADDRESS>
In your ROS machine (PC or ODROID), where you want to get tracking data, run the vrpn_client_ros
node as follows
roslaunch vrpn_client_ros sample.launch server:=<IP_ADDRESS>
Now you should be able to receive Mocap data under topic /vrpn_client_node/<rigid_body_name>/pose
.
Open new terminal (CTRL + ALT + F2 on ODROID XU4) and try following command
rostopic echo vrpn_client_node/<rigid_body_name>/pose
You should get similar to this. More information on message type here.
Feeding MOCAP data to Pixhawk¶
Intro¶
This tutorial shows you how to feed MOCAP data to Pixhawk that is connected to an ODROID, or an on-board linux computer. This will allow Pixhawk to have indoor position and heading information for position stabilization.
Hardware Requirements¶
- Pixhawk or similar controller that runs PX4 firmware
- ODROID (we will assume XU4)
- Serial connection, to connect ODROID to Pixhawk. You can use USB/FTDI cable. If you are using Pixhawk 2, then connect the serial cable to
TELEM2
port. If you are using MindPX flight controller, just use a USB to micro-USB cable and connect it to USB/OBC port. - OptiTrack PC
- WiFi router (5GHz is recommended)
Software Requirements¶
- Linux Ubuntu 16 installed on ODROID XU4. A minimal image is recommended for faster executions.
Hint
A ready image for your eyes is available in here. This image has all the required software that is needed in this tutorial. You can use Etcher to flash your eMMC card with the provided .img
file
Hint
Make sure that you expand your eMMC card after you flash a new image in order to use the full space of the eMMC card. Use Gparted Partition Editor on Linux to merge unallocated space with flashed space.
- ROS Kinetic installed on ODROID XU4. The above image already includes this
MAVROS
package: Binary installation. Again, the above image includes this- Install
vrpn_client_ros
package. You can use the following command to install the package (assuming ROS Kinetic is used).
sudo apt-get install ros-kinetic-vrpn-client-ros -y
Again, this is included in the provided image
Now, you need to set your flight controller firmware PX4, to accept mocap data. PX4 has two state estimators, EKF2
(default) an extended Kalman filter, and LPE
.
LPE
estimator supports mocap data directly. EKF2
(recommended for this tutorial), however, (at the time of writing this tutorial) does not support directly. Instead, it can accept mocap data as vision-based data. We will explain how to setup both estimator to use mocap data.
Setting EKF2 Estimator for MOCAP Fusion¶
First choose EKF2
as your estimator from the System
tab
Also make sure the you set the baudrate correctly SYS_COMPANION
In the EKF2
parameters tab, set EKF2_AID_MASK
to not use GPS, and use vision position and yaw.
There are some delay parameters that need to set properly, because they directly affect the EKF estimation. For more information read this wiki
Choose the height mode to be vision
Set the position of the center of the markers (that define the rigid body in the mocap system) with respect to the center of the flight controller. +x points forward, +y right, +z down
Setting LPE Estimator for MOCAP Fusion¶
You will need to set some parameters on Pixhawk as follows
Select LPE
as your estimator. You can change that from the System
tab in QGroundControl
.
You will also need to use the highest baud rate for the serial connection. See below picture.
Use heading from mocap. Adjust the ATT_EXT_HDG_M
parameter as follows. Restart might needed to activate LPE parameters in QGroundControl.
You will need to set the LPE_FUSION
parameter to not to use GPS and not to use barometer, since most likely your mocap altitude is highly accurate. See following picture.
Also, disable any altitude sensor e.g. LIDAR
Now Restart Pixhawk
Getting MOCAP data into PX4¶
Assuming your vrpn_client_node
is still running from OptiTrack Interface to ROS on your ODROID, we will republish it to another topic by relay
command.
You will need to run MAVROS node in order to connect ODROID to the flight controller. Separate terminal on ODROID (CTRL + ALT + F2/F3/F4)
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:921600 gcs_url:=udp://@<IP_ADDRESS>:14550
ttyUSB0
should match the serial port ID in your ODROID. gcs_url:=udp://@<IP_ADDRESS>:14550
is used to allow you to receive data to QGroundControl
on your machine (that has to be connected to the same WiFi router). Adjust the IP to match your PC IP, that runs QGroundControl
.
Relay the Mocap data to the flight controller
- If you are using LPE
rosrun topic_tools relay /vrpn_client_node/<rigid_body_name>/pose /mavros/mocap/pose
- If you use EKF2
rosrun topic_tools relay /vrpn_client_node/<rigid_body_name>/pose /mavros/vision_pose/pose
Check in QGroundControl that you got some message which means Mocap data is received by Pixhawk.
Now you are ready to use position hold/offboard modes.
Important
It is very important that you align the forward direction of your drone (robot) with the x-axis of your Mocap when you first define a rigid body. You can find the x-axis direction in the Mocap software, Motive.
Checking EKF2 Consistency via Log Files¶
It’s important to make sure that EKF2 estimator provides accurate enough estimates of the states for your flight controller to perform well. A quick way to debug that is through the log files.
The default log file format in PX4 is Ulog
. Usually, the default setting, is that the logs start after arming the vehicle and stopped after disarm. You can change it, so it logs after you power controller.
- Use QGC to download
Ulog
file you wish to analyze - Download the FlightPlot software to open your logs.
- Plot the fields
ekf2_innovations_0.vel_pos_innov[3]
,ekf2_innovations_0.vel_pos_innov[4]
,ekf2_innovations_0.vel_pos_innov[5]
Those are the innovations on the x/y/z position estimates reported by the EKF2
. They should very small values, (ideally zero!), see the picture below for reasonable values. If those values are large, then EKF2
is not providing accurate estimation. This is most likely because of the inconsistency of timestamps of the fused measurements. For that, you will need to start adjusting the EKF2_<sensor>_DELAY
parameters that affect the position estimates. For example, if you are using Mocap, then you will need to adjust EKF2_EV_DELAY
. It should be decreased if you are feeding Mocap data at high rate.
Flying¶
Intro¶
Now it’s time to fly your drone in the cage!
We will need a PC running Linux with Joystick connected to it. To establish ODROID communication with that PC, we will setup ROS Network. PC that runs Joystick node will be the ROS Master. The logic is the same as in the Software in the Loop simulator. The joystick commands will be converted to position setpoints and will be published to /mavros/setpoint_raw/local
node. Finally MAVROS will send setpoints to autopilot (real flight controller on your drone).
Setup a ROS Network¶
- First let’s set PC running Linux to be ROS Master by editing
.bashrc
file. Open terminal and open.bashrc
file for editing.
gedit ~/.bashrc
- Add following lines to the end of the file. Both IP adresses are the same and represents IP address of the PC.
export ROS_MASTER_URI=http://<IP_ADDRESS>:11311
export ROS_HOSTNAME=<IP_ADDRESS>
Make sure you source the .bashrc
file after this.
- Log into a ODROID to get access to a command-line over a network.
ssh<EMAIL_ADDRESS>It will prompt to enter password, if you use minimal image provided then it’s odroid.
- We need to edit
.bashrc
file on ODROID as well.
nano .bashrc
- Add the following lines to the end of the file. First IP address belongs to PC, and the second one to ODROID.
export ROS_MASTER_URI=http://<IP_ADDRESS>:11311
export ROS_HOSTNAME=<IP_ADDRESS>
To save file, press Alt+X, press Y, hit Enter. Source the .bashrc
file.
ODROID commands¶
- Run on ODROID
vrpn_client_ros
as follows (repeated here for your convenience):
roslaunch vrpn_client_ros sample.launch server:=<IP_ADDRESS>
- Open another tab, log into ODROID again and run MAVROS:
roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:921600 gcs_url:=udp://@<IP_ADDRESS>:14550
Linux PC commands¶
- On Linux PC open new tab, relay positions from Mocap to MAVROS (assuming you are using EKF2).
rosrun topic_tools relay /vrpn_client_node/<rigid_body_name>/pose /mavros/vision_pose/pose
It’s important at this stage to check if setpoints are published to /mavros/vision_pose/pose
by rostopic echo. If you see setpoints are published then move to next step.
- Now modify
setpoints_node.py
andjoystick_flight.launch
to the following states. Try to find and understand what’s different from code in SITL files.
File setpoints_node.py
:
#!/usr/bin/env python
# ROS python API
import rospy
# Joy message structure
from sensor_msgs.msg import Joy
# 3D point & Stamped Pose msgs
from geometry_msgs.msg import Point, PoseStamped
# import all mavros messages and services
from mavros_msgs.msg import *
from mavros_msgs.srv import *
# Flight modes class
# Flight modes are activated using ROS services
class fcuModes:
def __init__(self):
pass
def setArm(self):
rospy.wait_for_service('mavros/cmd/arming')
try:
armService = rospy.ServiceProxy('mavros/cmd/arming', mavros_msgs.srv.CommandBool)
armService(True)
except rospy.ServiceException, e:
print "Service arming call failed: %s"%e
def setDisarm(self):
rospy.wait_for_service('mavros/cmd/arming')
try:
armService = rospy.ServiceProxy('mavros/cmd/arming', mavros_msgs.srv.CommandBool)
armService(False)
except rospy.ServiceException, e:
print "Service disarming call failed: %s"%e
def setStabilizedMode(self):
rospy.wait_for_service('mavros/set_mode')
try:
flightModeService = rospy.ServiceProxy('mavros/set_mode', mavros_msgs.srv.SetMode)
flightModeService(custom_mode='STABILIZED')
except rospy.ServiceException, e:
print "service set_mode call failed: %s. Stabilized Mode could not be set."%e
def setOffboardMode(self):
rospy.wait_for_service('mavros/set_mode')
try:
flightModeService = rospy.ServiceProxy('mavros/set_mode', mavros_msgs.srv.SetMode)
flightModeService(custom_mode='OFFBOARD')
except rospy.ServiceException, e:
print "service set_mode call failed: %s. Offboard Mode could not be set."%e
def setAltitudeMode(self):
rospy.wait_for_service('mavros/set_mode')
try:
flightModeService = rospy.ServiceProxy('mavros/set_mode', mavros_msgs.srv.SetMode)
flightModeService(custom_mode='ALTCTL')
except rospy.ServiceException, e:
print "service set_mode call failed: %s. Altitude Mode could not be set."%e
def setPositionMode(self):
rospy.wait_for_service('mavros/set_mode')
try:
flightModeService = rospy.ServiceProxy('mavros/set_mode', mavros_msgs.srv.SetMode)
flightModeService(custom_mode='POSCTL')
except rospy.ServiceException, e:
print "service set_mode call failed: %s. Position Mode could not be set."%e
def setAutoLandMode(self):
rospy.wait_for_service('mavros/set_mode')
try:
flightModeService = rospy.ServiceProxy('mavros/set_mode', mavros_msgs.srv.SetMode)
flightModeService(custom_mode='AUTO.LAND')
except rospy.ServiceException, e:
print "service set_mode call failed: %s. Autoland Mode could not be set."%e
# Main class: Converts joystick commands to position setpoints
class Controller:
# initialization method
def __init__(self):
# Drone state
self.state = State()
# Instantiate a setpoints message
self.sp = PositionTarget()
# set the flag to use position setpoints and yaw angle
self.sp.type_mask = int('010111111000', 2)
# LOCAL_NED
self.sp.coordinate_frame= 1
# We will fly at a fixed altitude for now
# Altitude setpoint, [meters]
self.ALT_SP = 1
# update the setpoint message with the required altitude
self.sp.position.z = self.ALT_SP
# Instantiate a joystick message
self.joy_msg = Joy()
# initialize
self.joy_msg.axes=[0.0, 0.0, 0.0]
# Step size for position update
self.STEP_SIZE = 2.0
# Fence. We will assume a square fence for now
self.FENCE_LIMIT = 1.0
# A Message for the current local position of the drone
self.local_pos = Point(0.0, 0.0, 0.0)
self.modes = fcuModes()
# Callbacks
## local position callback
def posCb(self, msg):
self.local_pos.x = msg.pose.position.x
self.local_pos.y = msg.pose.position.y
self.local_pos.z = msg.pose.position.z
## joystick callback
def joyCb(self, msg):
self.joy_msg = msg
# If button 1 on joystick is pressed
if msg.buttons[0] > 0:
self.modes.setArm()
# If button 2 on joystick is pressed
if msg.buttons[1] > 0:
self.modes.setAutoLandMode()
# If button 3 on joystick is pressed
if msg.buttons[2] > 0:
self.modes.setOffboardMode()
# If button 11 on joystick is pressed
if msg.buttons[10] > 0:
self.modes.setDisarm()
## Drone State callback
def stateCb(self, msg):
self.state = msg
## Update setpoint message
def updateSp(self):
x = -1*self.joy_msg.axes[1] # negative one might be changed if direction is reverse
y = -1*self.joy_msg.axes[0]
self.sp.position.x = self.local_pos.x + self.STEP_SIZE*x
self.sp.position.y = self.local_pos.y + self.STEP_SIZE*y
# Main function
def main():
# Initiate node
rospy.init_node('setpoints_node', anonymous=True)
# Flight mode object
# controller object
cnt = Controller()
# ROS loop rate, [Hz]
rate = rospy.Rate(20.0)
# Subscribe to drone state
rospy.Subscriber('mavros/state', State, cnt.stateCb)
# Subscribe to drone's local position
rospy.Subscriber('mavros/local_position/pose', PoseStamped, cnt.posCb)
# subscribe to joystick topic
rospy.Subscriber('joy', Joy, cnt.joyCb)
# Setpoint publisher
sp_pub = rospy.Publisher('mavros/setpoint_raw/local', PositionTarget, queue_size=1)
# Some lines deleted from SITL code
# We need to send few setpoint messages, then activate OFFBOARD mode, to take effect
k=0
while k<10:
sp_pub.publish(cnt.sp)
rate.sleep()
k = k+1
# Activate OFFBOARD mode
cnt.modes.setOffboardMode()
# ROS main loop
while not rospy.is_shutdown():
cnt.updateSp()
sp_pub.publish(cnt.sp)
rate.sleep()
if __name__ == '__main__':
try:
main()
except rospy.ROSInterruptException:
pass
File joystick_flight.launch
:
<launch>
<arg name="joy_dev" default="/dev/input/js0"/>
<node pkg="joy" type="joy_node" name="joy_node" required="true" output="screen">
<param name="dev" type="string" value="$(arg joy_dev)" />
</node>
<node pkg="mypackage" type="setpoints_node.py" name="setpoints_node" required="true" output="screen">
</node>
</launch>
- Make sure you give permissions to the joystick.
Danger
Keep the transmitter nearby to engage the Kill Switch
trigger in case something will go wrong.
- Now run in a new terminal your launch file
roslaunch mypackage joystick_flight.launch
Joystick control¶
BUTTON 1
- Arms the quadcopter
BUTTON 3
- Switches quadcopter to OFFBOARD flight mode. It should takeoff after this.
BUTTON 2
- Lands the quadcopter
BUTTON 11
- Disarms the quadcopter
Enjoy your flight.


| File | Statements | Branches | Functions | Lines | |||||
|---|---|---|---|---|---|---|---|---|---|
| aggregator.js | 100% | (6 / 6) | 100% | (0 / 0) | 100% | (2 / 2) | 100% | (6 / 6) | |
| reporter.js | 85% | (85 / 100) | 67.5% | (27 / 40) | 100% | (19 / 19) | 85% | (85 / 100) | |
| sentinel.js | 67.65% | (46 / 68) | 55% | (11 / 20) | 61.11% | (11 / 18) | 67.65% | (46 / 68) | |
| service-access-filter.js | 100% | (27 / 27) | 96.15% | (25 / 26) | 100% | (8 / 8) | 100% | (27 / 27) | |
| service-validator.js | 93.75% | (30 / 32) | 92.86% | (13 / 14) | 100% | (7 / 7) | 93.55% | (29 / 31) | |
| utils.js | 83.33% | (5 / 6) | 50% | (1 / 2) | 100% | (3 / 3) | 83.33% | (5 / 6) | |
| watchmen.js | 89.42% | (93 / 104) | 73.91% | (34 / 46) | 90.91% | (20 / 22) | 89.22% | (91 / 102) |


Enable3d is maintained and provided for free, please consider supporting it on
GitHub Sponsors
❤
❮
Examples
Docs
Github
Documentation
loading...


public interface BlogRightsManagement
| Modifier and Type | Method and Description |
|---|---|
void |
addEntity(Long topicId,
Long entityId,
BlogRole role)
Adds member with the given role to the blog.
|
void |
addEntityForExternal(Long topicId,
Long entityId,
BlogRole role,
String externalSystemId,
String externalObjectId)
Add a member with the given role to the blog on the behalf of an external system.
|
void |
addEntityForExternalTrusted(Long topicId,
Long entityId,
BlogRole role,
String externalSystemId)
Add a member with the given role to the blog on the behalf of an external system.
|
void |
assignEntity(Long topicId,
Long entityId,
BlogRole role)
Add a member with the given role to the blog.
|
void |
assignEntity(Long blogId,
Long entityId,
BlogRole role,
boolean createNote)
Adds member with the given role to the blog.
|
void |
assignEntityForExternal(Long topicId,
Long entityId,
BlogRole role,
String externalSystemId,
String externalObjectId)
Add or update a member with the given role on the behalf of an external system.
|
void |
assignEntityForExternalTrusted(Long topicId,
Long entityId,
BlogRole role,
String externalSystemId)
Add or update a member with the given role on the behalf of an external system.
|
void |
assignManagementAccessToCurrentUser(Long topicId)
Assigns the management role to the current user.
|
void |
changePublicAccess(Long topicId,
boolean allowPublicAccess)
Change the public access to a blog.
|
void |
changeRoleOfMemberByEntityId(Long topicId,
Long entityId,
BlogRole role)
Changes the role of a blog member.
|
void |
changeRoleOfMemberByEntityIdForExternal(Long topicId,
Long entityId,
BlogRole role,
String externalSystemId)
Change the role of a blog member that was added on the behalf of an external system.
|
boolean |
currentUserHasManagementAccess(Long topicId)
Tests whether the current user is manager of a blog.
|
boolean |
currentUserHasReadAccess(Long topicId,
boolean ignoreAllCanFlags)
Tests whether the current user has read access to a blog.
|
boolean |
currentUserHasWriteAccess(Long topicId,
boolean ignoreAllCanFlags)
Tests whether the current user has write access to a blog.
|
Blog |
getAndCheckBlogAccess(Long topicId,
BlogRole blogRole)
Check if a topic exists and the current user has access to that topic.
|
<T> Collection<T> |
getMappedUsers(Long topicId,
CollectionConverter<UserToBlogRoleMapping,T> converter,
BlogRole... roles)
Method to get all users for a given topic with the specified roles.
|
BlogRole |
getRoleOfCurrentUser(Long topicId,
boolean ignoreAllCanFlags)
Returns the blog role of the current user.
|
BlogRole |
getRoleOfEntity(Long topicId,
Long entityId,
boolean ignoreAllCanFlags)
Returns the blog role of an entity or null if the entity does not have access to the blog.
|
BlogRole |
getRoleOfUser(Long topicId,
Long userId,
boolean ignoreAllCanFlags)
Returns the blog role of a user.
|
boolean |
hasAnotherManager(Long topicId,
Long userId)
Returns true if the blog has another active user as member with management access right.
|
boolean |
hasAnotherReader(Long topicId,
Long userId)
Returns true if the blog has another reader than the user passed in.
|
boolean |
isEntityDirectMember(Long topicId,
Long entityId)
Returns true if the entity was added to the blog.
|
void |
removeMemberByEntityId(Long topicId,
Long entityId) |
void |
removeMemberByEntityIdForExternal(Long topicId,
Long entityId,
String externalSystemId) |
void |
removeUserFromAllBlogs(Long userId,
Collection<Long> blogsToNotCheckForLastManager)
Removes all the direct blog memberships of a user.
|
Blog |
setAllCanReadAllCanWrite(Long topicId,
boolean allCanRead,
boolean allCanWrite)
Update the blog all you can read /write only
|
boolean |
userHasManagementAccess(Long topicId,
Long userId)
Test whether a user is manager of a blog.
|
boolean |
userHasReadAccess(Long topicId,
Long userId,
boolean ignoreAllCanFlags)
Test whether a user has read access to a blog.
|
boolean |
userHasWriteAccess(Long topicId,
Long userId,
boolean ignoreAllCanFlags)
Tests whether a user has write access to a blog.
|
void addEntity(Long topicId, Long entityId, BlogRole role) throws CommunoteEntityNotFoundException, BlogNotFoundException, BlogAccessException
Adds member with the given role to the blog. If the entity already is a member of the blog, nothing will happen.
topicId
- ID of the blogentityId
- ID of a user or a grouprole
- the role describing the access right the entity should getCommunoteEntityNotFoundException
- in case the user or group does not existBlogNotFoundException
- in case the blog does not existBlogAccessException
- in case the current user is not allowed to add an entity to the blog. This
exception won't be thrown during blog creation.void addEntityForExternal(Long topicId, Long entityId, BlogRole role, String externalSystemId, String externalObjectId) throws BlogNotFoundException, CommunoteEntityNotFoundException, ExternalObjectNotAssignedException, BlogAccessException
Add a member with the given role to the blog on the behalf of an external system. If the entity already is a member of the blog and was added on the behalf of the same external system, nothing will happen.
When adding a member on the behalf of an external system, the role will not interfere with roles added for other external systems or those that were not added for an external system (for instance by the blog manager via the web FE). Because of this a user can have different roles for the same blog. For such a case the actual access right will always be the highest of all the assigned rights.
It is assumed that the blog is associated with an external object from the external system. In case the blog is not associated with the external object identified by the externalObjectId an exception is thrown.
topicId
- ID of the blogentityId
- ID of a user or a grouprole
- the role describing the access right the entity should getexternalSystemId
- identifier of the external systemexternalObjectId
- identifier of the external object within the external systemCommunoteEntityNotFoundException
- in case the user or group does not existBlogNotFoundException
- in case the blog does not existExternalObjectNotAssignedException
- in case the external object is not assigned to the blogBlogAccessException
- in case the current user is not manager of the blogvoid addEntityForExternalTrusted(Long topicId, Long entityId, BlogRole role, String externalSystemId) throws BlogNotFoundException, CommunoteEntityNotFoundException, BlogAccessException
Add a member with the given role to the blog on the behalf of an external system. If the entity already is a member of the blog and was added on the behalf of the same external system, nothing will happen.
When adding a member on the behalf of an external system, the role will not interfere with roles added for other external systems or those that were not added for an external system (for instance by the blog manager via the web FE). Because of this a user can have different roles for the same blog. For such a case the actual access right will always be the highest of all the assigned rights.
It is assumed that the blog is associated with an external object from the external system. The 'Trusted' suffix in the method name denotes that the caller has to take care that there is such an external object. As of for now only the client manager is allowed to call this method.
topicId
- ID of the blogentityId
- ID of a user or a grouprole
- the role describing the access right the entity should getexternalSystemId
- identifier of the external systemCommunoteEntityNotFoundException
- in case the user or group does not existBlogNotFoundException
- in case the blog does not existBlogAccessException
- in case the current user is not client managervoid assignEntity(Long topicId, Long entityId, BlogRole role) throws BlogAccessException, BlogNotFoundException, CommunoteEntityNotFoundException, NoBlogManagerLeftException
Add a member with the given role to the blog. If the entity is already a member the role will be changed to the provided role. This method won't change a role that was added on the behalf of an external system.
topicId
- The topics id.entityId
- The entity to assign.role
- The role for the entity.BlogAccessException
BlogNotFoundException
CommunoteEntityNotFoundException
NoBlogManagerLeftException
void assignEntity(Long blogId, Long entityId, BlogRole role, boolean createNote) throws BlogAccessException, BlogNotFoundException, CommunoteEntityNotFoundException, NoBlogManagerLeftException
Adds member with the given role to the blog. If the entity already is a member of the blog, nothing will happen.
topicId
- ID of the blogentityId
- ID of a user or a grouprole
- the role describing the access right the entity should getcreateNote
- true to create the activity noteCommunoteEntityNotFoundException
- in case the user or group does not existBlogNotFoundException
- in case the blog does not existBlogAccessException
- in case the current user is not allowed to add an entity to the blog. This
exception won't be thrown during blog creation.NoBlogManagerLeftException
void assignEntityForExternal(Long topicId, Long entityId, BlogRole role, String externalSystemId, String externalObjectId) throws BlogAccessException, BlogNotFoundException, CommunoteEntityNotFoundException, ExternalObjectNotAssignedException
Add or update a member with the given role on the behalf of an external system.
This method first checks whether there is already a member that was added for the given
external system and if this is the case it behaves exactly like
changeRoleOfMemberByEntityIdForExternal(Long, Long, BlogRole, String)
, if it is not
the case it does the same as
addEntityForExternal(Long, Long, BlogRole, String, String)
topicId
- ID of the blogentityId
- ID of a user or a grouprole
- the role describing the access right the entity should getexternalSystemId
- identifier of the external systemexternalObjectId
- identifier of the external object within the external systemCommunoteEntityNotFoundException
- in case the user or group does not existBlogNotFoundException
- in case the blog does not existBlogAccessException
- in case the current user is not allowed to modify the blog access rightsExternalObjectNotAssignedException
- in case the entity is not yet a member and the external object is not associated
with the blogvoid assignEntityForExternalTrusted(Long topicId, Long entityId, BlogRole role, String externalSystemId) throws BlogAccessException, BlogNotFoundException, CommunoteEntityNotFoundException
Add or update a member with the given role on the behalf of an external system.
This method first checks whether there is already a member that was added for the given
external system and if this is the case it behaves exactly like
changeRoleOfMemberByEntityIdForExternal(Long, Long, BlogRole, String)
, if it is not
the case it does the same as
addEntityForExternalTrusted(Long, Long, BlogRole, String)
topicId
- ID of the blogentityId
- ID of a user or a grouprole
- the role describing the access right the entity should getexternalSystemId
- identifier of the external systemCommunoteEntityNotFoundException
- in case the user or group does not existBlogNotFoundException
- in case the blog does not existBlogAccessException
- in case the current user is not allowed to modify the blog access rightsvoid assignManagementAccessToCurrentUser(Long topicId) throws BlogNotFoundException, AuthorizationException
topicId
- The topics id.AuthorizationException
- in case the current user is not client managerBlogNotFoundException
- in case the topic does not existvoid changePublicAccess(Long topicId, boolean allowPublicAccess) throws BlogNotFoundException, BlogAccessException
Change the public access to a blog.
topicId
- ID of the blogallowPublicAccess
- if true the blog will also be accessible by the unauthorized public userBlogNotFoundException
- in case the blog does not existBlogAccessException
- in case the current user is not allowed to modify the blog access rightsvoid changeRoleOfMemberByEntityId(Long topicId, Long entityId, BlogRole role) throws BlogMemberNotFoundException, BlogNotFoundException, NoBlogManagerLeftException, BlogAccessException
Changes the role of a blog member. This method won't change the role of a member that was added on the behalf of an external system.
topicId
- ID of the blogentityId
- ID of a user or a group that has previously added to the blogrole
- the role describing the new access right the entity should getBlogNotFoundException
- in case the blog does not existNoBlogManagerLeftException
- in case the operation would remove the last active blog managerBlogAccessException
- in case the current user is not allowed to modify the blog access rightsBlogMemberNotFoundException
- in case the entity is not a member of the blogvoid changeRoleOfMemberByEntityIdForExternal(Long topicId, Long entityId, BlogRole role, String externalSystemId) throws BlogNotFoundException, BlogMemberNotFoundException, BlogAccessException
Change the role of a blog member that was added on the behalf of an external system. This method won't change the role of a member that was added on the behalf of another external system or that was added directly.
topicId
- ID of the blogentityId
- ID of a user or a group that has previously added to the blog on the behalf of the
external systemrole
- the role describing the new access right the entity should getBlogNotFoundException
- in case the blog does not existBlogMemberNotFoundException
- in case the entity is not a member of the blogBlogAccessException
- in case the current user is not allowed to modify the blog access rightsboolean currentUserHasManagementAccess(Long topicId)
Tests whether the current user is manager of a blog.
topicId
- ID of the blogboolean currentUserHasReadAccess(Long topicId, boolean ignoreAllCanFlags)
topicId
- ID of the blogignoreAllCanFlags
- ignore the all can read and all can write flags and only consider the individual
blog membersboolean currentUserHasWriteAccess(Long topicId, boolean ignoreAllCanFlags)
Tests whether the current user has write access to a blog.
topicId
- ID of the blogignoreAllCanFlags
- ignore the all can write flag and only consider the individual blog membersBlog getAndCheckBlogAccess(Long topicId, BlogRole blogRole) throws BlogNotFoundException, BlogAccessException
topicId
- the ID of the topic to retrieveblogRole
- the access rights the current user needs to haveBlogNotFoundException
- in case there is no topic with the given IDBlogAccessException
- in case the current user has no access to the topic<T> Collection<T> getMappedUsers(Long topicId, CollectionConverter<UserToBlogRoleMapping,T> converter, BlogRole... roles)
topicId
- Id of the topic the users are requested.converter
- An Converter for converting the found users to something else.roles
- The user must have at least one of these roles.BlogRole getRoleOfCurrentUser(Long topicId, boolean ignoreAllCanFlags)
BlogRole getRoleOfEntity(Long topicId, Long entityId, boolean ignoreAllCanFlags)
BlogRole getRoleOfUser(Long topicId, Long userId, boolean ignoreAllCanFlags)
boolean hasAnotherManager(Long topicId, Long userId)
Returns true if the blog has another active user as member with management access right.
boolean hasAnotherReader(Long topicId, Long userId)
Returns true if the blog has another reader than the user passed in.
boolean isEntityDirectMember(Long topicId, Long entityId)
Returns true if the entity was added to the blog. This will return false if the entity has blog access through other means like being member of a group that was added to the blog or the blog has allCanRead, allCanWrite access. If the entity has no blog access false will be returned as well.
void removeMemberByEntityId(Long topicId, Long entityId) throws NoBlogManagerLeftException, BlogNotFoundException, BlogAccessException
void removeMemberByEntityIdForExternal(Long topicId, Long entityId, String externalSystemId) throws BlogNotFoundException, BlogAccessException
topicId
- Id of the topic.entityId
- Id of the entity to remove.externalSystemId
- Id of the entities external system.BlogNotFoundException
BlogAccessException
void removeUserFromAllBlogs(Long userId, Collection<Long> blogsToNotCheckForLastManager) throws AuthorizationException, NoBlogManagerLeftException
Removes all the direct blog memberships of a user. If the user to remove is not the current user or the current user is not a client manager an AuthorizationException will be thrown. If the blog would end without mananger a NoBlogManagerLEftException is thrown.
Blog setAllCanReadAllCanWrite(Long topicId, boolean allCanRead, boolean allCanWrite) throws BlogAccessException, BlogNotFoundException
Update the blog all you can read /write only
boolean userHasManagementAccess(Long topicId, Long userId)
Test whether a user is manager of a blog.
topicId
- ID of the bloguserId
- identifier of userboolean userHasReadAccess(Long topicId, Long userId, boolean ignoreAllCanFlags)
Test whether a user has read access to a blog.
topicId
- ID of the bloguserId
- identifier of userignoreAllCanFlags
- ignore the all can read and all can write flags and only consider the individual
blog membersboolean userHasWriteAccess(Long topicId, Long userId, boolean ignoreAllCanFlags)
Tests whether a user has write access to a blog.
topicId
- ID of the bloguserId
- identifier of userignoreAllCanFlags
- ignore the flag all can writeCopyright © 2019 Communote team. All rights reserved.


This is a Progressive Web App Demo written in Preact (React syntax) and VueJS. Feel free to look into the code. It's all open source and documented.
Preacthttps://todo-pwa.nico.dev/preact/ VueJS https://todo-pwa.nico.dev/vue/