Hi everybody. If you’ve recently been invited to a Laravel interview, or you want to improve your skills about this framework, in 80 questions, we are going to discover more about Laravel. 😉
A Friendly Tip
These questions improve your general and technical knowledge about Laravel and prepare you for interviews. In this series we are going to explore something like Event/Listeners briefly. Knowing these items doesn’t guarantee that you will pass the interview! Passing the interview is hugely depends on how you are going to implement these items. For example you may be asked to make a program using Job/Queue.
Laravel has a lot of features and no one can claim that he/she knows everything about Laravel and is able to implement everything in the best way. Even it’s main developers!
So the best approach is to grasp basic knowledge about most Laravel features and be able to implement only some of these features in the best way. Companies aren’t looking for a person who knows everything. And the one who claims that he/she knows everything, will be likely rejected because of being overqualified which means he/she is good more that expectations.
So don’t worry if you don’t know everything. The thing is, you must know a few things like a hero 💪
Ok, let’s start.
What are we going to explore?
In this series we are going to answer these 80 questions:
There are times when you want to transfer files between your local system and a remote server. Several protocols and methods are available that allow you to handle file transmissions in a secure manner.
The scp command in Linux is one such tool that helps a user in sharing files remotely between local and remote hosts. In this article, we will discuss the scp command in detail, along with its usage and some additional features of the command.
What Is the Scp Command
Scp, an acronym for Secure Copy, is a command-line utility in Linux-based operating systems that allows a user to copy files between remote and local hosts. Since the command transfers files over a network to some other host, SSH access is required. SSH (Secure Shell) is a protocol that allows you to handle network services securely over any network.
The scp command also supports some additional features such as specifying authentication parameters, changing the port, transferring directories, and more.
Why Scp Is Better Than Other Methods
Scp is usually preferred over other file transfer methods because, during the transfer, the connection between the two hosts is encrypted. The SSH protocol is responsible for encrypting the files, passwords, and any other sensitive details.
Other transfer methods such as Telnet or FTP do not have any encryption. Also, the user/password keypair is also saved in plain text which is not a good practice at all. A cracker can easily access your information by sniffing your network.
How to Securely Transfer Files Using Scp
Using the scp command, you can transfer files between:
A local host and a remote host
A remote host and a local system
Two remote hosts
Basic Syntax
The basic syntax of the scp command is:
scp [options] [source] [destination]
Transfer From Local Host to a Remote System
If you are a server administrator, then transferring files between a local host and remote hosts might be useful to you. To upload a file named document.txt to a remote host:
Note that the source is the path of the file on your local storage. And the destination is the path of the file on the remote host. You have to specify the username and domain name of the remote server as well. In the above command, user is the username and remote-host is the domain name.
The destination path is separated from the remote host details using the colon character (:). Keep in mind that the user must exist on the remote server if you want to transfer the files successfully. Also, the user should have write access to the directory in which you want to save the file.
After issuing the above-mentioned command, the system will ask you for the remote user’s password. Type the password and press Enter.
user@remote-host's password:
If the password is valid, the file transfer will initialize. If you entered an incorrect password, an error will occur.
Before trying to copy the file using the scp command, ensure that the remote host details and the password are correct by logging in to the server using SSH.
From a Remote Host to Local Host
To copy files from a remote host to a local host, just interchange the source and destination path in the scp command.
Again, a prompt will appear asking you to enter the password for each of the two users.
Scp Command-Line Options
Apart from simply transferring the files from source to destination, scp has some additional options that can be invoked using specific arguments.
Change the Port
By default, the scp command works on port 22. However, you can always overwrite the default configuration and change the port. The -P flag allows you to do the same.
To use some other port number while copying files from a local host to a remote host:
The aforementioned command will ensure that the scp command uses port 35 for transferring files.
Preserve File Timestamps
You might know that Linux sets timestamps for each file to store the modification time, access time, and change time associated with the file. When you transfer the file to another location using scp, the timestamps of the destination file are overridden by the current time.
If for any reason you want to preserve these timestamps, use the -p flag. Notice that -P and -p flags are different from each other.
If you want to copy directories instead of files, use the -r flag to transfer directories recursively.
scp -r user@remote-host:/home/videos /home/videos
Suppressed Mode
When you enter the scp command in order to transfer files, the terminal displays the progress bar and other related information on the screen. However, you can choose not to view this information using the -q flag.
In the world of the internet, transferring files between systems has become an essential task. For those who are administrating Linux servers, sometimes it is important to take a backup of the server before issuing a specific command. In situations like this, the scp command comes in handy.
Similarly, the cp command helps in copying the files from one location to another in a local system. There are many basic commands that are a must if you’re just getting started with Linux.
Some fishing lines are monofilament, while others are braided from multiple strands. Science Channel takes us inside a factory that produces braided line, combining numerous microfibers into a single strong one, then bathing them in dye for color. They show how they make a smooth line that’s been coated in resin.
Lansky Releases New Handy Compact Knife Sharpener Combo Kit
https://ift.tt/3bMQoEU
I don’t know if there is anyone out there like me but I absolutely abuse the hell out of my knives. Not just the daily carry ones but every blade I have has probably seen more than its fair share of abuse. With that being said, I’m constantly needing to sharpen my knives on a regular basis and luckily Lansky has come out with a brand new knife sharpening kit for 2021.
Lansky Releases New Handy Compact Knife Sharpener Combo Kit
The Lansky C-Clip Combo Knife Sharpening Kit
The Lansky C-Clip Combo Knife Sharpening Kit comes with three of Lansky’s well-regarded knife sharpening tools that are all small enough to take with you on the go. Whether this means stowing them in your vehicle, backpack, pocket, or even carrying them on a key chain, these knife sharpeners will always be ready to go when your blades go dull. The combo kit includes the Lansky C-Clip, “Mini” Knife Sharpener, and Eraser Block rod cleaner that has some other useful functions as well.
C-Clip Knife Sharpener
The C-CLIP Knife Sharpener can be used to sharpen knives, fishhooks, darts, arrowheads, tools, needles, surgical-type tools, and more. At home, camping, fishing, hunting, boating, at work—The C-Clip is the most convenient solution.
This knife sharpener would work for some good all-around sharpening. I would probably keep a sharpener like this in my glove box or camping backpack for my general sharpening needs. From what I can tell it looks like you can store the sharpening rods underneath the clip and then stuff it in your pocket.
“Mini” Knife Sharpener
The “Mini” Knife Sharpener can be carried on its keychain, on a belt hook, or like loose change in a pocket. You can keep this sharpener with you at all times!
The name says it all, this mini knife sharpener would probably go great on any keychain and with as much as I sharpen my dull knives, I’d probably get the most use of this one than either of the other two tools.
Eraser Block
It’s more than a ceramic rod cleaner! Eraser Block works right out of the package to keep your ceramic rods clean and sharpening at peak efficiency…and it can erase hard to remove stains and spots on practically any surface, including sports equipment!
I only recently became aware that ceramic sharpening rods needed to be cleaned regularly and the Eraser Block does exactly that as well as a few other neat things like cleaning stains off of walls and desks. Definitely useful beyond its intended design. The eraser block also apparently works really well at removing rust from metal tools.
If you’re interested in purchasing the Lansky C-Clip Combo Kit or any of Lansky’s other products you can either visit their website directly or check out their Amazon store page here.
We are committed to finding, researching, and recommending the best products. We earn commissions from purchases you make using the retail links in our product reviews.
Python comes with many built-in functions you can use without importing a library. There are 64 of them. In this article, you’ll get an overview of the most important ones.
For a full list of Python built-in functions, check out this resource.
Python’s built-in help() function launches Python’s help system. Without an argument, help() starts an interactive session. With a string argument, help(name) looks up the name and prints a help page to the shell. With a non-string argument, help(object) prints a help page on object.
>>> help(list) # Prints the documentation of list
>>> help(dict) # Prints the documentation of dict
>>> help(int) # Prints the documentation of int
>>> help('help') # Prints the documentation of help()
>>> help() # Opens an interactive "help" session
Python’s built-in input() function reads a string from the standard input. The function blocks until such input becomes available and the user hits ENTER. You can add an optional prompt string as an argument to print a custom string to the standard output without a trailing newline character to tell the user that your program expects their input.
Python’s built-in print() function prints a string representation of any number of objects to the standard output. The print() function has many advanced arguments to customize the behavior—such as the separator argument to set a custom separator string between the printed objects, the end argument to set a custom ending string, or the file argument that even allows you to print a string into a file object.
>>> print('hello')
hello
>>> print('hello world')
hello world
>>> print(42)
42
>>> print(1, 2, 3)
1 2 3
>>> print('hello', 'world', sep = '\n')
hello
world
>>> print('hello', 'world', sep = '\n', end = '\n-----\n')
hello
world
-----
Python’s built-in format(value, spec) function transforms input of one format into output of another format defined by you. Specifically, it applies the format specifier spec to the argument value and returns a formatted representation of value. For example, format(42, 'f') returns the string representation '42.000000'.
Python’s exec() function executes the Python code you pass as a string or executable object argument. This is called dynamic execution because, in contrast to normal static Python code, you can generate code and execute it at runtime. This way, you can run programmatically-created Python code.
>>> program = 'print("hello world")'
>>> exec(program)
hello world
>>> exec('x=2; y=4; print(x+y)')
6
Every Python master understands the basics very well. Python built-in functions are the very foundation your whole coding career stands on. For a full course on all 64 Python built-in functions, check out the Finxter Computer Science Academy:
Python eval(s) parses the string argument s into a Python expression, runs it, and returns the result of the expression. This poses a security risk because a user can use it to run code on your computer. For example, if you allow eval(input()), a user could type os.system('rm -R *') to delete all files in your home directory.
Python’s built-in compile() method returns an executable code object as an “Abstract Syntax Tree” represented as an ast object. By passing this code object into the exec() or eval() functions, you can run it dynamically in your Python code. This way, you can programmatically create source code and execute it at runtime. To use the function, pass the string code to be executed, the filename, and the execution mode. For example compile('print("hi")', '<string>', 'exec') creates a code object consisting of one line print("hi").
# 1. Read code from file
f = open('filename.py', 'r')
code = f.read()
f.close()
# 2. Compile code string
code_obj = compile(code, 'filename.py', 'exec')
# 3. Run the code object (ast)
exec(code_obj)
Python’s built-inabs(x) function returns the absolute value of the argument x that can be an integer, float, or object implementing the __abs__() function. For a complex number, the function returns its magnitude. The absolute value of any numerical input argument -x or +x is the corresponding positive value +x.
# POSITIVE INTEGER
x = 42
print(abs(x))
# NEGATIVE INTEGER
x = -42
print(abs(x))
# POSITIVE FLOAT
x = 42.42
print(abs(x))
# NEGATIVE FLOAT
x = -42.42
print(abs(x))
Python’s built-in divmod(a, b) function takes two integer or float numbers a and b as input arguments and returns a tuple (a // b, a % b). The first tuple value is the result of the integer divisiona//b. The second tuple is the result of the remainder, also called modulo operationa % b. In case of float inputs, divmod() still returns the division without remainder by rounding down to the next round number.
Python’s built-in round() function takes two input arguments: a number and an optional precision in decimal digits. It rounds the number to the given precision and returns the result. The return value has the same type as the input number—or integer if the precision argument is omitted. Per default, the precision is set to 0 digits, so round(3.14) results in 3.
Python’s built-inhash(object) function takes one object as an argument and returns its hash value. As the hash value is calculated based on the object’s data, two different but equal objects must have the same hash value. It doesn’t follow, though, that two objects with the same hash value are equal—they can have the same hash value and still be different.
Python’s built-in callable(object) returns True if you could call the object argument like a function with the trailing parentheses in object(). You can make any object callable by implementing the instance’s __call__() method. For example, callable(callable) returns True because callable is a function object. But callable(3) returns False because an integer is not a function you can call.
Python’s built-initer() function returns an iterator for the given object. For example, iter([1, 2, 3]) creates an iterator for the list [1, 2, 3]. You can then iterate over all elements in the iterator, one element at a time, in a for or while loop such as: for x in iter([1, 2, 3]).
customers = ['Alice', 'Bob', 'Carl', 'Dave', 'Elena', 'Frank']
iterator = iter(customers)
print(next(iterator))
print(next(iterator))
for x in iterator:
print(x)
''' OUT:
Alice
Bob
Carl
Dave
Elena
Frank
'''
Every Python master understands the basics very well. Python built-in functions are the very foundation your whole coding career stands on. For a full course on all 64 Python built-in functions, check out the Finxter Computer Science Academy:
The next(iterator) function is one of Python’s built-in functions—so, you can use it without importing any library. It returns the next value from the iterator you pass as a required first argument. An optional second argument default returns the passed default value in case the iterator doesn’t provide a next value.
users = ['Alice', 'Bob', 'Carl', 'David']
# convert the list to an iterator
users_iterator = iter(users)
x = next(users_iterator)
print(x)
# Output: 'Alice'
x = next(users_iterator)
print(x)
# Output: 'Bob'
x = next(users_iterator)
print(x)
# Output: 'Carl'
x = next(users_iterator)
print(x)
# Output: 'David'
The Python range() function creates an iterable of subsequent integers within a given range of values. You can pass either only a stop argument in which case the range object will include all integers from 0 to stop (excluded). Or you can pass start, stop, and step arguments in which case the range object will go from start to step using the given step size. For example, range(3) results in 0, 1, 2 and range(2, 7, 2) results in 2, 4, 6.
>>> x = [1, 2, 3]
>>> y = list(x)
>>> x is y
False
>>> x == y
True
The Python range() function creates an iterable of subsequent integers within a given range of values. You can pass either only a stop argument in which case the range object will include all integers from 0 to stop (excluded). Or you can pass start, stop, and step arguments in which case the range object will go from start to step using the given step size. For example, range(3) results in 0, 1, 2 and range(2, 7, 2) results in 2, 4, 6.
Python’s built-in function len() returns the length of the given string, array, list, tuple, dictionary, or any other iterable. The type of the return value is an integer that represents the number of elements in this iterable.
The max() function returns the maximum of the provided arguments. You can pass either an arbitrary number of values, comma-separated, or an iterable as arguments. An optional key function argument allows you to customize the calculation of the maximum by explicitly defining the weight of each value in the iterable that is used as a basis of comparison.
The min() function returns the minimum of the provided arguments. As arguments, you can either pass a number of comma-separated values, or a single iterable. An optional key function argument allows you to customize the calculation of the minimum by explicitly defining the weight of each value in the iterable that is used as a basis of comparison.
Every Python master understands the basics very well. Python built-in functions are the very foundation your whole coding career stands on. For a full course on all 64 Python built-in functions, check out the Finxter Computer Science Academy:
To help you accomplish this task in a concise, readable, and efficient way, Python’s creators have added the built-in sum() function. It sums over all elements in a Python list—or any other iterable for that matter.
Python’s built-inenumerate(iterable) function allows you to loop over all elements in an iterable and their associated counters. Formally, it takes an iterable as an input argument and returns an iterable of tuples(i, x)—one per iterable element x. The first integer tuple value is the counter of the element x in the iterable, starting to count from 0. The second tuple value is a reference to the element x itself. For example, enumerate(['a', 'b', 'c']) returns an iterable (0, 'a'), (1, 'b'), (2, 'c'). You can modify the default start index of the counter by setting the optional second integer argumentenumerate(iterable, start).
fruits = ['apple', 'banana', 'cherry']
for counter, value in enumerate(fruits):
print(counter, value)
# OUTPUT:
# 0 apple
# 1 banana
# 2 cherry
Every Python master understands the basics very well. Python built-in functions are the very foundation your whole coding career stands on. For a full course on all 64 Python built-in functions, check out the Finxter Computer Science Academy:
Python’s built-in filter() function is used to filter out elements that pass a filtering condition. It takes two arguments: function and iterable. The function assigns a Boolean value to each element in the iterable to check whether the element will pass the filter or not. It returns an iterator with the elements that pass the filtering condition.
lst = [8, 2, 6, 4, 3, 1]
# Filter all elements <8
small = filter(lambda x: x<8, lst)
print(list(small))
# Filter all even elements
even = filter(lambda x: x%2==0, lst)
print(list(even))
# Filter all odd elements
odd = filter(lambda x: x%2, lst)
print(list(odd))
The zip() function takes an arbitrary number of iterables and aggregates them to a single iterable, a zip object. It combines the i-th values of each iterable argument into a tuple. Hence, if you pass two iterables, each tuple will contain two values. If you pass three iterables, each tuple will contain three values. For example, zip together lists [1, 2, 3] and [4, 5, 6] to [(1,4), (2,5), (3,6)].
# Boolean list with False value
print(any([True, False, True, True]))
# True
# Boolean list without False value
print(any([True, True]))
# True
# Integer list with 0 value
print(any([1, 2, -1, 0]))
# True
# Integer list without 0 value
print(any([1, 2, -1]))
# True
# Nested list with empty inner list
print(any([[], [1, 2, 3]]))
# True
# Nested list with two empty inner lists
print(any([[], []]))
# False
# Empty List
print(any([]))
# False
The zip() function takes an arbitrary number of iterables and aggregates them to a single iterable, a zip object. It combines the i-th values of each iterable argument into a tuple. Hence, if you pass two iterables, each tuple will contain two values. If you pass three iterables, each tuple will contain three values. For example, zip together lists [1, 2, 3] and [4, 5, 6] to [(1,4), (2,5), (3,6)].
# Boolean list with False value
print(all([True, False, True, True]))
# False
# Boolean list without False value
print(all([True, True]))
# True
# Integer list with 0 value
print(all([1, 2, -1, 0]))
# False
# Integer list without 0 value
print(all([1, 2, -1]))
# True
# List of Lists with empty inner list
print(all([[], [1, 2, 3]]))
# False
# List of Lists without empty inner list
print(all([[1, 2, 3], [4, 5]]))
# True
# Empty List
print(all([]))
# True
The zip() function takes an arbitrary number of iterables and aggregates them to a single iterable, a zip object. It combines the i-th values of each iterable argument into a tuple. Hence, if you pass two iterables, each tuple will contain two values. If you pass three iterables, each tuple will contain three values. For example, zip together lists [1, 2, 3] and [4, 5, 6] to [(1,4), (2,5), (3,6)].
lst_1 = [1, 2, 3]
lst_2 = [4, 5, 6]
# Zip two lists together
zipped = list(zip(lst_1, lst_2))
print(zipped)
# [(1, 4), (2, 5), (3, 6)]
# Unzip to lists again
lst_1_new, lst_2_new = zip(*zipped)
print(list(lst_1_new))
print(list(lst_2_new))
Every Python master understands the basics very well. Python built-in functions are the very foundation your whole coding career stands on. For a full course on all 64 Python built-in functions, check out the Finxter Computer Science Academy:
This New Falcon and the Winter Soldier Clip Is a Minute of Pure Delight
https://ift.tt/2Oj82aE
Sam (Anthony Mackie) and Bucky (Sebastian Stan) take a break from giving each other crap.Image: Disney
Okay, honestly? It’s only 54 seconds long. But if you watch this amazing new clip from the show, it’s going to be the best 54 seconds of your day, guaranteed.
It features what Sam “Falcon” Wilson (Anthony Mackie) and Bucky “Winter Soldier” Barnes (Sebastian Stan) do best, which is banter with each other, flex at each other, and give each other shit. But this isn’t mere masculine posturing, it’s something far more sublime:
I can’t decide what’s better: Sam’s sudden realization that a sorcerer is just a wizard without a hat (which honestly may be the best, most succinct definition of a sorcerer I’ve ever heard), or Bucky acting smug about having read the beloved children’s fantasy book The Hobbit back when it was first published in 1937 as if that meant absolutely anything, other than maybe someone who’s devoted enough to Tolkien they’ve learned to speak Elvish, which Sam very clearly has not.
By the way, if you want to delve into Bucky’s idea of the “Big Three” foes as androids, aliens, and wizards, I don’t think he’s wrong there, either. Yes, various Marvel cinematic heroes have tussled with all sorts of bad guys in their individual movies, but when it comes to (external) threats that actually require the Avengers—the “big” problems, as it were—they’ve included two alien invasions (the Chitauri in Avengers, then Thanos and his armies in Infinity War) and an android uprising during the Age of Ultron. As for wizards, Sam may be referring to the Scarlet Witch, but I don’t believe so because it would be weird for him to then omit Quicksilver. I think he’s referring to Loki, because I bet it’s hard for most humans in the MCU to accept Thor and the other Asgardians as literal gods, as their divinity would challenge most humans’ religious and scientific worldviews. Plus, Loki does have some straight-up magic powers, enough for Sam (or anyone, frankly) to classify him as a wizard. My point is the “Big Three” are definitely a thing, to quote Sam himself.
G/O Media may get a commission
If this clip is at all indicative of The Falcon and the Winter Soldier series—and by all other clips and accounts, it is—we’re going to have a very good day when it premieres on Disney+ on March 19.
For more, make sure you’re following us on our Instagram @io9dotcom.
Woman Attempts to ‘Mask-Shame’ Dude, Quickly Discovers Truth (Updated)
https://ift.tt/38AFMXJ
UPDATE: Apparently I’m the one who got pranked. Here’s the original video that is "for entertainment purposes only." Personally, I still think it’s funny as hell.
Wearing a mask of yourself wearing a mask wrong is the trend America needs. It makes sense when you think of it. There are people in this country, silly, somewhat unhinged people, who think it’s their job to play mask police. If they see you maskless in public, you will be shamed! They feel it’s their "patriotic" duty. Plus, think of all the likes and retweets they can get on Twitter! Panic porn-addicted, overzealous mask advocates love the smell of each other’s flatulence.
When really, the truly patriotic thing to do is to f*** with these people. The last guy we saw do it, the other person at least had a sense of humor about it. This broad, not so much. The story starts with her smartphone out to document the alleged maskless person.
🤣🤣🤣😭😭 Like how you mad cause you made yourself look stupid?🤣😭 he got her ass good. pic.twitter.com/LHA4etKuyf — TheHeartOfMook (@Mookjpg_Twtjail) March 11, 2021
"I mean, I don’t understand why you would wear a mask like that."
You. People like YOU are why he would wear a mask like that. People who see someone not as masked up as the CDC says to be, and their first instinct ISN’T to mind their own beeswax. People’s whose first instinct is to lecture strangers in the store. People like YOU are the exact reason why someone would wear a mask like that.
Lady, take the L. You got caught in a prank. You’re not the only one with your smartphone out. In this instance, you were in fact the a-hole. Admit it. Laugh it off. Say, "You got me, dawg." Move on to the next aisle. Maybe you can spot two people only standing five feet and ten inches away from each other.
CAUGHT ON CAMERA! Entire Oakley School Board RESIGNS | Louder With Crowder
I updated the Columbus Crime Statistics page with 2019 data, which is the latest year available. The data comes from what the city reported to the FBI’s Uniform Crime Reporting system.
2019 Violent Crime
-There were 5,350 incidents of violent crime in Columbus in 2019, down slightly from 2018’s 5,365. The rate per 100K people was 595.4, down from 2018’s 601.0.
-There is some discrepancy between the murders the city reported to the FBI- 81- and the total number of homicides it reported in its 2019 year-end report- 104. At 81 murders, it would be a rate of 9 per 100K, while 104 would be a rate of 11.6 per 100K. Even at 104, it would represent a drop from 2018’s 109.
-There were 882 reported rapes, down from 2018’s 894. There were 98.2 rapes per 100K, down from 2018’s 99.9.
-Robberies continued their years-long decline, with 1,810 total and a rate of 201.4 per 100K. Robberies have declined 53% since 2007.
-There were 1,788 aggravated assaults at a rate of 199.0 per 100K. Assaults were higher than 2018’s 1,615, but they are still down nearly 35% since they peaked in 1990.
Violent Crime Changes By Age Group 2010-2019
0 to 19: -41.2%
20 to 39: -33.9%
Unknown Age: -30.8%
40 to 59: +12.8%
60 and Over: +220.9%
Perhaps strangely, Asians, women and older people have seen their crime rates increase. In all 3 cases, the total crimes were relatively low in comparison to other groups, but the changes were significant enough to be noticeable.
2019 Property Crime
-There were 29,974 property crimes reported in 2019 for a rate of 3335.6 per 100K, down from 2018’s 3596.3.
Property crimes peaked in 2001 with 62,151, but have fallen nearly every year since. The 2019 total was 51.8% lower than in 2001.
-Larceny thefts reached 20,606 for a rate of 2293.1 per 100K. This is both down from 2018’s 2427.8 and 46.9% lower than their 2001 peak.
-Burglaries continued their dramatic fall in 2019. 5,809 were reported for a rate of 646.5 per 100K. This is down from 6,477 and 724.9 in 2018, and down nearly 62% just since 2010.
-There were 3,559 motor vehicle thefts for a rate of 396.1 per 100K in 2019, down from 3,962 and 443.7 in 2018. As with burglaries, motor vehicle thefts are down significantly in recent years, having fallen more than 58% just since 2004.
Report on COVID-related philanthropy credits MacKenzie Scott with powering 25% of U.S. giving
https://ift.tt/2PRK2vz
MacKenzie Scott. (Elena Seibert Photo)
A new report looking at the global philanthropic response to COVID-19 during 2020 credits MacKenzie Scott with singlehandedly powering 25% of the giving effort in the United States.
The report by the Center for Disaster Philanthropy and Candid looked at the sources of more than $20 billion awarded for pandemic-related causes, including corporations, foundations, public charities and high-net-worth individuals such as Scott.
By giving $4 billion of her Amazon-fueled wealth to 384 different nonprofits in December, Scott dramatically increased the proportion of giving by high-net-worth individuals. Of the $5.8 billion given by the group, Scott accounted for nearly three quarters of the amount.
The former wife of Amazon CEO Jeff Bezos took a more high-profile approach to her philanthropic giving in 2020. She keyed on the destruction caused by the COVID-19 pandemic, calling it a “wrecking ball in the lives of Americans already struggling” and saying that “economic losses and health outcomes alike have been worse for women, for people of color, and for people living in poverty.”
Scott, who is currently No. 21 on the Bloomberg Billionaires Index of wealthiest individuals, impacted several categories across the report with her giving, including:
BIPOC communities: Of U.S. COVID-19 philanthropy to specified recipients, 35% of dollars was explicitly designated for Black, Indigenous and people of color (BIPOC) communities. High-net-worth donors in the data set designated a higher proportion of their funding for BIPOC communities (44 percent). This was almost entirely due to Scott’s grantmaking.
Health organizations: This group ranked second, accounting for 26% of dollars. Top health organizations included Gavi, the Vaccine Alliance, and the COVID-19 Therapeutics Accelerator. Easterseals (the national office combined with its affiliates) emerged in the top recipient list thanks to Scott’s $162 million award. The organization offers services and advocacy for people with disabilities.
Unrestricted or flexible support: This area dramatically increased in the second half of the year, with 39% of dollars and 21% of gifts to specified recipients described as unrestricted or flexible. Scott’s large, unrestricted grants accounted for the major shift.
The report lists Google as the top corporate donor, with 17 gifts totaling more than $1 billion.
The Bill and Melinda Gates Foundation was tops in funding by foundations, giving 398 gifts totaling $1.3 billion.
Scott made news earlier this week when it was revealed that she married Dan Jewett, a Seattle science teacher. Jewett signed on to The Giving Pledge, an initiative Scott previously committed to in which the ultra rich pledge to give their fortunes to charity.
T-Mobile Is Taking All of Your Sweet, Sweet Data… Unless You Tell It to Stop
https://ift.tt/3vcsiLk
Photo: John MacDougall (Getty Images)
Heads up, fellow T-Mobile customers: You might want to take a look at your mobile carrier’s privacy policy.
As first spotted by the Wall Street Journal, the company’s latest update to its privacy policy is set to automatically enroll paying phone subscribers into an ad-targeting program that will see their data shared with unnumbered advertisers starting next month. It’s also worth noting here that the privacy policy update also carries over for any Sprint customers who were gobbled by T-Mobile during the two company’s mega-merger last year.
T-Mobile’s latest Privacy Notice lays out some of the specifics: Starting April 26, the company writes, it will begin a “new program” that shares some personal data—like the apps you download or the sites you visit—with third-party advertisers. T-Mobile also adds that it won’t share your precise location data “unless you give [T-Mobile] your express permission,” and won’t share information in a way that can be directly tied back to your device. But like we’ve written before, just because a dataset is “anonymized” doesn’t mean that you can take the company anonymizing it (T-Mobile, in this case) at its word.
T-Mobile is hardly the only major telco to pull these kinds of ad-targeting shenanigans. Verizon, for example, has an entire subsidiary—Verizon Media—that compiles data from its customers (along with a few third parties) to make its own different audience categories for targeted ads. AT&T’s had its own adtech subsidiary, Xandr, on hand since 2018 for similar purposes: pooling similar buckets of subscriber data together, and then pawning off that data to advertisers that might be interested in reaching, say, new moms, vegetarians, or luxury shoppers on their specific networks.
The company, for its part, promised the Wall Street Journal that it was defaulting to this new setting because “many say they prefer more relevant ads,” which is one of the most oft-repeated arguments people in the ad industry like to throw around to justify their invasive practices. In fact, there’s another reason that T-Mobile might be incentivized to throw this update out right now.
G/O Media may get a commission
The ongoing updates to Apple’s iOS 14 and the upcoming updates to Google’s Chrome browser have left some advertiser’s core data-collection tactics—like mobile ID’s and third-party cookies—in the dust. Some major companies in the data-brokering space have begun pitching their own sorts of data-hoovering tech that can circumvent these new roadblocks, and T-Mobile’s new policy seems to be another spin on that, just coming from your phone service provider.
T-Mobile’s policy page, for its part, has a pretty comprehensive guide describing how to opt-out of this new program at the bottom of its new notice here, which is something you should go do right now.