Designing and writing code get me money so I can have food so they get a lot of my attention.
- Mar 2021
-
tylergaw.com tylergaw.com
-
-
I get asked a lot which I want to do more; design or write code? I answer, “yes.”
-
Being a better designer makes me a better engineer and being a better engineer makes me a better designer.
-
;
:
-
;
:
-
There are plenty of words and acronyms you can put in front of “Designer”. Product, Web, Graphic, UX, UI, IA, etc. The lines between each are blurry, and the titles go in and out of fashion. Depending on the project and team I’m working alongside, I practice them all to varying degrees. I prefer to call myself; “A Designer.”
-
-
-
bugs.chromium.org bugs.chromium.org
-
This is a huge disadvantage to all web developers. Why can't we at least have the ability to turn validation messages off? Why do we have to re-implement a validation system when you already have one in place, but all we want is the validation aspect and not the built in messaging? By taking away the ability to style elements that CHROME adds to the browser window, it is hurting developers professional appearance. We just want to use Chrome's WONDERFUL validation system with our own error messages. Either let us style them, or let us hide them, but don't make us re-invent the wheel just because you don't want our code to be "browser specific". Writing a new validation system just for Chrome is going to be much more "browser (chrome) specific" code than setting "::-webkit-validation-bubble, ::-webkit-validation-bubble * { display: none; }. This isn't just an annoyance, it's a huge disadvantage to any developer who wants to easily utilize Chrome's built in validation. I usually brag about how wonderful Chrome is, but I'm starting to think it's heading in another direction...
-
-
-
-
-
girliemac.com girliemac.com
-
the client form validation is the one I like a lot, because, for example, by adding required attribute to an input, I don’t need to write any additional JavaScript to warn a user, when the user submits a form without filling out the required fields
-
There are numerous user interface state pseudo-classes. You’ve probably already known :hover, :active etc. According to this W3C Candidate Doc, there are additional pseudo-classes defined, such as :valid, invalid, in-range, out-of-range, required, optional, read-only and read-write.
-
-
www.the-art-of-web.com www.the-art-of-web.com
-
Website: <input type="url" name="website" required pattern="https?://.+"> Now our input box will only accept text starting with http:// or https:// and at least one additional character
-
-
stackoverflow.com stackoverflow.com
-
The document.evaluate() method evaluates an XPATH query/expression. So you can pass XPATH expressions there, traverse into the HTML document and locate the desired element.
-
Array.from(document.querySelectorAll('div')) .find(el => el.textContent === 'SomeText, text continues.');
-
-
stackoverflow.com stackoverflow.com
-
The TreeWalker API gives you only the #text Nodes, and then you do what you want with them.
first sighting: TreeWalker 
-
You could also use the NodeIterator API, but TreeWalker is faster
-
All those 'modern' and 'super-modern' querySelectorAll("*") need to process all nodes and do string comparisons on every node.
-
the fastest solution because the main workload is done by the Browser Engine NOT the JavaScript Engine
-
[...document.querySelectorAll("*")].filter(e => e.childNodes && [...e.childNodes].find(n => n.nodeValue?.match("❤")))
-
Super modern one-line approach with optional chaining operator
-
Possibly use Array.prototype.filter.call instead of allocating a new array.
-
function contains(selector, text) { var elements = document.querySelectorAll(selector); return [].filter.call(elements, function(element){ return RegExp(text).test(element.textContent); }); }
-
-
developer.mozilla.org developer.mozilla.org
-
stackoverflow.com stackoverflow.com
-
This only works provided each element has a label. It will not work if you put the attribute on the element itself, because <input> elements cannot have :after pseudo elements.
-
label:after { content: attr(data-invalid); ... }
-
This question was asked over a year ago, but it's a good question that I recently encountered as well...
-
var applicationForm = document.getElementById("applicationForm"); if (applicationForm.checkValidity()) { applicationForm.submit(); } else { applicationForm.reportValidity(); }
-
-
webdevtrick.com webdevtrick.com
-
:placeholder-shown
-
-
stackoverflow.com stackoverflow.com
-
Does there exist a Unicode new-line, which I could copy-paste? (PLEASE NOTE, I DON'T ASK ABOUT THE CODE, like U+000D or whatever is considered as new line. I want the "copyable" output, like the above space (which I have put above in brackets and can be copied). So, if there is, please paste it in your answer, so I could copy it, like you copy the unicode space above from brackets.
-
-
-
The HTML5 form validation techniques in this post only work on the front end. Someone could turn off JavaScript and still submit jank data to a form with the tightest JS form validation.To be clear, you should still do validation on the server.
-
With these JavaScript techniques, the display of server validation errors could be a lot simpler if you expect most of your users to have JS enabled. For example, Rails still encourages you to dump all validation errors at the top of a form, which is lulzy in this age of touchy UX. But you could do that minimal thing with server errors, then rely on HTML5 validation to provide a good user experience for the vast majority of your users.
-
-
Dave Rupert has a good solution that uses an input's invalid event. Instead of using the :invalid pseudo selector, he adds a CSS class to the input when it becomes invalid. We will extend this approach by removing the CSS class when the element becomes valid again.
-
The input is required and initially empty, so on page load the input is :invalid and border is red. :( :(The input is :invalid until you type a legit email address, so it is red when typing. :( :(Ok, so the :invalid pseudo selector is kind of useless. Ideally we would not show an error up front or the whole time they are typing, just when they submit something unacceptable.
-
-
www.html5rocks.com www.html5rocks.com
-
-
Therefore client side validation should always be treated as a progressive enhancement to the user experience; all forms should be usable even if client side validation is not present.
-
It's important to remember that even with these new APIs client side validation does not remove the need for server side validation. Malicious users can easily workaround any client side constraints, and, HTTP requests don't have to originate from a browser.
-
Since you have to have server side validation anyways, if you simply have your server side code return reasonable error messages and display them to the end user you have a built in fallback for browsers that don't support any form of client side validation.
-
workaround
-> work around
-
Validating forms has notoriously been a painful development experience. Implementing client side validation in a user friendly, developer friendly, and accessible way is hard. Before HTML5 there was no means of implementing validation natively; therefore, developers have resorted to a variety of JavaScript based solutions.
Tags
- validation: server-side
- graceful degradation / progressive enhancement
- HTML5
- missing feature leading to less-than-ideal workarounds
- introduction/primer
- typo
- validation: server-side: need it even if you have client-side validation
- HTML: constraint validation
- good tutorial
- difficult/hard problem
Annotators
URL
-
-
stackoverflow.com stackoverflow.com
-
stackoverflow.com stackoverflow.com
-
I used this in the console to find the file and the line of the error (took it from this answer): JS_PATH = "app/assets/javascripts/**/*.js"; Dir[JS_PATH].each do |file_name| puts "\n#{file_name}" puts Uglifier.compile(File.read(file_name)) end
Didn't work for me because it was actually a .coffee file.
So I tried something similar with this:
main > Dir["*/assets/javascripts/**/*.coffee"].each { |file_name| puts "\n#{file_name}"; Sprockets::CoffeeScriptProcessor.(filename: file_name, data: File.read(file_name), cache: {}); } app/assets/javascripts/bootstrapped.js.coffee NoMethodError: undefined method `config' for nil:NilClass from /home/tyler/.gem/ruby/2.7.1/gems/sprockets-4.0.2/lib/sprockets/source_map_utils.rb:40:in `format_source_map'but it wasn't as trivial to provide the necessary environment that Sprockets wants.
But that's okay, when better_errors paused on the exception, I just jumped to the
block in Sprockets::CoffeeScriptProcessor.call sprockets (4.0.2) lib/sprockets/coffee_script_processor.rb, line 24frame and evaluated
input[:filename]to figure out which file had failed.
Obviously this information should be part of the error message itself though!!
-
I know this is old, but I got the same error and I came here from Google, so in case someone does too, this was my solution:
-
-
github.com github.com
-
afarkas.github.io afarkas.github.ioWebshim4
-
If set to true the UI of all input widgets (number, time, month, date, range) are replaced in all browsers (also in browser, which have implemented these types). This is useful, if you want to style the UI in all browsers.
-
Webshim is opinionated, that a developer should always solve a problem the HTML5 way.
-
Webshim is also more than a polyfill, it has become a UI component and widget library. Webshim enables a developer to also enhance HTML5 capable browsers with more highly customizable, extensible and flexible UI components and widgets.
And now that it's deprecated (presumably due to no longer needing these polyfills), not only do the polyfills go away (no longer maintained), but also these unrelated "extras" that some of us may have been depending on are now going away with no replacement ...
If those were in a separate package, then there would have been some chance of the "extras" package being updated to work without the base webshims polyfills.
In particular, I was using
$.webshims.addCustomValidityRulewhich adds something that you can't do in plain HTML5 (that I can tell), so it isn't a polyfill... -
-
-
html.spec.whatwg.org html.spec.whatwg.org
-
Fires an invalid event at the element
First time I've seen/heard it said that an event is fired at some target. But it sure makes sense, since it matches how "fire" is used in other senses (like shooting a gun).
-
-
stackoverflow.com stackoverflow.com
-
answered May 9 '13 at 15:29 alexander farkas
-
-
stackoverflow.com stackoverflow.com
-
You can't just use arbitrary pseudo selectors and expect it work. It's like me trying to speak Spanish in Japan and expecting japanese people to understand what I'm saying
-
-
mychartwa.providence.org mychartwa.providence.org
-
We’re doing our part to be more transparent and get data into the hands of patients quicker. Starting October 25, 2020, we’ll be releasing test results, visit notes and summaries immediately. Your provider may take up to three to five days to review your results and contact you to discuss abnormal results. Learn more here.
-
-
github.com github.com
-
markdown-it is the result of the decision of the authors who contributed to 99% of the Remarkable code to move to a project with the same authorship but new leadership (Vitaly and Alex). It's not a fork.
-
var md = require('markdown-it')('commonmark');
first sighting: require(...)(...)
How would that work with import? Not as fluidly but...
import markdownIt from 'markdown-it' let md = markdownIt('commonmark') -
-
+ adds syntax extensions
-
Configurable syntax! You can add new rules and even replace existing ones.
-
Community-written plugins and other packages on npm.
Tags
- javascript libraries
- controversial
- change of leadership
- not:
- interesting approach/solution
- syntax extensions
- competition in open-source software
- first sighting
- easily extensible with plugins/extensions
- configurable
- Markdown
- forking
- nice API
- extension API
- disagreement
- open-source software: transferring project to new maintainer
- distinction
- CommonMark
Annotators
URL
-
-
code.visualstudio.com code.visualstudio.com
-
runtimes (such as .NET and Unity)
Tags
Annotators
URL
-
-
store.steampowered.com store.steampowered.com
-
-
Starting the Game is a game about a non-experienced gamer who is trying to download, crack and play a game.
-
-
store.steampowered.com store.steampowered.com
-
Playing it now, I realise that the game isn't necessarily any easier - I'm just more patient.
Tags
Annotators
URL
-
-
store.steampowered.com store.steampowered.com
-
i need to write review so i get my badge
-
-
store.steampowered.com store.steampowered.com
-
Posting an issue on the discussion boards for a three year old game, yesterday, I wasn't holding my breath for a reply. Earlier, this morning, a dev. responded, stating they'd look at fixing it, and it was just a few hours before it were sorted!
-
-
boardgamegeek.com boardgamegeek.comDawn1
-
Players try to build a village together. As the game goes on each player secretly chooses whether they want to go for a coop victory or a single-player win.
-
-
boardgamegeek.com boardgamegeek.com
-
Dawn - March 15 Dawn on Titan - March 15
-
-
www.kickstarter.com www.kickstarter.com
-
We often are too busy. We spend our days occupied by a multitude of worries. One day, I realized that my time left in this life was getting shorter and shorter. For the first time, I felt regret and wondered, “Where did my time go?”
-
-
www.kickstarter.com www.kickstarter.com
-
Try before you buy Here's a link to the game on Tabletopia: Judean Hammer on Tabletopia
-
-
stackoverflow.com stackoverflow.com
-
// A general key transform method. Pass it a function that accepts the old key and returns // the new key. // // @example // obj = transformKeys(obj, (key) => ( // key.replace(/\b(big)\b/g, 'little') // )) export function transformKeys(source, f) { return Object.entries(source).reduce((o, [key, value]) => { o[f(key) || key] = value return o }, {}) } // Provide an object that maps from old key to new key export function rekeyObject(source, keyMap) { transformKeys(source, key => keyMap[key]) }
-
function objectMap(source,keyMap) { return Object.entries(keyMap).reduce((o,[key , newKey]) => { o[newKey]=source[key] return o;},{}) }
-
Here's another plain ES2015/2017 version
-
You really don't need underscore/lodash for this ... nowadays anyways
-
I realize the question was asked 9 years ago, but this question is (still) ranked highly in search results and I came across it today
-
-
reedbarger.com reedbarger.com
-
Replacing map / filter with a single reduce
-
-
github.com github.com
-
Recursively transform object keys with a custom key transform strategy
-
-
stackoverflow.com stackoverflow.com
-
not all answers pass this tests
-
function isObject(o) { return o instanceof Object && o.constructor === Object; }
-
An array is from a logical point of view not an object - although JavaScript handles and reports them as such. In practice however, it is not helpful to see them equal, because they are not.
-
In case you need to verify that object is instance of particular class you have to check constructor with your particular class
-
Arrays are definitely objects. Not sure why you think objects can't have a length property nor methods like push, Object.create(Array.prototype) is a trivial counterexample of a non-array object which has these. What makes arrays special is that they are exotic objects with a custom [[DefineOwnProperty]] essential internal method, but they are still objects.
-
arrays are not objects from a logical point of view. I'm speaking about program logic. It is sometimes necessary to check if an array is a "real" array and definitely not an "real" object. That's what Array.isArray() is for. Imagine you have a function which accepts an object or an array of objects.
-
function isObject (item) { return (typeof item === "object" && !Array.isArray(item) && item !== null); }
-
-
What's a primitive?
-
What's an object (i.e. not a primitive)?
-
-
github.com github.com
Tags
Annotators
URL
-
-
trailblazer.to trailblazer.to
-
In production, you will never trigger one specific callback or a particular validation, only. Your application will run all code required to create a Song object, for instance. In Trailblazer, this means running the Song::Create operation, and testing that very operation with all its side-effects.
-
There’s no need to test controllers, models, service objects, etc. in isolation
-
Run the complete unit with a certain input set, and test the side-effects. This differs to the Rails Way™ testing style, where smaller units of code, such as a specific validation or a callback, are tested in complete isolation. While that might look tempting and clean, it will create a test environment that is not identical to what happens in production.
-
Integration tests for controllers: These Smoke tests only test the wiring between controller, operation and presentation layer.
-
Unit tests for operations: They test all edge cases in a nice, fast unit test environment without any HTTP involved.
-
Internally, it creates and returns a fresh, subclassed activity (via patching) whilst replacing the step for given :id. Be advised that this does not change the original activity class.
-
This helper allows you to mock any step within a given or deeply nested activities.
-
To skip processing inside :load_user and use a mock instead, use mock_step.
Tags
- testing: mocking
- testing: test the side effects
- subclassing/inheritance
- testing: smoke tests
- testing: avoid testing implementation details
- testing: tests should resemble the way your software is used
- testing: avoid unnecessarily testing things in too much isolation, in a different way than the code is actually used (should match production)
- unnecessary
- rails: the Rails way
- testing: integration tests
- object-oriented programming
- testing: philosohy of testing
- the Trailblazer way
- testing: unit tests
- testing: fast test suite
- isolation (programming)
Annotators
URL
-
-
store.steampowered.com store.steampowered.com
-
Meta gaming at its finest.
-
Make It Indie! is an indie game about making an indie game.
-
-
www.kickstarter.com www.kickstarter.com
-
www.kickstarter.com www.kickstarter.com
-
She asked me if I could create international universal design Shogi set for foreign Shogi fans.
-
Design SHOGI pieces have been redesigned with new iconography to indicate the piece’s movement.
-
Redesigning the pieces was very difficult work, because traditional pieces have 4 specialties below.
-
Shogi is a classic game. I know many people who want to play Shogi, but the Kanji on the pieces makes it too hard to master. I have designed this Shogi with icons so anybody can learn it easily.
-
If you want to try playing to see how these pieces work in the game, you can playtest it on the Iishogi.org site (https://lishogi.org/). Last year the Iishogi designer asked me to register the Design SHOGI pieces on their site. This Iishogi.org is a free to play Shogi website. I was willing to give them permission to use them. You are free to play and switch pieces design from the piece variation section. If you register your ID, then you can play vs the A.I. easily. You can learn how the Design SHOGI pieces work there.
-
-
boardgamegeek.com boardgamegeek.comShogi1
-
I am only interested in the universal designed Shogi, like https://www.kickstarter.com/projects/logygames/design-shogi
-
-
www.kickstarter.com www.kickstarter.com
-
-
Why Kickstarter? Where else am I going to get the money to manufacture my game? No seriously, if you have a better place I can get this kind of money, please send me a message and I will do that immediately.
-
Here is a pic of me "hard at work" (aka pretending to work while getting photographed)
-
-
github.com github.com
-
It can also be included as individual modules, i.e. Hashie::Extensions::MethodReader, Hashie::Extensions::MethodWriter and Hashie::Extensions::MethodQuery.
-
The MethodAccess extension allows you to quickly build method-based reading, writing, and querying into your Hash descendant.
-
-
github.com github.com
-
-
Using ::delegates works exactly like the Forwardable module in Ruby, with one bonus: It creates the accessors in a module, allowing you to override and call super in a user module or class.
-
Uber::Option implements the pattern of taking an option, such as a proc, instance method name, or static value, and evaluate it at runtime without knowing the option's implementation.
-
-
github.com github.com
-
supermodel
Tags
Annotators
URL
-
-
guides.rubyonrails.org guides.rubyonrails.org
-
These methods should be used with caution, however, because important business rules and application logic may be kept in callbacks. Bypassing them without understanding the potential implications may lead to invalid data.
-
-
trailblazer.to trailblazer.toTrailblazer33
-
Using multiple termini has three magnificent, beautiful advantages.
-
When nesting an activity with multiple outcomes, you can wire each terminus to a different route.
-
It is much easier to track what is going on within the activity. Instead of transporting additional state via ctx, you expose the outcome via an additional end event.
Note: It's only super easy to see what's going on if you have the benefit of a diagram.
-
You may communicate more than a binary outcome of an activity. For instance, a controller endpoint activity could have end events for success and failure, but also for “not authorized”, or “validation failed”. You’re not limited to a binary setup here.
-
we head straight into an additional terminus, or end event as it’s called in BPMN
no
-
For example, an output using Track(:create) will snap to the next possible task that is “magnetic to” :create. That’s how tracks or paths are created.
-
Semantics are mostly relevant for nesting
-
Having a closer look, you will see that putting “create user” on the failure track probably isn’t such a great idea, as it will also get invoked when #validate errors-out. It’s a good idea to introduce a new, separate path for handling new users.
-
Instead of connecting an output to a particular task, you can also choose to let it connect to a track. A track is created by taking a task’s output, retrieving its semantic, and then connecting it to the next available task that is “magnetic to” this semantic.
-
Having an understanding of higher level abstractions, such as tasks, activities and the historical code path taken, its debugging trace is much closer to how you, as an engineer, think about your code.
-
Remember, in a railway activity each task has two standard outputs with the “semantics” success and failure.
-
By using Output(:semantic), you can select an existing output of the task and rewire it.
-
Why don’t we put the “create user” task onto the failure track, and in case of successfully persisting the new user, we deviate back to the happy path?
-
This is my absolute favorite feature ever and the official reason for (re-)writing Trailblazer 2.1. It makes me happy every time I use it.
-
Trailblazer::Developer.wtf?(Signup, ctx)
-
Admittedly, both the signature and the return values of invoke feel a bit clumsy. That’s becaus we’re currently working with the low-level interfaces.
-
Originally designed to “only” implement railways for CRUD logic, we now use activities in many parts of Trailblazer itself
-
Instead of one big code pile, activities will gently enforce a clean, standardized way for organizing code.
-
the Activity component is the heart of TRB
-
To implement such an activity, we only need to rewire the second step’s failure output to a new terminus.
-
Since you can reference outputs by their semantic, you as a modeller only connect conceptual termini to ongoing connections!
-
it’s a bit as if the following wiring is applied to every task added via #step
-
This is where all our learnings about semantics, outputs, signals and the DSL come together.
-
Visualized, our new composed structure would look as follows.
-
Additionally, you may add debugging steps, error handler or rewire the conditions dynamically without touching the original snippet.
-
So why the over-complication? What we got now is replicating a chain of && in the former version. This time, however, you will know which condition failed and what went in by using tracing. Look at the trace above - it’s impossible to not understand what was going on.
-
signal.to_h[:semantic]
Why not just allow us to call
signal.semantic? -
Suppose that the validate task was getting quite complex and bloated. When writing “normal” Ruby, you’d break up one method into several. In Trailblazer, that’s when you introduce a new, smaller activity.
-
Hey, that’s is an imaginary complication of our example - please don’t do this with every condition you have in your app.
-
To demonstrate that, we need to complicate out example application a bit.
-
Knowing about the wiring mechanics in Trailblazer is one thing. However, the real fun starts with nesting activities. That’s when the ideas of encapsulation, interfaces and reducing dependencies really come into play.
-
Nesting an activity into another is a bit like calling a library method from another method
-
the explicit modelling has one massive advantage: all possible outcomes of the nested activity are visible and have to be connected in the outer diagram
Tags
- strictly enforced rules/conventions: benefits
- low-level interface
- not:
- the Trailblazer way
- separation of concerns
- where it shines / best application
- state management
- nesting
- extremes
- trailblazer-activity: wiring/outputs/tracks
- dogfooding
- trailblazer-activity: wiring/outputs: semantic
- complicated
- functions
- higher level of abstraction
- example: not how you would actually do it (does something wrong/bad/nonideal illustrating but we should overlook it because that's not the one thing the example is trying to illustrate/show us)
- semantic meaning
- railway-oriented programming
- convention
- see content below
- simplify
- pleasant/enjoyable to use
- nice diagram
- debugging tools
- analogy
- fun wording
- good point
- Trailblazer
- good idea
- software design patterns
- advantages/merits/pros
- standardization
- answer the "why?"
- artificial example
- see content above
- admit the limitations/shortcomings of your argument/benefits
- Business Process Model and Notation
- easy to see/notice
- main/key/central/essential/core thing/point/problem/meat
- easy to understand
- terminus/end event
- easy to follow/read/understand
- conflation
- good illustration (visual)
- good example
- clean code
- self-reference
- clean/uncluttered code
- trailblazer-activity
- non-binary
- composition
- can we do even better?
- clumsy interface/syntax
- putting it all together (building, learning, ...)
- splitting code/component/function into smaller pieces
- coming up with hypothetical examples
- magic values
- being explicit
- good explanation
- funny
- favorite
- why?
Annotators
URL
-
-
github.com github.com
-
MIT License. Copyright 2020 Rafael França, Carlos Antônio da Silva. Copyright 2009-2019 Plataformatec.
-
Responders don't use valid? to check for errors in models to figure out if the request was successful or not, and relies on your controllers to call save or create to trigger the validations.
-
-
trailblazer.to trailblazer.toTrailblazer13
-
or even configure its taskWrap
-
Please note that the I/O DSL is only providing the most-used requirements. Feel free to use the low-level taskWrap API to build your own variable mapping with different scoping techniques.
-
You need to create a copy of the method or the class of your callable task in order to fix this and have two identical steps.
-
interferring
-
You don’t have to stick to the task interface! The [circuit interface] is a bit more clumsy, but gives you much better control over how ctx and signals are handled.
-
And trust us, we’ve been playing with different APIs for two years and this was the easiest and fastest outcome.
-
The circuit interface is a bit more clumsy but it gives you unlimited power over the way the activity will be run.
-
Using this interface empowers you to fully take control of the flow™.
-
Advanced features like tracing, input/output filters or type checking leverage the framework argument flow_options
-
Note that the :task option for step configures this element as a low-level circuit interface, or in other words, it will skip the wrapping with the task interface.
This bit me because I didn't realize that. Was getting error:
TypeError: no implicit conversion of Symbol into IntegerFinally checked
ctxand found it was an array...At least this is documented here.
-
Do not fear those syntactical finesses unfamiliar to you, young padawan.
-
There’s no additional logic from Trailblazer happening here. The function returns a well-defined hash which is passed as an argument to step.
-
patch: -> { step Destroy.method(:tidy_storage), before: :delete_model }
Tags
- objects/hashes
- monkey patching
- less-than-ideal workarounds
- "trust us"
- typo
- documentation
- admit the limitations/shortcomings of your argument/benefits
- counterintuitive
- it's just _
- scope (programming)
- trailblazer-activity: TaskWrap
- extension API: ability to override/customize nested objects
- configurable
- powerful
- please elaborate
- trailblazer-activity
- providing lower-level components/functions for cases where higher-level ones aren't customizable enough
- how?
- trade-offs
- Ruby
- clumsy interface/syntax
- extension API
- nice API
- wrapper (software)
- funny
- caveat
Annotators
URL
-
-
github.com github.com
-
github.com github.com
-
First sighting (type: mention/link): https://hyp.is/3AMkJHumEeurpAsw_sA3nA/trailblazer.to/2.1/blog.html
Example that uses it: https://github.com/trailblazer/tutorial/blob/master/ruby/test/basics_test.rb
-
-
-
release 0.0.1 after around 5 years.
-
-
trailblazer.to trailblazer.to
-
A leaked snippet of the endpoint architectural design draft document, highly confidential.
-
we have a helpful little framework behind the page rendering that pulls code snippets from real tests out of the actual gems
-
Writing documentation for the new website has been fun. Yes, fun!
-
It almost feels unreal finishing up this release post. It’s been so long!
-
After around 3 years of silence, Trailblazer is back with its 2.1 release.
-
We have fully documented the migration path to 2.1 while upgrading several complex apps. It worked.
Tags
- software architecture
- system architecture/design diagram/illustration
- documentation
- see content above
- tongue-in-cheek
- automate the boring stuff
- making boring things fun
- easy migration/upgrade path
- nice diagram
- work: fun
- software design
- documentation generator
- open-source software: progress seems slow
Annotators
URL
-
-
github.com github.com
-
result["result.policy.default"].success?
-
The guard name defaults to default and can be set via name:. This allows having multiple guards.
-
the guard can also be a Callable-marked object
elaborate...
-
The Model macro literally does what our model! step did.
That information is not generally relevant. Only makes sense for someone who actually knew about or used the old interface.
The docs shouldn't assume you are an experienced user / a user of the previous version.
Would have been appropriate in a Changelog entry or announcement, but not in the general docs.
-
-
blog.mozilla.org blog.mozilla.org
-
Our new feature, Total Cookie Protection, works by maintaining a separate “cookie jar” for each website you visit. Any time a website, or third-party content embedded in a website, deposits a cookie in your browser, that cookie is confined to the cookie jar assigned to that website, such that it is not allowed to be shared with any other website.
-
-
www.kickstarter.com www.kickstarter.com
-
Vision-based combat. The success of a ninja action is solely based on guards’ vision.
-
-
-
www.amazon.com www.amazon.com
-
-
github.com github.compry/pry1
-
you can use the wtf? command to display a few lines of the backtrace for the most recent exception
-
-
trailblazer.to trailblazer.to
-
The flow pipetree is a mix of the Either monad and “Railway-oriented programming”, but not entirely the same.
-
The absence of a method name here is per design: this object does only one thing, and hence what it does is reflected in the class name.
-
-
store.steampowered.com store.steampowered.com
-
2021年の旧正月セールで買いました。まだすべてのステージをクリアしてはいないのですが、30分ほど遊んだところで良いところ・悪いところが見えてきたのでひとまず日本人がレビュー一番乗りです。良いところ・グラフィックは無機質ですが悪くないと思います・音楽も自己主張しすぎず、アクションを盛り上げる感じで悪くはないです気になるところ・WASDで動けるのですが動きが半端にバイオハザードみたいなラジコン操作感があり、ちょっと気に食わないですただ、これは個人の感想の範疇ですね・ジャンプの性能は低く、距離ぎりぎりを要求されます。これは慣れですね悪いところ・ウォールランや動く壁といったギミックがありますが、これらの調整がとにかくできていません。特に斜め移動などでは自動で高度の調整が入るのですが、始点で普通につかまっているのに終点で床の下に潜り込んだり、果ては床のない場所にズレたりします。パルクール的なゲーム性を損ない、ものすごいストレスとなります。以上です。パルクールアクション的なものを期待して購入し、実際予想通りのゲーム性でした。しかし残念ですが自分にとっては上記の悪いところがとにかくストレスとして感じられます。買った以上はクリアまでは進めたいですが、他人におすすめはできません。
I bought it at the 2021 Chinese New Year sale. I haven't cleared all the stages yet, but after playing for about 30 minutes, I could see the good and bad points, so for the time being, the Japanese are the first to review.
Good point ・ The graphics are inorganic, but I don't think they are bad. ・ The music is not too self-assertive, and it's not bad because it makes the action exciting.
Where to worry ・ I can move with WASD, but the movement is odd and there is a feeling of radio control operation like biohazard, so I do not like it a little. However, this is a category of personal impressions. ・ Jump performance is low, and it is required to be close to the distance. This is familiar
bad place -There are gimmicks such as wall runs and moving walls, but these adjustments have not been made anyway. Especially when moving diagonally, the altitude is automatically adjusted, but even though it is normally held at the start point, it may slip under the floor at the end point, or it may shift to a place without a floor. It spoils the parkour-like gameplay and causes tremendous stress.
that's all. I bought it in anticipation of something like parkour action, and the game was actually as expected. But unfortunately, the above bad points are stressful to me anyway. As long as I bought it, I would like to proceed to clear it, but I cannot recommend it to others.
-
-
store.steampowered.com store.steampowered.com
-
a strategy game for me is mostly about the mechanics and the replayability. I love good art and design, but function follow form!
-
-
www.kongregate.com www.kongregate.com
-
This game runs on Flash. Effective Jan. 12, 2021, Adobe (the company that made Flash) began blocking its use everywhere. This is unfortunate, but outside of Kongregate's control.
-
-
store.steampowered.com store.steampowered.com
-
He also upped the price for every one of his games back in march 2019 up to 1000%! so his 90% discounts back to the original price would look better.
-
-
store.steampowered.com store.steampowered.com
-
If you get this game for some reason, it's worth mucking around in for 20 minutes or so, but you probably shouldn't buy this on purpose.
-
- Feb 2021
-
store.steampowered.com store.steampowered.com
-
Hard hat tester, Ray,
Hard hat tester Ray has ...
-
-
www.reddit.com www.reddit.com
-
store.steampowered.com store.steampowered.com
-
[0.4] Controls & Training & Help[0.2] Menu & Settings[0.2] Sound & Music[0.1] Graphics[0.2] Game Design[0.3] Game Story[0.2] Game Content[0.4] Time to complete feels ok? (& if the Game can be repeatedly played again)[0] is it Enjoyable & Fun?[0] Could it hold a spot in Favorites?[0] BONUS point: Multi-Player related[0] BONUS point: Review for VR
-
-
www.steamtrades.com www.steamtrades.com
-
The games above are only a suggestion, I will analyze any offer.
-
-
steamcommunity.com steamcommunity.com
-
To whom did you sell your keys and at what kind of rates? https://steamcommunity.com/id/playa131 for example resells them and might be the source for DIG's purchases.
-
Indiegala is mentioned because it was a legitimate mutually signed contractual agreement as far as previous business is concerned.
-
Do you have collaborators who could have generated keys and sold them on their own? DIG's Steam keys and other stores' Steam keys must have some source, after all. Keys don't generate themselves, and only your accounts should be able to request them.This particular game was in Bunch Keys Indie Wizardry Bundle. I assume you had a proper contract for that. Maybe DIG or an intermediary bought 50-200 copies of it?
-
It isn't stealing because you or an associate must have generated and given them the keys in some way or another?Ideally you would ask a DIG bundle buyer to show you their key for your game, so you can figure out what key request batch it came from, and then you can scratch your head and wonder who you gave those keys to and what journey they took afterwards.
-
-
www.priceintelligently.com www.priceintelligently.com
-
For years, retailers, no matter what time of day or year, have offered sales and advertisements that lure bargain-drooling customers in the doors.
-
Retailers use a combination of promotional pricing, fake pricing, and price anchoring to form a comprehensive psychological pricing strategy that creates a pricing trigger that minimizes the sales cycle significantly
-
For instance, when faced with a 60% off, 12 hour only coupon that reduces a $1,200 winter coat to $400, you can’t help but rush to the store to buy it, even if it is 95 degrees out. A few things are happening here. For one, the $1200 acts as an anchor price that psychologically forces you to realize you’re getting an enormous deal at the $400 price point. Plus, the promotion limiting the time the offer is available forces you into an impulse.
-