-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Emma Meersman #1
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# Free project 1 | ||
# Free project 1 - Flavor Pairings | ||
|
||
## The user and a language | ||
This section describes who the project would serve and why a language might be a | ||
|
@@ -10,41 +10,57 @@ _What need is met by your idea? Who are you helping? What is that person's | |
experience like now? What would their experience be like if you could help | ||
them?_ | ||
|
||
This DSL would help users learn more about flavor pairings and make suggestions if given specific foods. The users would be able to figure out foods or beverages that would pair well with a given item. For example, if a person were hosting a dinner party and didn't know what to serve with the main dish, they could receive suggestions about flavors or dishes that would be good accompaniments. | ||
|
||
|
||
### Why a language? | ||
_Why is a DSL appropriate for your user(s)? How does it address the need?_ | ||
|
||
Flavor pairing is a unique domain and a DSL would help to educate users about successful pairings. It is appropriate for users because they would be able to interact with pairings in various ways (learning about more pairings, getting pairing suggestions, etc). | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's definitely a very unique and limited DSL. I know personally I had a few ideas with a very small domain, and I felt perhaps a language wasn't exactly the best choice halfway through responding to these questions. I had a hard time imaging a DSL being built for something that perhaps a web or mobile application could do so much easier. I'm not even sure whether it would still be considered a DSL or not if you made it more like an application. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this question has to do with why does the computer language aspect of this DSL address the need and the user. |
||
|
||
|
||
### Why you? | ||
_What excites you about this idea? How did you come up with it?_ | ||
|
||
I am very interested in food science and flavor combinations. I talked with one of my friends who has similar interests and she said that she didn't always know what flavors would pair well together when trying to create a meal or dish. I had looked for similar pairing services in the past and was not satisfied with my findings. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like this idea because it seems more beneficial for the user when compared to using a recipe matching language like the one I described. The user actually builds upon his or her culinary knowledge. |
||
|
||
### Domain | ||
_Describe the project's domain in five words._ | ||
|
||
Flavors that go well together. | ||
|
||
|
||
### Interface (syntax) | ||
_How might the user interact with the language? What does programming look | ||
like? Why is this the right way to interact with the problem domain?_ | ||
|
||
The user could interact with the language by typing in a food or dish as well as what they wanted with it. They could specify that they wanted pairing suggestions in a certain category or they could ask for a random suggestion. The categories could be anything from dish vs. flavor to certain type of food. Perhaps the user wants a certain number of suggestions, perhaps the only want to know about beverages that would pair well. Since the language is designed for people to gain more information about food pairings, it makes sense for a program to revolve around a central object or dish. This way, the user could learn more about that specifc object. A more advanced feature of the language could be the ability to list multiple foods and receive suggestions common to all foods in the list. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe this might be thinking too far ahead, but it might better illustrate what exactly your language would be if you provided maybe a snippet of some code. I know I gave very high-level descriptions ( looks something like LateX), and definitely did not put as much thought as I will need to later, but still I felt it was a good place to start. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm, if I'm thinking about this correctly it kind of seems like Prologue. interesting |
||
|
||
### Operation (semantics) | ||
_What might happen when a program runs? How does a program interact with the | ||
user? What kinds of errors might occur, and how might they be communicated to | ||
the user?_ | ||
|
||
The program would run and output all pairings in a database that fit the given criteria. It would interact with the user by listing suggestions. Depending on the scope of the project, the suggestions could all be images or links to more information. The user could get errors in which no flavors exist for a given criteria. In this case, the language could suggest related searches. It is possible that the user would try to search for a food not in the database, though this could be limited by selection from a UI. | ||
|
||
|
||
### Expressiveness | ||
_What should be easy to do in this language? What should be possible, but | ||
difficult? What should be impossible or very difficult?_ | ||
|
||
It should be easy to enter the name of a food and learn about flavor pairings. It should be easy to refine those results based on number or category. It should be possible but difficult to categorize each of those foods and to get information on multiple dishes or flavors at once. It should be very difficult, if not impossible, for users to add their own flavor pairings. This would depend on the separation between users for the DSL, since it is not optimal to enable any user to create a pairing for mustard and chocolate. | ||
|
||
|
||
### Related work | ||
_Are there any other DSLs in this domain? If not, describe how you know there | ||
aren't and conjecture why not. If so, describe them and provide links. How well | ||
do they address the need? Are there any particularly admirable qualities of the | ||
language? Are there parts of the language you think could be improved?_ | ||
|
||
A similar service, [Foodpairing](https://www.foodpairing.com/en/home) already exists. However, it requires users to sign up and pay. I signed up for the free trial and it allows users to receive pairings based on foods they input. However, it also tries to let users create their own pairings. All of this is done through a confusing graph interface, where each node in the graph is a different type of food. I think it has a good database of foods and flavor pairings but the interface could definitely be improved. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like how you actually tried the service! The required sign up itself immediately turned me away from even trying. Perhaps it's not so bad that users can create their own pairings. Maybe there could be a pre-existing database of well-established flavor pairings and the option to allow users to vote on good pairings that aren't necessarily common knowledge. I'm also not entirely sure how subjective flavor pairing can be, as I'm sure some people have unique quirks. |
||
|
||
|
||
## The Project | ||
This section examines whether the idea makes for a good CS 111 project. | ||
|
@@ -57,12 +73,18 @@ making language design decisions), as opposed to "systems" aspects of the | |
project (e.g., implementing a complicated semantics that doesn't require a lot | ||
of language design)?_ | ||
|
||
The developer's attentions would probably be distracted by creating flavor pairings and figuring out a method of efficient searching through a connected graph. It would get particularly confusing to introduce categories (potentially in the form of attribute tags) for each different flavor or food. It would be easy to spend too much time focusing on this setup instead of the actual language for the user. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I agree with this. Going back to what I said about a DSL compared to an application, this seems more like something that's mostly concerned with the systems aspect rather than the language aspects. I also found several of the ideas I came up with ended up being more about the system than the language. Now that I think about it, it's kind of hard to find a good DSL project idea... |
||
|
||
|
||
### Scope | ||
_How big an idea is this? How ambitious is this project?_ | ||
|
||
As discussed in the previous question, this is potentially a huge project. It would be very ambitious to create a flavor pairing graph, especially if users were allowed to define their own pairings. It has the potential to be an incredible service, but it would be difficult to implement much functionality over such a complex data set in the timeframe of this project. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Potentially huge -- definitely. I feel like just the systems aspect alone will be more than a semester's worth of work. |
||
|
||
### Benefits and drawbacks | ||
_Why might this be a good idea for a project? Why might this not be a good idea | ||
project?_ | ||
|
||
This would be a good idea for a project because it could be a great DSL to present users with a lot of food pairings tailored to their specific needs. However, as previously discussed, the scope of the project could end up being very significant and the focus might shift off of the DSL itself. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I really like the idea, but it definitely doesn't seem realistic (if you wanted to complete it entirely). |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,4 @@ | ||
# Free project 2 | ||
|
||
# Free project 2 - Brewing Simulator* | ||
|
||
## The user and a language | ||
This section describes who the project would serve and why a language might be a | ||
|
@@ -11,41 +10,59 @@ _What need is met by your idea? Who are you helping? What is that person's | |
experience like now? What would their experience be like if you could help | ||
them?_ | ||
|
||
This project would serve brewers (amateur and professional alike) who do not know what outcome a specific type of recipe would yield. Brewing is an uncertain process and depends on a wide range of variables. Changing one small step in the brewing process could impact the entire result. A simulation language might be a good way for users to get a rough idea of their end product before starting the brewing process. | ||
|
||
I am helping anyone who wants to try their hand at brewing. Maybe a first-time brewer would use this simulation to start their very first recipe. Maybe an experienced brewer would try to create a completely different end product and would want to test their ideas before starting. This idea is a response to the uncertainty in brewing and aims to increase the experience of the user so that they gain a greater awareness of how each unique variable in the brewing process impacts the final brew. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Haha, this is an awesome idea! I for one know nothing about brewing (though I do enjoy its byproducts) and it definitely seems like something that a DSL could help a lot with, consider how complicated the brewing process seems to be. |
||
|
||
### Why a language? | ||
_Why is a DSL appropriate for your user(s)? How does it address the need?_ | ||
|
||
A DSL is appropriate for this scenario because it allows the user to do a specific set of tasks related to a brewing simulation. It would not require users to be technical and it would not try to do more beyond addressing this need. It has a very clear purpose and the commands would need to be very specific depending on the variables entered by the user. | ||
|
||
|
||
### Why you? | ||
_What excites you about this idea? How did you come up with it?_ | ||
|
||
I have recently been doing research on homebrewing and am only beginning to discover all of the factors that affect the outcomes of the product. Drawing on many different sources, I attempted to craft my own recipe to achieve the end result that I want. I think that this language would be very helpful for someone like me who knows what they want from an end product but can't find a specific recipe to suit their needs. Also, one batch of brew is a significant time investment and it would be helpful to have more of an idea of the end product before putting weeks into the process. | ||
|
||
|
||
### Domain | ||
_Describe the project's domain in five words._ | ||
|
||
Simulated outcomes for brewing conditions. | ||
|
||
|
||
### Interface (syntax) | ||
_How might the user interact with the language? What does programming look | ||
like? Why is this the right way to interact with the problem domain?_ | ||
|
||
Since the language would be aimed at users with a wide variety of technical backgrounds, I think that a GUI (or something similar) would be optimal. The GUI could contain multiple fields or a series of questions in which users input their brewing conditions. These parameters are adjustable by the user and comprise a program. As stated before, this is correct for the domain because it will allow a wide variety of users to construct simulations. | ||
|
||
|
||
### Operation (semantics) | ||
_What might happen when a program runs? How does a program interact with the | ||
user? What kinds of errors might occur, and how might they be communicated to | ||
the user?_ | ||
|
||
When a program runs, the GUI would output the result of the brew. This could provide a variety of information depending on what would be brewed. It might include the sweetness/dryness of the end product and the amount of carbonation. The language could possibly simulate the brew over time and show the state of the brew (give statistics and the aforementioned information) at any time step in the process. This may involve an animation or graphs of certain variables over time. Any errors in compiling the program would be communicated in boxes prompting the user to input valid values for a certain field. A different type of error would be if the brew would explode with the user's given conditions, which could be shown in an animation or a visual message. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm curious if you've thought ahead at all about how you might actually simulate the process. I'm sure brewing has been broken down to an exact science at this point, but I imagine it's still difficult to know exactly what will happen (otherwise we wouldn't even need this simulation). Like any simulation, I imagine to obtain even more accuracy requires an exponential amount of more work. |
||
|
||
|
||
### Expressiveness | ||
_What should be easy to do in this language? What should be possible, but | ||
difficult? What should be impossible or very difficult?_ | ||
|
||
It should be easy for users to input values and to choose the conditions under which they want to brew. It should also be possible to view the results over time. However, it should be impossible for the user to enter nonsensical values (e.g. negative brewing time). Potentially, it might be difficult but possible for the user to add their own conditions to the simulation. If they would be trying something new and could enter accurate information about the impact on brewing conditions, the user might be able to grow the language simply by interacting with the GUI. | ||
|
||
|
||
### Related work | ||
_Are there any other DSLs in this domain? If not, describe how you know there | ||
aren't and conjecture why not. If so, describe them and provide links. How well | ||
do they address the need? Are there any particularly admirable qualities of the | ||
language? Are there parts of the language you think could be improved?_ | ||
|
||
There are several DSLs in this domain in the form of games. One such example is [Fiz](http://brewfiz.com/) in which you are in charge of running your own brewery. There are also other tools available online such as the Brewer's Friend [ABV Calculator](http://www.brewersfriend.com/abv-calculator/). This allows users to enter information about their brew and determine the alcohol-by-volume at that point in the process. I think that each of these examples has good qualities. The game is more user-friendly and serves a very different purpose than the calculator. I think that the calculator could be improved to have more functionality and that the game is not very helpful to someone looking to get quick information for brewing. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The examples you provided were super cool! I didn't even know things like this existed. I imagine the DSL you might end up creating would look something in between the game and the calculator. |
||
|
||
## The Project | ||
This section examines whether the idea makes for a good CS 111 project. | ||
|
@@ -58,12 +75,20 @@ making language design decisions), as opposed to "systems" aspects of the | |
project (e.g., implementing a complicated semantics that doesn't require a lot | ||
of language design)?_ | ||
|
||
I think that the project would be split between language design and systems work. It would entail the construction of a formula that takes many different parameters and can simulate behavior over time. There would ideally be a non-trivial graphical display portion of the project. The language would need to allow for the creation of new variables and parameters. The DSL could be made more complex if it gave users more options (i.e. the ability to choose different variables to graph against one another). | ||
|
||
|
||
### Scope | ||
_How big an idea is this? How ambitious is this project?_ | ||
|
||
This is a big idea and an ambitious project, though I think that it's achievable in the timeframe of the class. It involves a lot of different UI and language design components and has the potential to be a very useful tool. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I agree that it's more reasonable given the timeframe we have for class. Although I think a lot of the UI components might be a bit unrelated to the course, the language design components do show potential for a great DSL project. |
||
|
||
|
||
### Benefits and drawbacks | ||
_Why might this be a good idea for a project? Why might this not be a good idea | ||
project?_ | ||
|
||
This project could appeal to a wide variety of people and be expanded to different types of beverages. It would be user friendly and technically challenging for the developer. It might not be a good project because the DSL might be relatively simple and overshadowed by the brewing formula. This would depend on the implementation of the DSL and the end capabilities of the project. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As I mentioned earlier, the brewing formula to create simulation itself seems to be both a core aspect of the project yet not exactly the most relevant to DSLs. |
||
|
||
|
||
\* Disclaimer: I am over 21, though the simulator could be constructed for non-alcoholic beverages such as [Kombucha](https://en.wikipedia.org/wiki/Kombucha). | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Always include a disclaimer when dealing with alcohol! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems like a neat idea. I personally don't know anything about flavor pairings, so if I'm missing something from a recipe it ends up being a disaster. I know I'd be particularly frustrated if I created a dish perfectly only to have it ruined by a poor beverage pairing.