SVP Technology at Fiserv; large scale system architecture/infrastructure, tech geek, reading, learning, hiking, GeoCaching, ham radio, married, kids
10814 stories
·
54 followers

Linux Fu: Tracing System Calls

1 Share

One of the nice things about Linux and similar operating systems is that you can investigate something to any level you wish. If a program has a problem you can decompile it, debug it, trace it, and — if necessary — even dig into the source code for the kernel and most of the libraries the program is probably using. However, the tools to do this aren’t ones you use every day. One very interesting tool is strace. Using it you can see what system calls any program makes and that can sometimes give you important clues about how the program works or, probably more often, why it doesn’t work.

Let’s consider the least complex use of the command. Suppose you want to make symlink from testxmit.grc to the /tmp directory. That command is simple:

ln -sf testxmit.grc /tmp

But if you tell strace to run it, the command becomes:

strace ln -sf testxmit.grc /tmp

You might want to redirect the output to a file using the shell or the -o option, though. Some commands generate a lot and often the first page or two of output isn’t really what you care about anyway.

Let’s Look

Let’s look at the output:

execve("/bin/ln", ["ln", "-sf", "testxmit.grc", "/tmp"], 0x7fff51ddf6f8 /* 91 vars */) = 0
brk(NULL) = 0x562301ce6000
... 
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3004096, ...}) = 0
mmap(NULL, 3004096, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7c45298000
close(3) = 0
stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=1360, ...}) = 0
lstat("/tmp/testxmit.grc", 0x7fff7ae555d0) = -1 ENOENT (No such file or directory)
symlinkat("testxmit.grc", AT_FDCWD, "/tmp/testxmit.grc") = 0
lseek(0, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
close(0) = 0
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++

At the top, shortened here, are 25 lines dealing with loading shared libraries into the memory space and four lines dealing with locales. I put the first “real” line in bold, where the program calls stat on /tmp and then makes sure the file doesn’t already exist. Finally, you get to the real system call (symlinkat) followed by a few things to close the program out. A lot of work to get to one system call.

You can probably figure out that the part on the left of the equal sign is the return value of the call. Usually, zero is success and other numbers mean different things. However, the openat call, for example, returns a file descriptor (3) and you can see it sent to fstat in the next line.

In Practice

Of course, the ln command works, but humor me and say we were wanting to understand what arguments passed to symlinkat. You could use the -e option to cut the output down to size:

strace -e symlinkat ln -sf testxmit.grc /tmp

You’ll notice something strange if you did the examples in order. The second time you run the command you get two calls to symlinkat. The first one fails because the file already exists. The second one is to some random file name. Taking off the -e lets you see everything (I’m only showing the interesting part):

symlinkat("testxmit.grc", AT_FDCWD, "/tmp/testxmit.grc") = -1 EEXIST (File exists)
openat(AT_FDCWD, "/dev/urandom", O_RDONLY) = 3
read(3, "\337\336\10\324\254\233", 6)   = 6
close(3)                                = 0
getpid()                                = 29340
getppid()                               = 29338
getuid()                                = 1000
getgid()                                = 1000
symlinkat("testxmit.grc", AT_FDCWD, "/tmp/CuzoNWnv") = 0
renameat(AT_FDCWD, "/tmp/CuzoNWnv", AT_FDCWD, "/tmp/testxmit.grc") = 0

Notice that the random part comes from reading some data from /dev/urandom. If you don’t want all that output, try:

strace -e synlinkat,renameat ln -sf testxmit.grc /tmp

Other Options

The -p option lets you supply a PID of a running program. Sending the output to a file and then monitoring the file with a tail -f is a good trick. By default, you only see 32 bytes of the call data and that might not be enough. You can adjust that size with the -s option.

So far we’ve only looked at simple programs. But if you want to trace multiple threads, check out the -f and -ff options.

If you want a survey of what the program is calling, the -c option will give you a summary.

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         2           read
  0.00    0.000000           0         7           close
  0.00    0.000000           0         2           stat
  0.00    0.000000           0         3           fstat
  0.00    0.000000           0         1           lstat
  0.00    0.000000           0         1         1 lseek
  0.00    0.000000           0         6           mmap
  ...
  0.00    0.000000           0         4           openat
  0.00    0.000000           0         1           renameat
  0.00    0.000000           0         2         1 symlinkat
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                    46         5 total

Of Course, There’s More…

This is just one of many tools you can use to examine Linux programs. Debuggers are often useful, especially if you have the source. There are other tools to examine symbol tables and dump executables. But those are topics for another time.

What’s your favorite Linux reverse engineering tool? Let us know in the comments.

Read the whole story
JayM
7 hours ago
reply
Atlanta, GA
Share this story
Delete

How to grow a vegetable garden, according to legendary chef Alice Waters

1 Share

Worried about your food supply during COVID-19? Three experts, including celebrated Chez Panisse chef Alice Waters, share tips for growing your own fruits and vegetables.

Like much of the world, I’ve spent the past few weeks glued to my phone—riddled with anxiety, simultaneously bored and busy, desperately wanting to be useful but paralyzed by the vastness of the COVID-19 crisis.

Read Full Story



Read the whole story
JayM
7 hours ago
reply
Atlanta, GA
Share this story
Delete

Five years of Raspberry Pi clusters

1 Comment and 2 Shares

In this guest blog post, OpenFaaS founder and Raspberry Pi super-builder Alex Ellis walks us down a five-year-long memory lane explaining how things have changed for cluster users.

I’ve been writing about running Docker on Raspberry Pi for five years now and things have got a lot easier than when I started back in the day. There’s now no need to patch the kernel, use a bespoke OS, or even build Go and Docker from scratch.

My stack of seven Raspberry Pi 2s running Docker Swarm (2016)

Since my first blog post and printed article, I noticed that Raspberry Pi clusters were a hot topic. They’ve only got even hotter as the technology got easier to use and the devices became more powerful.

Back then we used ‘old Swarm‘, which was arguably more like Kubernetes with swappable orchestration and a remote API that could run containers. Load-balancing wasn’t built-in, and so we used Nginx to do that job.

I built out a special demo using kit from Pimoroni.com. Each LED lit up when a HTTP request came in.

Docker load-balanced LED cluster Raspberry Pi

Ask questions and get all the details including the code over on the blog at: http://blog.alexellis.io/iot-docker-cluster/

After that, I adapted the code and added in some IoT sensor boards to create a smart datacenter and was invited to present the demo at Dockercon 2016:

IoT Dockercon Demo

Get all the write-up here: http://blog.alexellis.io/meet-me-at-dockercon/

Docker then released a newer version of Swarm also called ‘Swarm’ and I wrote up these posts:

Docker Swarm mode Deep Dive on Raspberry Pi (scaled)

Please Subscribe to the channel! Get all the details @ http://blog.alexellis.io/live-deep-dive-pi-swarm/

This is still my most popular video on my YouTube channel.

Now that more and more people were trying out Docker on Raspberry Pi (arm), we had to educate them about not running potentially poisoned images from third-parties and how to port software to arm. I created a Git repository (alexellis/docker-arm) to provide a stack of common software.

I wanted to share with users how to use GPIO for accessing hardware and how to create an IoT doorbell. This was one of my first videos on the topic, a live run-through in one take.

birds eye view of a raspberry pi in a red case

Did you know? I used to run blog.alexellis.io on my Raspberry Pi 3

Then we all started trying to run upstream Kubernetes on our 1GB RAM Raspberry Pis with kubeadm. Lucas Käldström did much of the groundwork to port various Kubernetes components and even went as far as to fix some issues in the Go language.

I wrote a recap on everything you needed to know including exec format error and various other things. I also put together a solid set of instructions and workarounds for kubeadm on Raspberry Pi 2/3.

Users often ask what a practical use-case is for a cluster. They excel at running distributed web applications, and OpenFaaS is loved by developers for making it easy to build, deploy, monitor, and scale APIs.

In this post you’ll learn how to deploy a fun Pod to generate ASCII text, from there you can build your own with Python or any other language:

This blog post was one of the ones that got pinned onto the front page of Hacker News for some time, a great feeling when it happens, but something that only comes every now and then.

The instructions for kubeadm and Raspbian were breaking with every other minor release of Kubernetes, so I moved my original gist into a Git repo to accept PRs and to make the content more accessible.

I have to say that this is the one piece of Intellectual Property (IP) I own which has been plagiarised and passed-off the most.

You’ll find dozens of blog posts which are almost identical, even copying my typos. To begin with I found this passing-off of my work frustrating, but now I take it as a vote of confidence.

Shortly after this, Scott Hanselman found my post and we started to collaborate on getting .NET Core to work with OpenFaaS.

Lego batman and his lego friend atop a cluster of Raspberry Pi

This lead to us co-presenting at NDC, London in early 2018. We were practising the demo the night before, and the idea was to use Pimoroni Blinkt! LEDs to show which Raspberry Pi a Pod (workload) was running on. We wanted the Pod to stop showing an animation and to get rescheduled when we pulled a network cable.

It wasn’t working how we expected, and Scott just said “I’ll phone Kelsey”, and Mr Hightower explained to us how to tune the kubelet tolerance flags.

As you can see from the demo, Kelsey’s advice worked out great!

Building a Raspberry Pi Kubernetes Cluster and running .NET Core – Alex Ellis & Scott Hanselman

Join Scott Hanselman and Alex Ellis as they discuss how you can create your own Raspberry Pi cluster that runs Kubernetes on the metal. Then, take it to the …

 

Fast forward and we’re no longer running Docker, or forcing upstream Kubernetes into 1GB of RAM, but running Rancher’s light-weight k3s in as much as 4GB of RAM.

k3s is a game-changer for small devices, but also runs well on regular PCs and cloud. A server takes just 500MB of RAM and each agent only requires 50MB of RAM due to the optimizations that Darren Shepherd was able to make.

I wrote a new Go CLI called k3sup (‘ketchup’) which made building clusters even easier than it was already and brought back some of the UX of the Docker Swarm CLI.

Kubernetes Homelab with Raspberry Pi 4

Join me for this hands-on tutorial where I build out a Kubernetes Homelab with a Raspberry Pi 4 and get internet access with a LoadBalancer, something normal…

To help combat the issues around the Kubernetes ecosystem and tooling like Helm, which wasn’t available for ARM, I started a new project named arkade . arkade makes it easy to install apps whether they use helm charts or kubectl for installation.

k3s, k3sup, and arkade are all combined in my latest post which includes installing OpenFaaS and the Kubernetes dashboard.

In late March I put together a webinar with Traefik to show off all the OpenFaaS tooling including k3sup and arkade to create a practical demo. The demo showed how to get a public IP for the Raspberry Pi cluster, how to integrate with GitHub webhooks and Postgresql.

The latest and most up-to-date tutorial, with everything set up step by step:

Cloud Native Tools for Developers with Alex Ellis and Alistair Hey

In this Traefik Online Meetup, Alex Ellis, Founder of OpenFaaS, and Alistair Hey, from the OpenFaaS community, will show you how to bootstrap a Kubernetes cl…

 

In the webinar you’ll find out how to get a public IP for your IngressController using the inlets-operator.

Take-aways

  • People will always hate

Some people try to reason about whether you should or should not build a cluster of Raspberry Pis. If you’re asking this question, then don’t do it and don’t ask me to convince you otherwise.

  • It doesn’t have to be expensive

You don’t need special equipment, you don’t even need more than one Raspberry Pi, but I would recommend two or three for the best experience.

  • Know what to expect

Kubernetes clusters are built to run web servers and APIs, not games like you do with your PC. They don’t magically combine the memory of each node into a single supercomputer, but allow for horizontal scaling, i.e. more replicas of the same thing.

  • Not everything will run on it

Some popular software like Istio, Minio, Linkerd, Flux and SealedSecrets do not run on ARM devices because the maintainers are not incentivised to make them do so. It’s not trivial to port software to ARM and then to support that on an ongoing basis. Companies tend to have little interest since paying customers do not tend to use Raspberry Pis. You have to get ready to hear “no”, and sometimes you’ll be lucky enough to hear “not yet” instead.

  • Things are always moving and getting better

If you compare my opening statement where we had to rebuild kernels from scratch, and even build binaries for Go, in order to build Docker, we live in a completely different world now. We’ve seen classic swarm, new swarm (swarmkit), Kubernetes, and now k3s become the platform of choice for clustering on the Raspberry Pi. Where will we be in another five years from now? I don’t know, but I suspect things will be better.

  • Have fun and learn

In my opinion, the primary reason to build a cluster is to learn and to explore what can be done. As a secondary gain, the skills that you build can be used for work in DevOps/Cloud Native, but if that’s all you want out of it, then fire up a few EC2 VMs on AWS.

Recap on projects

Featured: my 24-node uber cluster, chassis by Bitscope.

Featured: my 24-node uber cluster, chassis by Bitscope.

    • k3sup — build Raspberry Pi clusters with Rancher’s lightweight cut of Kubernetes called k3s
    • arkade — install apps to Kubernetes clusters using an easy CLI with flags and built-in Raspberry Pi support
    • OpenFaaS — easiest way to deploy web services, APIs, and functions to your cluster; multi-arch (arm + Intel) support is built-in
    • inlets — a Cloud Native Tunnel you can use to access your Raspberry Pi or cluster from anywhere; the inlets-operator adds integration into Kubernetes

Want more?

Well, all of that should take you some time to watch, read, and to try out — probably less than five years. I would recommend working in reverse order from the Traefik webinar back or the homelab tutorial which includes a bill of materials.

Become an Insider via GitHub Sponsors to support my work and to receive regular email updates from me each week on Cloud Native, Kubernetes, OSS, and more: github.com/sponsors/alexellis

And you’ll find hundreds of blog posts on Docker, Kubernetes, Go, and more on my blog over at blog.alexellis.io.

The post Five years of Raspberry Pi clusters appeared first on Raspberry Pi.

Read the whole story
JayM
10 hours ago
reply
Nice. Have the parts... need the time. Also, have NTP Stratum 0 servers to build first. :)
Atlanta, GA
duerig
9 hours ago
Thanks for the link. Part of what I do is work on a network testbed and it'd be awesome to add a few hundred Pis to it alongside the current servers.
Share this story
Delete

Tamron's 70-180mm F2.8 lens should ship in mid-May for $1,199

1 Comment

Last October, Tamron revealed it was working on a compact 70–180mm F2.8 telephoto lens for full-frame Sony E-mount camera systems. Now, we officially have availability and pricing information for the 70–180mm F2.8 Di III VXD.

As promised, the lens is small despite its focal length range, measuring in at 149mm (5.9") long and 81mm (3.2") diameter, with a weight of 810g (28.6oz). The lens is constructed of 19 elements in 14 groups, including one molded aspherical element, one hybrid aspherical lens, one 'eXtra Low Dispersion' (XLD) element, five Low Dispersion (LD) elements and fluorine coatings. The lens is ‘moisture-resistant,’ but Tamron doesn’t elaborate on what exactly it can endure.

An illustration of the optical construction of the lens.

Autofocus is driven by Tamron’s ‘Voice-coil eXtreme-torque Drive’ (VXD) linear focus motor. At 70mm, the minimum focusing distance is just 27cm (10.6") in manual focus and the aperture diaphragm features a nine-blade design. As with other lenses in Tamron’s lineup, the 70–180mm F2.8 features a 67mm front filter thread.

The 70–180mm F2.8 Di III VXD lens will be available in the U.S. on May 14, 2020 for $1,199. However, Tamron notes that due to the ongoing coronavirus pandemic the release date could be bumped back.

Tamron Announces the Launch of Lightest and Most Compact Large Aperture Telephoto Zoom Lens in Its Class for Sony Full-Frame Mirrorless Cameras

Third model in Tamron’s series of fast F/2.8 zoom lenses for Sony full-frame mirrorless cameras delivers quiet, fast focus and superb performance

April 6, 2020, Commack, NY – Tamron announces the launch date of the 70-180mm F/2.8 Di III VXD (Model A056), a large aperture telephoto zoom lens for Sony E-mount full-frame mirrorless cameras that is the lightest and most compact in its class. The lens will be available in the U.S. on May 14th at $1199. However, due to the spread of COVID-19, the release date or the product supply schedule could be delayed.

The 70-180mm F/2.8 features a compact and lightweight design with a 67mm filter diameter, the same as Tamron’s highly esteemed 17-28mm F/2.8 (Model A046) and the 28-75mm F/2.8 (Model A036). The optical construction includes several special lens elements that contribute to the lens’s overall superb imaging performance. Its very short 33.5” MOD (Minimum Object Distance) expands overall versatility. The lens utilizes Tamron’s newly developed VXD (Voice-coil eXtreme-torque Drive) linear motor focus mechanism that produces an autofocus drive that’s quieter and quicker than ever before. Additionally, a floating system is used to achieve excellent optical performance at all shooting distances. By simultaneously operating two VXD units via electronic control, the system produces clear and sharp images of all objects near and far. Other features that support a great shooting experience include Moisture-Resistant Construction for added weather protection and Fluorine Coating for easy maintenance. In addition, the 70-180mm F/2.8 is fully compatible with various camera-specific features including Fast Hybrid AF and Eye AF. Developed under the concept of “making large aperture zoom lenses user-friendly,” the 70-180mm F/2.8 provides users with complete portrait-to-telephoto lens range coverage. This new model joins the 17-28mm F/2.8 Di III RXD and the 28-75mm F/2.8 Di III RXD to complete Tamron’s fast zoom lens trinity for full-frame mirrorless cameras.

PRODUCT HIGHLIGHTS

1. Compact size maximizes the mobility advantages of mirrorless cameras

A true marvel of portability and utility, the 70-180mm F/2.8 incorporates an innovative zoom mechanism and 180mm telephoto power. It was possible to maintain extreme light weight and compactness even while attaining a fast F/2.8 aperture across the entire zoom range by leveraging camera-based image stabilization. It is small: filter diameter 67mm, maximum diameter 81mm, length 5.9” at the 70mm setting, and also light weight: 28.6 oz. The super-compact size helps make handheld shooting a breeze. As part of our constant, ongoing effort to achieve both high image quality and supreme compactness, Tamron went to great lengths to create this product in answer to demands of the new generation of digital cameras.

2. Newly developed VXD linear motor focus mechanism delivers high-speed and high precision autofocus performance

Tamron developed its first-ever linear motor AF drive focus mechanism, VXD (Voice-coil eXtreme-torque Drive), especially for the 70-180mm F/2.8. While operating faster than ever before, the drive also maintains positional accuracy down to 0.005mm (0.0002”), less than one tenth the width of a human hair! This provides unprecedented fast and precise AF performance. A floating system that uses two high-speed, high-precision VXD units with advanced electronic control is also used. This innovative design produces clear and beautiful images of all objects from near to far and at the same time helps reduce size and weight. In addition, its exceptional quietness enables low noise shooting in silent settings. Active athletes and moving vehicles are among the subjects commonly photographed with telephoto zoom lenses. The enhanced, highly responsive focus features of the 70-180mm F/2.8 enable following a subject’s movements to provide users with a whisper-quiet, high-precision shooting experience, not just for still images but also video.

3. Superior design for uncompromised image quality

The 70-180mm F/2.8 has an optical construction of 19 elements in 14 groups. It includes a total of six XLD (eXtra Low Dispersion) and LD (Low Dispersion) lens elements combined, and three GM (Glass Molded Aspherical) and hybrid aspherical lens elements combined. Special lens elements are generously and optimally arranged to correct chromatic aberration and maintain very high-resolution performance from edge-to-edge. This model also features BBAR-G2 (Broad-Band Anti-Reflection Generation 2) Coating, which minimizes ghosting and flare and produces stunning, clear images with brilliant, sharp subject detail. Furthermore, excellent high image quality across the entire zoom range is enhanced by camera-based distortion and shading correction. Additionally, the bokeh effect obtained using the fast F/2.8 aperture delivers beautifully smooth and soft transition from the subject to the background. The images created with this lens are emblematic of Tamron’s pursuit to combine supreme compactness with superb image quality.

4. 67mm filter diameter for system convenience

The 70-180mm F/2.8 features the same 67mm filter diameter as Tamron’s other lenses for full-frame mirrorless cameras including the 17-28mm F/2.8 (Model A046), a fast ultra-wideangle zoom, and the 28-75mm F/2.8 (Model A036), a fast standard zoom, as well as the close-focusing prime lens series (20mm, 24mm and 35mm). This uniformity significantly reduces cost and trouble when working with PL, ND and other filters. Even the front lens caps are the same size, eliminating the hassle of sorting caps when switching lenses. These features combine to produce a highly convenient and mobile system that adds more fun to photography.

5. Close focusing to a mere 33.5 inches

The new 70-180mm F/2.8 lens has a MOD of 33.5” throughout the entire zoom range. This is astonishingly close for a large aperture telephoto zoom lens. The short MOD paves the way for impressive telephoto shooting at a maximum magnification ratio of 1:4.6 at the 180mm telephoto end. Moreover, a floating component equipped with two VXD linear focus mechanisms maintains high image quality while effectively controlling aberrations so that the 70-180mm F/2.8 ensures great image quality even at close-up. To effectively suppress optical aberrations, this lens features a floating mechanism that ensures great image quality at distances as short as 33.5”.

Note: At the 70mm setting only, it is possible to shoot closer than the specified MOD of 33.5” (as close as 10.6”) when manual focus (MF) is set on the camera. However, results may be less than optimal since image quality decreases in peripheral areas. For more details, please visit this website: https://www.tamron.jp/en/support/guide/closeup.html

6. Moisture-Resistant Construction, Fluorine Coating, and Zoom Lock switch

Seals are located at the lens mount area and other critical locations to deter infiltration of moisture and/or rain drops and afford Moisture-Resistant Construction. This feature provides an additional layer of protection when shooting outdoors under adverse weather conditions. Also, the front surface of the lens element is coated with a protective fluorine compound that has excellent water- and oil-repellant qualities. The lens surface is easier to wipe clean and is less vulnerable to the damaging effects of dirt, moisture or oily fingerprints, allowing for much easier maintenance. Additionally, the conventional Zoom Lock switch prevents unwanted barrel extension during transportation.

7. Compatible with main camera-specific features and functions

Tamron’s new 70-180mm F/2.8 is compatible with many of the advanced features that are specific to certain mirrorless cameras. This includes the following:

- Fast Hybrid AF

- Eye AF

- Direct Manual Focus (DMF)

- In-camera lens correction (shading, chromatic aberration, distortion)

- Camera-based lens unit firmware updates

* Features vary by camera. Please consult your camera’s instruction manual for details. (As of January, 2020.)

8. Tamron’s ‘Dream Team’ of large aperture zooms for full-size mirrorless cameras

Tamron’s 17-28mm F/2.8 Di III RXD (Model A046) ultra-wideangle zoom and the 28-75mm F/2.8 Di III RXD (Model A036) standard zoom lens earn high marks for user-friendliness and high image quality among large aperture zoom lenses for both E-Mount and FE-Mount Sony mirrorless cameras. Now, the 70-180mm F/2.8 Di III VXD (Model A056) telephoto zoom lens joins the lineup to complete the Dream Team Trinity of high-speed zoom lenses for full-size mirrorless cameras. A key advantage of this series is their portability. The three models altogether weigh surprisingly little, just 62.8 oz. Featuring light weight, compact size, a fast F/2.8 aperture and superb image quality, Tamron’s Dream Team is easy to carry, easy to deploy and easy to enjoy.

Read the whole story
JayM
12 hours ago
reply
Nice. Not that I'm shooting full size cameras these days, but if I ever do...
Atlanta, GA
Share this story
Delete

GoDaddy is acquiring Neustar's domain name registry services business and renaming it GoDaddy Registry; Neustar has about 12M domains (Andrew Allemann/Domain Name Wire)

1 Comment

Andrew Allemann / Domain Name Wire:
GoDaddy is acquiring Neustar's domain name registry services business and renaming it GoDaddy Registry; Neustar has about 12M domains  —  GoDaddy buys its first registry, implements governance model for conflicts of interest, and promises to keep domain prices in check.

Read the whole story
JayM
1 day ago
reply
Go go, GoDaddy!
Atlanta, GA
fxer
20 hours ago
They turn it around? I moved all my stuff off years ago with their shady upsell dark patterns and snakeoil SSL certs. Also their ceo was a douche.
JayM
16 hours ago
I hated all the advertising... but all the blockers and pihole removed that. The up sell, once the put the “go straight to cart” links on the first page of them, that stopped bothering me. So, they do still try and increase profit, but they stay out of my way. CEO... he just stepped down due to health last year.
Share this story
Delete

COVID-19: Wells Fargo has already stopped accepting Paycheck Protection Program loan requests

1 Comment

The Paycheck Protection Program, which earmarked $349 billion for small businesses affected by the coronavirus pandemic, only went live on Friday.

The Paycheck Protection Program may not protect nearly enough paychecks.

Read Full Story



Read the whole story
JayM
1 day ago
reply
Wow. Interesting that they've stopped. I guess that means they have so many to process already they can't continue...
Atlanta, GA
Share this story
Delete
Next Page of Stories