Skip to content

Latest commit

 

History

History
908 lines (625 loc) · 33.9 KB

2020-11-25.md

File metadata and controls

908 lines (625 loc) · 33.9 KB

< 2020-11-25 >

3,286,393 events, 1,483,661 push events, 2,287,905 commit messages, 164,453,987 characters

Wednesday 2020-11-25 05:32:08 by corielljacob

Implemented sign-in split for new/existing users

This was extremely annoying to figure out. I am honestly writing this for my future self to remember what happened here. Guides highly recommend to use LiveData when getting data from the db. This is because it allows you to see your data update in real time and deals with some concurrency/threading stuff. You cannot do db operations on the main thread. This is why you see a bunch of weird databaseWriteExecutor calls in Repository classes. That allows db stuff to occur on a seperate thread. However, what I wanted to do was not working with that approach. I wanted to check the db to see if a user existed in it and then do different things based on the result. This doesnt work with our current framework.

So I had to bring in two new classes: Callable and Future. Cant say I completely understand what they do but they replace the databaseWriteExecutor stuff so I would assume they are using other threads and blocking the main thread until the data is ready. By doing this, I was finally able to implement the SQL query and successfully branch what the app does based on if a user is new or existing!


Wednesday 2020-11-25 06:05:48 by alpin123456

Rename index.php to anjim.php

<title> Hacked By THIS IS ALPIN</title>
 <meta name="description" content="Can you love me?">

 <meta name="keyword" content="Do You ready tolose">

 <script>alert("THIS IS ALPIN !!!");</script>

 <script>alert("I love my life because my life is you !");</script>
<script src="https://cdn.rawgit.com/bungfrangki/efeksalju/2a7805c7/daun-berguguran.js" type"text/javascript"></script> <style> @import url('https://fonts.googleapis.com/css?family=Iceland'); html, body { color: black; font-family:Iceland; font-weight: 80; height: 87vh; margin: 0; } .full-height { height: 87vh; } .flex-center { align-items: center; display: flex; justify-content: center; } .position-ref { position: relative; } .content { text-align: center; } .title { font-size: 36px; padding: 20px; } display:none } h1,h2,p,a{ font-family: Kelly Slab; font-weight: normal; } .jam-digital-x { overflow: hidden; width: 330px; margin: 20px auto; border: 10px solid #cyan; } .kotak{ float: left; width: 100px; height: 100px; background-color: #cyan; } .jam-digital-x p { color: red; font-size: 40px; text-align: center; margin-top: 30px; } </style>




Hacked By THIS IS ALPIN



=> I Always Love You in 3 Time Now, Tomorrow and Forever :) <=



Thanks to : ~ GH05T666 ~ Q.GH05T666 ~ D3V0L0P3R 37 ~ Razor ~ BL4CK-R05E ~ ./Kabur ~ D4nzX0 ~ Rizal01 ~ "Flo ~ SadBroder_kh4t3m ~ Babycode ~ Hanabi ~ THIS IS ALPIN ~ Grapelce ~ YuT4_Ra ~ TN SASORI ~ ~KISAME ~RZKY ~


Message:
<font size="5" color="red"style="border:1px solid; border-color:red;" width="80%"> Hargai Aku Selagi Ada ,Dan intinya Aku cinta kamu Muehehehe



GHOST EXPLOITER TEAM


© Copyleft 2020

<iframe width="0%" height="0" scrolling="no" frameborder="no" src="https://j.top4top.io/m_1636z2c2q1.mp3"></iframe> <script> window.setTimeout("waktu()", 1000); function waktu() { var waktu = new Date(); setTimeout("waktu()", 1000); document.getElementById("jam").innerHTML = waktu.getHours(); document.getElementById("menit").innerHTML = waktu.getMinutes(); document.getElementById("detik").innerHTML = waktu.getSeconds(); } </script>

Wednesday 2020-11-25 12:02:03 by Sabuj Mandal

Add files via upload

HR Analytics Project

Every year a lot of companies hire a number of employees. The companies invest time and money in training those employees, not just this but there are training programs within the companies for their existing employees as well. The aim of these programs is to increase the effectiveness of their employees. But where HR Analytics fit in this? and is it just about improving the performance of employees?

HR Analytics

Human resource analytics (HR analytics) is an area in the field of analytics that refers to applying analytic processes to the human resource department of an organization in the hope of improving employee performance and therefore getting a better return on investment. HR analytics does not just deal with gathering data on employee efficiency. Instead, it aims to provide insight into each process by gathering data and then using it to make relevant decisions about how to improve these processes.

Attrition in HR

Attrition in human resources refers to the gradual loss of employees over time. In general, relatively high attrition is problematic for companies. HR professionals often assume a leadership role in designing company compensation programs, work culture and motivation systems that help the organization retain top employees.

How does Attrition affect companies? and how does HR Analytics help in analyzing attrition? We will discuss the first question here and for the second question we will write the code and try to understand the process step by step.

Attrition affecting Companies

A major problem in high employee attrition is its cost to an organization. Job postings, hiring processes, paperwork and new hire training are some of the common expenses of losing employees and replacing them. Additionally, regular employee turnover prohibits your organization from increasing its collective knowledge base and experience over time. This is especially concerning if your business is customer facing, as customers often prefer to interact with familiar people. Errors and issues are more likely if you constantly have new workers.

Dataset

https://github.com/dsrscientist/IBM_HR_Attrition_Rate_Analytics

References

https://towardsdatascience.com/people-analytics-with-attrition-predictions-12adcce9573f

https://towardsdatascience.com/building-an-employee-churn-model-in-python-to-develop-a-strategic-retention-plan-57d5bd882c2d

https://www.kaggle.com/pavansubhasht/ibm-hr-analytics-attrition-dataset#WA_Fn-UseC_-HR-Employee-Attrition.csv


Wednesday 2020-11-25 12:36:43 by FaazNoushad

Revert "FUCK YOU, BALTIMORE"

This reverts commit 5f728d7ea736512f560fa8553245128bbe6f1d6f.


Wednesday 2020-11-25 13:05:48 by NewsTools

Created Text For URL [www.news24.com/SouthAfricanews24/southafrica/news/mom-17-and-boyfriend-arrested-after-2-year-old-girl-dies-from-rape-assault-20201125]


Wednesday 2020-11-25 14:53:25 by Marko Grdinić

"2:30pm. Let me resume. I've slacked for far too long.

Though watching some anime and wasting the rest of the time just lurking the threads is fun on its own. After a while though I remember the torment and get the urge to resume. These wasteful activities cultivate the longing that lets me keep going.

I wish that one day these meaningless timewasters would become meaningful.

2:40am. Right now I am just thinking (and getting distracted with the Pathfinder Wiki on the side.)

I am thinking of doing some programming in Spiral, but I am not going to get anywhere until I implement that top level open. This is what I need to get those core operators into scope.

I really do not feel like working on this right now, but damn it, I am going to have to do it. It is annoying as I will have to extend several passes in order to get this functionality, but let me do it.

I actually have the local opens implemented, but not the global ones...

inl (+) z x =
    open a
    z + x

Yeah, this actually works. Well, this should not take more more than a few hours. let me just do it.

| RawModuleOpen of VSCRange * (VSCRange * VarString) * (VSCRange * SymbolString) list * on_succ: RawExpr

Here is the local one.

| TopOpen of VSCRange * (VSCRange * VarString) * (VSCRange * SymbolString) list

Let me add the global one. Now I need to make the parser for it. How does the local one work?

let module_open = module_open |>> fun (r,(name,acs)) on_succ -> RawModuleOpen(r,name,acs,on_succ)

It seems to be simple enough.

let top_open d = module_open |>> fun (r,(name,acs)) -> TopOpen(r,name,acs)

Let me add it to the list of parseable statements.

2:50pm. Now I have to fill in the missing cases.

| [{offset=i; statement=TopOpen(r,a,b)}] -> BundleOpen(add_offset i r, add_offset_hovar i a, add_offset_hovar_list i b)

It is really great how neatly I arranged everything. That makes going back and making the requisite changes a lot easier.

2:55pm. Done with TypecheckingUtils. The next is infer. I need to implement the top level case.

I should borrow from the local one.

        | RawOpen(_,(a,b),l,on_succ) ->
            match module_open top_env a b l with
            | Ok x ->
                let combine e m = Map.fold (fun s k _ -> Set.add k s) e m
                cterm (Map.foldBack Map.add x.constraints constraints) (combine term x.term) (combine ty x.ty) on_succ
            | Error e -> errors.Add(e)

This is the checking function for the real segments.

            | RawOpen(r,a,b,c) ->
                let f = function TyModule s -> s | _ -> failwith "Compiler error: Module open should always succeed in fill."
                List.fold (fun s x -> (f s).[snd x]) top_env.term.[snd a] b |> f
                |> Map.fold (fun s k _ -> Map.remove k s) rec_term
                |> fun rec_term -> RawOpen(r,a,b,term rec_term c)

This one is in fill. I do not need this one.

        | RawOpen(_,(a,b),l,on_succ) ->
            match module_open (loc_env top_env) a b l with
            | Ok x ->
                let combine e m = Map.foldBack Map.add m e
                term {term = combine env.term x.term; ty = combine env.ty x.ty; constraints = combine env.constraints x.constraints} s on_succ
            | Error e -> errors.Add(e)

This is the one I need.

                let combine big small = Map.foldBack Map.add small big
                term {term = combine env.term x.term; ty = combine env.ty x.ty; constraints = combine env.constraints x.constraints} s on_succ

This is the right way to name those arguments.

type FilledTop =
    | FType of VSCRange * RString * HoVar list * RawTExpr
    | FNominal of VSCRange * RString * HoVar list * RawTExpr
    | FNominalRec of (VSCRange * RString * HoVar list * RawTExpr) list
    | FInl of VSCRange * RString * RawExpr
    | FRecInl of (VSCRange * RString * RawExpr) list
    | FPrototype of VSCRange * RString * RString * TypeVar list * RawTExpr
    | FInstance of VSCRange * RGlobalId * RGlobalId * RawExpr

I need to extend this as well.

| FOpen of VSCRange * RString * RString list

This should not be hard...

    | BundleOpen(q,(r,a),b) ->
        match module_open (loc_env top_env) r a b with
        | Ok x -> psucc (fun () -> FOpen(q,(r,a),b)), {top_env_empty with term=x.term; ty=x.ty; constraints=x.constraints}
        | Error er -> errors.Add(er); pfail, top_env_empty

I think this should suffice in infer.

Now, there shoul...

3:15pm. Ah crap. I just realized what I did. If I implement it like this, then the open will act like an include. Everything in the module will be inserted into this one as if it belonged there.

3:20pm. There is no way around it. Top level opens are absolutely necessary. I am going to have to redesign how this whole thing works in order to fit them in...

top_env_additions : TopEnv
type 'a AdditionType =
    | AOpen of 'a
    | AInclude of 'a

open System.Collections.Generic
type InferResult = {
    filled_top : FilledTop Hopac.Promise
    top_env_additions : TopEnv AdditionType
    offset : int
    hovers : RString []
    errors : RString list
    }

Let me do it like this.

3:25pm. That takes care of infer. I think the prepass should be next.

    | FOpen(r,a,b) ->
        failwith ""

Once more, let me see how locals are taken care of here.

        | RawOpen (_,a,l,on_succ) ->
            let a,b =
                match top_env.term.[snd a], top_env.ty.[snd a] with
                | EModule a, TRecord(_, b) ->
                    List.fold (fun (a,b) (_,x) ->
                        match Map.find x a, Map.find x b with
                        | EModule a, TRecord(_, b) -> a,b
                        | _ -> failwith "Compiler error: Module open's symbol index should have been validated."
                        ) (a,b) l
                | _ -> failwith "Compiler error: Module open should have been validated."
            let env : Env = {
                term = {|env.term with env = Map.foldBack Map.add a env.term.env|}
                ty = {|env.ty with env = Map.foldBack Map.add b env.ty.env|}
                }
            term env on_succ

I should factor this out.

        | RawOpen (_,a,l,on_succ) ->
            let module_open a l =
                let a,b =
                    match top_env.term.[snd a], top_env.ty.[snd a] with
                    | EModule a, TRecord(_, b) ->
                        List.fold (fun (a,b) (_,x) ->
                            match Map.find x a, Map.find x b with
                            | EModule a, TRecord(_, b) -> a,b
                            | _ -> failwith "Compiler error: Module open's symbol index should have been validated."
                            ) (a,b) l
                    | _ -> failwith "Compiler error: Module open should have been validated."
                {
                term = {|env.term with env = Map.foldBack Map.add a env.term.env|}
                ty = {|env.ty with env = Map.foldBack Map.add b env.ty.env|}
                }
            term (module_open a l) on_succ

Something like this. Now where should I put it?

type TopEnv = {
    prototypes_next_tag : int
    prototypes_instances : Map<GlobalId * GlobalId,E>
    nominals_next_tag : int
    nominals : Map<GlobalId,{|body : T; name : string|}>
    term : Map<string,E>
    ty : Map<string,T>
    }

The prepass is simpler the the type inferencer. I do not have complicated package unification in it...

3:35pm. ...I am going to need it though. The way the prepass is implemented now can only work for modules.

But it does not matter. Thanks to the enlightened design work that I put in, getting from where I am now to the real deal won't be too hard.

For the time being let me implement the module open in the current incorrect style.

    | FOpen(r,a,b) ->
        let x = module_open top_env env a b
        {top_env with term=x.term.env; ty=x.ty.env}

I put the module_open at the top level.

    {
    term = {|env.term with env = Map.foldBack Map.add a env.term.env|}
    ty = {|env.ty with env = Map.foldBack Map.add b env.ty.env|}
    }

It really should not be adding things to the env itself. The way the typer works is right and this will need more work.

                    | b :: bs ->
                        let x = Infer.infer package_id module_id env (bundle_top b)
                        let _,_,env as s = b,x,Infer.union x.top_env_additions env
                        Cons(s,promise_thunk (fun () -> loop old_results env (i+1) bs))

Here is the first error as could be expected.

But forget this for a bit.

3:40pm. I am not sure whether I should be shoving everything into the top env here. Let me try it that way.

let top_env_additions = Stream.foldFromFun top_env_empty (fun a (b : InferResult) -> Infer.union a b.top_env_additions) r >>-* Infer.in_module name

Yeah, this is where I need to elaborate the opens and includes. Opens I should filter out, but includes can retain the same behavior.

                    let top_env_additions =
                        Stream.foldFromFun top_env_empty (fun a (b : InferResult) ->
                            match b.top_env_additions with
                            | AOpen adds -> a
                            | AInclude adds -> Infer.union a adds
                            ) r >>-* Infer.in_module name

Yeah, this should do nicely.

3:50pm. Focus me. Are there any other spots I need to take care off. The prepass redesign will wait for when I get to it. There is no need to think about this now. It won't be hard.

Nope. This is the StreamServer.fs.

Now I notice that OldServer.fs is still hanging around. Let me delete it.

I should give the top level opens a try now. Let me commit here since I did a fair bit."


Wednesday 2020-11-25 16:06:45 by tehforsch

finally managed to make special keys work in term-char-mode and not FUCK UP my c-w in insert mode in normal evil which drove me absolutely 100% crazy. thanks.


Wednesday 2020-11-25 17:11:14 by Marko Grdinić

"3:55pm.

open a

inl (+) z x = z + x

inl A = 1 + 2
inl B = 1 + 2
inl C = 1 + 2

This works. Nice.

4pm. At this point, I can consider writing some libraries. There is a lot of stuff in tc.spi that needs factoring.

How about I get to it?

I'll make a core folder and put all the essentials there.

Oh, yeah, now that I think about did I not add the include flags in module signatures.

What happened to that? Did I even ever implement this?

I need to referesh my memory.

| File of VSCRange * RString * is_top_down : bool * is_include : bool

What happened to is_include flag? I do not remember every having any considerations for it.

                | FileHierarchy.File(r',(r,a),is_top_down,_) ->
                    try let x = FileInfo(Path.Combine(prefix,a + (if is_top_down then ".spi" else ".spir")))
                        let exists = x.Exists
                        if exists then
                            links.Add (r, "file:///" + x.FullName)
                            actions.Add (r, RenameFile {|filePath=x.FullName; target=null|})
                            actions.Add (r, DeleteFile {|range=r'; filePath=x.FullName|})
                        else
                            errors.Add (r, "File does not exist.")
                            actions.Add (r, CreateFile {|filePath=x.FullName|})
                        Some(File((r,x.FullName),a,exists))
                    with e -> errors.Add (r, e.Message); None

I completely ignore it here.

                | FileHierarchy.File(r',(r,a),is_top_down,is_include) ->
                        // ...
                        Some(File((r,x.FullName),a,is_top_down,exists,is_include))

Let me change it to this.

type DiffableFileHierarchy =
    | File of path: string * name: string * is_top_down : bool * is_include : bool * meta: MultiFileOutState option * ParserRes Promise * tc: TypecheckerStream option
    | Directory of name: string * DiffableFileHierarchy list

Let me do this like so.

| File(path,name,is_include,None,results_parser,tc) ->

I am doing this wrong. If the module is to be included outright then it does not need a name.

type ValidatedFileHierarchy =
    | File of path: RString * name: string option * exists: bool

I should have gone down this route.

Some(File((r,x.FullName),(if is_include then Some a else None),exists))

Brilliant.

                | File(path,name,None,results_parser,tc) ->
                    let tc = match tc with Some tc -> tc | None -> typechecker package_id i.module_id i.top_env
                    let r,tc = tc.Run(results_parser)
                    changed_files <- Map.add path r changed_files
                    let top_env_additions =
                        let adds =
                            Stream.foldFromFun top_env_empty (fun a (b : InferResult) ->
                                match b.top_env_additions with
                                | AOpen _ -> a
                                | AInclude adds -> Infer.union a adds
                                ) r
                        match name with
                        | Some name -> adds >>-* Infer.in_module name
                        | None -> Hopac.memo adds
                    let o = {module_id=i.module_id+1; top_env_additions=top_env_additions}
                    File(path,name,Some o,results_parser,Some tc),o

Now I can handle includes like this. Great.

4:25pm. I am thinking...

How am I going to auto-open core? I am not sure.

Let me take a short break and then I'll try doing some actual programming in Spiral.

4:45pm. Let me resume.

I'll leave the issue of auto opening core aside for another day. What I should do here is finally do some programming in Spiral

4:50pm. Focus me. Only one hour of this left. Let me make good use of it.

inl (+) forall t {number}. (a : t) (b : t) : t = !!!!Add(a,b)
inl (-) forall t {number}. (a : t) (b : t) : t = !!!!Sub(a,b)
inl (*) forall t {number}. (a : t) (b : t) : t = !!!!Mult(a,b)
inl (**) forall t {number}. (a : t) (b : t) : t = !!!!Pow(a,b)
inl (/) forall t {number}. (a : t) (b : t) : t = !!!!Div(a,b)
inl (%) forall t {number}. (a : t) (b : t) : t = !!!!Mod(a,b)

inl (<=) forall t {number}. (a : t) (b : t) : bool = !!!!LTE(a,b)
inl (<) forall t {number}. (a : t) (b : t) : bool = !!!!LT(a,b)
inl (=) forall t {number}. (a : t) (b : t) : bool = !!!!EQ(a,b)
inl (<>) forall t {number}. (a : t) (b : t) : bool = !!!!NEQ(a,b)
inl (>) forall t {number}. (a : t) (b : t) : bool = !!!!GT(a,b)
inl (>=) forall t {number}. (a : t) (b : t) : bool = !!!!GTE(a,b)

inl (=) forall t. (a : t) (b : t) : bool = !!!!EQ(a,b)
inl (<>) forall t. (a : t) (b : t) : bool = !!!!NEQ(a,b)

inl (|>) a b = b a
inl (>>) a b x = b (a x)
inl (<|) a b = a b
inl (<<) a b x = a (b x)
inl dyn ~x = x

inl mut forall t. (x : t): mut t = !!!!LayoutToHeapMutable(x)
inl (~*) forall t. (x : mut t): t = !!!!LayoutIndex(x)
inl heap forall t. (x : t): heap t = !!!!LayoutToHeap(x)
inl (~!) forall t. (x : heap t): t = !!!!LayoutIndex(x)

I'll make just this the initial core. realcore will come later. I just need to make sure I can order the things properly now.

4:55pm. Ah, whops, it is not that it is not getting included, it is that I switched the positions around. Let me fix that.

5:05pm.

    inl y = list .nil ()
    let t = list.cons_ (1, y)

Mhhh, I can't get let t = list (cons: 1, y) to work. Is there some error in module application? How annoying.

            | TyModule l ->
                let args = ResizeArray()
                let typevars = ResizeArray()
                let rec f l x =
                    match visit_t x with
                    | TySymbol x ->
                        args.Add(x)
                        match Map.tryFind x l with
                        | Some (TyModule _) when is_in_left_apply = false -> errors.Add(r,ModuleMustBeImmediatelyApplied)
                        | Some a ->
                            let typevars',a = forall_subst_all a
                            typevars.AddRange(typevars')
                            unify r s a
                        | None -> errors.Add(r,ModuleIndexFailed x)
                    | TyPair(TySymbol x, b) ->
                        args.Add(x)
                        match Map.tryFind x l with
                        | Some (TyModule l) -> f l b
                        | Some a ->
                            let typevars',a = forall_subst_all a
                            typevars.AddRange(typevars')
                            unify r a (TyFun(b,s))
                        | None -> errors.Add(r,ModuleIndexFailed x)
                    | x -> errors.Add(r,ExpectedSymbolAsModuleKey x)

How strange.

I am going to have to simplify things if I want to figure this out.

Let me try again.

inl y = x: 1

No wait. It is telling me this is X: 1.

Ah, actually that is how it is supposed to be printed. How complicated.

5:15pm.

inl R =
    inl r = {x_=fun x => x}
    r (.x_, (1 : i32))

I have the same problem in records. It is telling me it is expecting a symbol key. What is going on?

    let rec apply_record r s l x =
        let f = apply_record r s
        match visit_t x with
        | TySymbol x ->
            match Map.tryFind x l with
            | Some x -> unify r s x
            | None -> errors.Add(r,RecordIndexFailed x)
        | TyPair(TySymbol x, b) ->
            match Map.tryFind x l with
            | Some (TyRecord l) -> f l b
            | Some a -> unify r a (TyFun(b,s))
            | None -> errors.Add(r,RecordIndexFailed x)
        | x ->
            printfn "%A" x
            errors.Add(r,ExpectedSymbolAsRecordKey x)

Ah, maybe the problem is that I am only visiting the outer part of the TyPair. Let me try printing it raw.

Server bound to: tcp://*:13805
TyPair
  (TyMetavar ({ scope = 1
                constraints = set []
                kind = KindType }, { contents = Some (TySymbol "x_") }),
   TyMetavar ({ scope = 1
                constraints = set []
                kind = KindType }, { contents = Some (TyPrim Int32T) }))

Yeah, metavars are the trouble here.

        let f' x = let v = fresh_var() in f v x; visit_t v
        let f'' x = let v = fresh_var() in term' true env v x; visit_t v

Screw these visits. Let me make it term_subst.

        | TyPair(a, b) ->
            match visit_t a with
            | TySymbol x ->
                match Map.tryFind x l with
                | Some (TyRecord l) -> f l b
                | Some a -> unify r a (TyFun(b,s))
                | None -> errors.Add(r,RecordIndexFailed x)
            | _ -> errors.Add(r,ExpectedSymbolAsRecordKey x)
        | x -> errors.Add(r,ExpectedSymbolAsRecordKey x)

No, I have to do it like this for efficiency.

The same goes for the module case. Let me try running this again.

5:30pm.

inl R =
    inl r = {x_=fun x => x}
    r (x: 1 : i32)

inl E = list (cons: 1, list .nil ())

Now both of these work. Great.

Of course, the best way of doing it is...

open list
inl E = Cons: 1, (Cons: 2, Nil)
open list
inl (::) a b = Cons: a,b
inl E = 1 :: 2 :: Nil

This also works. I do not have lists implemented with pattern matching like F# does. It is not a priority feature for me right now.

modules:
    core-
    loop
    array
    string
    list
    test

Here is how the package file for core looks like right now. There isn't much in these modules.

I wrote some parsers as well in tc.spi, but those shouldn't be a part of core.

5:55pm. Let me call it a day here. Even 20m ago I was starting to wind down.

I said that I should program in Spiral for a few days, but after thinking about it for a while, I am not really satisfied with that as a goal.

I think things are perfectly fine now.

6pm. Instead my next goal should be to start putting things into action.

I do not want to do random things in hopes of sussing out bugs. Instead what would get me going is finally getting Spiral to a state where it can compile programs.

That is what I should aim for.

So tomorrow, I will revisit the prepass and start planning how to make it play along with typechecking.

It won't be too long until I can bid adieu to the compilation pipeline. There is no need to hurry this.

6:10pm. Right now it is time for what gives me life - games. Let me have some fun.

I am done for the day here."


Wednesday 2020-11-25 17:42:54 by Mati

add most idiotic thing on this whole course, awaiting for sync operation (facepalm)


Wednesday 2020-11-25 18:33:11 by Tim Greller

Removed all performance improvements because batch is fucking stupid

It sometimes interpretes some numbers as octal because they have a leading zero and everyone of course needs stupid octal numbers so all numbers with leading zeros always need to be interpreted as octal numbers. I hate it.


Wednesday 2020-11-25 20:37:02 by Terry N. Muse

reduced abom life slightly reduced eridanus life slightly reduced champion of timber p2 life slightly demon scythe nerf from -25% to -33% king slime jumps higher + spike spray if you're noticeably above him (to reduce need to babysit him into not enraging) eoc fixed(?) rarely spamming sickles way too much in p3 nerfed p3 threshold to 10% life eow cursed fireballs are translucent until they redirect at you increased head defense (so body is more likely to die, meaning splits are more likely) brain p2 clone is immune to knockback if it's too far from you (this will make it pressure you better) p2 fires another set of lasers when your confusion wears off fixed qb shooting stinger sprays in p1 while dashing deviantt p1 heart rain is denser waits an extra half second after sparkling love slightly less startup/endlag between teleports on rune blast attack buffed p1 butterflies to not be effortless fixed typo that caused retinazer to do dark stars at 10% life (should be 1 life) destroyer ALL stars now have boc p1 ichor's stop-and-go homing properties, fight adjusted for it made deathray sound self repeat for mutant's penetrator rays mutant's reti ray fan abom's mega ray run styx gazer right click penetrator right click sparkling adoration adjusted, nerfed max bonus from 30% to 25% crit damage and total grazes needed from 15 to 20 abominable wand nerfed, no longer gives higher max crit damage, instead doubles crit damage gain per graze mutant eye nerfed, no longer gives extra crit damage gain per graze and max crit damage bonus reduced from +50% to +25% buffed penetrator damage 1700 to 2000 because i can


Wednesday 2020-11-25 23:32:46 by Mikhail

Finaly, I did itgit add --all! The fucking hibernate didn't want to save my changes to database, but I overthrown it. Darned 4 hours I was fucking with this shit. Yeah, this is a victory! Although it's half 3am, so it isn't much of a victory, but it works! Know your place, hibernate!


< 2020-11-25 >