1,980,313 events, 1,117,509 push events, 1,631,075 commit messages, 102,907,119 characters
please just tell me what the fuck is wrong with this i hate this so much and want to die 2
git_connect_git(): forbid newlines in host and path
When we connect to a git:// server, we send an initial request that looks something like:
002dgit-upload-pack repo.git\0host=example.com
If the repo path contains a newline, then it's included literally, and we get:
002egit-upload-pack repo .git\0host=example.com
This works fine if you really do have a newline in your repository name; the server side uses the pktline framing to parse the string, not newlines. However, there are many other protocols in the wild that do parse on newlines, such as HTTP. So a carefully constructed git:// URL can actually turn into a valid HTTP request. For example:
git://localhost:1234/%0d%0a%0d%0aGET%20/%20HTTP/1.1 %0d%0aHost:localhost%0d%0a%0d%0a
becomes:
0050git-upload-pack / GET / HTTP/1.1 Host:localhost
host=localhost:1234
on the wire. Again, this isn't a problem for a real Git server, but it does mean that feeding a malicious URL to Git (e.g., through a submodule) can cause it to make unexpected cross-protocol requests. Since repository names with newlines are presumably quite rare (and indeed, we already disallow them in git-over-http), let's just disallow them over this protocol.
Hostnames could likewise inject a newline, but this is unlikely a problem in practice; we'd try resolving the hostname with a newline in it, which wouldn't work. Still, it doesn't hurt to err on the side of caution there, since we would not expect them to work in the first place.
The ssh and local code paths are unaffected by this patch. In both cases we're trying to run upload-pack via a shell, and will quote the newline so that it makes it intact. An attacker can point an ssh url at an arbitrary port, of course, but unless there's an actual ssh server there, we'd never get as far as sending our shell command anyway. We could similarly restrict newlines in those protocols out of caution, but there seems little benefit to doing so.
The new test here is run alongside the git-daemon tests, which cover the same protocol, but it shouldn't actually contact the daemon at all. In theory we could make the test more robust by setting up an actual repository with a newline in it (so that our clone would succeed if our new check didn't kick in). But a repo directory with newline in it is likely not portable across all filesystems. Likewise, we could check git-daemon's log that it was not contacted at all, but we do not currently record the log (and anyway, it would make the test racy with the daemon's log write). We'll just check the client-side stderr to make sure we hit the expected code path.
Reported-by: Harold Kim [email protected] Signed-off-by: Jeff King [email protected] Signed-off-by: Junio C Hamano [email protected]
2021-02-05
Friday, February 5th, 2020 - the perfect rocky Friday night getting ready show! I LOVE The Struts' new album Strange Days, and in particular the track Another Hit of Showmanship, and I'm always looking for a way to carry on that rocky, punchy, fun and funky vibe throughout a whole show. Since doing the new music shows on Tuesdays I've discovered so much new music and really caught up with what I've been missing out on over the past few years. So starting with The Struts, I began to build the playlist and to my great joy and amusement all the tracks I was picking were released in the last year, and many of the artists I've played on new music shows over the last 9 months or so. I pictured myself leaving work, heading to the local bar, loading the juke box up and sinking several strong beers to shake off the week. Cheers!
New data: 2021-02-05: SEE ONTARIO DATA NOTES.
Recent changes:
2021-01-27: Due to the limit on file sizes in GitHub, we implemented some changes to the datasets today, mostly impacting individual-level data (cases and mortality). Changes below:
- Individual-level data (cases.csv and mortality.csv) have been moved to a new directory in the root directory entitled “individual_level”. These files have been split by calendar year and named as follows: cases_2020.csv, cases_2021.csv, mortality_2020.csv, mortality_2021.csv. The directories “other/cases_extra” and “other/mortality_extra” have been moved into the “individual_level” directory.
- Redundant datasets have been removed from the root directory. These files include: recovered_cumulative.csv, testing_cumulative.csv, vaccine_administration_cumulative.csv, vaccine_distribution_cumulative.csv, vaccine_completion_cumulative.csv. All of these datasets are currently available as time series in the directory “timeseries_prov”.
- The file codebook.csv has been moved to the directory “other”.
We appreciate your patience and hope these changes cause minimal disruption. We do not anticipate making any other breaking changes to the datasets in the near future. If you have any further questions, please open an issue on GitHub or reach out to us by email at ccodwg [at] gmail [dot] com. Thank you for using the COVID-19 Canada Open Data Working Group datasets.
- 2021-01-24: The columns "additional_info" and "additional_source" in cases.csv and mortality.csv have been abbreviated similar to "case_source" and "death_source". See note in README.md from 2021-11-27 and 2021-01-08.
Vaccine datasets:
- 2021-01-19: Fully vaccinated data have been added (vaccine_completion_cumulative.csv, timeseries_prov/vaccine_completion_timeseries_prov.csv, timeseries_canada/vaccine_completion_timeseries_canada.csv). Note that this value is not currently reported by all provinces (some provinces have all 0s).
- 2021-01-11: Our Ontario vaccine dataset has changed. Previously, we used two datasets: the MoH Daily Situation Report (https://www.oha.com/news/updates-on-the-novel-coronavirus), which is released weekdays in the evenings, and the “COVID-19 Vaccine Data in Ontario” dataset (https://data.ontario.ca/dataset/covid-19-vaccine-data-in-ontario), which is released every day in the mornings. Because the Daily Situation Report is released later in the day, it has more up-to-date numbers. However, since it is not available on weekends, this leads to an artificial “dip” in numbers on Saturday and “jump” on Monday due to the transition between data sources. We will now exclusively use the daily “COVID-19 Vaccine Data in Ontario” dataset. Although our numbers will be slightly less timely, the daily values will be consistent. We have replaced our historical dataset with “COVID-19 Vaccine Data in Ontario” as far back as they are available.
- 2020-12-17: Vaccination data have been added as time series in timeseries_prov and timeseries_hr.
- 2020-12-15: We have added two vaccine datasets to the repository, vaccine_administration_cumulative.csv and vaccine_distribution_cumulative.csv. These data should be considered preliminary and are subject to change and revision. The format of these new datasets may also change at any time as the data situation evolves.
Revise historical data: cases (AB, BC, MB, ON, QC, SK).
2021-02-02: ONTARIO DATA REPORTING MAY HAVE UNUSUAL NUMBERS FOR THE NEXT SEVERAL DAYS. SEE BELOW. https://www.ontario.ca/page/how-ontario-is-responding-covid-19
“Toronto Public Health has now migrated all of their data to the provincial data system, CCM. This migration has impacted today’s daily counts. Most notably, TPH’s case count is negative following the identification of duplicate cases as well as data corrections to some fields (e.g., long-term care home residents and health care workers), resulting in an underestimation of today's cases. In addition, case counts for other PHUs may have been affected by system outages related to the migration. As a result, we anticipate fluctuations in case numbers over the next few days.”
Note regarding deaths added in QC today: “The data also report 33 new deaths, but the total of deaths amounts to 9,973 due to the withdrawal of 1 death that the investigation has shown not to be attributable to COVID-19. Among these 33 deaths, 7 have occurred in the last 24 hours, 18 have occurred between January 29 and February 3, 6 have occurred before January 29 and 2 have occurred at an unknown date.” We report deaths such that our cumulative regional totals match today’s values. This sometimes results in extra deaths with today’s date when older deaths are removed.
Note about SK data: As of 2020-12-14, we are providing a daily version of the official SK dataset that is compatible with the rest of our dataset in the folder official_datasets/sk. See below for information about our regular updates.
SK transitioned to reporting according to a new, expanded set of health regions on 2020-09-14. Unfortunately, the new health regions do not correspond exactly to the old health regions. Additionally, the provided case time series using the new boundaries do not exist for dates earlier than August 4, making providing a time series using the new boundaries impossible.
For now, we are adding new cases according to the list of new cases given in the “highlights” section of the SK government website (https://dashboard.saskatchewan.ca/health-wellness/covid-19/cases). These new cases are roughly grouped according to the old boundaries. However, health region totals were redistributed when the new boundaries were instituted on 2020-09-14, so while our daily case numbers match the numbers given in this section, our cumulative totals do not. We have reached out to the SK government to determine how this issue can be resolved. We will rectify our SK health region time series as soon it becomes possible to do so.
The fucking reason the UI wouldn't switch was because I was checking the GOD DAMN MOTHERFUCKING CHAR AGAINST A CHAR*
Created Text For URL [thenationonlineng.net/i-would-love-to-act-as-ramsey-nouahs-girlfriend-says-lilian-okolie/]
Somebody call Alanis Morissette....
It's like re-adding old code, from the other day, It's a free repo, nobody's gonna get paid It's the good advice, to be backwards compatbile... And who would've thought, it figures?
Mr. Play-It-Safe, was afraid to deprecate He packed his managed package and kissed his free time goodbye He waited his whole damn life, to use that namespace And as the CI/CD pipeline crashed down he thought, "Well, isn't this nice"? And isn't it ironic? Don't you think? A little too ironic? Yeah, I really do think
tl;dr - sfdx force:auth:sfdxurl:store is now sfdx auth:sfdxurl:store. This non-backwards compatible change in sfdx happened exactly when I tried to avoid a non-backwards compatible change in Logger. Halp.
Updates for: I sold my memoirs of my love life to Parker Brothers -- they're going to make a game out of it. -- Woody Allen
Updates for: 'Tis the dream of each programmer, Before his life is done, To write three lines of APL, And make the damn things run.
"10:10am. I am up. During the night I thought a lot about reference counting. As things are now the pass I just did would be 2/3rds of a ref counting system for a C backend.
This is remarkable. At this point I actually understand all that I need to do single threaded ref counting work. I could do a functional C backend in half a week!
10:15am. This is a great gain. If I get some sponsors, no doubt having a C backend will be a card in play at some point, and doing it would not be trouble at all.
10:25am. Let me chill a bit here. Let me see if I got any replies.
10:35am. I've worked like a slave for the past few days. I need to let off some stress by slacking.
The way the Cython backend is designed at the moment is inappropriate. Rather than merely annotating it, I should have an extra transformation pass for those nulls. I should also turn the relevant data to TyV
and TermVar
arrays. I was in a hurry to just get it done, but at some point, I'll do a redesign. Especially if I end up making the C backend.
10:45am. Today is the game library day. Nothing will stop me from this.
11:15am. Let me start. There is not much time left in the morning session, so let me just look around for the library I was talking about.
I needed a bit of slack time today.
The gains of the past few days were as huge, but so was the work strenuous. I excelled regardless. The work was complicated, but I did it as easily as snapping my fingers. 5/5 in compiler engineering is an accurate assessment indeed.
I never thought this would end up being my speciality as a programmer.
...Now, let me leave reference counting and the Cython backend out of mind. I had a really good mindset before I started work on this, and it is time to get back to it.
What was I looking forward? Training RL agents!
11:20am. The most important thing now to get my mind back on that track.
https://deepmind.com/research/open-source/openspiel
Ah yes, it was OpenSpiel. I remember now.
https://arxiv.org/abs/1908.09453v2 OpenSpiel: A Framework for Reinforcement Learning in Games
Lanctot is the primary author for this. I do not really need to read the paper, but let me do it.
https://github.com/deepmind/open_spiel/blob/master/docs/install.md
Linux and MacOS instructions only. Yes, this will take some time figure out.
https://github.com/deepmind/open_spiel/blob/master/docs/windows.md
Ah, there are Windows instructions.
Tensorflow...well, Deepmind is with Google so that is not surprising.
11:30am. But I've already decided I want to use PyTorch. And am I really expected to do my work from WSL?
Ok, Tensorflow I'll accept. Though I've decided to use PyTorch, I've also decided to be broadminded when it comes to libraries. But OSs are something I will not switch lightly.
Similarly, I refuse to follow the instructions - I should sandbox my install through Anaconda.
Just why do the games have a Linux dependency? I should dive into the library and find that out.
11:35am. Studying the library and doing a port of its relevant sections to Cython should be on my agenda. I am not going to get 4 ranks in ML related skills just by installing Tensorflow and eating what is on offer. I should hunt my own. Either way, I should deeply familiarize myself with these algorithms.
Let me read the paper. I will get into it.
OpenSpiel has been tested on Linux. We have not tested on MacOS nor Windows, but since the code uses freely available tools, we do not anticipate any (major) problems compiling and running under other major platforms. Patches and instructions would be appreciated.
I guess I'll be one of those contributors.
12:05pm. 17/25. NeuRD really crushes PG. And yet I was bullheaded with it back in 2018.
Yeah, this is what I needed. To change my attitude. I should in fact get it to work through WSL, at least initially. Yes, it will waste my HD space once I figure out how to get it working on Windows.
But I've freed close to 300Gb on my SSD for a reason. This is one expense I should be glad to pay. Come to think of it, that cleaning spree might have nuked my WSL install. I might have to reinstall.
12:15pm. 19/25. These guys really have me beat when it comes to ML ideas. I should just rely on them. This is the kind of attitude that I will need.
https://github.com/deepmind/open_spiel/blob/master/docs/contributing.md
Differentiable Games and Algorithms. For example, Symplectic Gradient Adjustment
Hmmm...
I'll leave the research stuff for later.
PyTorch. While we officially support Tensorflow, the API is agnostic to the library that is used for learning. We would like to have some examples and support for PyTorch as well in the future.
Hmmm...
12:20pm. Done with the paper. Let me read the repo docs next.
12:30pm. https://github.com/deepmind/open_spiel/tree/master/docs
Next are the raw .mds here.
12:50pm. Let me stop here. I am still thinking about ref counting, but my focus will move to the task at hand.
Just like with many things I've done in the past, my focus should be on studying the OpenSpiel library. Once I graduate on this, I can move to bigger and better things.
This won't be a short affair. I have to make the library my cultivation target. It will take me a while to process it all.
And it will take me even longer to get the agents going in the real world.
12:55pm. But whatever my goals are, I won't meet them by doing standing still. I can't do anything great.
All I can do is take it one step at a time.
My next move should be to install the library and get it to run for the first time on a simplified example. Then I will be able to move from there.
I am not sure whether I strictly want the WSL install. I might want to give running it on Windows a try first. I should try building it manually from source.
Either way I will be spending time, so I should do what I want.
1pm. Spiral will take a backseat for a while, until I get to the point where I need to integrate the library code into my own pipeline.
Eventually, I'll be ripping stuff out of the library and translating it into my own. I have no doubt that I will need to do this in order to merge it together with the UI automation code that I will have to do."
libbinder: Java/C++ *_TRANSACTION parity
TWEET_TRANSACTION and LIKE_TRANSACTION have long been Java-only features in Android. Though, by all accounts, it has been 9.5 years since their inclusion, and the social landscape has been made portrait (and back and forth, and back and forth, and so goes the pendelum of time), the managed app, now (!) every binder and daemon, every process, thread, every fiber, every bound iface, whether preinstalled or downloaded, enjoys itself a quiet smile or a chuckle or a warm feeling in its heart at the directed tweet (or cold rage or fury when the need to argue arises!). Same too, with the ready-fire like, an uncrafted promotor of unconstrained joy and appreciation for the IPCs or APIs, carefully crafted and readily available, or the interesting return value, or heck, maybe even the timing or just for the lols!
Though, due to timing constraints (and the NDK/Rust backend abstraction from transaction codes in favor of function APIs which encode the protocol of these functions), Android S might not see this functionality there, it is a future consideration.
Fixes: 178706440 Test: N/A Change-Id: I3f628c747b70a77e199abc7252a56fdc36ef4308
slothjs: ForInStatement
ForInStatement is the ugliest corner of JavaScript I've seen so far. It lacks any simplicity and purpose:
-
simplicity for a novice. I remembered being utterly surprised that I cannot iterate over array items using
for (... in ...)
, compared to the nice and elegant iteration in e.g. Python. -
simplicity for a power user. There are very few non-cumbersome use-cases for this weird contraption: every time anybody uses it, one has to think carefully about their goal and how it interacts with this statement. It's easy to forget about enumerable properties in prototypes, non-enumerable properties can shadow enumerable properties later in the prototype chain, it does not visit non-string (symbolic) names, etc.
-
simplicity of purpose. The only remotely possible use case is using JavaScript objects as hashmaps and iterating over user-defined keys. Which leaves unexplained why would one need to walk the prototype chain too.
-
simplicity of generality.
for (.. in ..)
does not use the iteration protocol, so it is not extensible and limited to the builtin iteratees (objects, string, arrays). -
simplicity for an implementer. I tried and gave up on re-using ForStatement for
for (.. in ..)
, it really wants to be a separate kind of statement, thus requiring reimplementing and retesting the loop behavior and interaction with other language features like labelled break/continue.Algorithmic complexity of the property enumeration is ugly, it's either O(n^2) without additional memory or having O(n) memory for the set of visited properties. Rust further complicates this (although for a good reason), because an object keys must be copied: the loop body can change the lifetime of the object.
So far, I left labelled continue for ForInStatement unimplemented: this likely requires saving the iteration state into something more complicated than local variables, with unclear lifetimes. Also, those who dare to use
label: for (.. in ..) { ..; continue label; .. }
do deserve suffering.
Document capturing {{ matrix_domain }}/_matrix with Traefik
When running this playbook I discovered that my server could not federate correctly, and was failing the Matrix federation checker due to invalid SSL certs. I discovered this was because I am hosting matrix.domain.com on a different server/ip than I am hosting domain.com, and that the federation sends requests to the IP/domain specified by the SRV record, but containing the host header for the raw domain.com.
To resolve this, Traefik must have a rule to capture domain.com/_matrix traffic and send it to Synapse, but it also must have a valid cert for the raw domain.com. This would not work if using a standard .well-known challenge, however if you are able to use a DNS challenge it seems to be fine.
I have documented the problem and my simple configuration change here in case it is valuable to someone, however I would like to make clear that this might be just an ugly hack, and if there is a cleaner way to handle this problem we should document that instead.
Update to bsnes v053 release.
This release greatly polishes the user interface, adds a new cheat code search utility, adds the snesfilter library, and adds Qt-based GUI support to both snesfilter and snesreader. snesfilter gains 2xSaI, Super 2xSaI and Super Eagle support, plus full configuration for both the NTSC and scanline filters; and snesreader gains support support for multi-file ROM archives (eg GoodMerge sets.) Statically linking Qt to bsnes, snesfilter and snesreader would be too prohibitive size-wise (~10MB or so.) I have to link dynamically so that all three can share the same Qt runtime, which gets all of bsnes and its modules to ~1MB (including the debugger build); and Qt itself to about ~2.5MB. However, there is some bad news. There's a serious bug in MinGW 4.4+, where it is not generating profile-guided input files (.gcno files.) There is also a serious bug in Qt 4.5.2/Windows when using dynamic linking: the library is hanging indefinitely, forcing me to manually terminate the process upon exit. This prevents the creation of profile-guided output files (.gcda files.) It would be tough enough to work around one, but facing both of these issues at once is too much. I'm afraid I have no choice but to disable profile-guided optimizations until these issues can be addressed. I did not know about these bugs until trying to build the official v053 release, so it's too late to revert to an all-in-one binary now. And I'm simply not willing to stop releasing new builds because of bugs in third-party software. As soon as I can work around this, I'll post a new optimized binary. In the mean time, despite the fact that this release is actually more optimized, please understand that the Windows binary will run approximately ~10% slower than previous releases. I recommend keeping v052 for now if you need the performance. Linux and OS X users are unaffected. Changelog: - save RAM is initialized to 0xff again to work around Ken Griffey Jr Baseball issue - libco adds assembly-optimized targets for Win64 and PPC-ELF [the latter courtesy of Kernigh] - libco/x86 and libco/amd64 use pre-assembled blocks now, obviates need for custom compilation flags - added a new cheat code search utility to the tools menu - separated filters from main bsnes binary to libsnesfilter / snesfilter.dll - added 2xSaI, Super 2xSaI and Super Eagle filters [kode54] - added full configuration settings for NTSC and scanline filters (12+ new options) - further optimized HQ2x filter [blargg] - added Vsync support to the Mac OS X OpenGL driver - added folder creation button to custom file load dialog - fixed a few oddities with loading of "game folders" (see older news for an explanation on what this is) - updated to blargg's file_extractor v1.0.0 - added full support for multi-file archives (eg GoodMerge sets) - split multi-cart loading again (BS-X, Sufami Turbo, etc) as required for multi-file support - cleaned up handling of file placement detection for save files (.srm, .cht, etc) - file load dialog now remembers your previous folder path across runs even without a custom games folder assigned - windows now save their exact positioning and size across runs, they no longer forcibly center - menus now have radio button and check box icons where appropriate - debugger's hex editor now has a working scrollbar widget - added resize splitter to settings and tools windows - worked around Qt style sheet bug where subclassed widgets were not properly applying style properties
add ram.c
some fucking annoying ass linting problem idfk theres a red underline i hope itll go away
HOLY SHIT IT WORKS (kinda?) it makes my life easier thats for sure
Ports #10649 from Citadel: An attempt at making hijack not shit and more about point defence (#54146)
So essentially there was discussion already here (https://tgstation13.org/phpBB/viewtopic.php?f=33&t=27620) about how hijack is one of the few objectives on Manuel that you can murderbone with, which is mildly at odds with the intention of the server.
Personally, I think hijack is just straight up terrible regardless of what server you're on. The way it functions is dreadful. Nobody must be aboard the shuttle in any part of the shuttle at all. This means you have people hiding in the walls or hiding in some invisible corner of the shuttle, cucking you of the hijack. For the most part, the only way to actually hijack the shuttle is to render it completely inhospitable or destroying it utterly save for, maybe, one square. The one you are standing on.
It's absurd. So, I knew kev made a pretty honest attempt at reworking hijack. And it works pretty well. It doesn't necessarily solve the problem of hijackers being mandatory mass shooters, but it goes some ways to improving the objective in a more interesting fashion, and allows for the discussion around the objective to be a little more open ended for the sake of the higher roleplay servers without actually detracting from the lower roleplay servers at all. If anything, this should improve the experience of being that gamer to stage a hijacking all the more interesting and about robustness, and less of hide-and-go-seek.
I have a dream - Merge
I am happy to join with you today in what will go down in history as the greatest demonstration for freedom in the history of our nation.Five score years ago, a great American, in whose symbolic shadow we stand today, signed the Emancipation Proclamation. This momentous decree came as a great beacon light of hope to millions of Negro slaves who had been seared in the flames of withering injustice. It came as a joyous daybreak to end the long night of their captivity.But one hundred years later, the Negro still is not free. One hundred years later, the life of the Negro is still sadly crippled by the manacles of segregation and the chains ofdiscrimination. One hundred years later, the Negro lives on a lonely island of poverty in the midst of a vast ocean of material prosperity. One hundred years later, the Negro is still languishing in the corners of American society and finds himself an exile in his own land. So we have come here today to dramatize a shameful condition.In a sense we have come to our nation's capital to cash a check. When the architects of our republic wrote the magnificent words of the Constitution and the Declaration of Independence, they were signing a promissory note to which every American was to fall heir. This note was a promise that all men, yes, black men as well as white men, would be guaranteed the unalienable rights of life, liberty, and the pursuit of happiness.It is obvious today that America has defaulted on this promissory note insofar as her citizens of color are concerned. Instead of honoring this sacred obligation, America has given the Negro people a bad check, a check which has come back marked "insufficient funds." But we refuse to believe that the bank of justice is bankrupt. We refuse to believe that there are insufficient funds in the great vaults of opportunity of this nation. So we have come to cash this check --a check that will give us upon demandthe riches of freedom and the security of justice. We have also come to this hallowed spot to remind America of the fierce urgency of now. This is no time to engage in the luxury of cooling off or to take the tranquilizing drug of gradualism. Now is the time to make real the promises of democracy. Now is the time to rise from the dark and desolate valley of segregation to the sunlit path of racial justice. Now is the time to lift our nation from the quick sands of racial injustice to the solid rock of brotherhood. Now is the time to make justice a reality for all of God's children.It would be fatal for the nation to overlook the urgency of the moment. This sweltering summer of the Negro's legitimate discontent will not pass until there is an invigorating autumn of freedom and equality. Nineteen sixty-three is not an end, but a beginning. Those who hope that the Negro needed to blow off steam and will now be content will have a rude awakening if the nation returns to business as usual. There will be neitherrest nor tranquility in America until the Negro is granted his citizenship rights. The whirlwinds of revolt will continue to shake the foundations of our nation until the bright day of justice emerges.But there is something that I must say to my people who stand on the warm threshold which leads into the palace of justice. In the process of gaining our rightful place we must not be guilty of wrongful deeds. Let us not seek to satisfy our thirst for freedom by drinking from the cup of bitterness and hatred. 2We must forever conduct our struggle on the high plane of dignity and discipline. We must not allow our creative protest to degenerate into physical violence. Again and again we must rise to the majestic heights of meeting physical force with soul force.The marvelous new militancy which has engulfed the Negro community must not lead us to a distrust of all white people, for many of our white brothers, as evidenced by their presence here today, have come to realize that their destiny is tied up with our destiny. They have come to realize that their freedom is inextricably bound to our freedom. We cannot walk alone.As we walk, we must make the pledge that we shall always march ahead. We cannot turn back. There are those who are asking the devotees of civilrights, "When will you be satisfied?" We can never be satisfied as long as the Negro is the victim of the unspeakable horrors of police brutality. We can never be satisfied, as long as our bodies, heavy with the fatigue of travel, cannot gain lodging in the motels of the highways and the hotels of the cities. We cannot be satisfied as long as the Negro's basic mobility is from a smaller ghetto to a larger one. We can never be satisfied as long as our children are stripped of their selfhood and robbed of their dignity by signs stating "For Whites Only". We cannot be satisfied as long as a Negro in Mississippi cannot vote and a Negro in New York believes he has nothing for which to vote. No, no, we are not satisfied, and we will not be satisfied until justicerolls down like waters and righteousness like a mighty stream.I am not unmindful that some of you have come here out of great trials and tribulations. Some of you have come fresh from narrow jail cells. Some of you have come from areas where your quest for freedom left you battered by the storms of persecution and staggered by the winds of police brutality. You have been the veterans of creative suffering. Continue to work with the faith that unearned suffering is redemptive.Go back to Mississippi, go back to Alabama, go back to South Carolina, go back to Georgia, go back to Louisiana, go back to the slums and ghettos of our northern cities, knowing that somehow this situation can and will be changed. Let us not wallow in the valley of despair.I say to you today, my friends, so even though we face the difficulties of today and tomorrow, I still have a dream. It is a dream deeply rooted in the American dream.I have a dream that one day this nation will rise up and live out the true meaning of its creed: "We hold these truths to be self-evident: that all men are created equal."I have a dream that one day on the red hills of Georgia the sons of former slaves and the sons of former slave owners will be able to sit down together at the table of brotherhood.Ihave a dream that one day even the state of Mississippi, a state sweltering with the heat of injustice, sweltering with the heat of oppression, will be transformed into an oasis of freedom and justice.I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character.I have a dream today.I have a dream that one day, down in Alabama, with its vicious racists, with its governor having his lips dripping with the words of interposition and nullification; one day right there in Alabama, little black boys and black girls will be able to join hands with little white boys and white girls as sisters and brothers. 3I have a dream today.I have a dream that one day every valley shall be exalted, every hill and mountain shall be made low, the rough places will be made plain, and the crooked places will be made straight, and the glory of the Lord shall be revealed, and all flesh shall see it together.This is our hope.This is the faith that I go back to the South with. With this faith we will be able to hew out of the mountain of despair a stone of hope. With this faith we will be able to transform the jangling discords of our nation into a beautiful symphony of brotherhood. With this faith we will be able to work together, to pray together, to struggle together, to go to jail together, to stand up for freedom together, knowing that we will be free one day.This will be the day when all of God's children will be able tosing with a new meaning, "My country, 'tis of thee, sweet land of liberty, of thee I sing. Land where my fathers died, land of the pilgrim's pride, from every mountainside, let freedom ring."And if America is to be a great nation this must become true. So let freedom ring from the prodigious hilltops of New Hampshire. Let freedom ring from the mighty mountains of New York. Let freedom ring from the heightening Alleghenies of Pennsylvania!Let freedom ring from the snowcapped Rockies of Colorado!Let freedom ring from the curvaceous slopes of California!But not only that; let freedom ring from Stone Mountain of Georgia!Let freedom ring from Lookout Mountain of Tennessee!Let freedom ring from every hill and molehill of Mississippi. From every mountainside, let freedom ring.And when this happens, when we allow freedom to ring, when we let it ring from every village and every hamlet, from every state and every city, we will be able to speed up that day when all of God's children, black men and white men, Jews and Gentiles, Protestants and Catholics, will be able to join hands and sing in the words of the old Negro spiritual, "Free at last! free at last! thank God Almighty, we are free at last!"
fuck it, big logos
i was joking earlier, i love you github
God damnit that didn't work. So now instead of overthinking it im just going to do the easier way even if its clunkier, because i cant be arsed.