New around here? Register your SA Forums Account here!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Finster Dexter
Oct 20, 2014

Beyond is Finster's mad vision of Earth transformed.

Shaggar posted:

What i want wrt powershell is linq syntax. something like (dir).OrderByDescending(i=>i.LastWriteTime).Take(5).Sum(i=>i.length)

This is also a big complaint I have about Go. No map/reduce or filtering.

also, lmao that av

Adbot
ADBOT LOVES YOU

eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?
the Haskell community should rewrite git in Haskell

and tell you to interact with the functions from the REPL to use it

bob dobbs is dead
Oct 8, 2017

I love peeps
Nap Ghost

eschaton posted:

the Haskell community should rewrite git in Haskell

and tell you to interact with the functions from the REPL to use it

darcs, you mean

mystes
May 31, 2006

While I'm messing around with Haskell, is there any new advice on the best plugin to use for vs code at the moment? I was using haskelly last time I tried haskell, but as always when I went to try it again this time it was broken and this time I ended up giving up after half an hour of trying to get it working and just using the repl. This is possibly my biggest issue with haskell since it somehow happens every single time.

If there's a better ide to use instead of vs code I'm open to that too, I guess.

eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?

Finster Dexter posted:

In my mind, it should provide a simple interface to your host environment. REPLs don't really do that? I mean, you could argue that a REPL provides this, but in c#, for example, it takes multiple lines of code to start up a process and I wouldn't want to type System.Process.Start("turd --help") or whatever just to get help with the turd tool.

this is kind of how the Dynamic Listener in Symbolics Genera distinguished it

there were a ton of commands you could enter (based on the current stack of command tables) and get completion for that provided conveniences for working on the environment

but you could also type any Lisp expression and have it evaluated at the same prompt—and indeed supply any Lisp expression as an argument to any command you entered

so you could start typing Sho, press space to complete to Show , start typing Dir and press space to get the completion for Show Directory , and then either type a path, type a Lisp expression that evaluates to a path, or click a directory displayed anywhere on the screen, such as in an existing directory listing, or click any other object translatable to a directory object and have that be the argument to the command

and of course you could create aliases, create your own commands, use keyboard equivalents, etc. and you could enter options as well

and everything was nicely formatted and got live completion prompts with documentation

Kalman Reti’s demo is awesome and everyone should watch it to see what could have been, it’s way better than just M-x in GNU emacs

gonadic io
Feb 16, 2011

>>=

mystes posted:

OK, I tried turtle.

Finding the total size of the most recent 5 files in powershell and turtle (admittedly I suck at haskell so the haskell version is probably not the best solution).

Powershell:
code:
dir | Sort-Object -Descending -Property LastWriteTime | select -first 5| Measure-Object -Property length -sum | select -expand sum
Turtle:
code:
{-# LANGUAGE OverloadedStrings #-}

import Turtle

import qualified Control.Foldl as Fold
import Data.List

toList :: MonadIO io => Shell a -> io [a]
toList s = fold s Fold.list

getStat x = (\y -> (x, y)) <$> (stat x)

compareFiles (x, y) (x', y') = compare (modificationTime y') (modificationTime y)

main :: IO()
main = do
    l <- toList (ls ".")
    l2 <- sequence (map getStat l)
    let l3 = take 5 (sortBy compareFiles l2)
    let sizes = map (\(x, y) -> fileSize y) l3
    print (sum sizes)
I don't think I'm going to use turtle as my normal shell for simple scripting any time soon.

pretend I 1-lined this because it's definitely possible
something like
code:
ls "." >>= mapM getStat >>= (sum . map (fileSize . snd) . take 5 . sortBy (compare `on` modificationTime)) >>= print

mystes
May 31, 2006

gonadic io posted:

pretend I 1-lined this because it's definitely possible
something like
code:
ls "." >>= mapM getStat >>= (sum . map (fileSize . snd) . take 5 . sortBy (compare `on` modificationTime)) >>= print
Lol that's a lot shorter.

Also, I just realized that I never needed the filenames again anyway so I didn't need to use tuples at all.

mystes fucked around with this message at 22:23 on Sep 5, 2018

mystes
May 31, 2006

gonadic io posted:

pretend I 1-lined this because it's definitely possible
something like
code:
ls "." >>= mapM getStat >>= (sum . map (fileSize . snd) . take 5 . sortBy (compare `on` modificationTime)) >>= print
Do you know why the following doesn't work?
code:
Prelude Turtle> ls "." >>= mapM stat

<interactive>:25:12: error:
    • Couldn't match type ‘Turtle.FilePath’ with ‘t Turtle.FilePath’
      Expected type: Turtle.FilePath -> Shell (t FileStatus)
        Actual type: t Turtle.FilePath -> Shell (t FileStatus)
    • In the second argument of ‘(>>=)’, namely ‘mapM stat’
      In the expression: ls "." >>= mapM stat
      In an equation for ‘it’: it = ls "." >>= mapM stat
    • Relevant bindings include
        it :: Shell (t FileStatus) (bound at <interactive>:25:1)
Prelude Turtle> :t (mapM stat)
(mapM stat)
  :: (MonadIO m, Traversable t) =>
     t Turtle.FilePath -> m (t FileStatus)
Prelude Turtle> :t (mapM)
(mapM) :: (Monad m, Traversable t) => (a -> m b) -> t a -> m (t b)
Is the problem that Shell isn't traversable?

VikingofRock
Aug 24, 2008




mystes posted:

Do you know why the following doesn't work?
code:
Prelude Turtle> ls "." >>= mapM stat

<interactive>:25:12: error:
    • Couldn't match type ‘Turtle.FilePath’ with ‘t Turtle.FilePath’
      Expected type: Turtle.FilePath -> Shell (t FileStatus)
        Actual type: t Turtle.FilePath -> Shell (t FileStatus)
    • In the second argument of ‘(>>=)’, namely ‘mapM stat’
      In the expression: ls "." >>= mapM stat
      In an equation for ‘it’: it = ls "." >>= mapM stat
    • Relevant bindings include
        it :: Shell (t FileStatus) (bound at <interactive>:25:1)
Prelude Turtle> :t (mapM stat)
(mapM stat)
  :: (MonadIO m, Traversable t) =>
     t Turtle.FilePath -> m (t FileStatus)
Prelude Turtle> :t (mapM)
(mapM) :: (Monad m, Traversable t) => (a -> m b) -> t a -> m (t b)
Is the problem that Shell isn't traversable?

The issue is that you don't want mapM here at all. stat in this case has type Turtle.FilePath -> Shell FileStatus, so you want to just do ls "." >>= stat.

Think of Shell as being the List + IO (+ Managed). The list part is relevant here because whenever you use >>= the mapping over shell elements is already implied.

gonadic io
Feb 16, 2011

>>=
after reading the docs (which I didn't bother with before) the problem is that ls "." doesn't return a list but a `Shell FilePath`. So there's no need for a mapM and you have
ls "." :: Shell FilePath
stat :: FilePath -> io FileStatus
ls "." >>= stat :: Shell FileStatus

the Shell type contains multiple value internally, there's no list. but since you need to get the list asap you might as well just call toList on it immediately (as mysteswas doing anyway)
then you do need mapM after all because you have a good old `IO (List Butt)`

toList (ls ".") >>= mapM getStat >>= (sum . map (fileSize . snd) . take 5 . sortBy (compare `on` modificationTime)) >>= print

gonadic io
Feb 16, 2011

>>=
what an ergonomic and smooth bash killer

DONT THREAD ON ME
Oct 1, 2002

by Nyc_Tattoo
Floss Finder
beautiful...

gonadic io
Feb 16, 2011

>>=
wait there's a bunch of list functions implemented on a shell so that makes it easier
i think the best i can do (i think, i'm just doing these off the top of my head i haven't touched a haskell compiler in months) with the same semantics is
code:
main = ls "." & (>>= stat) & sortOn modificationTime & limit 5 & fmap fileSize & flip fold Fold.sum & view
god drat i wish haskell had member syntax

p.s. if you use `flip` in haskell you're doing something wrong 100% it is only ever used for stupid golfing like this. perfect for shell scripts!

gonadic io fucked around with this message at 00:17 on Sep 6, 2018

VikingofRock
Aug 24, 2008




gonadic io posted:

wait there's a bunch of list functions implemented on a shell so that makes it easier
i think the best i can do (i think, i'm just doing these off the top of my head i haven't touched a haskell compiler in months) with the same semantics is
code:
main = ls "." & (>>= stat) & sortOn modificationTime & limit 5 & fmap fileSize & flip fold Fold.sum & view
god drat i wish haskell had member syntax

p.s. if you use `flip` in haskell you're doing something wrong 100% it is only ever used for stupid golfing like this. perfect for shell scripts!

I think you've got a type error there in the fmap FileSize, since the stuff before that is a Shell [FileStatus] not a Shell FileStatus. You gotta either (fmap . fmap) the fileSize or (better yet) combine the Shell [FileStatus] into a Shell Filestatus with fmap select & join. Something like:

code:
ls "." >>= stat & sortOn modificationTime & fmap select & join & fmap fileSize & flip fold Fold.sum
which is honestly about as reasonable as the original powershell.

VikingofRock fucked around with this message at 00:56 on Sep 6, 2018

VikingofRock
Aug 24, 2008




The fmaps get pretty annoying after a while. Maybe they'll add an operator

a &| f = fmap f a

with the same precedence as &

Progressive JPEG
Feb 19, 2003

comedyblissoption posted:

is there something better than git's distributed immutable dag for programming source control

seems deece enough for me

committing o nthe blockchain

gonadic io
Feb 16, 2011

>>=

VikingofRock posted:

The fmaps get pretty annoying after a while. Maybe they'll add an operator

a &| f = fmap f a

with the same precedence as &

I think that's just the cost of using haskell here - you have to care if your function are 'a -> b' (called with '... & fmap foo & ...' ) or 'a -> Shell b' (called with '... & (>>= foo) & ...') or 'Shell a -> Shell b' ('... & foo & ...')

prisoner of waffles
May 8, 2007

Ah! well a-day! what evil looks
Had I from old and young!
Instead of the cross, the fishmech
About my neck was hung.

Progressive JPEG posted:

committing o nthe blockchain

CTO at work was asking about Bitcoin yesterday and so I did some very lovely research

and unsurprisingly, the BTC block chain is strictly linear

NihilCredo
Jun 6, 2011

iram omni possibili modo preme:
plus una illa te diffamabit, quam multæ virtutes commendabunt

mystes posted:

Finding the total size of the most recent 5 files in powershell and turtle (admittedly I suck at haskell so the haskell version is probably not the best solution).

quote:

dir | Sort-Object -Descending -Property LastWriteTime | select -first 5| Measure-Object -Property length -sum | select -expand sum

for comparison, this is its cousin f# interactive:

quote:

> open System.IO;;

> "C:/myButt/" |> Directory.GetFiles |> Seq.map FileInfo |> Seq.sortByDescending (fun fi -> fi.LastWriteTime) |> Seq.take 5 |> Seq.sumBy (fun fi -> fi.Length);;

and c# interactive

quote:

> using System.IO;
> using System.Linq;

> Directory.GetFiles("C:/myButt").Select(f => new FileInfo(f)).OrderByDescending(fi => fi.LastWriteTime).Take(5).Select(fi => fi.Length).Sum()

sure would be nice if we didn't need the boilerplate imports or the double semicolons, and had a few basic aliases like ls and run

oh, and didn't need to pay attention to case

NihilCredo fucked around with this message at 14:48 on Sep 6, 2018

mystes
May 31, 2006

NihilCredo posted:

for comparison, this is its cousin f# interactive:


and c# interactive


sure would be nice if we didn't need the boilerplate imports or the double semicolons, and had a few basic aliases like ls and run

oh, and didn't need to pay attention to case
I feel like c# and f# are like 95% there already, which makes it weirder that Microsoft felt the need to create powershell. Seriously can someone just create a repl that shows the current path and imports useful stuff automatically?

Also, I should probably use f# more. I wish there was an interpreter/repl for it for .net core.

mystes fucked around with this message at 14:53 on Sep 6, 2018

mystes
May 31, 2006

Oh another haskell thing: there's a new "Simple GHC (Haskell) Integration" plugin for vscode that has no dependencies (it just uses ghc). It's a little bit buggy but I can at least get it to work mostly which is more than I can say about the older pugins that use intero, etc.

(What's funny is i looked on r/haskell to see what IDEs people are using now, and the most popular recommendation now seems to give up on the idea of getting syntax error highlighting and type information in the IDE and use ghcid in a separate window which I think is a good illustration of how loving horrible the haskell tooling situation is.)

Also, it's funny that if you try to google how to add dependencies to a stack project, pretty much every site says to add it to the Cabal file, but apparently now you have to add it to the package.yaml file instead.

mystes fucked around with this message at 15:01 on Sep 6, 2018

Luigi Thirty
Apr 30, 2006

Emergency confection port.

are C++ abstract base classes just what would in other languages be called interfaces?

MrMoo
Sep 14, 2000

You can still have implementation in abstract classes, but it's the closest you are going to get.

prisoner of waffles
May 8, 2007

Ah! well a-day! what evil looks
Had I from old and young!
Instead of the cross, the fishmech
About my neck was hung.

Luigi Thirty posted:

are C++ abstract base classes just what would in other languages be called interfaces?

In the case where there are no fields and all methods are pure virtual, yeah, that's quite similar to Java's/C#'s/Go's/ God knows how many other languages' interface concept

e: technically having _any_ pure virtual methods means the class is abstract, having _only_ pure virtual methods means the class is an interface (?)

NihilCredo
Jun 6, 2011

iram omni possibili modo preme:
plus una illa te diffamabit, quam multæ virtutes commendabunt

mystes posted:

Oh another haskell thing: there's a new "Simple GHC (Haskell) Integration" plugin for vscode that has no dependencies (it just uses ghc). It's a little bit buggy but I can at least get it to work mostly which is more than I can say about the older pugins that use intero, etc.

i deactivated every haskell plugin i had and activated that one. it does absolutely nothing for me, it doesn't even seem to recognize .hs files (they say 'Plain text' in the bottom right and when i searched the marketplace for extensions supporting it, simple ghc did not show up). adding the ghci folder to PATH didn't seem to help either

mystes
May 31, 2006

NihilCredo posted:

i deactivated every haskell plugin i had and activated that one. it does absolutely nothing for me, it doesn't even seem to recognize .hs files (they say 'Plain text' in the bottom right and when i searched the marketplace for extensions supporting it, simple ghc did not show up). adding the ghci folder to PATH didn't seem to help either
I think you also need to have the haskell syntax highlighting plugin installed even though it isn't included as a dependency.

By default it autodetects whether you're using stack based on the presence of package.yaml and you shouldn't need the ghc executable to be located in a folder in your path in that case (it will run it via stack). However, it doesn't seem to show any errors if it has trouble running ghc for some reason.

It seems to be alpha quality but I still prefer it to the alternatives.

mystes fucked around with this message at 16:46 on Sep 6, 2018

NihilCredo
Jun 6, 2011

iram omni possibili modo preme:
plus una illa te diffamabit, quam multæ virtutes commendabunt

mystes posted:

I think you also need to have the haskell syntax highlighting plugin installed even though it isn't included as a dependency.

By default it autodetects whether you're using stack based on the presence of package.yaml and you shouldn't need the ghc executable to be located in a folder in your path in that case (it will run it via stack). However, it doesn't seem to show any errors if it has trouble running ghc for some reason.

It seems to be alpha quality but I still prefer it to the alternatives.

installed that plugin, the syntax highlighting works but no type integration yet

i'm in the folder of a stack project that builds (stack new HelloWorld yesod-sqlite).

fake edit: ok, i found a 'GHC' entry under terminals where the following lines appear when I open a new .hs file:

quote:

-> :set prompt ""
ghci | HelloWorld-0.0.0: initial-build-steps (lib + exe)
ghci | The following GHC options are incompatible with GHCi and have not been passed to it: -O2 -threaded
ghci | Configuring GHCi with the following packages: HelloWorld
ghci |
ghci | Warning: Didn't find expected autogen file:
ghci | D:\myPath\HelloWorld\.stack-work\dist\7d103d30\build\HelloWorld-test\autogen\cabal_macros.h
ghci | GHCi, version 8.4.3: http://www.haskell.org/ghc/ :? for help
ghci | <command line>: cannot satisfy -package hspec-2.5.5
ghci | (use -v for more information)

i'm guessing the hspec dependency is being a problem? any idea how i can fix that?

mystes
May 31, 2006

NihilCredo posted:

installed that plugin, the syntax highlighting works but no type integration yet

i'm in the folder of a stack project that builds (stack new HelloWorld yesod-sqlite).

fake edit: ok, i found a 'GHC' entry under terminals where the following lines appear when I open a new .hs file:


i'm guessing the hspec dependency is being a problem? any idea how i can fix that?
I don't understand the haskell tooling well enough to say why this is happening, but it looks like you can fix this by forcing stack to get some additional dependencies:
code:
stack build hspec
stack build yesod-test
These are presumably dependencies of the project and not the plugin, so I don't understand why these are needed when the plugin tries to run ghci but not for stack build; are these associated with different targets than the executable or something? (I assume that this may partly be a bug with the plugin in that it doesn't run stack ghci with the proper command to pull in the packages for some reason?)

NihilCredo
Jun 6, 2011

iram omni possibili modo preme:
plus una illa te diffamabit, quam multæ virtutes commendabunt

mystes posted:

I don't understand the haskell tooling well enough to say why this is happening, but it looks like you can fix this by forcing stack to get some additional dependencies:
code:
stack build hspec
stack build yesod-test
These are presumably dependencies of the project and not the plugin, so I don't understand why these are needed when the plugin tries to run ghci but not for stack build; are these associated with different targets than the executable or something? (I assume that this may partly be a bug with the plugin in that it doesn't run stack ghci with the proper command to pull in the packages for some reason?)

thank you! did you find the solution on google? after i fixed the hspec dep, it did indeed require yesod-test as well, but i hadn't posted that

no type lens yet but at least errors and completions work

mystes
May 31, 2006

NihilCredo posted:

thank you! did you find the solution on google? after i fixed the hspec dep, it did indeed require yesod-test as well, but i hadn't posted that
No, I just tried it myself after your post.

quote:

no type lens yet but at least errors and completions work
For me the types work, but as with all the other vscode plugins for haskell, you can't see them until you get rid of all errors in the file.

Toady
Jan 12, 2009

eschaton posted:

the Haskell community should rewrite git in Haskell

and tell you to interact with the functions from the REPL to use it

i wish apple would start an open source alternative. git can be really frustrating to use

Hunter2 Thompson
Feb 3, 2005

Ramrod XTreme

suffix posted:

decent answers imo

you could keep a range minimum query table updated with ln(n) time per insertion, not too hard to code in c

for o(1):
keep a double-ended queue of (position, value) pairs that will have two invariants
- from oldest to newest value
- from lowest to highest value
when you insert a new sample
- pop the oldest sample off the start if it's too old
- pop all values bigger than this value off the end - they will drop off before the new value, so they can never be the minimum
- insert the new value

id visualize it by considering the two cases of always-increasing and always-decreasing samples -
for always-decreasing we can just throw away the old samples, for always-increasing we need to keep them stacked away until it's their time to be the minimum

much appreciated, i'd never heard about minimum query tables until now

however, i have a dumb baby question: how do you impose both oldest-to-newest and lowest-to-highest invariants simultaneously?

Finster Dexter
Oct 20, 2014

Beyond is Finster's mad vision of Earth transformed.
cjs: trying to run Go tests and bypass the cached test results, i.e. force the tests to run even if no code change was detected.

I looked through the docs and nothing is listed as a way to disable the test caching. Oh but I found a github issue where someone asked this and after being told that github isn't an appropriate place to learn go, was directed to the release notes for Go 1.10.

quote:

Test caching applies only to successful test results; only to go test commands with an explicit list of packages; and only to command lines using a subset of the -cpu, -list, -parallel, -run, -short, and -v test flags. The idiomatic way to bypass test caching is to use -count=1.

How the flying gently caress is -count=1 ~~idiomatic~~? That's about as idiomatic as those knucklehead git commands posted a few pages back.

There's a light at the end of this tunnel though... as we might be ending this horrible Go excursion and go back to the original .net core platform we were originally going to use. I won't go into exhaustive detail, but the Russian contractors managed to pull their heads out of their asses and fix some of their broken-rear end .net poo poo so we might have a usable codebase from them.

I am so seriously sick of Go's "idiomatic" bullshit right now.

Slurps Mad Rips
Jan 25, 2009

There's No Guarantee

prisoner of waffles posted:

In the case where there are no fields and all methods are pure virtual, yeah, that's quite similar to Java's/C#'s/Go's/ God knows how many other languages' interface concept

e: technically having _any_ pure virtual methods means the class is abstract, having _only_ pure virtual methods means the class is an interface (?)

sort of. you can still write an implementation for a pure virtual function and the compiler will not complain (nor will the linker)

Shaggar
Apr 26, 2006

Finster Dexter posted:

cjs: trying to run Go tests and bypass the cached test results, i.e. force the tests to run even if no code change was detected.

I looked through the docs and nothing is listed as a way to disable the test caching. Oh but I found a github issue where someone asked this and after being told that github isn't an appropriate place to learn go, was directed to the release notes for Go 1.10.


How the flying gently caress is -count=1 ~~idiomatic~~? That's about as idiomatic as those knucklehead git commands posted a few pages back.

There's a light at the end of this tunnel though... as we might be ending this horrible Go excursion and go back to the original .net core platform we were originally going to use. I won't go into exhaustive detail, but the Russian contractors managed to pull their heads out of their asses and fix some of their broken-rear end .net poo poo so we might have a usable codebase from them.

I am so seriously sick of Go's "idiomatic" bullshit right now.

they misspelled idiotic.

mystes
May 31, 2006

Finster Dexter posted:

cjs: trying to run Go tests and bypass the cached test results, i.e. force the tests to run even if no code change was detected.

I looked through the docs and nothing is listed as a way to disable the test caching. Oh but I found a github issue where someone asked this and after being told that github isn't an appropriate place to learn go, was directed to the release notes for Go 1.10.


How the flying gently caress is -count=1 ~~idiomatic~~? That's about as idiomatic as those knucklehead git commands posted a few pages back.

There's a light at the end of this tunnel though... as we might be ending this horrible Go excursion and go back to the original .net core platform we were originally going to use. I won't go into exhaustive detail, but the Russian contractors managed to pull their heads out of their asses and fix some of their broken-rear end .net poo poo so we might have a usable codebase from them.

I am so seriously sick of Go's "idiomatic" bullshit right now.
To be fair:

quote:

id·i·om
ˈidēəm
noun
1. a group of words established by usage as having a meaning not deducible from those of the individual words (e.g., rain cats and dogs, see the light ).

eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?

Toady posted:

i wish apple would start an open source alternative. git can be really frustrating to use

it’s not Apple, but Eric Sink of SourceGear created an alternative called Veracity back in the day that was pretty good

it did a few things extremely right:

  • It was written by professionals who understand version control systems.
  • It was written in portable C from the start.
  • It tried to have as few dependencies as possible beyond POSIX and SQLite, to stay maximally portable.
  • It was implemented as a library and a front-end, to make it easy to integrate with IDEs.
  • It was BSD-licensed, to make it easy to integrate with IDEs.
  • It properly versioned file contents, directory contents, and metadata.
  • It attempted to provide a consistent UI adopting existing terminology from its command line interface.

unfortunately it also did a few things wrong that suppressed adoption and ultimately led to its failure in the market:

  • It didn’t support rebase, for philosophical reasons (Shaggar-esque “You’re wrong to ever want to rewrite history, even locally on a branch, and we won’t help you do that.”)
  • It didn’t support bisect, which has been one of git’s killer features.
  • Its developers spent a lot of time on features nobody needed: user accounts, a built-in bug tracking system, burn down charts, an embedded web server with wiki, etc.

there’s an informative comparison of Veracity with other distributed version control systems on its site

Shaggar
Apr 26, 2006
I have no idea what the use case is for blowing away history in a version control system. like the entire point of the thing is to preserve history.

Blinkz0rz
May 27, 2001

MY CONTEMPT FOR MY OWN EMPLOYEES IS ONLY MATCHED BY MY LOVE FOR TOM BRADY'S SWEATY MAGA BALLS
incremental commits like "wip" or "linting" or "wtf" that will always stay local should probably be rewritten to represent the final units of work before pushed to the remote

Adbot
ADBOT LOVES YOU

Shaggar
Apr 26, 2006
why even bother to commit them locally? if they're worth committing they're worth keeping.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply