view : ParentModel -> InternalModel -> ParentMsg a msg -> (InternalMsg -> msg) -> (Html.Html msg)
type alias ParentMsg a msg =
{ a
| setDate : Date -> msg
}
filters : Msg -> Model -> ( Msg, States Model Msg ) filters msg model = case msg of Helpers helpersMsg -> Helpers.delegate Helpers helpersMsg model _ -> ( msg, States.enableAll )
button ( Helpers.Ripple.events Helpers model "rippleid" DoClick ++ [ otherAttributes ] ) [ Helpers.Ripple.view Helpers model "rippleid" , text "Button Text" ]
Yeah I am curious about such a 'calendar' example as well. I end up making a lot of widgets that hold internal state, need to handle their own messages, etc... etc... and I keep writing them the elm-mdl way, which although is nicer still does not seem 'perfect'.
Here might be a simple example that I actually have here:
(Well, no, actually I would just never use ripple because it's an unimportant visual flourish that demands introducing complexity far disproportionate to what it brings to the table over the gazillion other flourishes out there which can be implemented with CSS alone.)
I would write both of those using techniques like elm-autocomplete and elm-sortable-table. :)Here might be a simple example that I actually have here:I think if you have to write eight bullet points about the thing, evidence suggests that maybe it is not actually simple. ;)
On Wednesday, September 7, 2016 at 9:22:57 AM UTC-6, Richard Feldman wrote:(Well, no, actually I would just never use ripple because it's an unimportant visual flourish that demands introducing complexity far disproportionate to what it brings to the table over the gazillion other flourishes out there which can be implemented with CSS alone.)(I agree, but the bosses want a Material themed site, it is not my choice. ;-) ).
And it is actually quite simple, in javascript it is just a couple of lines. Elm makes it... huge.
Eh, but both of those have a distinct message and model for each instance, and I do not even want to know about those, in addition to the amount of them is changing all the time as the program works, the way they are used changes, etc... I'd have to do something like make the handler message for it be keyed based on which one and dispatch out to a dictionary of them, which is not useful or interesting to handle in the business update function. I want all code related to those ripples beyond just stating that one should be 'here' in the view to be no where near the business end of things that does actual work.
On Wednesday, September 7, 2016 at 9:22:57 AM UTC-6, Richard Feldman wrote:
(Well, no, actually I would just never use ripple because it's an unimportant visual flourish that demands introducing complexity far disproportionate to what it brings to the table over the gazillion other flourishes out there which can be implemented with CSS alone.)
(I agree, but the bosses want a Material themed site, it is not my choice. ;-) ).
Ripple is an opt-in addition to MDL, so you're in the clear for building a material themed site without it. ;)
And it is actually quite simple, in javascript it is just a couple of lines. Elm makes it... huge.And if your app is already built around WebGL, a visual flourish where the buttons tilt in 3D is "actually quite simple." ;)
Doesn't mean it's a good idea to haul all that complexity into your HTML app just for a flourish!
My point is that you're writing Elm code, not JavaScript code. Why would it be a good idea to evaluate whether to use something based on how well-suited it is to a technology other than the one you're using? :)
Eh, but both of those have a distinct message and model for each instance, and I do not even want to know about those, in addition to the amount of them is changing all the time as the program works, the way they are used changes, etc... I'd have to do something like make the handler message for it be keyed based on which one and dispatch out to a dictionary of them, which is not useful or interesting to handle in the business update function. I want all code related to those ripples beyond just stating that one should be 'here' in the view to be no where near the business end of things that does actual work.Well, yes, this is why I think ripple is a poor choice of flourish haha...it needs so much state management for so little gain!
And it is actually quite simple, in javascript it is just a couple of lines. Elm makes it... huge.
I hate untyped languages with an undying passion, and they don't care what language I use. This is just one of the few warts in Elm design currently, the rest of it is wonderful.
On Wednesday, September 7, 2016 at 11:14:43 AM UTC-6, Richard Feldman wrote:I hate untyped languages with an undying passion, and they don't care what language I use. This is just one of the few warts in Elm design currently, the rest of it is wonderful.I agree with Sean on this...architectural simplicity is not a wart! It's a design decision I very much appreciate.
Simplicity sure, but being a functional language it should be easy to compose functions to reduce such boilerplate, and indeed it is 'mostly' possible (see my version in prior email in this thread, try beating that), but the current espoused style seems against making this compartmentalized, which coming from a lot of languages, most functional, over a period of 3 decades, is still rather jarring to me as I've never seen it stated anyway to take the longer more wordy path when something like my prior style is readable and separates concerns well (don't mix view handling with business logic).
On Wednesday, September 7, 2016 at 11:14:43 AM UTC-6, Richard Feldman wrote:I'm sorry to hear that your bosses are making it difficult to make good engineering choices. I've been there, and it sucks. :(
--Oh if you want to see bad you should see how bad Xerox was, almost a decade with them, that was horrible... >.<My current job is utter bliss in comparison. ^.^
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/aa9fdbc5-4bb0-4de2-bb33-50980776871f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/CAF7GuPGchZEARYEX5Qz0KNvKtetFrHO%2BFJm4LxZMYiceG88-eQ%40mail.gmail.com.
On Sep 7, 2016, at 9:38 AM, Richard Feldman wrote:
>
> My point is that you're writing Elm code, not JavaScript code. Why would it be a good idea to evaluate whether to use something based on how well-suited it is to a technology other than the one you're using? :)
What you are arguing here is that Elm is less useful as a general purpose programming language than JavaScript. When the programmer who chose Elm says "that's hard" and the JavaScript programmer says "no problem", what do you think the management reaction is going to be to Elm and people who choose Elm?
And please don't read my message as a specific complaint about lack of components but rather a criticism of dismissing concerns with "don't design your UX that way".
I liked the new guide sections but they raise the question of whether the new guide to reuse is a disavowal of the nested TEA architecture from 0.16.
Even if you don't like ripples I find it hard to argue about the necessity of private state for something like a calendar.
type alias Model =
{ browseDate : Date
, firstDayOfWeek : Date.Day
, showPicker : Bool
, hovered : Bool
}
type alias Model =
{ clock : Clock.Model
, datePicker : DatePicker.Model
}
init : Date -> Model
init date =
{ clock = Clock.init
, datePicker = DatePicker.init date
, showSpeedSlider = False
}
type Msg =
Unhover
| PreviousMonth
| NextMonth
| ShowPicker
| HidePicker
| Hover
type Msg =
DatePickerMsg DatePicker.Msg
| ClockMsg Clock.Msg
update : Msg -> Model -> Model
update msg model =
case msg of
DatePickerMsg msg' ->
{ model | datePicker = DatePicker.update msg' model.datePicker }
ClockMsg msg' ->
{ model | clock = Clock.update msg' model.clock }
run : msg -> Cmd msg
run m =
Task.perform (always m) (always m) (Task.succeed ())
update : ParentMsg a msg -> Msg -> Trip.Model -> Model -> (Model, Cmd msg)
update parentMsg msg shared model =
...
FilterName key ->
({ model | filterKey = key }, run <| parentMsg.filterTrips shared.trips key)
view : Date -> Model -> (Date -> msg) -> (Msg -> msg) -> Html msg
view currentDate model setDate msgWrapper =
...
update : Msg -> Model -> Model
update action model =
case action of
PreviousMonth ->
{ model | browseDate = getPreviousMonth model.browseDate}
NextMonth ->
{ model | browseDate = getNextMonth model.browseDate}
ShowPicker ->
{ model | showPicker = True, browseDate = (Maybe.withDefault model.browseDate model.selectedDate) }
HidePicker ->
{ model | showPicker = False, hovered = False }
Hover ->
{model | hovered = True}
Unhover ->
{model |hovered = False}
I'm not sure dismissing the problem by saying "I certainly wouldn't do that" is fair. Even if you don't like ripples I find it hard to argue about the necessity of private state for something like a calendar.
I starting to think one design pattern will not fit all use cases and some applications might end up using several.
The wiring does not seem worthwhile for a ripple flourish.
I think it's generally a waste of time to reimplement an existing Javascript library of a certain size (eg. leaflet): just use ports; Same thing for ripples: use bootstrap & be done with it.
But what if the aim is to mimic as close as possible a native interface.
The wiring does not seem worthwhile for a ripple flourish.Of course that in a lot of cases there are better alternatives, especially if the ripple is just a kind of flourish.But what if the aim is to mimic as close as possible a native interface.In those cases the ripple is not flourish but part of the specs. It is a non-negotiable element. It is unavoidable.
Also, I feel the need to repeat what I've said in a previous answer. The ripple effect is a CLEAR example of small unavoidable statefulness.
Instead of addressing the issue of "many small components that are unavoidably stateful" you have proceeded in creating a straw-man that you could easier dismantle.
Let me reorganize your points:
- "Of course in the case of a ripple there are better alternatives"
- "The ripple effect is a CLEAR example of unavoidable statefulness"
- "Instead of addressing this issue, you are creating a strawman"
So if I have this right, this is a thing that is simultaneously avoidable (according your first point) and unavoidable (according your second point), and by addressing this specific, real-world example of the non-obvious consequences of ripple effects in MDL and elm-parts, I am "attacking a strawman?"
And to be further clear, you are demanding that I instead stop discussing this specific case and instead address the broad hypothetical scenario you have invented ("what if you have a ton of small unavoidably stateful things") for which you can't provide a single real-world motivating use-case?
Peter, you have been around for awhile, so you know very well that the Elm community's design process is to focus on specific motivating use cases. You know I am going to say "If you have a specific application you want to build that needs lots of small independent pieces of state, tell me what it is so we can discuss specifics."
At this point the fact that you are repeatedly steering conversations away from specifics and toward broad hypotheticals is disrespectful of everyone's time.
You know better. Cut it out.
Yes, you are not addressing the real-world example of an unavoidable state, you are creating a strawman around the validity of the ripple example by pointing aesthetic considerations and implementation details of the current elm-mdl.It's like the old joke:
- Doctor, it hurts when I do like this.
- Well, then don't do like that.
The non-obvious consequences of a ripple effect implementation done by elm-mdl is not the topic.
I have created a repository where I implemented a simple, real-world example of a form and you have seen it and still tell me that "you can't provide a single real-world motivating use-case" ?
I am aware of the Elm community's design process. I have tried to do the best I could to present a motivating use-case.
https://github.com/pdamoc/elm-boilerplate-example
Is this example not specific enough? What should I change in it to make it even more specific?
Granted, the project failure has more to do with me not having enough JS/CSS experience but, at least some of the problem rests with scaling Elm code.The first 5000 lines of code were quite pleasant, the last 3000... not so much.
What about the dropdowns or the floating label textfields? carousels? collapsible? tooltips? Aren't they real-world enough to motivate approaching this use-case?
Yes, you are not addressing the real-world example of an unavoidable state, you are creating a strawman around the validity of the ripple example by pointing aesthetic considerations and implementation details of the current elm-mdl.It's like the old joke:
- Doctor, it hurts when I do like this.
- Well, then don't do like that.
The non-obvious consequences of a ripple effect implementation done by elm-mdl is not the topic.Yes it is.OvermindDL1 posted two specific real-world examples: calendar and ripple.In response, I've stated my position that I would use private state with calendar and would question whether ripple is worth the implementation cost.This is how productive discussions go: talking in terms of specific use cases.
So, what is our core study case for internal state and what does it tell us about how to structure Elm programs when they have to deal with internal state?
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/9803748e-4d62-487a-952c-29e491842b96%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/bc8026f6-c3bf-4891-b4c6-8da453abc8d6%40googlegroups.com.
I think asking "why" turns the matter into a philosophical discussion rather than a more prosaic "how" and "I don't know" or "you can't" are both valid answers, albeit not very satisfying.
Richard answered the "how" at the same time that he asked "why": look at elm-sortable-table for an example of how to manage internal state.
Basically, encapsulate the state, throw it into your program's model, pass the state to the component's view function.I think this approach should work as well for a calendar, a counter, or an accordion as it does for a sortable table.
On Thu, Sep 8, 2016 at 1:00 PM, Charles-Edouard Cady <charlesed...@gmail.com> wrote:
Wholeheartedly agree. This scaling/reuse/composition problem pops up regularly in elm-discuss but is often dismissed as "why ever would you want to do that?" which has but the faintest smell of hypocrisy to it: the language should not impact the visual design of your app, no matter how bad your taste is and how good the language designer's may be.
I think asking "why" turns the matter into a philosophical discussion rather than a more prosaic "how" and "I don't know" or "you can't" are both valid answers, albeit not very satisfying.
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/22840747-a932-4356-9f29-4c37f8c2afe2%40googlegroups.com.
I think asking "why" turns the matter into a philosophical discussion rather than a more prosaic "how" and "I don't know" or "you can't" are both valid answers, albeit not very satisfying.
Wholeheartedly agree. This scaling/reuse/composition problem pops up regularly in elm-discuss but is often dismissed as "why ever would you want to do that?" which has but the faintest smell of hypocrisy to it: the language should not impact the visual design of your app, no matter how bad your taste is and how good the language designer's may be.
I think asking "why" turns the matter into a philosophical discussion rather than a more prosaic "how" and "I don't know" or "you can't" are both valid answers, albeit not very satisfying.
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+unsubscribe@googlegroups.com.
On Sep 7, 2016, at 4:44 PM, Richard Feldman <richard....@gmail.com> wrote:On Sep 7, 2016, at 9:38 AM, Richard Feldman wrote:
>
> My point is that you're writing Elm code, not JavaScript code. Why would it be a good idea to evaluate whether to use something based on how well-suited it is to a technology other than the one you're using? :)What you are arguing here is that Elm is less useful as a general purpose programming language than JavaScript. When the programmer who chose Elm says "that's hard" and the JavaScript programmer says "no problem", what do you think the management reaction is going to be to Elm and people who choose Elm?That's not supported by either what you quoted or the rest of what I wrote.You made the point that one is writing Elm code not JavaScript code. So, that puts into play the question of what happens when the designers ask for an effect and the Elm programmers have more trouble than the JavaScript programmers delivering it.Now, with respect to the specific effect in question in this thread — ripples — elm-mdl shows that Elm can deliver it but my impression from this thread is also that the approaches that elm-Mel takes aren't considered good form. When asked what good form would be, your answer was essentially "don't use ripples". That sounds like JavaScript can do ripples, people who use elm-mdl can do ripples, but people who use Elm the "right" way probably shouldn't try to do ripples. Someone looking in from the outside and just caring about ability to deliver on a design have evidence that the people doing Elm the "right" way may be making bad technical choices because they can't deliver. Is that really the desired impression to be making?Here are two true statements:
- JavaScript's pervasive mutable state makes it so you can write less code to obtain a ripple effect.
- Elm's centralized state management makes it so you can write less code to implement an undo feature.
I suspect you could implement undo for the data model state — the thing that really matters for undo — using Flux and one of the immutability libraries for JavaScript.Neither of these provides any basis for a claim like either of these languages is "less useful as a general purpose programming language" than the other. They have different designs, which implies tradeoffs. Balancing tradeoffs like these is a huge part of programming.JavaScript can programmers can choose to use immutable data structures and centralized-state. Elm programmers have to. That's arguably a good thing but I know plenty of programmers and managers who would just say "don't write bad code." (See Steve Yegge on Static Typing's Paper Tigers.)I think the tradeoffs Elm makes in comparison to JavaScript make Elm a better choice overall for building Web applications. Feel free to disagree. :)But what you actually seem to be arguing is that Elm is a better choice for building web applications provided they don't do certain things in their UX designs. I would like it to be a better choice without that restriction.And please don't read my message as a specific complaint about lack of components but rather a criticism of dismissing concerns with "don't design your UX that way".If you believe that "don't design your UX that way" is not a thing that responsible programmers should ever say to someone proposing a given UX, then please make that claim explicitly and I will respond to it.I believe that programmers can argue about design but they need to argue in design terms when doing so. I hate it when engineers wield the "well, I'm writing the code so I win" cudgel. You argue that ripples are needless. Some might agree, but I don't see how that necessarily wins on the design front. Personally, I think Adobe Clean is hard to read and I will argue that to the full extent of my ability, but I expect to lose out to corporate consistency.Sometimes engineers can argue about design from a technical standpoint. Apple's AppKit did not support z-order for much of its life which meant that perfectly natural mock ups in Photoshop would involve doing things like abusing the window system instead of the view manager. That's a legitimate basis for an argument between an engineering position and a design position. In the case of ripples, however, the web platform is clearly capable of supporting this so this is just a debate about Elm v the alternatives. (And in the z-order case, we had an engineer choose to do the work because he respected what the designer was trying to achieve though I think it would have been legitimate to argue that it simply wasn't feasible given how NeXT designed their view system.)I liked the new guide sections but they raise the question of whether the new guide to reuse is a disavowal of the nested TEA architecture from 0.16.I don't know what 0.16 thing you are referring to here. Can you link to something that explains what it is?I don't have the Elm 0.16 documentation readily available anymore, but I remember plenty of examples of things like pairs of GIF fetchers and pairs or lists of counters where the outer model simply had routing messages to direct the messages for the inner model. We can see the evolution of this architecture in Html.App.map, but now there seems to be an aggressive push to say "just put everything in your top level model". I appreciate that the examples in the Elm 0.16 documentation were contrived, but examples often are because the focus needs to be on the techniques they are demonstrating. I also appreciate that Evan's new guide material shows that often you don't need components and that simply wrapping repeated patterns into functions is enough. But does this mean that the nesting approaches demonstrated for Elm 0.16 are now considered bad form?Mark
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/88c34114-f8bd-44b1-a74e-9b337366e653%40googlegroups.com.
Hmm this makes me want to build a calendar module to see how simple I could get it. That seems like a difficult use case.
I'm not aware of components being solved well in any language. Can you point me to an example of where you feel it is done well? It just seems like a hard problem to me.
I've only seen it done the way I described before, where complex functionality is put into a nice package, but the author has to explicitly support every use case. So of course it never does exactly what I want
So I feel like the way forward is to provide composable view functions that do require some boilerplate (regular composition) but which don't suffer from trying to pretend that disparate things (styling, update logic, etc) and actually one thing.
Hmm this makes me want to build a calendar module to see how simple I could get it. That seems like a difficult use case.On Wed, Sep 7, 2016 at 8:50 PM OvermindDL1 <overm...@gmail.com> wrote:On Wednesday, September 7, 2016 at 11:14:43 AM UTC-6, Richard Feldman wrote:I hate untyped languages with an undying passion, and they don't care what language I use. This is just one of the few warts in Elm design currently, the rest of it is wonderful.I agree with Sean on this...architectural simplicity is not a wart! It's a design decision I very much appreciate.Simplicity sure, but being a functional language it should be easy to compose functions to reduce such boilerplate, and indeed it is 'mostly' possible (see my version in prior email in this thread, try beating that), but the current espoused style seems against making this compartmentalized, which coming from a lot of languages, most functional, over a period of 3 decades, is still rather jarring to me as I've never seen it stated anyway to take the longer more wordy path when something like my prior style is readable and separates concerns well (don't mix view handling with business logic).On Wednesday, September 7, 2016 at 11:14:43 AM UTC-6, Richard Feldman wrote:I'm sorry to hear that your bosses are making it difficult to make good engineering choices. I've been there, and it sucks. :(Oh if you want to see bad you should see how bad Xerox was, almost a decade with them, that was horrible... >.<My current job is utter bliss in comparison. ^.^
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/aa9fdbc5-4bb0-4de2-bb33-50980776871f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/CAAPcQhLF8NQGec5KiS6eCBJR4Z%3DePWgeOtZMBhc7gawc6qcWBQ%40mail.gmail.com.To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+unsubscribe@googlegroups.com.
the language should not impact the visual design of your app, no matter how bad your taste is and how good the language designer's may be.
I think asking "why" turns the matter into a philosophical discussion rather than a more prosaic "how"
My impression of the discussion has been:"New guide on reuse is great, but how should we deal with components with internal state?""Such as?""Ripples.""Ripples are needless UX flourishes. Don't use them."This last response might be a legitimate side note leading to a discussion of UX design choices, but it is a dodge to the root question of "What pattern should we apply to handle internal state?" and even to the more specific question "How should I implement ripples in an Elm app?" To read it as an on point response, one would probably have to take it as "There isn't a good way to do that sort of thing in Elm. I don't think you should do it but if you have to then you probably shouldn't use Elm." Is that really the intended message and if so how many other contra-indicators are the for using Elm?
The WebGL argument is a straw man because it shifts the question from "We chose to implement our page using this particular programming language rather than JavaScript and we have complexity around implementing this increasingly common HTML UI element" (an argument where what had been a purely engineering choice to use Elm is what is causing the "problem" from the standpoint of designers and management) to "That sort of effect is really only works well by using WebGL. Do we want to pay the cost of embracing WebGL?" (an argument that applies regardless of the choice to use Elm or JavaScript). Arguing about WebGL is a different sort of argument from arguing about the use of ripples in the UX design.
Or if you want a different specific API design question: What is the stance on elm-mdl? Good pattern to follow or bad and if bad how should it have been implemented?
So, what is our core study case for internal state and what does it tell us about how to structure Elm programs when they have to deal with internal state?
Another way to put the concern that multiple people are voicing and the "don't use that widget" response only adds to is the question that almost every developer must confront: Will my choice of tools impair my ability to deliver what I want even when that deliverable is vaguely defined and likely to grow?
What's of concern here is that some of the responses on this thread suggest that Elm is ill-suited to some UX conventions. That raised the question: What's the shape of that boundary and will it matter to me? Saying you shouldn't use ripples in an Elm app raises the question of what else you shouldn't do and whether that will matter.
I want to see Elm win v JavaScript because while
it may be a bit more tedious(static types, etc) it produces more robust code without sacrificing expressiveness in any significant way.I fear the argument turning into "
it may not be as fast or as capable as JavaScriptbut it's better long term" because that long term argument potentially gets undermined if a preference for having everything just work on the global state means thatthe code base is difficult to segment into comprehensible parts.(*)The examples showing that you need components less often than you think are great, but
they need to be balancedwith examples of how you handle "private" state (ripples) or shared state (global priority queue) or even just standard nesting of multiple independent instances of the same model needing its own internal logic. Just saying "don't do that" comes awfully close to saying "if you need to do that, don't use Elm" andthat's not a great place to be for Elm adoption.
Last week I got --debug to a really nice place. The next phase is to get "swapping" working in conjunction with elm-reactor, so folks can save code and see the new functionality in their browser automatically without losing their session history.That next phase is a pretty big project and I found I needed to take a break to get productive on it, so I did the following things.BlogFinish and publish the blog post on performance. I felt the post could have done a lot better on Hacker News, so I found this release kind of frustrating. There were a lot of folks saying silly things. That motivated me to take a look at ways of making it so no one says silly things anymore.DocumentationI channeled that motivation into:
- Redoing the home page to be more visual and clear. (Would still love a PR to convert images of code into HTML blocks!)
- Consolidating installation and "get started" docs in one place that also dumps people into the guide, so there is no way to miss the official documentation.
- Adding a section on reuse to the guide to try to get us over this "components" confusion. So far, it has had quite a nice response!
So it sort of felt like a good time to return to elm-reactor, but the NoRedInk Elm Friday came up, and we decided to work on localStorage.Local StoragePeople have been requesting this for ages. I have worked on it multiple times in the past and never been happy with the results, so it kept getting scheduled for a revisit.This time, I think I figured out why the results felt unsatisfactory, and I'm really excited about taking it in a different direction, described here.I'll write a bit more about this in a separate post.
--
You received this message because you are subscribed to the Google Groups "elm-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elm-dev+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elm-dev/CAF7GuPGchZEARYEX5Qz0KNvKtetFrHO%2BFJm4LxZMYiceG88-eQ%40mail.gmail.com.
The WebGL argument is a straw man because it shifts the question from "We chose to implement our page using this particular programming language rather than JavaScript and we have complexity around implementing this increasingly common HTML UI element" (an argument where what had been a purely engineering choice to use Elm is what is causing the "problem" from the standpoint of designers and management) to "That sort of effect is really only works well by using WebGL. Do we want to pay the cost of embracing WebGL?" (an argument that applies regardless of the choice to use Elm or JavaScript). Arguing about WebGL is a different sort of argument from arguing about the use of ripples in the UX design.These are the same sort of argument because they both fit the same template: "We chose to implement our page using X rather than Y, which means implementing this UI element will be more expensive." You can arrive at the two cases I presented by doing nothing more than filling in X and Y with different values:X = Elm, Y = JavaScript: "We chose to implement our page using Elm rather than JavaScript, which means implementing this UI element will be more expensive."X = React, Y = WebGL: "We chose to implement our page using React rather than WebGL, which means implementing this UI element will be more expensive."You included language that suggests the status quo is important here. You said "rather than JavaScript" suggesting that the default industry choice of JS is important. You also said "embracing WebGL" suggesting that the default industry choice of not using WebGL is important. These are relevant if you're trying to defend your choice of Elm to people in positions of power, but they're not relevant to the question of what will result in the best product—which is what I'm personally concerned with.
I'm getting the impression that you are coming at this from the perspective of strategizing about how to defend your choice of Elm to a risk-averse boss. Honestly I don't think that's a battle worth fighting. Adopting a non-mainstream technology confers intrinsic risk; if your boss is risk-averse, that's probably going to cause conflicts and bad times. Wait until it's mainstream and you won't have to defend your decision.
Actually, I'm more sensitive down than I am up but I'm in a somewhat special position. I've lead teams through using non-standard technologies (Lua, reactive and asynchronous UI's before they were cool, etc). Some of the people I've worked with and continue to work with acknowledge the benefits we've gotten from such moves but are also gun shy from experiences where we've had a harder time interfacing with standard components and services — everything has to start with writing bridge code — and have observed the downright hostility we've seen when more conventionally minded engineers have been assigned to teams that are using unconventional technologies. It's particularly the last issue that's a lurking problem because people with an attachment to status quo technologies will tend to use every opportunity they can find to denigrate unusual choices. That doesn't mean one has to build component architectures that look like conventional architectures, but having solid answers for how one does it in Elm is very useful.