diff --git a/packages/api/src/elastic/types.ts b/packages/api/src/elastic/types.ts index 33d00b038..065770aa6 100644 --- a/packages/api/src/elastic/types.ts +++ b/packages/api/src/elastic/types.ts @@ -247,6 +247,8 @@ export interface SearchItem { labels?: Label[] highlights?: Highlight[] wordsCount?: number + siteName?: string + siteIcon?: string } const keys = ['_id', 'url', 'slug', 'userId', 'uploadFileId', 'state'] as const diff --git a/packages/api/src/entity/subscription.ts b/packages/api/src/entity/subscription.ts index d6bbf9cb5..d0f89b4db 100644 --- a/packages/api/src/entity/subscription.ts +++ b/packages/api/src/entity/subscription.ts @@ -43,6 +43,9 @@ export class Subscription { @Column('text', { nullable: true }) unsubscribeHttpUrl?: string + @Column('text', { nullable: true }) + icon?: string + @CreateDateColumn() createdAt!: Date diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index 600243e98..24f683035 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -1644,6 +1644,7 @@ export type SearchItem = { readingProgressPercent: Scalars['Float']; savedAt: Scalars['Date']; shortId?: Maybe; + siteIcon?: Maybe; siteName?: Maybe; slug: Scalars['String']; state?: Maybe; @@ -1987,6 +1988,7 @@ export type Subscription = { __typename?: 'Subscription'; createdAt: Scalars['Date']; description?: Maybe; + icon?: Maybe; id: Scalars['ID']; name: Scalars['String']; newsletterEmail: Scalars['String']; @@ -4159,6 +4161,7 @@ export type SearchItemResolvers; savedAt?: Resolver; shortId?: Resolver, ParentType, ContextType>; + siteIcon?: Resolver, ParentType, ContextType>; siteName?: Resolver, ParentType, ContextType>; slug?: Resolver; state?: Resolver, ParentType, ContextType>; @@ -4368,6 +4371,7 @@ export type SubscribeSuccessResolvers = { createdAt?: SubscriptionResolver; description?: SubscriptionResolver, "description", ParentType, ContextType>; + icon?: SubscriptionResolver, "icon", ParentType, ContextType>; id?: SubscriptionResolver; name?: SubscriptionResolver; newsletterEmail?: SubscriptionResolver; diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index a0d0e1161..a15f5c497 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -1170,6 +1170,7 @@ type SearchItem { readingProgressPercent: Float! savedAt: Date! shortId: String + siteIcon: String siteName: String slug: String! state: ArticleSavingRequestStatus @@ -1485,6 +1486,7 @@ type SubscribeSuccess { type Subscription { createdAt: Date! description: String + icon: String id: ID! name: String! newsletterEmail: String! diff --git a/packages/api/src/resolvers/article/index.ts b/packages/api/src/resolvers/article/index.ts index e9b214102..40b77af12 100644 --- a/packages/api/src/resolvers/article/index.ts +++ b/packages/api/src/resolvers/article/index.ts @@ -899,6 +899,7 @@ export const searchResolver = authorized< publishedAt: validatedDate(r.publishedAt), ownedByViewer: r.userId === claims.uid, pageType: r.pageType || PageType.Highlights, + siteIcon: r.siteIcon && createImageProxyUrl(r.siteIcon, 32, 32), } as SearchItem, cursor: endCursor, } diff --git a/packages/api/src/resolvers/subscriptions/index.ts b/packages/api/src/resolvers/subscriptions/index.ts index 6ee982f6d..eb416b868 100644 --- a/packages/api/src/resolvers/subscriptions/index.ts +++ b/packages/api/src/resolvers/subscriptions/index.ts @@ -23,6 +23,7 @@ import { User } from '../../entity/user' import { Subscription } from '../../entity/subscription' import { getSubscribeHandler, unsubscribe } from '../../services/subscriptions' import { ILike } from 'typeorm' +import { createImageProxyUrl } from '../../utils/imageproxy' export const subscriptionsResolver = authorized< SubscriptionsSuccess, @@ -57,7 +58,10 @@ export const subscriptionsResolver = authorized< }) return { - subscriptions, + subscriptions: subscriptions.map((s) => ({ + ...s, + icon: s.icon && createImageProxyUrl(s.icon, 32, 32), + })), } } catch (error) { log.error(error) diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index dc0936431..c2e6f3805 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -1495,6 +1495,7 @@ const schema = gql` readAt: Date savedAt: Date! highlights: [Highlight!] + siteIcon: String } type SearchItemEdge { @@ -1530,6 +1531,7 @@ const schema = gql` status: SubscriptionStatus! unsubscribeMailTo: String unsubscribeHttpUrl: String + icon: String createdAt: Date! updatedAt: Date! } diff --git a/packages/api/src/services/save_email.ts b/packages/api/src/services/save_email.ts index 100858745..da623b7a0 100644 --- a/packages/api/src/services/save_email.ts +++ b/packages/api/src/services/save_email.ts @@ -70,6 +70,7 @@ export const saveEmail = async ( readingProgressPercent: 0, subscription: input.author, state: ArticleSavingRequestStatus.Succeeded, + siteIcon: parseResult.parsedContent?.siteIcon, } const page = await getPageByParam({ diff --git a/packages/api/src/services/save_newsletter_email.ts b/packages/api/src/services/save_newsletter_email.ts index ecf5177dd..84daf9a40 100644 --- a/packages/api/src/services/save_newsletter_email.ts +++ b/packages/api/src/services/save_newsletter_email.ts @@ -12,6 +12,8 @@ import { Page } from '../elastic/types' import { addLabelToPage } from './labels' import { saveSubscription } from './subscriptions' import { NewsletterEmail } from '../entity/newsletter_email' +import { fetchFavicon } from '../utils/parser' +import { updatePage } from '../elastic/pages' interface NewsletterMessage { email: string @@ -33,7 +35,6 @@ export const saveNewsletterEmail = async ( // get user from newsletter email const newsletterEmail = data.newsletterEmail || (await getNewsletterEmail(data.email)) - if (!newsletterEmail) { console.log('newsletter email not found', data.email) return false @@ -54,7 +55,6 @@ export const saveNewsletterEmail = async ( pubsub: createPubSubClient(), uid: newsletterEmail.user.id, } - const input: SaveEmailInput = { url: data.url, originalContent: data.content, @@ -63,22 +63,31 @@ export const saveNewsletterEmail = async ( unsubMailTo: data.unsubMailTo, unsubHttpUrl: data.unsubHttpUrl, } - const page = await saveEmail(saveCtx, input) if (!page) { console.log('newsletter not created:', input) return false } + if (!page.siteIcon) { + // fetch favicon if not already set + const favicon = await fetchFavicon(page.url) + if (favicon) { + page.siteIcon = favicon + await updatePage(page.id, { siteIcon: favicon }, saveCtx) + } + } + // creates or updates subscription - const subscription = await saveSubscription( - newsletterEmail.user.id, - data.author, - newsletterEmail.address, - data.unsubMailTo, - data.unsubHttpUrl - ) - console.log('subscription', subscription) + const subscription = await saveSubscription({ + userId: newsletterEmail.user.id, + name: data.author, + newsletterEmail: newsletterEmail.address, + unsubscribeMailTo: data.unsubMailTo, + unsubscribeHttpUrl: data.unsubHttpUrl, + icon: page.siteIcon, + }) + console.log('subscription saved', subscription) // adds newsletters label to page const result = await addLabelToPage(saveCtx, page.id, { diff --git a/packages/api/src/services/subscriptions.ts b/packages/api/src/services/subscriptions.ts index f0d7997ac..7ac233e83 100644 --- a/packages/api/src/services/subscriptions.ts +++ b/packages/api/src/services/subscriptions.ts @@ -6,6 +6,15 @@ import axios from 'axios' import { NewsletterEmail } from '../entity/newsletter_email' import { createNewsletterEmail } from './newsletters' +interface SaveSubscriptionInput { + userId: string + name: string + newsletterEmail: string + unsubscribeMailTo?: string + unsubscribeHttpUrl?: string + icon?: string +} + const sendUnsubscribeEmail = async ( unsubscribeMailTo: string, newsletterEmail: string @@ -30,13 +39,14 @@ const sendUnsubscribeHttpRequest = async (url: string): Promise => { } } -export const saveSubscription = async ( - userId: string, - name: string, - newsletterEmail: string, - unsubscribeMailTo?: string, - unsubscribeHttpUrl?: string -): Promise => { +export const saveSubscription = async ({ + userId, + name, + newsletterEmail, + unsubscribeMailTo, + unsubscribeHttpUrl, + icon, +}: SaveSubscriptionInput): Promise => { const subscription = await getRepository(Subscription).findOneBy({ name, user: { id: userId }, @@ -46,6 +56,7 @@ export const saveSubscription = async ( // if subscription already exists, updates updatedAt subscription.status = SubscriptionStatus.Active subscription.newsletterEmail = newsletterEmail + icon && (subscription.icon = icon) unsubscribeMailTo && (subscription.unsubscribeMailTo = unsubscribeMailTo) unsubscribeHttpUrl && (subscription.unsubscribeHttpUrl = unsubscribeHttpUrl) return getRepository(Subscription).save(subscription) @@ -59,6 +70,7 @@ export const saveSubscription = async ( status: SubscriptionStatus.Active, unsubscribeHttpUrl, unsubscribeMailTo, + icon, }) } diff --git a/packages/api/src/utils/parser.ts b/packages/api/src/utils/parser.ts index 01e97d0bd..ee62d1050 100644 --- a/packages/api/src/utils/parser.ts +++ b/packages/api/src/utils/parser.ts @@ -621,3 +621,18 @@ export const parseEmailAddress = (from: string): addressparser.EmailAddress => { } return { name: '', address: from } } + +export const fetchFavicon = async ( + url: string +): Promise => { + try { + // get the correct url if it's a redirect + const response = await axios.get(url, { timeout: 5000 }) + const realUrl = response.request.res.responseUrl + const domain = new URL(realUrl).hostname + return `https://api.faviconkit.com/${domain}/32` + } catch (e) { + console.log('Error fetching favicon', e) + return undefined + } +} diff --git a/packages/db/migrations/0096.do.subscriptions_icon.sql b/packages/db/migrations/0096.do.subscriptions_icon.sql new file mode 100755 index 000000000..7f668b023 --- /dev/null +++ b/packages/db/migrations/0096.do.subscriptions_icon.sql @@ -0,0 +1,9 @@ +-- Type: DO +-- Name: subscriptions_icon +-- Description: Add icon field to subscriptions table + +BEGIN; + +ALTER TABLE omnivore.subscriptions ADD COLUMN icon text; + +COMMIT; diff --git a/packages/db/migrations/0096.undo.subscriptions_icon.sql b/packages/db/migrations/0096.undo.subscriptions_icon.sql new file mode 100755 index 000000000..eb095c17f --- /dev/null +++ b/packages/db/migrations/0096.undo.subscriptions_icon.sql @@ -0,0 +1,9 @@ +-- Type: UNDO +-- Name: subscriptions_icon +-- Description: Add icon field to subscriptions table + +BEGIN; + +ALTER TABLE omnivore.subscriptions DROP COLUMN IF EXISTS icon; + +COMMIT; diff --git a/packages/readabilityjs/test/test-pages/newsletters/bloomberg/expected-metadata.json b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/expected-metadata.json new file mode 100644 index 000000000..46ed3ce5c --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/expected-metadata.json @@ -0,0 +1,10 @@ +{ + "title": "How the World Reached (Nearly) $100 Oil", + "byline": "Travis Stice", + "dir": null, + "excerpt": "/>", + "siteName": null, + "publishedDate": null, + "language": "English", + "readerable": true +} diff --git a/packages/readabilityjs/test/test-pages/newsletters/bloomberg/expected.html b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/expected.html new file mode 100644 index 000000000..dca4b0c10 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/expected.html @@ -0,0 +1,98 @@ +
+
+ + + + + + + + + + + + + + + +
+ + +

/>

+

The two-year Covid crisis has been a roller coaster for just about every market, but few have had a crazier time than crude oil.

+

At the start of the pandemic, crude oil cratered—at one point even sliding into negative territory. Today, it’s nearing $100.

+

The price swings have shocked motorists, investors, CEOs and OPEC+ ministers alike. An entire industry has gone from being written off as a wounded dinosaur to become a key player in the recovery.

+

This is the story of crude’s collapse, and what its comeback means for the global economy.

+

Read The Big Take.

+ + +
+ + + + +
+ + +

From today's story

+ + + + +
+ + “Eighteen months ago, we were in a global apocalypse for the energy sector, and now you’re talking about out-sized returns." + + + +

CEO, Diamondback Energy +

+ + + + on the wild prices swings in the oil market. + +
+ + +
+ + + + +
+ + +

+ ICYMI +

+ +

Read more from The Big Take.

+ + +
+ + + + + + + + + + + +
+
\ No newline at end of file diff --git a/packages/readabilityjs/test/test-pages/newsletters/bloomberg/source.html b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/source.html new file mode 100644 index 000000000..e7bf56d82 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/source.html @@ -0,0 +1,768 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ Oil's recovery from -$40 to nearly $100 a barrel isn't just a crazy + comeback story. +
+
+ + + + + + + + +
+ + + + +
+
+ /> +
+

+ The two-year + Covid crisis + has been a roller coaster for just about every market, but few + have had a crazier time than crude oil. +

+

+ At the start of the pandemic, crude oil cratered—at one point + even sliding into negative territory. Today, it’s nearing + $100. +

+

+ The price swings have shocked motorists, investors, CEOs and + OPEC+ ministers alike. An entire industry has gone from being + written off as a wounded dinosaur to become a key player in + the recovery. +

+

+ This is the story of crude’s collapse, and what its comeback + means for the global economy. +

+

+ Read + The Big Take. +

+
+
+ + + + + + + +
+

+ From today's story +

+
+ + + + + + + + + + +
+ “Eighteen months ago, we were in a global apocalypse for + the energy sector, and now you’re talking about out-sized + returns." +
+ Travis Stice + +
+ CEO, Diamondback Energy +
+
+ on the wild prices swings in the oil market. +
+
+
+ + + + +
+

+ ICYMI +

+ +

+ Read more from + The Big Take. +

+
+
+ + + + + + + + +
+ + + + + diff --git a/packages/readabilityjs/test/test-pages/newsletters/bloomberg/url.txt b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/url.txt new file mode 100644 index 000000000..0f007a3d4 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/bloomberg/url.txt @@ -0,0 +1 @@ +https://www.bloomberg.com/news/newsletters/2022-02-17/the-big-take-why-oil-prices-are-surging-around-the-world diff --git a/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/expected-metadata.json b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/expected-metadata.json new file mode 100644 index 000000000..f81217cd7 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/expected-metadata.json @@ -0,0 +1,10 @@ +{ + "title": "Go's first commit was in 1972?", + "byline": null, + "dir": null, + "excerpt": "Go’s Version Control History\n — Did you know the first commit in the Go repository is from\n 1972? Or is it..? Russ starts there and walks us through\n relevant commits, revision control tool changes, and pranks\n will be enjoyable to any gopher.", + "siteName": null, + "publishedDate": null, + "language": "English", + "readerable": true +} diff --git a/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/expected.html b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/expected.html new file mode 100644 index 000000000..5bcd91375 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/expected.html @@ -0,0 +1,142 @@ +
+
+ + +
+ + +
+ + + + + +
+
+ + +

+ Go’s Version Control History — Did you know the first commit in the Go repository is from 1972? Or is it..? Russ starts there and walks us through relevant commits, revision control tool changes, and pranks will be enjoyable to any gopher. +

+

Russ Cox

+ + +
+
+ + +

+ Go 1.18 Release Candidate 1: The Release Notes — There’s no official blog post but the first release candidate of Go 1.18 is now out (if you want to try it out, follow the instructions in this golang-announce post) so it’s a good time to skim the release notes and prepare for the final release any week now (and hopefully not five minutes after we send this newsletter…) +

+

Go Team

+ + +
+
+ + + +

+ Build Video for Go That Just Works — Mux is an API-first platform that makes it easy to build video into your apps. Live and on-demand video stream beautifully to any device, plus analytics are built-in so you can track engagement. +

+

Mux sponsor +

+ + +
+
+ + +

+ The Other Features in Go 1.18 — Had quite enough of hearing about generics and fuzz testing? No more. Michael Matloob and Daniel Martí join Mat Ryer on Go Time to talk about anything else Go 1.18 has to offer, such as workspaces. + (59 minutes.) +

+

Go Time Podcast podcast +

+ + +
+
+ + +

+ In brief: +

+ + + +
+
+ + + +
+ + +

+ Find a Job Through Hired — Create a profile on Hired to connect with hiring managers at growing startups and Fortune 500 companies. It's free for job-seekers.
Hired +

+ + +
+ + +
+
+ + +

+ File-Driven Testing in Go — If you’re familiar with table-driven tests, this is just the next step along that path (pun fully intended). +

+

Eli Bendersky

+ + +
+
+ + + + + +
+
+ + +

+ fq: Like jq But for Binary Formats — This is quite a neat idea. It’s a Go-powered tool (that is, admittedly, ‘early in development’) for working with non-text formats, such as graphics, audio, archives, etc. It’d be neat to see this improve and there’s even a list of to-dos if you want to get involved. +

+

Mattias Wadman

+ + +
+
+ + + + + +
+
+ + +

+ TCG: Terminal Cell Graphics Library — An interesting way to render monochrome graphics in the terminal by way of using special Unicode block symbols. You can, however, work at ‘pixel’ level, making it quite flexible for certain kinds of use case. The only big downside? You have to use a special font in your terminal to make it work. +

+

Sergey Mudrik

+ + +
+
+ + +
+
\ No newline at end of file diff --git a/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/source.html b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/source.html new file mode 100644 index 000000000..637e30ad3 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/source.html @@ -0,0 +1,2468 @@ + + + + + + + + + + + + +
+ Plus an interesting monochrome graphics library for the terminal. | +
+ + + + + +
+
+ + + + + + +
+

+ #​400 — February 18, 2022 +

+
+

+ Unsubscribe + | + Read on the Web +

+
+ + + + + +
+

+ Go Weekly +

+
+ + + + +
+ +
+ + + + + +
+

+ Go’s Version Control History + — Did you know the first commit in the Go repository is from + 1972? Or is it..? Russ starts there and walks us through + relevant commits, revision control tool changes, and pranks + will be enjoyable to any gopher. +

+

+ Russ Cox +

+
+ + + + + +
+

+ Go 1.18 Release Candidate 1: The Release Notes + — There’s no official blog post but the first + release candidate of Go 1.18 is now out (if you + want to try it out, follow the instructions in + this golang-announce post) so it’s a good time to skim the release notes and prepare + for the final release any week now (and hopefully not five + minutes after we send this newsletter…) +

+

+ Go Team +

+
+ + + + + +
+ +

+ Build Video for Go That Just Works + — Mux is an API-first platform that makes it easy to build + video into your apps. Live and on-demand video stream + beautifully to any device, plus analytics are built-in so + you can track engagement. +

+

+ Mux + sponsor +

+
+ + + + + +
+

+ ▶ + The Other Features in Go 1.18 + — Had quite enough of hearing about generics and fuzz + testing? No more. Michael Matloob and Daniel Martí join Mat + Ryer on Go Time to talk about + anything else Go 1.18 has to offer, such as + workspaces. + (59 minutes.) +

+

+ Go Time Podcast + podcast +

+
+ + + + +
+

+ In brief: +

+ +
+ + + + +
+ + + + + +
+

+ Jobs +

+
+ + + + + +
+

+ Golang Engineers — 100% Remote (North/South + America & Europe) + — We’ve got several opportunities for Go devs (some + working directly with Bill Kennedy!) and would love to + hear from those looking for new challenges in + distributed systems projects.
Ardan Labs +

+
+ + + + + +
+

+ Backend Engineer | Remote within CET (-3/+3 + hours) | Full-Time + — Europe's leading business finance solution. You will + help us simplify everything from everyday banking and + financing, to bookkeeping and spend management. +
Qonto +

+
+ + + + + +
+

+ Find a Job Through Hired + — Create a profile on Hired to connect with hiring + managers at growing startups and Fortune 500 + companies. It's free for job-seekers.
Hired +

+
+ + + + +
+
+ + + + +
+ + + + + +
+

+ Continuous Building and Deployment of Go Apps with + Google Cloud Build + — Cloud66 uses Google Cloud Build (Google’s CI/CD service) + to build its Go apps and this is how it all works. +

+

+ Khash Sajadi (Cloud66) +

+
+ + + + + +
+

+ File-Driven Testing in Go + — If you’re familiar with table-driven tests, this is just + the next step along that path (pun fully intended). +

+

+ Eli Bendersky +

+
+ + + + + +
+

+ ▶ + Mastering Your Error Domain: Graceful Error Handling in + Go + — A 20 minute talk (followed by Q&A) given at FOSDEM + 2022 about the errors.As helper added in Go + 1.13 and using it to improve both how you handle errors and + think about their role in your apps. +

+

+ Carl Johnson +

+
+ + + + + +
+

+ Moving Pinterest’s iOS Builds to Autoscaled EC2 Mac +

+

+ Buildkite + sponsor +

+
+ + + + + +
+

+ GoF Design Patterns That Still Make Sense in Go + — While there are people who think the classic book on + patterns is obsolete, there are plenty of patterns used in + Go today, and your code could probably use them. +

+

+ Maurício Linhares +

+
+ + + + + +
+

+ How To Use Dates and Times in Go + — A comprehensive, introductory tutorial from DigitalOcean’s + article writing program. +

+

+ Kristin Davidson +

+
+ + + + +
+

+ 🛠 Code & Tools +

+
+ + + + +
+ +
+ + + + +
+ + + + + +
+

+ fq: Like + jq + But for Binary Formats + — This is quite a neat idea. It’s a Go-powered tool (that + is, admittedly, ‘early in development’) for working with + non-text formats, such as graphics, audio, archives, etc. + It’d be neat to see this improve and there’s even a list of + to-dos + if you want to get involved. +

+

+ Mattias Wadman +

+
+ + + + + +
+

+ Bubble Tea 0.20.0: A Powerful Elm-Inspired TUI + Framework + — Based on the + Elm architecture, this is aimed at building slick terminal applications. +

+

+ Charm +

+
+ + + + + +
+

+ gRPC UI: An Interactive Web UI for Working with gRPC + — Bills itself as being + “sort of like + Postman + but for gRPC APIs instead of REST. +

+

+ Engineering at FullStory +

+
+ + + + + +
+

+ spew: A Deep Pretty Printer for Go Data Structures +
Spew +

+
+ + + + + +
+

+ ko 0.10: Build and Deploy Go Apps on Kubernetes +
Google +

+
+ + + + +
+

+ 😎 A Cool One.. +

+
+ + + + +
+ +
+ + + + +
+ + + + + +
+

+ TCG: Terminal Cell Graphics Library + — An interesting way to render monochrome graphics in the + terminal by way of using special Unicode block symbols. You + can, however, work at ‘pixel’ level, making it quite + flexible for certain kinds of use case. The only big + downside? + You have to use a special font in your terminal to make + it work. +

+

+ Sergey Mudrik +

+
+ + + + +
+
+
+ + + o + + diff --git a/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/url.txt b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/url.txt new file mode 100644 index 000000000..ed715b2ad --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/golang-weekly/url.txt @@ -0,0 +1 @@ +https://u25184427.ct.sendgrid.net/ls/click?upn=MnmHBiCwIPe9TmIJeskmAyPFobFFs-2BGvrG-2FfiZ7tbf8z3z427iXCWAarenlr8M-2B4ToT4_vVXscVLXlj5UtQe3aqo5RMTdTq2PepdZjP86UOmA8nzP4yaWf257iDuG6iOHUre6y7-2Fu8NxRNvthorp-2B5Q69zvqHLE7uHn34H2Ir1kq5RNMc-2BBlyDAcOfjKFBN908nyKEgt1bPmTioC7r-2BIAIjoauPeiSUt6qjN0mIQv-2F-2BOL-2BEpvE7LwaAOU2f8jAKTnjcPlAZxiEmpyxj7VQdLHO15dKw-3D-3D diff --git a/packages/readabilityjs/test/test-pages/newsletters/milk-road/expected-metadata.json b/packages/readabilityjs/test/test-pages/newsletters/milk-road/expected-metadata.json new file mode 100644 index 000000000..826c7e523 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/milk-road/expected-metadata.json @@ -0,0 +1,10 @@ +{ + "title": "🥛 How my friend found millions NFT dumpster diving", + "byline": null, + "dir": null, + "excerpt": "GM. This is the Milk Road, the email that\n teaches you all about crypto in less time than\n it takes to choose a Netflix show.", + "siteName": null, + "publishedDate": null, + "language": "English", + "readerable": false +} diff --git a/packages/readabilityjs/test/test-pages/newsletters/milk-road/expected.html b/packages/readabilityjs/test/test-pages/newsletters/milk-road/expected.html new file mode 100644 index 000000000..b8dccd9a8 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/milk-road/expected.html @@ -0,0 +1,654 @@ +
+
+ + + + +
+ + + + + + + + + + + + +
+ + +
+ + + + + +
+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

GM. This is the Milk Road, the email that teaches you all about crypto in less time than it takes to choose a Netflix show.

+ + +
+
+ + +

Today, we found out that inflation rose 8.5% in March (a new 40 year-high) and we’ve officially hit the “Extreme Fear” zone…

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

I’m not here to tell you what prices are gonna do following the US’s inflation report…but i am here to tell you that I love you. 

+ + +
+
+ + +

Yeah, I love you for giving me the next 176 seconds of your day to read this.

+ + +
+
+ + +

Today's estimated read time: 2 minutes &  56 seconds +

+ + +
+
+ + +

Let's get into the good stuff: +

+ + +
+
+ + +
    +
  • +  ⬇️ Crypto assets saw a big outflow last week +
  • +
  • +  🤑 My friend just found millions of dollars +
  • +
  • +  🗞️ Quick news nuggets +
  • +
  • +  🤣 A great Meme +
  • +
+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

+ CRYPTO ASSETS SAW AN OUTFLOW OF $134M LAST WEEK +

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

I like looking at the inflows & outflows of money.

+ + +
+
+ + +

When times are good, like 2 weeks ago, we see lots of new capital coming into crypto ($450M combined in 2 weeks). This drives the price up. Because, duh. 

+ + +
+
+ + +

Last week, the flow flipped. Like when your shower all of a sudden goes ice cold because someone turned on the dishwasher. 

+ + +
+
+ + +

In the last 7d, we have a net outflow of $134M. This could be investors taking profits ahead of the US inflation data hitting or something else entirely.

+ + +
+
+ + +

Money in, money out, potato, po-tah-toh. 

+ + +
+
+ + +

I don’t get too caught up in the price movements. Instead, I try to get a fundamental understanding of why I believe in something over the long term.  +

+ + +
+
+ + +

Kyle Samani, the co-founder of Multicoin (one of the big crypto VC funds) said something similar yesterday on Twitter. He said he tries to distill every crypto deal into a 1-line reason-to-believe. 

+ + +
+
+ + +

For example, here are the 1-liners for his big investments : +

+ + +
+
+ + +

LayerZero - bridges are fucking complicated, focus on simplicity

+ + +
+
+ + +

Helium - radically reduced cost structure to build physical network of WAPs

+ + +
+
+ + +

Solana - technical scalability creates social scalability

+ + +
+
+ + +

Fractal - NFT gaming gonna be huge, led by the best conceivable for that market

+ + +
+
+ + +

They are intentionally reduced to be as simple as possible. You can’t always reduce it down into a catchy 1-liner, but it’s the thought that counts. 

+ + +
+
+ + +

P.S. Here’s your investment thesis for why you invest your time reading the Milk Road: +

+ + +
+
+ + +

“Because I can laugh every day while increasing my crypto IQ by 15 points”  +

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

+ MY FRIEND JUST "FOUND" MILLIONS +

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

What happened? XCopy is one of the most popular NFT artists in the world. And someone just “found” 100 of his old works in a junk pile (and is going to make millions off it).

+ + +
+
+ + +

Check this out: My friend Gianni went through all of Xcopy’s contracts on Etherscan and discovered that XCopy minted 100 of his first ETH NFTs on a marketplace called “RareBits” that went out of business.

+ + +
+
+ + +

He reverse engineered the unverified contract and bought them all for ~6.9e total and is now the proud owner of some of XCopy’s earliest public work and most likely will be able to sell these for millions of dollars.

+ + +
+
+ + +

Check out one of the actual NFTs he grabbed:

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

1/ Rarebits is a great example of how “timing is a bitch” in startups. Super smart team working on an NFT marketplace. Shut down in 2019 right before NFTs started taking off. 

+ + +
+
+ + +

2/ This is a cool example of “NFT ArchAeology” (digging up valuable treasures on the blockchain) 

+ + +
+
+ + +

3/ NFTs are “provably true.” So there is no dispute that these are authentic pieces of art by XCOPY. 

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

+ 6 PIECES O'NEWS NUGGETS +

+ + +
+
+ + +

Twitter Beef of the Week: Do Kwon vs. Jack Niewold about his LUNA criticisms. If you missed it, check out the thread.

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

+ Today's Milk Road is brought to you by LEX 🏢 +

+ + +
+
+ + +

What they do: make it easy to invest in real estate +

+ + +
+
+ + +

What asset class has created more millionaires than any other? 

+ + +
+
+ + +

Today’s sponsor, LEX, has a really cool angle for investing in real estate. 

+ + +
+
+ + +

LEX does an “IPO” for a building, so you can directly invest in marquee commercial real estate. You can build a portfolio of buildings you want to invest in. Each building has a ticker, just like stocks. 

+ + +
+
+ + +

As a shareholder, you can get paid dividends flowing from the rent paid by the tenants. You can also earn tax advantaged passive income and trade without lockups.

+ + +
+
+ + +

Check out LEX’s live assets in New York City and upcoming IPO in Seattle. 

+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

+ MEME OF THE DAY +

+ + +
+
+ + +

Share Milk Road

+
+ + +

You currently have 0 referrals, only 1 away from receiving An Inside Look At What The Crypto Whales Are Betting On.

+ + +
+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +
+ + + + + +
+ + +
+
+ + +

What'd you think of today's email? +

+ + +
+ +
+ + +
+ + + + + +
+ + +
+ + + + +
+ + + + + + + + + [endif]--> + +
+ + +
+ + + + + + +

228 Park Ave S, #29976, New York, New York 10003

+ + + + + + +
+ + +
+ + + +
+ + +
+ + + + +
+
\ No newline at end of file diff --git a/packages/readabilityjs/test/test-pages/newsletters/milk-road/source.html b/packages/readabilityjs/test/test-pages/newsletters/milk-road/source.html new file mode 100644 index 000000000..6aab0d85b --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/milk-road/source.html @@ -0,0 +1,4775 @@ + + + + + + + + + + + 🥛 How my friend found millions NFT dumpster diving + + + + + +
+ PLUS a ton of money was just pulled out of crypto +
+
+ +
+ + + + + + +
+
+ +
+ + diff --git a/packages/readabilityjs/test/test-pages/newsletters/milk-road/url.txt b/packages/readabilityjs/test/test-pages/newsletters/milk-road/url.txt new file mode 100644 index 000000000..ca8929364 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/milk-road/url.txt @@ -0,0 +1 @@ +https://www.milkroad.com/p/friend-found-millions-nft-dumpster-diving diff --git a/packages/readabilityjs/test/test-pages/newsletters/money-stuff/expected-metadata.json b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/expected-metadata.json new file mode 100644 index 000000000..3fa7ff56f --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/expected-metadata.json @@ -0,0 +1,10 @@ +{ + "title": "Money Stuff", + "byline": null, + "dir": null, + "excerpt": "I\n \n wrote last Thursday\n about a speech that Gary Gensler, the chair of the US\n Securities and Exchange Commission, gave about securities\n regulation and crypto. My basic point was that Gensler wants\n the SEC to have jurisdiction over basically all of crypto,\n because basically every crypto token is a security, but that\n he does not seem to have any interest in writing new rules to\n accommodate the crypto market. Gensler’s approach would put\n the SEC in charge of crypto, and then more or less ban crypto,\n and I am not sure that is a winning position for him to take.", + "siteName": null, + "publishedDate": null, + "language": "English", + "readerable": true +} diff --git a/packages/readabilityjs/test/test-pages/newsletters/money-stuff/expected.html b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/expected.html new file mode 100644 index 000000000..00ee72511 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/expected.html @@ -0,0 +1,203 @@ +
+
+ + + + + + + + + + + + + + + +
+ + +
+ + +

Crypto rules

+ + +
+

I wrote last Thursday about a speech that Gary Gensler, the chair of the US Securities and Exchange Commission, gave about securities regulation and crypto. My basic point was that Gensler wants the SEC to have jurisdiction over basically all of crypto, because basically every crypto token is a security, but that he does not seem to have any interest in writing new rules to accommodate the crypto market. Gensler’s approach would put the SEC in charge of crypto, and then more or less ban crypto, and I am not sure that is a winning position for him to take.

+

Today I want to come back to one bit of Gensler’s speech that I think represents an important philosophical disconnect between the SEC and the crypto world. Gensler said:

+
+

I’ve asked the SEC staff to work directly with entrepreneurs to get their tokens registered and regulated, where appropriate, as securities. ...

+

Given the nature of crypto investments, I recognize that it may be appropriate to be flexible in applying existing disclosure requirements. Tailored disclosures exist elsewhere — for example, asset-backed securities disclosure differs from that for equities.

+
+

What I said on Thursday was that the SEC does not seem to have actually been doing any of that tailoring. I wrote:

+
+

The SEC has been suing crypto projects for illegally issuing securities for about five years now, but in that time it has not issued any rules, or proposed any rules, or put anything on its rulemaking agenda, about adapting the securities disclosure rules to crypto projects.

+
+

But arguably that slightly misrepresents what Gensler said. He didn’t say “I have asked the staff to write rules that will let entrepreneurs register tokens.” He said “I’ve asked the SEC staff to work directly with entrepreneurs to get their tokens registered.” Gensler’s paradigm is not that the SEC will write rules, and you can read them and follow them and register your tokens. The paradigm is that you walk into the SEC’s office and say “here’s a token, can you help me figure out how to register it,” and they do. There was no suggestion of new rules, but of good customer service in adapting, interpreting or perhaps waiving old rules.

+

Now. One objection to this might be that it’s empirically untrue; certainly lots of crypto entrepreneurs think that the SEC is very unhelpful in helping them figure out how to comply with existing rules. The stereotype is that, if you walk into the SEC to ask about doing a compliant crypto thing, you either get told not to do it at all, or you find a path to doing it legally but you have to pay a big fine first. The incentives are bad.

+

But here I want to focus on a different objection. The objection that I want to make here is that Gensler’s offer — “come talk to us and maybe we can be flexible to adapt the rules and figure out a way to register your tokens” — is not what crypto people want, even if he really means it.

+

The ethos of crypto is about decentralization and public code. You can read the Ethereum white paper and related standards and learn about how Ethereum works and then go off and build a decentralized options exchange or a lending platform or a pyramid scheme or whatever else you want on Ethereum. You don’t have to set up a meeting with Vitalik Buterin and get his approval; you just do it. The requirements are open and public, and if you meet them you can do what you want.

+

This is something that crypto people take seriously. People talk about “permissionless innovation,” and about how easy it is to build new businesses in crypto compared to the legacy financial system. If you are a young person with an idea for a crypto product, you can code it up and make it work with existing blockchains and protocols. Everyone has the same access to the blockchain as everyone else; everything is set up, by default, to work for everybody. If you want to run a stock trading fund, you can spend months negotiating credit terms with a prime broker and getting set up for access to the stock exchanges. If you want to run a crypto trading fund, you can trade on decentralized exchanges and get leveraged from decentralized lending platforms. Everything just sort of plugs in and works, because it is built on a model of trustless blockchains and open access and public code.

+

In principle securities regulation could be similarly open, and in practice, locally, in most places, it is. There are rules about, for instance, when an activist shareholder has to disclose her position in a company and what information she needs to include; you can read those rules (or hire a lawyer to read them), and follow them, and that’s it. You don’t need to meet with the SEC to negotiate that disclosure; you just follow the publicly available, reasonably clear rules. (Or you don’t if you’re Elon Musk, but that’s another issue.) 

+

But there are also a lot of places in securities law where the rules are a little bit vague and you are operating a little bit on the cutting edge and the best practice is to pick up the phone and call the SEC staff and say “hey what do you think about this?” Sometimes this is fairly formalized: The SEC staff issues “no-action letters” (you send them a letter saying “is it okay if we do this,” and they send back a letter saying “if you do that, we probably won’t sue you,” which is almost as good as them saying “yes”) and “telephone interpretations” (you call them up and ask “is it okay if we do this,” they say “sure seems fine” or “no that’s bad,” and then they write down the question and answer so other people with the same question don’t have to ask it again). These are places where the rules are unclear, or they are clear but applying them as written would create bad results, so the solution is to ask the SEC “is it okay if we do this” and they just tell you.

+

Sometimes it’s less formal. Your lawyer calls an SEC lawyer and has an informal chat about the issues raised by whatever you’ve got cooking, and the SEC staff raises some concerns, and you work to address those concerns, and eventually the SEC staffers say “yeah this seems fine now” and you do it. And, as you’d expect, these sorts of informal contacts tend to work better for certain sorts of people. If you are a big firm who can hire good lawyers (perhaps ones who used to work at the SEC), that’s good. If you are a big incumbent who has a reputation for knowing what you’re doing, and a lot to lose if you mess up, that’s good. If you’re a couple of 20-somethings with no track record, it might be hard to get the SEC to take you seriously, and they might be suspicious of what you’re up to.

+

Many things in crypto are (1) on the cutting edge of securities regulation and (2) done by a couple of 20-somethings with no track record. So the offer of “come in and chat with the SEC” is less appealing to them than it would be to, you know, Goldman Sachs Group Inc.

+

Crypto people want rules! I don’t mean that they want to be regulated; I mean, specifically, that they want rules. They want published, objectively specified, open and transparent rules, so that everyone is on a level playing field to do crypto stuff that complies with whatever the rules are. I don’t mean that everyone in crypto wants that: Informal regulation favors the well-capitalized and the incumbent, and if you’re a big crypto firm on good terms with the SEC (which might be an empty set) you might prefer informality and opacity. I just mean that, philosophically, crypto people should want open transparent rules for permissionless innovation. That is how the crypto system is designed to work, and they should want the securities laws to work the same way. And in fact Coinbase Global Inc., which is maybe the closest thing the US crypto industry has to a big regulated incumbent, has sent the SEC a petition asking it to make rules for crypto securities. 

+

Temperamentally I do not think the SEC likes this, and I think that Gensler means what he says about “working directly with entrepreneurs,” and I think that this is a reasoned choice. Look at how crypto often works in practice. People write smart contracts with immutable public code, and then other people hack them to steal their money. That could be the SEC! If you are the SEC, and crypto people say “please write clear transparent rules so we know what is and isn’t allowed,” you might hear that as “please write clear transparent rules so that we can game them.” This would be a reasonable lesson for the SEC to take from (1) the history of crypto’s “code is law” philosophy ending in hacks, (2) the history of crypto firms ignoring the US securities laws, and for that matter (3) the history of traditional finance firms trying to game the SEC’s rules. Crypto is a wholly new area for US securities regulation, and if you try to write all the rules from scratch in one go you will get things wrong. And then people will ruthlessly exploit whatever you get wrong.

+

For the SEC, having the rules develop informally by a process of collaboration makes sense. Someone comes in and says “can we do X?” You meet them. You ask them questions. You look them in the eye. You look at their backgrounds and their backers and get a sense of whether they are good people. (The fact that they came to you suggests that they want to be compliant; people who just read the rules on their own might be dodging your scrutiny.) They tell you what they’re doing and you evaluate it and you say “sure yeah that seems fine, for you.” They go off and do it and you see if it works. If it works out okay, then you are a little bit more generous to the next person who walks into your office looking to do something similar. If it works out terribly, then you walk it back. You proceed incrementally, by trial and error, evaluating each request not just on how well it complies with the specific written rules but on what you think about the project, its promoters and their motivations. If some big regulated public company shows up at your office with a bunch of former SEC lawyers and asks to do a thing, you might let them. If two scruffy 20-somethings show up at your office with no lawyers at all and ask to do the same thing, you might not. These choices might be totally rational as a matter of investor protection and incremental development of the rules in a new area. 

+

Philosophically I sympathize with the crypto industry here: There should be clear rules that are open and available to everyone. Practically I am pretty sympathetic to the SEC. But mostly I just want to point out that there is a disconnect. And if your vision of crypto is about disrupting the traditional financial system, then this might look like the SEC protecting the traditional system from disruption. “Just come in and talk to us,” the SEC says, but you might hear that as “you can’t do anything in crypto without talking to us first.” 

+
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + +
+
+ + +

Twitter vote

+ + +
+

Twitter Inc.’s shareholders are voting today on whether to sell the company to Elon Musk at $54.20 per share. Twitter closed yesterday at $41.41 per share. There is not much suspense here. If you have stock that is worth $41.41 per share, and someone wants to buy it from you at $54.20, you should let him. Twitter is easily going to get its votes. + [1]  The Wall Street Journal reports:

+
+

Early votes show investors approving the deal by a wide margin, the people said, though there is always a chance that the results could change as shareholders can alter their votes through a meeting scheduled for Tuesday at 1 p.m. Eastern time.

+
+

I do not actually think there’s much chance that the results could change. If you are a Twitter shareholder, what could possibly happen between now and 1 p.m. that would make you not want to cash out at $54.20?

+

There are a few complications. One is that news is definitely happening about Twitter today. Peiter “Mudge” Zatko, Twitter’s former head of security who has turned whistle-blower, testified in Congress today about how bad Twitter’s security is. But nothing that he says is going to make Twitter shareholders less likely to vote for the deal. The worse Twitter is, the more excited you should be about getting $54.20 for your Twitter shares. If Zatko showed up at this hearing and said “actually Twitter’s security is great and they’ve discovered cold fusion” then I guess you should vote to keep your shares; in a world where Twitter is worth much more than $54.20 on its own, the vote will probably fail. But he didn’t say that.

+

Another complication is that, of course, voting to sell to Musk at $54.20 doesn’t mean it’ll actually happen. Musk has terminated the deal (three times!) because he claims that Twitter has breached some conditions and so he doesn’t have to actually buy it; a Delaware court will decide if he’s right about any of those things. I tend to think that he’s wrong and will have to close, but I don’t have especially huge confidence in that belief, and the market-implied odds aren’t that great, which is why the stock is trading at $41.41. Still, if you are a Twitter shareholder, you have to vote yes on the deal, because if everyone votes no then the deal is definitely dead; if shareholders don’t approve the deal, that gives Musk a fourth and unassailable reason for terminating it. + [2]  The shareholders voting to close the deal is a necessary but not sufficient condition to the deal closing. Which is why they’ll vote yes.

+

A third complication is that Twitter’s biggest shareholder is, uh, Elon Musk, + [3]  and he’s trying to get out of the deal. Could he vote his 9.5% stake in Twitter against the deal, thus preventing it from closing? Well. The merger agreement (section 6.2(d)) says that he has to vote in favor of the deal, but he claims to have terminated the agreement (three times!) so perhaps he no longer feels bound by that, and it is a bit awkward for him to vote yes on a deal that he wants to get out of. What will he do? Eh, it doesn’t really matter; I’m pretty sure that Twitter is going to get a huge majority and won’t actually need Musk’s votes.

+
+ + +

Twitter whistle-blower

+ + +
+

Surely the highest-variance aspect of the Twitter vs. Musk saga is Zatko’s whistle-blower complaint. If Zatko can make a compelling case that Twitter is horribly bad — that its information security is so bad that it violates the law, that it has fraudulently concealed its problems, etc. — then that is probably Musk’s best argument to get out of the deal: Twitter is doing fraud, it has suffered a material adverse effect, etc. If Zatko is just a run-of-the-mill paranoid security researcher who is aggrieved about being fired and making mountains out of molehills, then his complaint will quickly be kicked out of court and won’t affect the Musk deal. Zatko’s credibility — whether he’s telling the truth, and also whether he is exaggerating or underselling the importance of Twitter’s problems — is a key input into your evaluation of Twitter’s stock value. The more credible he is, the less likely it is that Twitter will get $54.20 per share, and the less Twitter will be worth without Musk’s deal.

+

So if you are a hedge fund, or an expert-network firm working on behalf of hedge funds, you obviously want to know how credible he is. You might, for instance, want to talk to some of his old coworkers to get a feel for him. You might offer to pay them a lot of money for a one-hour phone call, because you might have a lot of money riding on the Twitter deal, which means specifically that you have a lot of money riding on your evaluation of Zatko’s credibility.

+

At the New Yorker, Ronan Farrow has a story on “The Search for Dirt on the Twitter Whistle-Blower”:

+
+

The dozens of e-mails and LinkedIn messages received by people in Zatko’s professional orbit appeared to be mostly from research-and-advisory companies, part of a burgeoning industry whose clients include investment firms and individuals jockeying for financial advantage through information. At least six research outfits—Gerson Lehrman Group (G.L.G.), AlphaSights, Mosaic Research Management, Ridgetop Research, Coleman Research Group, and Guidepoint—approached former colleagues of Zatko’s at Stripe, Google, and the Pentagon research agency DARPA. All offered to pay for information, sometimes noting that the compensation would be high or apparently unrestricted. At least two investment firms, Farallon Capital Management L.L.C. and Pentwater Capital Management L.P., also sought information from individuals close to Zatko.

+
+

I have to say that Farrow, and Zatko’s former coworkers, seem a lot more shocked by this than I am. Yes, right now, for a series of weird reasons, information about whether Peiter Zatko is or is not a good guy is incredibly valuable to hedge funds, and they will pay “high or apparently unrestricted” amounts of money for some informal chats with his former colleagues about their impressions of the guy. Sometimes that is how financial markets work. You get paid for incorporating information into prices. 

+

That said I particularly enjoyed this reaction:

+
+

Two members of Musk’s team, who asked not to be named, owing to the sensitivity of the ongoing litigation, said that they also had no connection to the inquiries. “There’s a lot of hedge funds currently betting that the deal flows. And so they’re doing everything they possibly can to undermine that not happening,” one of them told me. “It’s obviously wrong. You can’t discredit a witness, as opposed to listening to what he has to say and taking seriously these security threats. . . . That should be the priority, not making a buck.”

+
+

Yeah no of course, right, Elon Musk’s priority in evaluating Zatko’s complaint is solely about “taking seriously these security threats”; he has no economic interest at all in Zatko’s credibility and is just dispassionately following the truth wherever it leads.

+
+ + +

People are worried about bond market liquidity

+ + +
+

This theme is having a nice little comeback:

+
+

Pacific Investment Management Co. is advocating a radical solution to fix the liquidity woes plaguing the world of bonds: The entire $23.7 trillion Treasury market should move to a model where investors can transact directly with each other -- reducing their unhealthy dependence on balance-sheet-constrained banks.

+

Among other suggestions, a report from the nearly $2 trillion asset manager urges Janet Yellen’s Treasury Department and other regulators to help create alternative avenues that would allow traders to find buyers and sellers when the primary dealers who normally handle large orders are unable to do so.

+

“We would like the entire Treasury market to move to all-to-all trading -- a platform where asset managers, dealers, and non-bank liquidity providers are able to trade on a level playing field, with equal access to information,” wrote Pimco’s Libby Cantrill, Tim Crowley, Jerry Woytash, Jerome Schneider and Rick Chan. “The vast majority of the bond market, including most parts of the Treasury market, liquidity remains intermediated, making the market more fragile, less liquid, and more susceptible to shocks.”

+
+

Here is the report. When I was young and naive, I thought that “all-to-all trading” meant that big asset managers like Pimco would want to sell bonds, and big asset managers like BlackRock Inc. would want to buy bonds, and they would meet on some sort of exchange platform and trade bonds with each other. But the stock market is all-to-all, and it’s mostly big asset managers trading stocks with intermediaries: High-frequency traders buy from the sellers and sell to the buyers. I suppose it’s more electronic and competitive — the HFTs are largely “non-bank liquidity providers” — but still, it’s not easy to get rid of middlemen.

+
+ + +

How M&A happens

+ + +
+

Last week Anthony Scaramucci’s SkyBridge Capital announced that Sam Bankman-Fried’s FTX Ventures would acquire 30% of SkyBridge; the deal apparently also includes an option for FTX to buy 85% of SkyBridge. From the outside it is not hard to guess at the motivations of the principals. Bankman-Fried has lots of money and has been an opportunistic acquirer in a crypto bear market; buying SkyBridge presumably gives him some more mainstream distribution for crypto products. Scaramucci has had a rough year and needs the money; the Financial Times reports:

+
+

Scaramucci said that the FTX deal was a product of poor performance in a poor market. SkyBridge, which has $2.8bn in assets under management, is down 25 per cent this year, he said.

+

“Bear markets suck,” he added. “If I was doing super-well right now — our performance is mediocre, lacklustre — who knows if we would be doing the transaction.”

+
+

But there was also another motivation. The FT article goes on:

+
+

Scaramucci said the transaction was decided over a two-hour lunch at a hotel in the Bahamas, where Bankman-Fried is based. Scaramucci was with his family on a Disney cruise that had docked in the islands.

+

He said he proposed lunch to discuss the possibility of a partnership, as well as to avoid going to a water park with his children.

+
+

What percentage of mergers and acquisitions do you think are driven by people trying to avoid spending time with their children? 

+
+ + +

Things happen

+ + +
+

US Inflation Tops Forecasts, Cementing Odds of Big Fed Hike. Congresspeople just love trading individual stocks. U.S. Banks Lost a Record $370 Billion in Deposits Last Quarter. How Wall Street stormed the music business. Wall Street-Backed Crypto Exchange EDX Markets Is Set for November Debut. KKR Makes Piece of PE Fund Available on Public Blockchain. Fidelity Weighs Bitcoin Trading on Brokerage Platform. SEC Charges VMware with Misleading Investors by Obscuring Financial Performance. Tippee Pleads Guilty In First Ever Cryptocurrency Insider Trading Case. Beware Ryan Cohen, the Meme-Stock King. The Billionaire Hedge Fund Manager Who Wants to Build NFL Rosters.

+

+ If you'd like to get Money Stuff in handy email form, right in your inbox, please subscribe at this link. Or you can subscribe to Money Stuff and other great Bloomberg newsletters here. Thanks! +

+

[1] This is different from Digital World Acquisition Corp., the special purpose acquisition company that has a deal to buy Donald Trump’s social media company and can’t get the votes to extend the deadline to complete that deal, for a couple of reasons. The main one is probably that Twitter is owned by index funds, merger arbitrageurs and other institutions, while DWAC is mainly owned by retail Trump enthusiasts, who tend not to vote. But also voting on a merger is slightly more salient than voting on a necessary extension to complete that merger. “Do you want $54.20” is a simple question; “do you want to delay a year to have a good chance of getting $25-ish of value rather than getting $10.20 next week” is more confusing.

+

[2] See section 8.1(b)(iii) of the merger agreement, which unlike some of Musk’s other termination rights is not qualified by the requirement that *he* not be in breach of his obligations.

+

[3] The link in that sentence goes to Twitter’s merger proxy, which lists Vanguard Group as the biggest shareholder, a footnote cites to an April 8 Vanguard filing for Vanguard’s holdings. Bloomberg’s HDS page shows Vanguard disposing of some shares after that filing but before the record date for the Twitter meeting, leaving Musk as the biggest shareholder. Either way it’s close though.

+ + +
+ + + + + + + + +
+ + + +
+

+ Like getting this newsletter? Subscribe to Bloomberg.com for unlimited access to trusted, data-driven journalism and subscriber-only insights. +

+

+ Before it’s here, it’s on the Bloomberg Terminal. Find out more about how the Terminal delivers information and analysis that financial professionals can’t find anywhere else. Learn more. +

+
+ + + +
+ + + +
+
\ No newline at end of file diff --git a/packages/readabilityjs/test/test-pages/newsletters/money-stuff/source.html b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/source.html new file mode 100644 index 000000000..64eae21a5 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/source.html @@ -0,0 +1,2174 @@ + + + + + + Money Stuff + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ I wrote last Thursday about a speech that Gary Gensler, the chair of + the US Securities and Exchange Commission, gave about securities + regula +
+
+ + + + +
+ + + +
+ + + + + + + + + + + + + +
+ + + + +
+ + + + +
+

+ Crypto rules +

+
+

+ I + + wrote last Thursday + about a speech that Gary Gensler, the chair of the US + Securities and Exchange Commission, gave about securities + regulation and crypto. My basic point was that Gensler wants + the SEC to have jurisdiction over basically all of crypto, + because basically every crypto token is a security, but that + he does not seem to have any interest in writing new rules to + accommodate the crypto market. Gensler’s approach would put + the SEC in charge of crypto, and then more or less ban crypto, + and I am not sure that is a winning position for him to take. +

+

+ Today I want to come back to one bit of + + Gensler’s speech + that I think represents an important philosophical disconnect + between the SEC and the crypto world. Gensler said: +

+
+

+ I’ve asked the SEC staff to work directly with entrepreneurs + to get their tokens registered and regulated, where + appropriate, as securities. ... +

+

+ Given the nature of crypto investments, I recognize that it + may be appropriate to be flexible in applying existing + disclosure requirements. Tailored disclosures exist + elsewhere — for example, asset-backed securities disclosure + differs from that for equities. +

+
+

+ What I said on Thursday was that the SEC does not seem to have + actually been doing any of that tailoring. I wrote: +

+
+

+ The SEC has been suing crypto projects for illegally issuing + securities for about five years now, but in that time it has + not issued any rules, or proposed any rules, or put anything + on its rulemaking agenda, about adapting the securities + disclosure rules to crypto projects. +

+
+

+ But arguably that slightly misrepresents what Gensler said. He + didn’t say “I have asked the staff to + write rules that will let entrepreneurs register + tokens.” He said “I’ve asked the SEC staff to + work directly with entrepreneurs to get their tokens + registered.” Gensler’s paradigm is not that the SEC will write + rules, and you can read them and follow them and register your + tokens. The paradigm is that you walk into the SEC’s office + and say “here’s a token, can you help me figure out how to + register it,” and they do. There was no suggestion of new + rules, but of good customer service in adapting, interpreting + or perhaps waiving old rules. +

+

+ Now. One objection to this might be that it’s empirically + untrue; certainly lots of crypto entrepreneurs think that the + SEC is very unhelpful in helping them figure out how + to comply with existing rules. The stereotype is that, if you + walk into the SEC to ask about doing a compliant crypto thing, + you either get + + told not to do it at all, or you find a path to doing it legally but you have to pay a big fine first. The incentives are bad. +

+

+ But here I want to focus on a different objection. The + objection that I want to make here is that Gensler’s offer + — “come talk to us and maybe we can be flexible to adapt the + rules and figure out a way to register your tokens” — is not + what crypto people want, even if he really means it. +

+

+ The ethos of crypto is about decentralization and public code. + You can read the Ethereum white paper and related standards + and learn about how Ethereum works and then go off and build a + decentralized options exchange or a lending platform or a + pyramid scheme or whatever else you want on Ethereum. You + don’t have to set up a meeting with Vitalik Buterin and get + his approval; you just do it. The requirements are open and + public, and if you meet them you can do what you want. +

+

+ This is something that crypto people take seriously. People + talk about “permissionless innovation,” and about how easy it + is to build new businesses in crypto compared to the legacy + financial system. If you are a young person with an idea for a + crypto product, you can code it up and make it work with + existing blockchains and protocols. Everyone has the same + access to the blockchain as everyone else; everything is set + up, by default, to work for everybody. If you want to run a + stock trading fund, you can spend months negotiating credit + terms with a prime broker and getting set up for access to the + stock exchanges. If you want to run a crypto trading fund, you + can trade on decentralized exchanges and get leveraged from + decentralized lending platforms. Everything just sort of plugs + in and works, because it is built on a model of trustless + blockchains and open access and public code. +

+

+ In principle securities regulation could be similarly open, + and in practice, locally, in most places, it is. There are + rules about, for instance, when an activist shareholder has to + disclose her position in a company and what information she + needs to include; you can read those rules (or hire a lawyer + to read them), and follow them, and that’s it. You don’t need + to meet with the SEC to negotiate that disclosure; you just + follow the publicly available, reasonably clear rules. (Or + + you don’t if you’re Elon Musk, but that’s another issue.)  +

+

+ But there are also a lot of places in securities law where the + rules are a little bit vague and you are operating a little + bit on the cutting edge and the best practice is to pick up + the phone and call the SEC staff and say “hey what do you + think about this?” Sometimes this is fairly formalized: The + SEC staff issues “no-action letters” (you send them a letter saying “is it okay if we do this,” + and they send back a letter saying “if you do that, we + probably won’t sue you,” which is almost as good as them + saying “yes”) and “telephone interpretations” (you call them up and ask “is it okay if we do this,” they + say “sure seems fine” or “no that’s bad,” and then they write + down the question and answer so other people with the same + question don’t have to ask it again). These are places where + the rules are unclear, or they are clear but applying + them as written would create bad results, so the solution is + to ask the SEC “is it okay if we do this” and they just tell + you. +

+

+ Sometimes it’s less formal. Your lawyer calls an SEC lawyer + and has an informal chat about the issues raised by whatever + you’ve got cooking, and the SEC staff raises some concerns, + and you work to address those concerns, and eventually the SEC + staffers say “yeah this seems fine now” and you do it. And, as + you’d expect, these sorts of informal contacts tend to work + better for certain sorts of people. If you are a big firm who + can hire good lawyers (perhaps ones who used to work at the + SEC), that’s good. If you are a big incumbent who has a + reputation for knowing what you’re doing, and a lot to lose if + you mess up, that’s good. If you’re a couple of 20-somethings + with no track record, it might be hard to get the SEC to take + you seriously, and they might be suspicious of what you’re up + to. +

+

+ Many things in crypto are (1) on the cutting edge of + securities regulation and (2) done by a couple of + 20-somethings with no track record. So the offer of “come in + and chat with the SEC” is less appealing to them than it would + be to, you know, Goldman Sachs Group Inc. +

+

+ Crypto people want rules! I don’t mean that they want to be + regulated; I mean, specifically, that they + want rules. They want published, objectively + specified, open and transparent rules, so that everyone is on + a level playing field to do crypto stuff that complies with + whatever the rules are. I don’t mean that everyone in + crypto wants that: Informal regulation favors the + well-capitalized and the incumbent, and if you’re a big crypto + firm on good terms with the SEC (which might be an empty set) + you might prefer informality and opacity. I just mean that, + philosophically, crypto people should want open + transparent rules for permissionless innovation. That is how + the crypto system is designed to work, and they should want + the securities laws to work the same way. And in fact Coinbase + Global Inc., which is maybe the closest thing the US crypto + industry has to a big regulated incumbent, has + sent the SEC a petition + asking it to make rules for crypto securities.  +

+

+ Temperamentally I do not think the SEC likes this, and I think + that Gensler means what he says about “working directly with + entrepreneurs,” and I think that this is a reasoned choice. + Look at how crypto often works in practice. People write smart + contracts with immutable public code, and then other people + + hack them + to steal their money. That could be the SEC! If you are the + SEC, and crypto people say “please write clear transparent + rules so we know what is and isn’t allowed,” you might hear + that as “please write clear transparent rules so that we can + game them.” This would be a reasonable lesson for the SEC to + take from (1) the history of crypto’s “code is law” philosophy + ending in hacks, (2) the history of crypto firms ignoring the + US securities laws, and for that matter (3) the history of + traditional finance firms trying to game the SEC’s rules. + Crypto is a wholly new area for US securities regulation, and + if you try to write all the rules from scratch in one go you + will get things wrong. And then people will ruthlessly exploit + whatever you get wrong. +

+

+ For the SEC, having the rules develop informally by a process + of collaboration makes sense. Someone comes in and says “can + we do X?” You meet them. You ask them questions. You look them + in the eye. You look at their backgrounds and their backers + and get a sense of whether they are good people. (The + fact that they came to you suggests that they want to + be compliant; people who just read the rules on their own + might be dodging your scrutiny.) They tell you what they’re + doing and you evaluate it and you say “sure yeah that seems + fine, for you.” They go off and do it and you see if it works. + If it works out okay, then you are a little bit more generous + to the next person who walks into your office looking to do + something similar. If it works out terribly, then you walk it + back. You proceed incrementally, by trial and error, + evaluating each request not just on how well it complies with + the specific written rules but on what you think about the + project, its promoters and their motivations. If some big + regulated public company shows up at your office with a bunch + of former SEC lawyers and asks to do a thing, you might let + them. If two scruffy 20-somethings show up at your office with + no lawyers at all and ask to do the same thing, you might not. + These choices might be totally rational as a matter of + investor protection and incremental development of the rules + in a new area.  +

+

+ Philosophically I sympathize with the crypto industry here: + There should be clear rules that are open and available to + everyone. Practically I am pretty sympathetic to the SEC. But + mostly I just want to point out that there is a disconnect. + And if your vision of crypto is about disrupting the + traditional financial system, then this might look like the + SEC protecting the traditional system from disruption. “Just + come in and talk to us,” the SEC says, but you might hear that + as “you can’t do anything in crypto without talking to us + first.”  +

+ + + + + + + +
+ + + +
+ +
+ + + + +
+ + + +
+
+ +
+ + + + + + + +
+ + + +
+ +
+ + + + +
+ + + +
+
+ +
+ + + + +
+

+ Twitter vote +

+
+

+ Twitter Inc.’s shareholders are voting today on whether to + sell the company to Elon Musk at $54.20 per share. Twitter + closed yesterday at $41.41 per share. There is not much + suspense here. If you have stock that is worth $41.41 per + share, and someone wants to buy it from you at $54.20, you + should let him. Twitter is easily going to get its votes. + [1]  The + + Wall Street Journal reports: +

+
+

+ Early votes show investors approving the deal by a wide + margin, the people said, though there is always a chance + that the results could change as shareholders can alter + their votes through a meeting scheduled for Tuesday at 1 + p.m. Eastern time. +

+
+

+ I do not actually think there’s much chance that the results + could change. If you are a Twitter shareholder, what could + possibly happen between now and 1 p.m. that would make + you not want to cash out at $54.20? +

+

+ There are a few complications. One is that news is definitely + happening about Twitter today. Peiter “Mudge” Zatko, Twitter’s + former head of security who has turned whistle-blower, + testified in Congress today about how bad Twitter’s security is. But nothing that + he says is going to make Twitter + shareholders less likely to vote for the deal. The + worse Twitter is, the more excited you should be about getting + $54.20 for your Twitter shares. If Zatko showed up at this + hearing and said “actually Twitter’s security is great and + they’ve discovered cold fusion” then I guess you should vote + to keep your shares; in a world where Twitter is worth much + more than $54.20 on its own, the vote will probably fail. But + he didn’t say that. +

+

+ Another complication is that, of course, voting to sell to + Musk at $54.20 doesn’t mean it’ll actually happen. Musk has + terminated the deal (three times!) because he claims that Twitter has breached some conditions + and so he doesn’t have to actually buy it; a Delaware court + will decide if he’s right about any of those things. I tend to + think that he’s wrong and will have to close, but I don’t have + especially huge confidence in that belief, and the + market-implied odds aren’t that great, which is why the stock + is trading at $41.41. Still, if you are a Twitter shareholder, + you have to vote yes on the deal, because if everyone votes no + then the deal is definitely dead; if shareholders + don’t approve the deal, that gives Musk a fourth and + unassailable reason for terminating it. + [2]  The shareholders voting to close the deal is a necessary but + not sufficient condition to the deal closing. Which is why + they’ll vote yes. +

+

+ A third complication is that Twitter’s + + biggest shareholder + is, uh, Elon Musk, + [3]  and he’s trying to get out of the deal. Could he vote his + 9.5% stake in Twitter against the deal, thus + preventing it from closing? Well. The merger agreement (section 6.2(d)) says that he has to vote in favor of the deal, but he + claims to have terminated the agreement (three times!) so + perhaps he no longer feels bound by that, and it is a bit + awkward for him to vote yes on a deal that he wants to get out + of. What will he do? Eh, it doesn’t really matter; I’m pretty + sure that Twitter is going to get a huge majority and won’t + actually need Musk’s votes. +

+ + + + +
+ + + +
+ + + + +
+

+ Twitter whistle-blower +

+
+

+ Surely the + + highest-variance aspect + of the Twitter vs. Musk saga is Zatko’s whistle-blower + complaint. If Zatko can make a compelling case that Twitter is + horribly bad — that its information security is so bad that it + violates the law, that it has fraudulently concealed its + problems, etc. — then that is probably Musk’s best argument to + get out of the deal: Twitter is doing fraud, it has suffered a + material adverse effect, etc. If Zatko is just a + run-of-the-mill paranoid security researcher who is aggrieved + about being fired and making mountains out of molehills, then + his complaint will quickly be kicked out of court and won’t + affect the Musk deal. Zatko’s credibility — whether he’s + telling the truth, and also whether he is exaggerating or + underselling the importance of Twitter’s problems — + is a key input into your evaluation of Twitter’s stock value. + The more credible he is, the less likely it is that Twitter + will get $54.20 per share, and the less Twitter will be worth + without Musk’s deal. +

+

+ So if you are a hedge fund, or an expert-network firm working + on behalf of hedge funds, you obviously want to know how + credible he is. You might, for instance, want to talk to some + of his old coworkers to get a feel for him. You might offer to + pay them a lot of money for a one-hour phone call, because you + might have a lot of money riding on the Twitter deal, which + means specifically that you have a lot of money riding on your + evaluation of Zatko’s credibility. +

+

+ At the New Yorker, Ronan Farrow has a story on “The Search for Dirt on the Twitter Whistle-Blower”: +

+
+

+ The dozens of e-mails and LinkedIn messages received by + people in Zatko’s professional orbit appeared to be mostly + from research-and-advisory companies, part of a burgeoning + industry whose clients include investment firms and + individuals jockeying for financial advantage through + information. At least six research outfits—Gerson Lehrman + Group (G.L.G.), AlphaSights, Mosaic Research Management, + Ridgetop Research, Coleman Research Group, and + Guidepoint—approached former colleagues of Zatko’s at + Stripe, Google, and the Pentagon research agency DARPA. All + offered to pay for information, sometimes noting that the + compensation would be high or apparently unrestricted. At + least two investment firms, Farallon Capital Management + L.L.C. and Pentwater Capital Management L.P., also sought + information from individuals close to Zatko. +

+
+

+ I have to say that Farrow, and Zatko’s former coworkers, seem + a lot more shocked by this than I am. Yes, right now, for a + series of weird reasons, information about whether + Peiter Zatko is or is not a good guy is incredibly valuable to + hedge funds, and they will pay “high or apparently + unrestricted” amounts of money for some informal chats with + his former colleagues about their impressions of the guy. + Sometimes that is how financial markets work. You get paid for + incorporating information into prices.  +

+

+ That said I particularly enjoyed this reaction: +

+
+

+ Two members of Musk’s team, who asked not to be named, owing + to the sensitivity of the ongoing litigation, said that they + also had no connection to the inquiries. “There’s a lot of + hedge funds currently betting that the deal flows. And so + they’re doing everything they possibly can to undermine that + not happening,” one of them told me. “It’s obviously wrong. + You can’t discredit a witness, as opposed to listening to + what he has to say and taking seriously these security + threats. . . . That should be the priority, not making a + buck.” +

+
+

+ Yeah no of course, right, Elon Musk’s priority in evaluating + Zatko’s complaint is solely about “taking seriously these + security threats”; he has no economic interest at all in + Zatko’s credibility and is just dispassionately following the + truth wherever it leads. +

+ + + + +
+

+ People are worried about bond market liquidity +

+
+

+ This theme is + + having a nice little comeback: +

+
+

+ Pacific Investment Management Co. is advocating a radical + solution to fix the liquidity woes plaguing the world of + bonds: The entire $23.7 trillion Treasury market should move + to a model where investors can transact directly with each + other -- reducing their unhealthy dependence on + balance-sheet-constrained banks. +

+

+ Among other suggestions, a report from the nearly $2 + trillion asset manager urges Janet Yellen’s Treasury + Department and other regulators to help create alternative + avenues that would allow traders to find buyers and sellers + when the primary dealers who normally handle large orders + are unable to do so. +

+

+ “We would like the entire Treasury market to move to + all-to-all trading -- a platform where asset managers, + dealers, and non-bank liquidity providers are able to trade + on a level playing field, with equal access to information,” + wrote Pimco’s Libby Cantrill, Tim Crowley, Jerry Woytash, + Jerome Schneider and Rick Chan. “The vast majority of the + bond market, including most parts of the Treasury market, + liquidity remains intermediated, making the market more + fragile, less liquid, and more susceptible to shocks.” +

+
+

+ Here is + + the report. When I was young and naive, I thought that “all-to-all + trading” meant that big asset managers like Pimco would want + to sell bonds, and big asset managers like BlackRock Inc. + would want to buy bonds, and they would meet on some sort of + exchange platform and trade bonds with each other. But the + stock market is all-to-all, and it’s mostly big asset managers + trading stocks with intermediaries: High-frequency traders buy + from the sellers and sell to the buyers. I suppose it’s more + electronic and competitive — the HFTs are largely “non-bank + liquidity providers” — but still, it’s not easy to get rid of + middlemen. +

+ + + + +
+

+ How M&A happens +

+
+

+ Last week Anthony Scaramucci’s SkyBridge Capital + + announced + that Sam Bankman-Fried’s FTX Ventures would acquire 30% of + SkyBridge; the deal apparently also includes an option for FTX + to buy 85% of SkyBridge. From the outside it is not hard to + guess at the motivations of the principals. Bankman-Fried has + lots of money and has been an opportunistic acquirer in a + crypto bear market; buying SkyBridge presumably gives him some + more mainstream distribution for crypto products. Scaramucci + has had a rough year and needs the money; + + the Financial Times reports: +

+
+

+ Scaramucci said that the FTX deal was a product of poor + performance in a poor market. SkyBridge, which has $2.8bn in + assets under management, is down 25 per cent this year, he + said. +

+

+ “Bear markets suck,” he added. “If I was doing super-well + right now — our performance is mediocre, lacklustre — who + knows if we would be doing the transaction.” +

+
+

+ But there was also another motivation. The FT article goes on: +

+
+

+ Scaramucci said the transaction was decided over a two-hour + lunch at a hotel in the Bahamas, where Bankman-Fried is + based. Scaramucci was with his family on a Disney cruise + that had docked in the islands. +

+

+ He said he proposed lunch to discuss the possibility of a + partnership, as well as to avoid going to a water park with + his children. +

+
+

+ What percentage of mergers and acquisitions do you think are + driven by people trying to avoid spending time with their + children?  +

+ + + + +
+

+ Things happen +

+
+

+ US + + Inflation + Tops Forecasts, Cementing Odds of Big Fed Hike. Congresspeople + just love + + trading individual stocks. U.S. Banks Lost a Record + + $370 Billion in Deposits + Last Quarter. How Wall Street stormed + + the music business. Wall Street-Backed Crypto Exchange + + EDX Markets + Is Set for November Debut. KKR Makes Piece of PE Fund + Available + + on Public Blockchain. Fidelity Weighs + + Bitcoin Trading + on Brokerage Platform. SEC Charges + + VMware + with Misleading Investors by Obscuring Financial Performance. + Tippee Pleads Guilty In First Ever + + Cryptocurrency Insider Trading Case. Beware + + Ryan Cohen, the Meme-Stock King. The Billionaire Hedge Fund Manager Who + Wants to Build NFL Rosters. +

+

+ If you'd like to get Money Stuff in handy email form, + right in your inbox, please subscribe at this link. Or you can subscribe to Money Stuff and other great + Bloomberg newsletters + here. Thanks! +

+
+

+ [1] This is different from Digital World Acquisition Corp., + the special purpose acquisition company that has a deal to + buy Donald Trump’s social media company and + + can’t get the votes + to extend the deadline to complete that deal, for a couple + of reasons. The main one is probably that Twitter is owned + by index funds, merger arbitrageurs and other institutions, + while DWAC is mainly owned by retail Trump enthusiasts, who + tend not to vote. But also voting on a merger is slightly + more salient than voting on a necessary extension to + complete that merger. “Do you want $54.20” is a simple + question; “do you want to delay a year to have a good chance + of getting $25-ish of value rather than getting $10.20 next + week” is more confusing. +

+
+
+

+ [2] See section 8.1(b)(iii) of + + the merger agreement, which unlike some of Musk’s other termination rights is + not qualified by the requirement that *he* not be in breach + of his obligations. +

+
+
+

+ [3] The link in that sentence goes to Twitter’s merger + proxy, which lists Vanguard Group as the biggest + shareholder, a footnote cites to an April 8 Vanguard filing + for Vanguard’s holdings. Bloomberg’s HDS page shows Vanguard + disposing of some shares after that filing but before the + record date for the Twitter meeting, leaving Musk as the + biggest shareholder. Either way it’s close though. +

+
+
+
+ + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + +
+ + + + diff --git a/packages/readabilityjs/test/test-pages/newsletters/money-stuff/url.txt b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/url.txt new file mode 100644 index 000000000..a5ad7feb9 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/money-stuff/url.txt @@ -0,0 +1 @@ +https://www.bloomberg.com/opinion/articles/2022-09-13/crypto-wants-some-sec-rules diff --git a/packages/readabilityjs/test/test-pages/newsletters/substack/expected-metadata.json b/packages/readabilityjs/test/test-pages/newsletters/substack/expected-metadata.json new file mode 100644 index 000000000..7cdc14db4 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/substack/expected-metadata.json @@ -0,0 +1,10 @@ +{ + "title": "Tic's Weekly Thoughts", + "byline": "Tic Toc Trading", + "dir": null, + "excerpt": "Traders-", + "siteName": null, + "publishedDate": "2001-01-28T16:00:00.000Z", + "language": "English", + "readerable": true +} diff --git a/packages/readabilityjs/test/test-pages/newsletters/substack/expected.html b/packages/readabilityjs/test/test-pages/newsletters/substack/expected.html new file mode 100644 index 000000000..6180c673c --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/substack/expected.html @@ -0,0 +1,281 @@ +
+
+
+

Parts Unknown...

+
+
+

Traders-

+

I was bullish this week at 4200/4300 with the view the market may balance between 4200 and 4500 for quite some time and I was quite right in this assumption as the market made multiple attempts to take out 4200 and failed each time.

+

This week’s installment of the Weekly Plan I will try to figure out if this assumption still stands, various factors that support this assumptions as well as the factors which may be indicating that there may be more sell off coming ahead.

+

+ Note this is a preview post from my substack where I do a longer form analysis about 5 times a week. Click the link below to become a part of my emails to get a copy whenever they are published. I will never-ever spam you. That is a promise. +

+
+
+
+ + + + + + + + + +
+
NFP on Friday
+
+
+

+ Image above is from "The Week" +

+

Without much ado, let us dive into the chart of S&P500 Emini (Chart A). This is the 5 auctions of this past week, each graphically representing the frustrations of sellers as they tried to break the lows. Each one of these levels and my context was shared in 5 Daily newsletters this past week. Posts are sent every day around 4 PM, after market close.

+

From a 10000 feet view, this chart below shows me while the lows were fought bitterly for and won by the bulls, the bulls are not necessarily out of the danger here yet. Read on to find out why I think so.

+
+
+
+ + + + + + + + + +
+
+ Chart A Emini Daily Profiles, 5 Days +
+
+
+

More than half of the Nasdaq stocks have been cut in half in market cap. Majority, as many as 75-80% are now trading below their 200 DMA . These stats are not exactly the cheerleaders of strong bull markets, if any thing they showcase the carnage that has been done and portends possibly more.

+

See below chart B for the 5 Day Auction in erstwhile momentum sweetheart $ARKK. Cathie and her ETF has fallen from graces and is now in the dumps. I was bear on this at 125 and is now cut in half, last traded lows around 65 bucks.

+

Can it rise from here? This profile chart certainly seems to indicate that to me. But not without a fight, and a little help from the FED.

+
+
+
+ + + + + + + + + +
+
+ Chart B ARKK Daily Auction +
+
+
+

Fundamentals and earnings aside, S&P500 is impacted by nothing more than geopolitics and FED liquidity or lack thereof. 10 year yields are a very good indicator of FED tightening or easing. And I use TLT quite a bit as a gauge of this.

+

TLT has been stubborn to trade below that vaunted 140 all this week, rallying on Friday, and taking the equities with it. This chart C certainly suggests there may be more juice to this.

+
+
+
+ + + + + + + + + +
+
Chart C TLT Auctions
+
+
+

Last but not the least, here is the actual ten year bond yields.. Still elevated but down from the highs. I have a theory about where these end up for most of the year, read on more to find out.

+
+
+
+ + + + + + + + + +
+
Chart D 10 year yields cool off the highs
+
+
+

Friday was a very good day for the equities. Capping off a tumultuous week. It reinforced my opinion that prices below 4200 will be harder to achieve per my trade plans from last week. I turned out to be right and we closed right above the 200 DMA at 4425. Here is the link to my trade plan from last week, in case you have not read it yet: PAST WEEKLY PLAN +

+

Looking ahead, I am cautiously bullish into dips. At this point in time, I do not see evidence that suggests there will be earth shattering moves either on the downside or to the upside.

+

My current thinking is that we could balance here between 4200-4500 for few more days before a break higher into 4600-4700. Remember my thinking is not informed by any charts or technical analysis but it is heavily influenced by the order flow. These are the actual orders that hit the tape every day. Order flow can and does change at any time due to macro factors or sudden events. Therefore my opinion can change at any time as a result. However, if we assume the current factors stay in homeostasis, then I have no reason to suspect 4200-4500 thesis is not intact this coming week.

+

+ These are the main factors which I think support bullish action: +

+
    +
  1. +

    + Seasonality: this is the tax season. There is a natural tailwind for stocks due to various type of tax events, whether that is 401, IRA contributions or rebalancing. +

    +
  2. +
  3. +

    + Money Velocity: while CPI has run rampant, the money supply has been in the dumps. This suggests the inflation problem is more demand driven than systemic. Think of money velocity as how many times the same dollar bill changes hands. When the same dollar bill goes from person to person or business to business, several times, it creates more money velocity and IMO those type of movement create persistent inflation problems like we had in the 1980s. +

    +
    +
    +
    + + + + + + + + + +
    +
    M2 Velocity
    +
    +
    +
  4. +
  5. +

    + Current inflation situation is due in most part to destruction of supply channels. Demand is there but for how long is any one’s guess. I see as more and more coronavirus restrictions are taken off, the supply may overwhelm the system, driving down the prices. That may be next month, that may be months from now. However looking at mid terms and political scene, I think that is closer than you think. +

    +
  6. +
  7. +

    + Valuations: Valuations of some of the bellwether stocks like GOOGL, have already been cut down quite a bit! It is trading at a forward p/e of 19 and I thought at 2500 it was ridiculous! So there is that… yes more sell may come but once GOOGL starts trading at 2300-2500 you oughta think, “man this is silly!” +

    +
  8. +
  9. +

    + Ten year yields have come off the highs. I think they will find a balance between 1.7-2 % and that will not be too extreme for the equities. +

    +
  10. +
+

+ Then there are factors which are potentially bearish: +

+
    +
  1. +

    + FED FED FED: despite the uncertainty around inflation, Powell was adamant about pulling liquidity out of the system . FED is the ultimate LP (liquidity provider) . No liquidity = no stock market. Less liquidity = lesser stock market. I think the way a lot of funds read him is he wants lower stock prices. Lower stock prices are deflationary by nature . So even though the inflation may cool down, if enough people believe Powell wants lower stock market that becomes a self fulfilling prophecy. +

    +
  2. +
  3. +

    + Technical damage: S&P500 is within an inch of 200 DMA. It may take lot more than one or two closed above 4410 for calm to return. +

    +
  4. +
+

+ Key events next week: +

+
    +
  • +

    Monday: Chicago PMI and FED Speak.

    +
  • +
  • +

    Tuesday: JOLTS and ISM

    +
  • +
  • +

    Wednesday: ADP pre NFP

    +
  • +
  • +

    Friday: Non FARM Payroll Report (NFP) AND Wage Inflation numbers.

    +
  • +
+

The theme of these events for me will be to see if we are beginning to see the inflation numbers come down or are they still surprising to the upside. Same for wage inflation numbers. With regards to actual job growth, I think we are now in a phase of market where good news is bad for stocks and bad news is good for stocks. So any miss in the NFP number may be perceived to be good for stocks .

+

Expectation is 166 K jobs added.

+

With this context and background, here is how I am technically preparing for next week’s trading:

+

I suspect Friday’s late rally was driven by short squeeze. If so, we may find sellers here at 4430-4454. Key level for me for the week ahead is 4360.

+
    +
  1. +

    On Monday if we open or offer below 4360, I think more softness may develop, testing the lows at 4288/4300. I will validate this with the Tic TOP indicator and TRIN. See this link if you have not yet viewed Tic TOP script: Trend Trading using Tic TOP Indicator +

    +
  2. +
  3. +

    Break of 4288 will become a bearish event for me and may target recent swing lows at 4210.

    +
  4. +
  5. +

    In an unlikely event of an open or bids above 4411 on Monday AM, I will be bullish for a test of 4450-4456. Validated with Tic TOP indicator.

    +
  6. +
  7. +

    Any openings or prints between 4360-4411 may be balance trades for me, in anticipation of the jobs report on Friday.

    +
  8. +
+

Remember levels are static . Context and order flow is dynamic. Always validated with other things like TRIN, TICK, Tic TOP, etc

+

Earnings next week:

+

There are tremendous earnings next week with GOOG, AMZN, FB, XOM being a few of them..

+

Keeping in line with my prior analysis of the general market conditions, these stocks while attractive, may find some selling action as well.

+

AMZN

+

Amazon specifically, last traded a high of 2900. This stock BTW which I shared at 2700 before a 200 point zipper, if this drops into 2500-2621 on earnings induced swoon may be a buy for me.

+

HD

+

Home Depot which was my TOP stock in 2021 has been a victim of recent sell as well. I did not notice earlier it had fallen to the 350 lows recently and if it revisits those lows, I want to be in. Last traded 366.

+

XOM

+

This stock shared by me at 60 has been on a tear and could be headed a bit higher after earnings as it makes a climactic high. Last traded 75, in my opinion this may test 82-84 if 68/69 held.

+

FB

+

FaceBook has run into some execution issues especially with their desperate foray into Meta and Crypto NFT space. I do not know if this is temporary glitch or systemic issue with leadership/execution. However, I am on alert to see if this stock falls below 274/280 on earnings (last traded 301). If it does , I do want to dip my toes in it and see if it holds.

+
+
+
+ + + + + + + + + +
+
Chart E FB Monthly Auction
+
+
+

Subscribers get my earnings analysis before and after key events. Stay tuned as more actionable ideas develop for me.

+

To Summarize:

+
    +
  1. +

    I was bullish on S&P500 at the lows last week and was proven to be right as the market staged an impressive 200 point rally off the lows.

    +
  2. +
  3. +

    While longer term bullish for a test of 4700, I do not think the market is out of the woods yet as may chop around due to technical and lack of clarity on a few important data prints.

    +
  4. +
  5. +

    That clarity may come this week with flailing inflation and falling NFP numbers. Market paradigm may shift to “Bad news is good news”. Do not get shafted when the paradigm shifts. Markets are forward looking, they do not make next moves on yesterdays news.

    +
  6. +
  7. +

    + Investor Tic is liking the sale being offered on Big Tech names like GOOG, TSLA, AMZN, FB, HD and will buy more if they fall more. Investor Tic time frame is very long (10 years +) with the money he does not need neither today nor a year from now. +

    +
  8. +
  9. +

    + Trader Tic expects more volatility. He thinks one more dip before we really firm up on shifting paradigm. But must validate with Tic provided tools like TICK, TRIN, and TIC TOP indicators. Trader Tic shares his levels and thoughts BEFORE market opens, every day. Subscribe to get Trader Tic’s thoughts. +

    +

    + Subscribe now +

    +
  10. +
+

Have an awesome week ahead. Feel free to share this preview of the newsletter to help any one else who may need it.

+

~ Tic

+

+ Share +

+

+ Share Tic Toc Newsletter +

+

+ Disclaimer: This newsletter is not trading or investment advice, but for general informational purposes only. This newsletter represents my personal opinions which I am sharing publicly as my personal blog. Futures, stocks, bonds trading of any kind involves a lot of risk. No guarantee of any profit whatsoever is made. In fact, you may lose everything you have. So be very careful. I guarantee no profit whatsoever, You assume the entire cost and risk of any trading or investing activities you choose to undertake. You are solely responsible for making your own investment decisions. Owners/authors of this newsletter, its representatives, its principals, its moderators and its members, are NOT registered as securities broker-dealers or investment advisors either with the U.S. Securities and Exchange Commission, CFTC or with any other securities/regulatory authority. Consult with a registered investment advisor, broker-dealer, and/or financial advisor. Reading and using this newsletter or any of my publications, you are agreeing to these terms. Any screenshots used here are the courtesy of Ninja Trader, Think or Swim and/or Jigsaw. I am just an end user, they own all copyrights to their products. +

+
+
+

+ This is the Free once-a-week post from Orderflow. Feel free to share it. For up-to 5 posts a week, become a paying subscriber. This is my personal opinion about current market affairs and is not financial advice. +

+
+
+
\ No newline at end of file diff --git a/packages/readabilityjs/test/test-pages/newsletters/substack/source.html b/packages/readabilityjs/test/test-pages/newsletters/substack/source.html new file mode 100644 index 000000000..70dc5fa64 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/substack/source.html @@ -0,0 +1,3156 @@ + + + Tic's Weekly Thoughts + + + + +
+ Parts + Unknown... ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ +
+ + + + + + + + + + + + + + + diff --git a/packages/readabilityjs/test/test-pages/newsletters/substack/url.txt b/packages/readabilityjs/test/test-pages/newsletters/substack/url.txt new file mode 100644 index 000000000..e1e68b163 --- /dev/null +++ b/packages/readabilityjs/test/test-pages/newsletters/substack/url.txt @@ -0,0 +1 @@ +https://email.mg2.substack.com/c/eJxVkk2PozAMhn9NuRWRhJLmkMPOdLrL7MBMtx-a7gVB4kJaCIiEduHXbzo9jWTZku3XlvxY5BbKth951xrr3V1mxw64hpupwVrovcFAnynJKV5QSjHyJA8lWi6WnjLZqQdoclVz2w_gdUNRK5Fb1eq7YkFQGCGv4hJhQaBggYxYTgWjIqCRwEguTyyHoHgszgepQAvgcIV-bDV4Na-s7cyM_JjhtTOrhG2F7XOpdOmboTA2FxdftI0rdo8GM78BXOpxbqt2KCvr1GvbXkDPyArGVyTwYfzE9SU-tyQ570k6iTHZ3pT4ySa5Zt3f5zhKV2KRrGKSrvYmbupKulyyOwbJtCHp-TK9u_78M53cDCV-HdTbbj8luw1OtrGJdYqOKo5i_XQVZGNFc6iO5E9X4FCdNr743VyFfqs-XvP1P5jPRdptovHl_elj-TKKJCmfu6Z-295Mf_QUxwHGAcIMUYxR4GMfANHoxIKACXwSBPvNVZdF1EWzMGhK_O0mXs_N6N-GqnDF8k7pK-sgZS42g1Z2zEDnRQ3ywc8-3uCLaFaCht69h8xyy1EUkpBGjLDFkjxwOcAhZQGm4cJza2XrVJp_Q_QfomLN7g