Alice's Adventures in Wonderland
by Lewis Carroll
Chapter XII: Alice’s Evidence
Additional Information
- Year Published: 1865
- Language: English
- Country of Origin: England
- Source: Carroll, L. (1865). Alice's Adventures in Wonderland. London: MacMillan Publishing Co.
-
Readability:
- Flesch–Kincaid Level: 5.5
- Word Count: 2,248
- Genre: Fantasy
- Keywords: 19th century literature, british literature, children's literature
- ✎ Cite This
Downloads
'Here!' cried Alice, quite forgetting in the flurry of the moment how large she had grown in the last few minutes, and she jumped up in such a hurry that she tipped over the jury–box with the edge of her skirt, upsetting all the jurymen on to the heads of the crowd below, and there they lay sprawling about, reminding her very much of a globe of goldfish she had accidentally upset the week before.
'Oh, I BEG your pardon!' she exclaimed in a tone of great dismay, and began picking them up again as quickly as she could, for the accident of the goldfish kept running in her head, and she had a vague sort of idea that they must be collected at once and put back into the jury–box, or they would die.
'The trial cannot proceed,' said the King in a very grave voice, 'until all the jurymen are back in their proper places—ALL,' he repeated with great emphasis, looking hard at Alice as he said do.
Alice looked at the jury–box, and saw that, in her haste, she had put the Lizard in head downwards, and the poor little thing was waving its tail about in a melancholy way, being quite unable to move. She soon got it out again, and put it right; 'not that it signifies much,' she said to herself; 'I should think it would be QUITE as much use in the trial one way up as the other.'
As soon as the jury had a little recovered from the shock of being upset, and their slates and pencils had been found and handed back to them, they set to work very diligently to write out a history of the accident, all except the Lizard, who seemed too much overcome to do anything but sit with its mouth open, gazing up into the roof of the court.
'What do you know about this business?' the King said to Alice.
'Nothing,' said Alice.
'Nothing WHATEVER?' persisted the King.
'Nothing whatever,' said Alice.
'That's very important,' the King said, turning to the jury. They were just beginning to write this down on their slates, when the White Rabbit interrupted: 'UNimportant, your Majesty means, of course,' he said in a very respectful tone, but frowning and making faces at him as he spoke.
'UNimportant, of course, I meant,' the King hastily said, and went on to himself in an undertone,
'important—unimportant—unimportant—important—' as if he were trying which word sounded best.
Some of the jury wrote it down 'important,' and some 'unimportant.' Alice could see this, as she was near enough to look over their slates; 'but it doesn't matter a bit,' she thought to herself.
At this moment the King, who had been for some time busily writing in his note–book, cackled out 'Silence!' and read out from his book, 'Rule Forty–two. ALL PERSONS MORE THAN A MILE HIGH TO LEAVE THE COURT.'
Everybody looked at Alice.
'I'M not a mile high,' said Alice.
'You are,' said the King.
'Nearly two miles high,' added the Queen.
'Well, I shan't go, at any rate,' said Alice: 'besides, that's not a regular rule: you invented it just now.'
'It's the oldest rule in the book,' said the King.
'Then it ought to be Number One,' said Alice.
 'Consider your verdict,' he said to the jury, in a low, trembling voice.
'There's more evidence to come yet, please your Majesty,' said the White Rabbit, jumping up in a great hurry; 'this paper has just been picked up.'
'What's in it?' said the Queen.
'I haven't opened it yet,' said the White Rabbit, 'but it seems to be a letter, written by the prisoner to—to somebody.'
'It must have been that,' said the King, 'unless it was written to nobody, which isn't usual, you know.'
'Who is it directed to?' said one of the jurymen.
'It isn't directed at all,' said the White Rabbit; 'in fact, there's nothing written on the OUTSIDE.' He unfolded the paper as he spoke, and added 'It isn't a letter, after all: it's a set of verses.'
'Are they in the prisoner's handwriting?' asked another of the jurymen.
'No, they're not,' said the White Rabbit, 'and that's the queerest thing about it.' (The jury all looked puzzled.)
'He must have imitated somebody else's hand,' said the King. (The jury all brightened up again.)
'Please your Majesty,' said the Knave, 'I didn't write it, and they can't prove I did: there's no name signed at the end.'
'If you didn't sign it,' said the King, 'that only makes the matter worse. You MUST have meant some mischief, or else you'd have signed your name like an honest man.'
There was a general clapping of hands at this: it was the first really clever thing the King had said that day.
'That PROVES his guilt,' said the Queen.
'It proves nothing of the sort!' said Alice. 'Why, you don't even know what they're about!'
'Read them,' said the King.
The White Rabbit put on his spectacles. 'Where shall I begin, please your Majesty?' he asked.
'Begin at the beginning,' the King said gravely, 'and go on till you come to the end: then stop.'
These were the verses the White Rabbit read:—
'They told me you had been to her,
And mentioned me to him:
She gave me a good character,
But said I could not swim.
He sent them word I had not gone
(We know it to be true):
If she should push the matter on,
What would become of you?
I gave her one, they gave him two,
You gave us three or more;
They all returned from him to you,
Though they were mine before. If I or she should chance to be
Involved in this affair,
He trusts to you to set them free,
Exactly as we were.
My notion was that you had been
(Before she had this fit)
An obstacle that came between
Him, and ourselves, and it.
Don't let him know she liked them best,
For this must ever be
A secret, kept from all the rest,
Between yourself and me.'
'That's the most important piece of evidence we've heard yet,' said the King, rubbing his hands; 'so now let the jury—'
'If any one of them can explain it,' said Alice, (she had grown so large in the last few minutes that she wasn't a bit afraid of interrupting him,) 'I'll give him sixpence. I don't believe there's an atom of meaning in it.'
The jury all wrote down on their slates, 'SHE doesn't believe there's an atom of meaning in it,' but none of them attempted to explain the paper.
'If there's no meaning in it,' said the King, 'that saves a world of trouble, you know, as we needn't try to find any. And yet I don't know,' he went on, spreading out the verses on his knee, and looking at them with one eye; 'I seem to see some meaning in them, after all. "—SAID I COULD NOT SWIM—" you can't swim, can you?' he added, turning to the Knave.
The Knave shook his head sadly. 'Do I look like it?' he said. (Which he certainly did NOT, being made entirely of cardboard.)
'All right, so far,' said the King, and he went on muttering over the verses to himself: '"WE KNOW IT TO BE TRUE—" that's the jury, of course—"I GAVE HER ONE, THEY GAVE HIM TWO—" why, that must be what he did with the tarts, you know—'
'But, it goes on "THEY ALL RETURNED FROM HIM TO YOU,"' said Alice.
'Why, there they are!' said the King triumphantly, pointing to the tarts on the table. 'Nothing can be clearer than THAT. Then again—"BEFORE SHE HAD THIS FIT—" you never had fits, my dear, I think?' he said to the Queen.
'Never!' said the Queen furiously, throwing an inkstand at the Lizard as she spoke. (The unfortunate little Bill had left off writing on his slate with one finger, as he found it made no mark; but he now hastily began again, using the ink, that was trickling down his face, as long as it lasted.)
'Then the words don't FIT you,' said the King, looking round the court with a smile. There was a dead silence.
'It's a pun!' the King added in an offended tone, and everybody laughed, 'Let the jury consider their verdict,' the King said, for about the twentieth time that day.
'No, no!' said the Queen. 'Sentence first—verdict afterwards.'
'Stuff and nonsense!' said Alice loudly. 'The idea of having the sentence first!'
'Hold your tongue!' said the Queen, turning purple.
'I won't!' said Alice.
'Off with her head!' the Queen shouted at the top of her voice. Nobody moved.

'Wake up, Alice dear!' said her sister; 'Why, what a long sleep you've had!'
'Oh, I've had such a curious dream!' said Alice, and she told her sister, as well as she could remember them, all these strange Adventures of hers that you have just been reading about; and when she had finished, her sister kissed her, and said, 'It WAS a curious dream, dear, certainly: but now run in to your tea; it's getting late.' So Alice got up and ran off, thinking while she ran, as well she might, what a wonderful dream it had been.

The long grass rustled at her feet as the White Rabbit hurried by—the frightened Mouse splashed his way through the neighbouring pool—she could hear the rattle of the teacups as the March Hare and his friends shared their never–ending meal, and the shrill voice of the Queen ordering off her unfortunate guests to execution—once more the pig–baby was sneezing on the Duchess's knee, while plates and dishes crashed around it—once more the shriek of the Gryphon, the squeaking of the Lizard's slate–pencil, and the choking of the suppressed guinea–pigs, filled the air, mixed up with the distant sobs of the miserable Mock Turtle.
So she sat on, with closed eyes, and half believed herself in Wonderland, though she knew she had but to open them again, and all would change to dull reality—the grass would be only rustling in the wind, and the pool rippling to the waving of the reeds—the rattling teacups would change to tinkling sheep–bells, and the Queen's shrill cries to the voice of the shepherd boy—and the sneeze of the baby, the shriek of the Gryphon, and all the other queer noises, would change (she knew) to the confused clamour of the busy farm–yard—while the lowing of the cattle in the distance would take the place of the Mock Turtle's heavy sobs.
Lastly, she pictured to herself how this same little sister of hers would, in the after–time, be herself a grown woman; and how she would keep, through all her riper years, the simple and loving heart of her childhood: and how she would gather about her other little children, and make THEIR eyes bright and eager with many a strange tale, perhaps even with the dream of Wonderland of long ago: and how she would feel with all their simple sorrows, and find a pleasure in all their simple joys, remembering her own child–life, and the happy summer days.
THE END


First Collaborative Workshop on Data and Modeling in Collective Behavior
Where: New Jersey Institute of Technology, Newark, NJ
When: May 23-25, 2016
Organizers: Jason Graham (University Scranton) & Simon Garnier (NJIT)
The goal of this workshop is to provide researchers coming from both mathematics and biology with experience in working collaboratively to model and analyze data produced by research in collective behavior.
During the workshop, mathematicians and biologists will work in teams toward constructing mathematical and/or computational models of biological data. Each team will be tasked with exploring, analyzing and modeling original data sets provided by biologist attendees. The event will be similar in spirit to a hackathon in computer science, with the goal of finding new ways to understand the provided biological data. Regular debriefing sessions will be organized throughout the 3 days of the workshop in order for each team to provide updates to and receive feedback from the rest of the participants on their progress.
This should provide valuable training and experience for researchers coming from both fields, as well as an opportunity to create new collaborations beyond the workshop itself.
Ultimately, one of our goals is for this workshop to become an annual or biannual event that will impact research on collective animal and human behavior by promoting close collaboration between mathematicians and other scientists working on understanding the organization and functioning of animal and human societies.
Confirmed participants:
- Erol Akcay + students, University of Pennsylvania
- Sachit Butail, Johns Hopkins University
- Amanda Chicoli, Carnegie Institute
- James Curley, Columbia University
- Erik Duboué, Carnegie Institute
- Simon Garnier + students, NJIT
- Jason Graham, University of Scranton
- Maurizio Porfiri + students, New York University
- Lauren Quevillon, Pennsylvania State University
- Bill Romey, Potsdam University
- Daniel Rubenstein + students, Princeton University
- Gareth Russell, NJIT
- Marc Seid, University of Scranton
- David Shirokoff, NJIT
General schedule for the workshop:
| May 23 | |
|---|---|
| Morning | Short presentations and discussion by individuals on project ideas and collaboration goals |
| Lunch | Chatting and pairing of theoreticians and experimentalists |
| Afternoon | Collaborative work in small groups |
| May 24 | |
| Morning | Short presentations and discussion on each group’s progress |
| Afternoon | Collaborative work in small groups |
| May 25 | |
| Morning | Update on each group’s progress and closing discussion |
| Lunch | Field trip to the National Museum of Mathematics, NYC |
Workshop location, parking and travel information
The workshop will take place on the 3rd and 4th floor of the Central King Building on the NJIT campus. The location of the building is indicated by the red pin in the map below.
Free parking will be available upon request in the NJIT parking deck (blue pin in the map below; entrance at 154, Summit Street). Please make sure to contact Simon Garnier at<EMAIL_ADDRESS>to request a visitor pass for the duration of the workshop.
NJIT is easily accessible by public transportation. Depending on your location, you can take a train to Newark Penn Station or Newark Broad Street Station (green pins at the top and right of the map below). From Newark Penn Station, you can take the lightrail to the Warren Street Light Rail Station (green pin at the left of the map below), just outside campus. From Broad Street Station, you can walk to campus in about 10 minutes. You can also take a free shuttle bus to campus; they are operated by Rutgers University.


Set operations in material set theories are defined in terms of the membership predicate ∈, e.g.
Typically sets are represented as lists of unique elements, e.g. {1,2,3}, which together with the set operations define an algebra of lists. But sets can also be represented as bit vectors (indicator functions) where each bit corresponds to an element of a universal set. Set operations are then carried out by the logic operators $\land$, $\lor$, and $\lnot$. Here is an example in J.
J has a nice function called under that applies a transformation to its operands before computing the given algebraic operations, and then applies the transformation’s inverse to the result. We can use it to show the equivalence of the two algebras.
The algebras are boolean and because of their one-to-one mapping (if all sets are restricted to be subsets of $U$) they are said to be isomorphic.


{% extends "base.html" %}
{% block content %}
Organization recovery: {{ organization }}
| A user at {{ app_link() }} has attempted to recover access to organization {{ organization }} via this email address. |
| Please login with one of the following user accounts to access this organization: |
{% for admin_user in admin_usernames %}
- {{ admin_user | user_reference }}
{% endfor %}
| If you did not make this request, your organization has not been compromised and the user was not given access. You can safely ignore this message. |
Best Wishes,
The {{ app_title }} Team
{% endblock %}


#assign findNative= "true">
With findNative
we supply the SQL. The SQL can contain positioned parameters with ?
used for bind parameters or we can use named parameters like :foo
An example using named parameters.
```java ListWith the above examples we are selecting some columns and as a result getting partially populated entity beans (which is good - we should only fetch things out of the DB that we need).
We can use select *
if we desire all the columns.
The way this works is that when a query is first run the JDBC meta data is read for the columns in the resultSet and then these columns are automatically mapped to bean properties.
This only needs to be done for the first execution of the query. How the query is mapped to beans is cached so we only need to read the JDBC resultSet meta data once per query.
There is a limitation with the Oracle JDBC driver in that the meta data currently does not include the table that a column relates to. This means that with Oracle we can only map a single table and not multiple tables (and would have to use RawSql instead).
Excluding Oracle our SQL can select from multiple tables and these can automatically be mapped.
For example, we can fetch and populate 2 related beans like Customer and Contact.
```java // Contacts + Customer String sql = "select ct.id, ct.first_name, ct.last_name, cu.id, cu.name " + " from contact ct " + " join customer cu on cu.id = ct.customer_id " + " order by ct.first_name desc"; ListThe limitation with using findNative (excluding Oracle) is that it can only map multiple tables when the path for a given table is unique. For example, lets say we have Customer that maps both a billingAddress and shippingAddress to the Address. When ebean tries to map a column for the address table it does not know which path (billingAddress or shippingAddress) the column maps to.
When we hit this limitation we need to use RawSql instead where we can map more explicitly.


@import helper._ @main("Welcome to Play"){ @adminDashboard(""){
Demo Database contains data for presenting the functionality of the Recommender system
Does no contain anything. Every user with permission to the code can add csv files here
Does no contain anything. Every user with permission to the code can add csv files here


Looking Back on 2010
Back in January, I posted my [top three goals for 2010.](http://www.adambyram.com/2010/01/10/my-goals-the-2010-edition/
)
So how did I do? Well…
Goal: Get Healthy
Result: Failed – I totally bombed this one. A lot of changes happened in 2010
that distracted me from this goal. This WILL be happening in 2011.
Goal: Side Income to Livable Levels
Result: Success / Not Applicable – This originally came about because I wanted
to leave me previous job and work for myself. I did end up working for myself
anyway, but I didn’t get my side income to livable levels. Having said that, I
did start a new job which negated this goal (and resulted in an even better
outcome in a lot of ways). I still love the idea of running my own business
and maybe it’ll happen when it’s time. I tried to force it this time and that
wasn’t the right way to do it. In the meantime, everything is working out
pretty awesomely.
Goal: See a Space Shuttle Launch (in person)
Result: Success – I hit a home run on this one. I watched the next to last
launch of Atlantis in May (from Titusville) and then I won the lottery by
being selected for the NASA Tweetup for Discovery’s final flight. While I
didn’t see Discovery launch (yet – 2011 goal now), I did get an amazing
experience at NASA including standing just a few hundred yards from Discovery
on the launchpad.
Overall, I’m OK with my progress (all things considered). I’m disappointed in myself for not making progress on my “Get Healthy” goal, but it was a bit of a crazy year. I’m happy with my direction heading into 2011 so 2010 was definitely not a waste. While I may not have accomplished all of the goals I wanted, 2011 is looking to be the best year yet.


Enquire Us
Hotel
Our History
Book a Table
Our Album
We Are Hiring!
Ask us @
Phone No. :+913214568790
Landline 1:044 44567891
Landline 2:044 44567890
email:customercontact@smartcook.com


true if we were triggered by a broadcast
from the menu itself - in which case don't broadcast again as we'll get
an infinite loop
showMenu(column, $columnElement)
Shows the column menu. If the menu is already displayed it
calls the menu to ask it to hide (it will animate), then it repositions the menu
to the right place whilst hidden (it will make an assumption on menu width),
then it asks the menu to show (it will animate), then it repositions the menu again
once we can calculate it's size.


Database Statistics
Coming Soon!
Select a database by clicking on the name of the DB in the Dashboard. This will then show the list of all collections in the DB on the left panel.
To view docs/entries in a collection, select the collection from the left panel and a table will be generated. You can use this table to add, delete, and edit docs. You can also view the JSON in a tree format by clicking the tree icon in the operate column.
Collections or individual entries can be exported to a JSON file by clicking the export option in the left panel. This will give you the option to export selected rows or an entire collection in the current DB
JSON files can be imported into a collection by clicking the 'add' button in the table view and selecting a file for import. Entries must be in an array otherwise the entire JSON object will be treated as a single entry. Please use common sense when importing.
For requests and questions, please contact<EMAIL_ADDRESS>MongoConsole is a UI for interacting with MongoDB built on Node.js
Author: Alexandra Grant -<EMAIL_ADDRESS>Git: https://github.com/flapjack103/mongoconsole.git
Version: 0.1.5
Disclaimer: MongoConsole is not an official MongoDB application. Logo image belongs to MongoDB at www.mongodb.org


{% extends "checker/base.html" %} {% block inner_content %} {{ Form.handle_errors(form) }}
{{ _('You’ll need to provide evidence of the financial information you’ve given us through this service.') }}
{% trans %}We only need to know about any money you received last month, even if this varies from month to month.{% endtrans %}
{% include "checker/time-out-warning.html" %} {{ Element.get_in_touch_link() }} {% endblock %}


Overview
Problem
For students and young professionals living in apartments, it is hard to submit maintenance requests, track their statuses, and get quick help on small things. Public facilities also fail from time to time, but few people would report them, leaving them broken for days or weeks.
Solution
I designed an app with AI chatbot and voice control, so that residents can quickly report issues in a natural way. Users can also track their request status and maintain open communication with maintenance staff and their roommates. I also incorporated a reward mechanism to motivate users to report public issues and contribute to the community.
Timeline
7 Days
Project Info
Google Design Exercise
Tools
Sketch, Marvel, InVision, Principle, Realtime Board (Miro), Paper & Pen
You Say It, We Solve It.
Describe the issue the way you want, and we'll help you resolve it fast
Just describe the problem by talking, taking a photo, or typing. Our chatbot suggests frequent issues and autocompletes any request you enter. For simple requests, we'll suggest short video clips and articles from online. Submitting and resolving an issue has never been faster.
Know What to Expect
Know who's coming to help you, and when things will get fixed.
Afraid to shower or sleep because you don't know when maintenance will come? Don't know when you could use your kitchen faucet again? Now, you can track the status, edit your requests, and connect with the person assigned to your request.
Contribute and Earn Rewards
Report public issues to earn the community's appreciation and gift cards
By reporting public issues, you are helping the community maintain its facilities and get issues fixed faster, benefiting everyone around you. You'll also earn points that you can use to redeem a variety of gift cards and discount.
Works with Google Home
No need to open the app. Let Google help you handle it.
We know that opening your browser or your app to report an issue sounds annoying. Don't worry, just say your complains out loud, and our Google Assistant Action will help you create, track, and follow up with any issue.
Research
Project Scope & Audience
Because of the time limit of the exercise, I started by setting the scope and target audience for myself, and making a couple of assumptions to keep me focused.
Target Audience
I decided to target an apartment in Midtown Atlanta because of my easy access to users. The community is young, lively, busy, and full of energy, and its residents are mostly students and young professionals. The apartment has its own maintenance staff that will handle residents' maintenance requests.
Ideally, the product would satisfy the needs of all stakeholders involved, including residents, maintenance staff, and the company that owns the apartments. Since I had limited access to the latter two, I based my design mostly on user needs, but also tried to look online to try my best to consider the needs of other stakeholders.
Assumptions
To scope my design, I also made the following assumptions:
- There is a digital inventory with the community's facilities and their detailed information (location, repair history, etc.)
- Each user has an account that will be linked to their apartment number and their maintenance history.
- I could leverage existing machine learning algorithms (computer vision, voice recognition, autocomplete, etc.) in my solution if the implementation effort is worth the results.
Focus
I discovered a variety of edge cases as I delved into the problem deeper. Because of the time limitation, I decided to demonstrate my solution through mostly normal use cases. I also considered edges cases and will describe them in future steps.
Background Resesarch
Leveraging Online Resources
In order to quickly understand the design space within the time limit, I started by Googling articles related to general maintenance request. The articles helped me understand how things work from the maintenance staff's perspective, as well as get to know different issues that users encounter. They also helped me frame my initial user interview questions.
I also tried out a couple of maintenance request systems and apps I have access to. They helped me get a quick idea of a range of community issues that might happen and how different communities currently handle maintenance requests.
Keeping Ideas Open
What I found useful from my recent design experiences is to first start a document with all my random ideas related to the topic and keep updating it whenever any new ideas come to my mind as I'm reading, researching, wandering around, or even showering. By tidying up these ideas, I found a number of assumptions and opportunities that ended up inspiring my user interview questions and my ideation session.
User Interviews & Analysis
I conducted quick interviews with residents living in a local apartment in Midtown Atlanta. The goals was to 1) understand problems users encounter when reporting issues about public and private facilities in the community and 2) uncover deeper human needs that lie behind those frustrations so that my design can address them
I analyzed the results by creating an affinity map in Miro (formerly RealtimeBoard). With the results, I created the following personas and formulated my design goals.
Personas
Issues regarding a residential community can get really personal. That's why I represented the research results using the following personas, to help me empathize with my users.
Design Goals
To help me maintain focus during the design phase, I derived four overall design goals that will address the needs and frustrations encountered by my target audience. Again, I intentionally made the goals highly personal, starting from the user's feelings, emotions and motivations to make sure that my design doesn't only touch upon the surface of the problems. If I were to evaluate the success of my design, these goals would also become part of my success metrics.
Design & Iterations
With the personas and design goals in mind, I started brainstorming potential solutions that will address each design goal.
Ideation
For each goal, I started writing and sketching down potential solution that can address these goals. At this stage, I didn't consider the feasibility of the ideas, but rather took down anything that came to my mind. I also combined these new ideas with the ideas I randomly jotted down during the intial research phase.
I also walked "mindfully" around the apartment building, going into different common spaces and try to use those facilities. This enabled me to consider a variety of scenarios, from missing coffee packets to broken equipments in the gym.
I then referred back to my design goals and thought about how the features I came up with would work together to meet the goals. I also categorized my ideas into yes, no, and future steps based on their potential benefits versus the implementation feasibility/cost.
I eventually decided to create an app together with a Google Home Action to address the problems I identified. I'll highlight a couple of challenges and important decisions below.
Some might argue that the users might not want to install another app on their phone just for submitting maintenance requests. While that is a valid point, I still decided to use an app instead of the other alternative, a website for several reasons:
- One of my goals is to encourage users to submit public issues. Assuming that users would mostly submit issues immediately when and where they notice them, I decided that mobile app is the easiest platform to access in this context.
- The perceived effort for submitting a request is lower on app. One user told me that he didn't even want to submit issues about his own apartment because "it's too much effort to start my computer and search for how to do it." In an app, however, users can just take out their phone and enter it anywhere, or even use voice commands (with Google Assistant, Siri, etc.)
- Sometimes users use photos to explain the problem. It is much easier to take a photo and annotate it on an app compared to a website (desktop or mobile).
To further motivate the use of the app, I could envision the app to be a central place to build a great community, including functions not only about maintenance requests, but also about events nearby, discussions with neighbors, etc. However, the scope of such a project and the feasibility of it can be further discussed.
Challenge Highlight: How to Simplify the Report Process?
Whether for public issues or private issues, one of the largest frustrations users have right now is that the reporting process is really complicated. In fact, there is currently a "conflict" between residents' needs and maintenance staff's needs.
Current reporting tools typcially ensures the detailedness of the description by having users classify the issue into categories and sub-categories, and select the detailed location of the problem from a predefined location list.
However, the categorization is not clear to most users, and all of them spend a long time going through each list with dozens of items, trying to report a simple issue. If the issue's not an emergency, a lot of them even give up or not bother reporting, whether it's a private issue or a public issue.
The challenges ultimately comes down to two questions:
- How can we design a reporting process that is quick and easy for users to go through, but also ensures that the maintenance staff get enough information?
- How can we also make sure that the solution will be applicable to all kinds of issues in the community, ranging from broken elevators to cockroach problems to paper jams in a specific printer?
Design Alternatives: Novel, Simpler Ways for Input
With these questions in mind, I started writing & drawing down alternatives. I quickly thought about 2 ways to help users more quickly and accurately identify issues with a particular facility:
To minimize user's text input, I chose two methods involving photos. However, these approaches either require large implementation efforts, or are not quite feasible given the current state of our technology. Still, taking a photo would help users better describe an issue, especially if they can annotate the photos. Therefore, I kept this idea for further consideration.
I then thought about another way to simplify user's input:
Overall, voice seems to be especially suitable for our problem, because users already know what the issue is. Instead of letting them find the issue again from a list, it's easier to let them just say it.
That said, voice cannot be the default input for all cases due to its limitations. I need to provide my users with other options if voice recognition fails, or if they are reluctant to use it in some circumstances. Therefore, I decided to incorporate voice, and at the same time design a visual UI to let users input information using text and images.
Design Alternatives: What Should Text Input Look Like?
To design a more usable text input, I have to make sure users don't have to spend much time figuring out the category of the problem, or which location they should input. I hope to follow my general design philosophy: to take care of most of their work nearly automatically, with the technology supporting it hidden in the background, and only let users know how the magic happens if they want to learn about it.
I started from several basic design alternatives on how I would structure the issue report page to make it simple for the users, remind users to enter enough information, and support all the use cases for issue report.
Since reporting public issues and private issues might be different, I started from thinking mostly for reporting issues in one's own apartment.
Another alternative I thought about was to let users enter the broken facility information first, because that's the first thing that comes to one's mind--that something's broken. Asking the facility first can also help the system suggest locations to better locate the facility based on where those facilities might be located at (there might be 3 exits on the same floor within the same building, so it's important to specify which one is broken). This can be helpful especially when GPS cannot help users locate where exactly they are in an indoor setting.
Feedback & Pivot: What If Users Don't Need to Fill a Form at All?
I took the 4 design alternatives to users to gather some initial feedback. Even though I tried my best to simplify the process, users still felt that it took them too much effort to fill in the "form" with different fields. One user mentioned:
The feedback I got pushed me to think even more about how to further simplify the solution, which is still not quite there yet. If the users don't want to think so much about the different text fields, can we let them just start by describing the problem in their own way? Based on their input, we can automatically identify facility names, and suggest locations and common problems based on that.
In this case, the user will have to type in a large text field and nothing else. This can be both an advantage and a disadvantage. The advantage is that users don't have to go through several dropdown menus to fill in different information required. The disadvantage is that in such a blank text field, the users have to type in everything themselves. Though we will suggest location names and reason for failure below, users will still perceive the task as complicated because of such a large space they think they have to fill. It's also possible that the users don't end up filling all the required information, so that the maintenance staff will not have enough information about the problem to fix.
Therefore, we need to have something that allows users to enter the information naturally, preferrably short pieces of information, and inquire about further details only if necessary. This sounds like...
A chatbot!!!
Though implementing a smart chatbot might be a lot of effort, the solution does makes it much easier for users to submit a request, which is one of the largest problems I identified through research.
If I had access to engineers, I would further discuss with them about the implementation difficulty versus the benefits we'll get from the function, to determine whether we should use a chatbot.
Challenge Highlight: How to Motivate Users to Submit Public Requests?
Users all complain about public facilities failing, which greatly impact their lives, but few of my interviewees said that they would report the issue; they either think that others will do it, or think it's too complicated to file the request.
One way to encourage them to report public issues is to make the reporting process easier, and I have already talked about it in the previous section. However, making it easy is not enough. If there is no immediate benefit users can see about reporting public issues, most of them still would not do so.
After generating several ideas, I eventually decided to create a reward mechanism to encourage users.
I also evaluated the costs and benefits it will bring to the apartment and its residents to make sure that the two stakeholders involved will accept and benefit from the proposal.
Wireframe Flow
With more refined initial ideas, I created a wireframe flow and an interactive prototype in Marvel to illustrate the concept. I brought this prototype to a couple of users in order to understand 1) whether my design meets my intial design goals, 2) whether there are situations that I haven't considred, and 3) any feedback users might have on the design concept.
User Feedback & Iteration
I brought the prototype to 5 users for a quick round of feedback. The overall feedback was really positive: people believe that this is a more personal and simple approach to the traditional maintenance request problem, whether it is the chatbot or the profile information about the maintenance staff. They also feel motivated to contribute to the community with the rewards system, and loved the tips from YouTube that can help them troubleshoot simple problems themselves.
My interviewees also brought up some use cases that I had not considered before. One of them actually worked as a maintenance staff before, and provided me lots of great insights from the other perspective. Due to the time limitation, I couldn't incorporate everything into my final design, but I summarized those insights in future steps.
Below are some recurring problems I identified across all participants' feedback that inspired changes in my design.
Lack of Control
One big issue with the chatbot design is that initially the chatbot immediately submits a request once it has enough information, and the users can cancel/edit it if needed. My original intention was to make the process faster, so that the chatbot won't have to repeatedly ask for confirmation. However, all users I asked were not prepared for that. They felt a loss of control once they see the request submitted even when they think they haven't provided enough information from their end. Here's what I changed:
Placement of Tips
Initially, for simple problems like slow-draining toilets, I provided the users tips for quickly solving it themselves on YouTube after they submit the request. If they worked it out themselves, they can cancel the request.
However, all users commented that such tips should be provided before they submit requests. Otherwise, if they get it fixed and a request is already in place, they'll have to cancel it again, causing more inconvenience. Therefore, I moved the tips earlier in the process:
Navigation Structure
My initial design had three bottom navigation tabs, because I wanted users to see what they can do in the app clearly.
However, I realized through observation & my conversations with users that most of them won't go into the "Requests" tab often, if at all. There are really few use cases in which users want to see a complete history of their requests, and they can already see the status of ongoing requests in the "Home" tab. The information in the "Requests" tab is necessary, but shouldn't take up that much visual weight. Therefore, I made the following changes:
Final Design
To practice my storytelling skills and help you better understand how my design addresses user's problems, I'd love to present my final design through the following user scenarios.
Alicia's Clogged Toilet
Using the app, Alicia is able to quickly submit requests for problems she encounters frequently. For simple problems, she can get tips from YouTube and Google, and learn to solve them herself.
01.
 She opens the app and "My toilet won't drain" shows up as a frequent problem.
02.
Solving Simple Problems with Tips
Alicia watches the YouTube video recommended by the chatbot, and decides to buy a plunger. She ends up solving the problem herself!!
Robert Starts Reporting Public Issues!
As busy as Robert is, he is motivated now to report public issues because first, the process is extremely simple. Once he starts typing, the chatbot will recommend locations and problems based on the device inventory and user input history. Second, he gets points for reporting public issues, and he's so close to redeeming a $50 gift card from Starbucks, where he often meets other people.
01.
Smooth Input with Autocomplete
Robert sees that the printer in the club room is out of ink and decides to report it. As soon as he starts describing the problem, the chatbot starts providing suggestions so that he doesn't have to type everything.
02.
Detailed Information by Request
The chatbot realizes that the information Robert provided was not enough to inform the maintenance staff, so it asks a follow up question before generating the request.
03.
Contribute, and Get Acknowledged and Rewarded
Robert submits the public maintenance request. He is thanked for his contribution. He also gets 20 points for this request, so right now he's only 180 points away from his $50 gift card!
Alicia Can Better Manage Her Requests
One of the biggest pain points for Alicia was that she didn't know anything about the progress of her requests, or when the maintenance staff would come. Not anymore. Now, she can even schedule a time, contact maintenance staff, and be assured of their professionalism through ratings.
01.
Scheduling a Time with Maintenance
Alicia has an interview Tuesday evening, so she hopes to get her smelling bathtub fixed before that. She opens her ongoing request and schedules a time with Asa, the maintenance staff assigned to her.
02.
Tracking & Updating the Request
In addition to having a clear timeline of what will happen, Alicia can also easily edit her past request details before maintenance comes, and decide the best way to be informed and stay in touch with maintenance, including following up with them afterwards.
Robert Can Quickly Follow Up on His Requests using Google Home
Robert is always short on time and doesn't always want to use his phone or computer to track maintenance tasks. Fortunately, he is able to use his Google Home's Action to help him quickly follow up on requests that are not completely fulfilled.
01.
“Let Google Do It”
Robert goes home and finds that of the two lights he reported, one has been fixed, and the other hasn't. He quickly follows up with maintenance by talking to Google Home while preparing his lunch for tomorrow.
Future Steps
I completed the exercise within 7 days within the scope I initially defined. However, if I had more time and resources to do the project, I would like to further explore a couple of things:
Considering Other Stakeholders
As I stated in my assumptions, since I had the most access to residents, I designed the solution with mostly their needs in mind. Though I considered other stakeholders like maintenance staff and the company that owns the apartment, there are still more questions to consider before deciding on the final design of the system.
How Would Maintenance Staff React to the App?
To help users feel assured of the expertise of the maintenance staff members, I showed them photos and ratings of staff members (the rating flow is not yet designed due to time limitations). I also provided ways to contact and schedule appointments with maintenance staff. I even thought about doing a tipping system for users to tip staff members. All these features are designed to help users feel that a real person is handling their request, and that the person is highly skilled in it.
However, I need to make sure that maintenance staff members are OK with sharing such information. I also need to consider how they work currently, what their existing system looks like, and how the proposed design will change their current workflow. Will there be retraining involved? Will it make their jobs easier or harder? All these factors need to be considered to evaluate my solution.
How Would the Apartment React to the Rewards Mechanism?
My analysis told me that the apartment would be willing to provide incentives like gift cards to encourage its residents to report public issues. However, I need to further confirm with the apartment's representatives that they would be willing to do so. In addition, the exact rewarding mechanism, including how many points to reward for what kind of issues, and how points would convert into dollars and gifts, need to be further defined with all stakeholders involved.
Concerns about the Reward System
One concern I heard about the rewarding system is that some people might report random issues in order to get points. This will negatively influence the apartment and the work of the maintenance staff. In other hypothetical cases, people might even intentionally break things and report them later. These events might be highly unlikely, but they are valid concerns. During my design process, I only conceptually thought about designing a mechanism to verify that the request is valid and to ensure fairness and property behavior. Further work or even experiments are needed to verify if the reward system works as expected.
Considering All Cases
The flows I illustrated in the case study were the main flows that best demonstrate my design ideas. There are other less crutial flows and edge cases that are nevertheless necessary to consider. For example:
- I hope to enable users to take photos of facilities and make annotations on them. How would that happen?
- What if the user wants to submit a public issue, while the same issue had already been submitted? How would the chatbot check for duplicates and remind the user of that? How would the reward system work in this case?
- What if all the available slots from the maintenance staff assigned to me does not work for me? Can I change who I am assigned to?
- What if the repair has extra cost? What if the maintenance staff couldn't solve the problem on first visit, and have to schedule another visit afterwards? What if a contractor needs to be hired?
These are just some of the cases I thought about as I examined my design and showed the design to users. I'll need to further consider them if I had more time.
Generalizing to Other Communities
I based my design on only one apartment community in Atlanta. If I had more time, I'd like to consider different communities with different kinds of residents. Since they might have different facilities, different plans, and different demographics, it'd be interesting to see if I could design a solution that can scale.
Crowdsourced Help
One of my design goals is to provide alternative ways for users to solve their problems if maintenance staff members are not available. I already provided tips for them from YouTube and Google, but I hope to experiment with more solutions. For example, what if we can crowdsource the help, and let our neighbors help us? That would be helpful if we need simple help, like borrowing a plunger, or fixing a buzzing smoke detector that we can't reach. People's reactions to this idea might depend on their relationships with their neighbors, and the nature of the community. There might also be security issues involved. I'd love to further explore alternative options if I had more time.
Envisioning the Future
Though I always think about the implementation feasibility of my design, I also love to think about what would happen if we were in the future. Perhaps a sensor could be attached to each facility, so that when it fails, it would automatically report itself. In that way, would there still be a need for residents to do the report?
This scenario would be unlikely, but it is possible now for us to detect simple problems like "the printer's out of paper", or "the clubroom is out of coffee". Once detected, it's also possible to send such information to the right person for the issue to be immediately resolved. If I had more time, I'd love to think about such scenrios, and analyze why such solutions have not been implemented already (maybe due to lack of demand, cost, no business case, or other factors).
Yayyyyyyyyy you made it! Thank you all for reading through this case study! I had a lot of fun with the project, which enabled me to touch upon different topics like AI, chatbot, smart home, etc. I also really enjoyed the process, including bringing my prototypes to users and getting a variety of responses from them, exploring principles in material design & examining how it has evolved, and crafting animations for the chatbot & the reward mechanism. Hope you enjoyed learning about my design and thought process.:)


CPPGM Programming Assignment 8 (nsinit)
Overview
Write a C++ application called nsinit
that takes as input a set of C++ Source Files, executes all phases of translation, and outputs a mock program image in the format described below.
The behaviour of nsinit
is undefined if a translation unit does not match pa8.gram.
Note that unlike PA7, behaviour is now defined for diagnostic-required ill-formed programs that match the assignment grammar.
Also note, there is no machine code generation required for the mock program image, variables are output in their zero-initialized or constant-initialized state, and functions are output as fixed stubs.
Prerequisites
You should complete Programming Assignment 7 before starting this assignment.
Starter Kit
The starter kit can be obtained from:
$ git clone git://git.cppgm.org/pa8.git
It contains:
- a stub implementation of
nsinit
- a compiled reference implementation
nsinit-ref
- a wrapper for a production C++ compiler called
nsinit-other
that serves as a secondary partial reference implementation. (to use it you will need to modify the command) - a test suite.
- a stdin/stdout wrapper for
nsinit-ref
callednsinit-ref-stdin
, that passes the output program image throughxxd
. - a stdin/stdout wrapper for
nsinit-other
callednsinit-other-stdin
, that passed the output program image throughobjdump
. - the grammar for this assignment called
pa8.gram
- a html grammar explorer of
pa8.gram
in the sub-directorygrammar/
You will want to extend your PA7 solution to complete this assignment.
Test Format Changes
In this assignment there are test cases with multiple translation units. To accomodate this, each test case now consists of one or more input source files:
NNN-testname.t.1
NNN-testname.t.2
...
NNN-testname.t.<n>
The output files:
NNN-testname.ref
NNN-testname.ref.stdout
NNN-testname.ref.exit_status
remain the same, however note the outfile for PA8 is of binary format, so you will want to look at it in hex (with, for example, xxd
or ghex
)
nsinit-other
Additional to the normal .ref.*
output files, there are output files:
NNN-testname.other.stdout
NNN-testname.other.exit_status
which are generated with nsinit-other
. These are not used in automated testing of nsinit
. For ill-formed test cases the error message in .other.stdout
may be superior to the reference implementations. The .other.exit_status
is mainly for internal use to help test the reference implementation during development against a production compiler.
Note that the output of nsinit-other
is a real ELF program image, and so not the same as the PA8 Mock Program Image. To save space it is deleted during generation of the .other.*
output.
The .ref.*
and .other.*
can be regenerated with the make ref-test
target. To use it you will need to modify nsinit-other
to wrap the production toolchain you wish to use as other
.
Input / Command-Line Arguments
The same as PA7 nsdecl
. Behaviour is undefined unless the command-line arguments match:
$ nsinit -o <outfile> <srcfile1> <srcfile2> ... <srcfileN>
with the same relaxations as PA7
Output Format
nsinit
shall write a binary image to
PA8 Mock Program Image
The magic first four bytes shall be the array of 4 char
string literal "PA8".
The following entities shall be appended:
- variables of static or thread storage duration
- temporary objects bound to references
- mock function stubs
- string literals
In the following order:
BLOCK 1: Variables and functions shall then be appended in order of first declaration within the program, where the translation units are processed in the same order as given on the command-line.
BLOCK 2: Lifetime-extended temporaries bound to references shall then be appended in order of their first use within the program, with command-line translation unit order.
BLOCK 3: String Literals shall then be appened in order of their tokens within the program, with command-line translation unit order.
Variables/Functions
Each defined named variable and declared function shall be appended to the output image, regardless of whether it have static or thread local storage duration (automatic and dynamic storage duration are not available in PA8). Recall from the ABI that fundamental types all have an alignment equal to their size. Zero padding should be used to place the object at the next properly aligned offset within the file.
The size and alignment of the complete fundamental types are:
signed char 1
short int 2
int 4
long int 8
long long int 8
unsigned char 1
unsigned short int 2
unsigned int 4
unsigned long int 8
unsigned long long int 8
wchar_t 4
char 1
char16_t 2
char32_t 4
bool 1
float 4
double 8
long double 16
nullptr_t 8
void
is an incomplete type, and so does not have a size or alignment.
nullptr_t
is an unnamed fundamental type. There is no nullptr_t
keyword. It is the type of the expression nullptr
. There is no way to declare it in PA8. In a later assignment you will be able to access the type by using decltype(nullptr)
, when you implement decltype
. When you implement your standard library you will create a type called std::nullptr_t
as follows:
namespace std
{
using nullptr_t = decltype(nullptr);
}
This is how the std::nullptr_t
name is created.
The types const T
, volatile T
and const volatile T
all have the same size and alignment as T
.
The type pointer to T
has a size and alignment of 8 bytes. Pointers shall be represented using an unsigned 64-bit little-endian value that is an offset within the image file. That is, for the mock program image, it shall be as if the entire image file (including magic four bytes) is loaded into memory starting at memory address 0.
std::size_t
has the same size, alignment and representation as unsigned long int
, 8 and 8.
The type reference to T
(both lvalue and rvalue versions) shall be implemented using a pointer to T
representation. The pointer shall point to the referenced entity.
An array of unknown bound
is an incomplete type, and so does not have a size or alignment.
An array of N T
has a size of N*sizeof(T)
, and an alignment of alignof(T)
.
A function of XXX
has a mock size of 4 and a mock alignment of 4, and a mock representation same the array of 4 char
"fun". (Later on in the real program image functions will consist of x86-64 machine code of variable length.)
Error Handling
If the program is ill-formed, but syntactically correct according to pa8.gram, nsinit
shall EXIT_FAILURE
.
If the program is not syntactically correct according to pa8.gram, behaviour is undefined.
Standard Output / Error
Standard output and standard error are ignored for nsinit
. You are free to use them as you want. It is suggested that you may output error messages to stderr, and output helpful debug information to stdout. The reference implementation outputs some undocumented linking information that may give some helpful clues as to what it is doing internally, it is however not recommended to try and mimic it.
Features
Expressions
Expressions have been extended to include non-user-defined literals (including true, false, nullptr), id-expressions, and parenthesized expressions thereof:
expression:
KW_TRUE
KW_FALSE
KW_NULLPTR
TT_LITERAL
OP_LPAREN expression OP_RPAREN
id-expression
constant-expression:
expression
Initialization
Expressions may now be used in the following contexts:
- simple declaration initializers
- static_assert declarations
- array bounds
The semantics of initialization are described in 8.5. In the full grammar initialization takes place in more than just these three places. To implement initialization you will also have to implement many of the Standard Conversions, clause 4. This will also entail annotating value categories of expressions (3.10).
You will also need to determine during translation if an expression is a constant expression, and if it is, evaluate it. This is described in 5.19.
Specifiers
The specifiers static
, thread_local
, extern
, typedef
, constexpr
, inline
as well as the cv-qualifiers and simple type specifiers are all in effect and should be semantically checked, analyzed and result in correct behaviour.
Functions
The grammar now includes a function definition that may only have an empty body. The presence of the body distinguishes a function declaration from a function definition. The semantics of function definitions and their relationship to ODR and linking should be applied appropriately. This will include distinguishing two functions of the same name based on their signature as described in 3.5.
Declarations
As per PA7 you will continue to support namespace definitions, simple declarations, namespace alias definitions, using declarations, using directives and alias declarations.
Added in PA8 are initializers for simple declarations, function definitions with empty bodies and static_assert
declarations.
You are also expected to handle the correct scope change for a name lookup that occurs in a declaration after a qualified declarator-id (3.4.3p3 is now required).
Standard Revision
You will want to carefully review:
3.2 One definition rule
3.5 Program and linkage
3.6.2 Initialization of non-local variables
3.10 Lvalues and rvalues
4.x Standard Conversions
7.1.1 Storage Class Specifiers
7.1.5 Constexpr Specifier
8.5.0 Initializers
8.5.2 Initializers / Character arrays
8.5.3 Initializers / References
However other parts of the standard will come into play as well. Reading these sections alone is not a substitute for completing RAA.
Design Notes (Optional)
Start by reviewing chapter 5 and 6 of the dragon book to get some background theory.
In general when annotating a full expression you will start from the top, work your way to the leaves, and then back up to the top. For this assignment an expression consists of only one of two possible things, literals or id-expressions - neither of which have sub-expressions - so this is relatively straightforward for now. Start by analyzing the expression and determining its natural type and value category. In this assignment this information can always be obtained for an expression, irrespective of its context. In the full grammar there are a few exceptions to this which need top-down information, but not for this assignment. Once the expressions natural type and value category have been determined, based on the context the expression is in, further implicit conversions or other transformations will take place.
The natural value category of a literal is prvalue, except for string literals which are lvalues. The type and value of most literals can be determined from your PA2 code. The three simple keyword literals not dealt with in PA2 are mentioned here: true
is a 1 byte bool prvalue 0x01, false
is a 1 byte bool prvalue 0x00, and nullptr
is an 8 byte prvalue of a unique type (later to be named std::nullptr_t
in your standard library) and has a value of 8 zero bytes.
The value category of an id-expression is an lvalue. References are implicitly dereferenced so their type is the underlying referenced type, for all other variables and functions their type is the same as their declared type.
Later on there is an additional value category xvalue, which is not reachable in PA8 - however you should account for all three value categories in your system in preparation.
For this assignment the only contexts an expression can be in are initialization contexts where the expression is a full expression. The rules for initialization are explained in 8.5, and they appeal to the standard conversions. You can think of the major case of initialization as a function of a destination type, a source type, a source value category and sometimes some other properties of the source (eg null pointer constants, string literals). Based on these "parameters" the initialization is either well-formed or ill-formed, and if well-formed it dictates a series of implicit conversions that need to be applied.
The other part of annotation is constant expression evaluation. There are several ways to implement this, but you can essentially consider each expression to have a value that is a property of that expression. In some cases that value is completely determinable during translation, for example if it is a literal. In other cases it is unknown until runtime, so you can think of such as a value as in an "undefined" state during translation. For other values partial information is known. For example a pointer to a static variables value is not known until link-time, but you can track it in a position-independant manner as a symbol plus a byte offset called an addend. The symbol is effectively a free variable that you will complete after linking. The rules in 5.19 about constant expressions imply the information you need to track in this regard, and when you are allowed/required to calculate this value during translation.
If an expression is a constant expression under 5.19 then you will have enough information about its value to evaluate it during parsing. This is what you must do for array bounds and static_assert, or else the program is ill-formed.
Once the translation units are annotated you will then proceed to link them. This involves applying 3.5 to associate declarations from different translation units to the same entity. Once you have determined the full set of linked entities you will then plan out their position in the program image in the order described in the assignment.  This is known as relocation. Depending on how you have structured the values you may need to make another pass to propogate these absolute addresses through-out the annotated initializers.
At this stage you are now ready to write the program image. Iterate through all the entities and write the information described. For this assignment, for functions you only need to write "fun". For variables if you know their initial value (they are constant), write the value (constant initialization) - otherwise write zero (zero initialization). Likewise for temporaries.
You are then ready to output the program image to a file.


Add Business Organisation
Company Information
Company Name:
Company Abbreviation:
Weekend Max:
Terms:
Company URL:
Company Store Name:
Address:
Credit Information:
Support Company Information
Display Name:
Email Address:
Weekend Days
Mon
Tue
Wed
Thu
Fri
Sat
Sun
Documents/ Attachments
Currently there are no attachments. Please add
Browse
Attach
Share email to GS to activate rights to Vendor Portal
Save
Reset
Having issues saving form?
See Help


Mindset: Slightly apprehensive about my first time smoking salvia. Read about it for quite some time and have been desiring to try for a while. I'm a lucid dreamer-when I manage to not fully realize that I'm dreaming. I'm a fairly experienced psychonaut, having done LSD many times, 2CB, mushrooms, ecstasy, and various combinations of the above. Fully aware that Salvia will be NOTHING like any of the above, but I still don't know what to expect.
Setting: Outdoors camping 'rave' style party. Night time (about 11:30 PM) and very dark. Two good friends and I, in a tent. No music, the generator has gone out for the time being. We're camped in a remote portion of the available land. No distractions.
I took my first toke. Long, and slow, being sure to hold the butane jet-flame on the salvia as long as I was inhaling. I no longer smoke cigarettes or marijuana, so this hurt my throat-it's a relatively harsh, hot smoke. This could be alleviated with a waterpipe I'm sure.
I'm holding…holding it in for about 20 seconds before I slowly and controlled exhale. Almost immediately I get a tingling sensation inside and towards the top of my nose, and what felt like behind my eyes, in my sinuses. As I said to my friends, but don't remember saying, 'The front of my sinuses feel funny.'
I take my second toke, same as before, long and slow, and hold it in for a good amount of time. My movements start really slowing down-or they feel like they do. Now the tingling sensation has spread to the tips of my fingers and my feet. I feel gravity pulling me downhill towards the front of the tent. I know I'm not moving but I can't help feeling like I am. Almost like a trust fall, when you go below where you think the ground should be.
I'm becoming extremely disoriented; somehow I manage to get the pipe up to my lips for the third toke and ignite. Same as before, except this time I see the sparks of a cashed bowl flying through the pipe, so I set it down. I almost dropped it, because at that point, I was rapidly being transported to a different reality.
All of a sudden, it's extraordinarily hot in the tent and I'm sweating profusely, so I rush to get my hoodie off as fast as I can-as if it were life and death if I didn't.
I don't ever remember closing my eyes, but I'm sure I did. Regardless if I did or didn't, I do know that I 'saw' myself, still looking out through my own eyes, watching my two friends that were there with me. But…this was different. WTF? I've done this before! No! Not the salvia I mean! I didn't even think of the salvia, I had totally forgotten about it. THIS! RIGHT NOW! THIS MOMENT!
I've been here, played out this exact moment before. Maybe once, maybe a thousand times. What's going on? I've had deja vu before--this exceeds any deja vu feeling I've ever had before. But this extends beyond the current moment, now I've lived this life a hundred times, a thousand times…who knows? Certainly more than once.
And then…I'm out. That's it. It's freezing! Why am I so cold? It's not cold out here! Afterglow is very introspective and thoughtful, but I find myself questioning what the hell just happened in that maybe three minutes that I was out there-what felt like half an hour.
I've thought (since I studied atomic chemistry and quantum mechanics in High School [physics/AP physics/chemistry]) (I refuse to believe, I just have ideas) in multiple levels of existence. Everything around us is matter, slowed down, sped up, in various forms. A spirit, or a soul, would be nothing more than a collection of energy in a higher state (a higher valence shell, to make a poor analogy) than what we call reality right now.
So now I think, 'Have I been here before? Was that really Deja Vu? Or…' with the sheer number of people on this planet, there HAS to be some other set of friends, sitting in a tent, smoking salvia, somewhere '…was I temporarily in my counterpart's existence? Something like when I receive somebody else's conversation on my cordless phone, they can't hear me but I can hear them?'
I'm not entirely sure what to make of this. I don't know whether to think if time is circular, running in loops (which brings me to entirely new tangents of metaphysical spirituality) or if we share a collective consciousness - an unconscious sharing of thought energy - and I was sharing somebody else's experience with them, or if I was sharing a spirit's former physical life's experiences, etc…
I will try Salvia again. She has not shown me all of her cards yet. I did not encounter the spirit of Salvia herself, but I would like to meet her. I know she has a lot to show me, I don't know if I'm ready for it, but I'm never ready for new knowledge. I learn to be adaptable with it the moment it makes itself apparent. I either learn it or dismiss it at that point, depending on how open-minded I am.
I have never had such an intense and thorough bout of introspection and spiritual thought as I did during and immediately after the experience.
I do have to admit, I am a little scared of what she may show me next time, but I am curious, and, as a philosophy several racers say, 'No fear is dangerous. Some fear is beneficial. Face it.'
This is not a recreational drug. This is not tripping. This is more like lucid dreaming, while awake. Perhaps it is in fact a window to other dimensions. This is a tool to get myself one step closer to my own personal enlightenment. It is not to be taken lightly.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Reference All Entities : Data Modeling diagram
Created:
8/20/2020 9:46:57 AM
Modified:
8/20/2020 9:46:57 AM
Project:
Author:
Joe Chavez<EMAIL_ADDRESS>Version:
20.17
Advanced:
ID:
{B11F1B05-CE1A-4d1e-86B4-271B6AAF5F79}


lesson 2.1 Modifying or making your work easier-understanding gem and using the colorize gem
Lesson 2.1 :Eddie programming lesson
Lesson 2.1 : Modifying or making your work easier- understanding gem and using the colorize gem
- installing gem
- using
so far what I have learn about gem, is that basically it’s a code, and that it is built by code which is a gem too, so you need to use gem to built gem, and I also learnt that there are gem which isn’t built by gem, as in the first gem. after the first gem appear it sort of spread in branches like a tree when people started to built more gem, so there is no limit to it. What it basically do from what I understand is that it help programmer in their work, making their work for them easier depending on which gem they install and use, e.g. age calculator, colorize (making what you type to come out in other color), bmi calculator , AKA ( help you to create shortcuts to your cmd in terminal).
￼ For now we will install colorize and see for ourself what does, first we go to ruby gem website and search for it.
￼ Remember that whatever you want to install on terminal you have to type it the way it is to prevent any mistake or error, so the best way to do that would be to copy and paste from the code from wherever you are finding, i believe it’s not 100% that there won’t be any errors from doing it this way as there are cases like bugs in the code from what I learnt, but the percentage of you making errors by copying and pasting is significantly lower. After we copied we can paste it in terminal and install it.
￼ Once you have install remember to type in GEM LIST to check whether the gem you have install is inside
￼ After installing it, you can go find the documents available, once inside you can see that there are library folder, test folder, and many other different files(don’t worry even if we don’t understand it now but as time goes by we will) :
￼ To see the mode, features and usages to understand more of what you are downloading you can go to the readme file :
￼
￼
After that’s done you can go into the text editor, for me I am using atom, and once you’re there, type in require ‘colorize’ , there are many different things you can try out with this gem, we’ll try them one by one to see how it goes:) For the first one you can print out the word/strings in different color, for now we will just type puts “hello, world” .blue/ yellow/red and show you the different example :
￼ ￼![screenshot][id9] ￼ [id9]:/images/Lesson2.1/Photo10.png
There you have it, there are many different possibilities you can do just on one gem alone, imagine what else you can do once you learn more about others.


Privacy policy
Our services collect and store all user data you give us to remember that games and users exist. Examples of data collected include, but are not limited to:
- Usernames
- Account emails
- Display names
- User-submitted bios
- The games you created
- The games you joined
- Game names
- User-submitted game descriptions
- Game passphrases (not encrypted)
- Whether you were killed in a game
We also collect user passwords, but we salt and encrypt them before storing them. Game passphrases are NOT encrypted so that game creators can return to their game settings page to see what it is.
Only usernames, user display names, user bios, game names, game descriptions, the games you created and joined, and other game-related personal information are publicized.
User information is stored in an unencrypted lowdb database without backups on a laptop. This means that someone with access to our database will be able to access a few other data such as everyone's encrypted passwords. We are not responsible for spontaneous data loss. We do not sell your user information because we don't know to whom it should be sold.
If you would like to download or delete all your data, please email<EMAIL_ADDRESS>This is not because we want to discourage users from doing this; rather, we have not gotten to implementing an automatic and more user-friendly method yet.


data.frame
. (Soft-deprecated.)R/verify-data-frame.R
verify_data_frame.Rd
Check that the object inherits from data.frame
.
If not, throw an error.
This function has been soft-deprecated (i.e., it works, but with a warning).
Please use the superior checkmate functions,
checkmate::assert_data_frame()
and
checkmate::assert_tibble()
.
This helps check database-reading functions (e.g., RODBC::sqlQuery()
) that return a data.frame
if successful, and a character
vector is unsuccessful.
A minimum row count can be used to check that a trivially small number of rows was not returned.
If minimum_row_count
is set to 0, the function is similar to checkmate::assert_class(d, "data.frame")
,
but with with a more specific error message.
verify_data_frame(d, minimum_row_count = 10L)
| d | The object to verify. Required. |
|---|---|
| minimum_row_count | The |
#> Warning: OuhscMunge::verify_data_frame() is deprecated. #> Instead, please use checkmate::assert_data_frame() #> with an appropriate value for the `min.rows` parameter.#> Warning: OuhscMunge::verify_data_frame() is deprecated. #> Instead, please use checkmate::assert_data_frame() #> with an appropriate value for the `min.rows` parameter.


--- layout: post title: "Star wars a cappella video" date: 2009-04-15 comments: false categories: - video - starwars - humor ---


The FixedPlus UI Framework is a premium Web Application Admin Dashboard built on top of Bootstrap v4. It was created to be the most functional, clean and well designed theme for any types of backend applications. We have carefully designed all common elements.
We love when all updates are free. Once you’ve purchased FixedPlus, you’ll be able to download all future updates. If you love our theme don’t forget to rate us five starsGood rating provides more and better updates in future!
If you have any questions that are beyond the scope of this help file, please feel free to email via our user page contact form here. Thanks so much!
List of folders in FixedPlus download
Source/ └── assets/ ├── css/ ├── img/ ├── js/ └── lib/
Head
<head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>FixedPlus - Bootstrap Admin Dashboard Template</title> <link rel="icon" type="image/png" sizes="16x16" href="assets/img/icon.png"> <!-- Common plugins --> <link href="assets/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <!--vector map css--> <link href="assets/lib/vectormap/jquery-jvectormap-2.0.2.css" rel="stylesheet" /> <!-- dataTables --> <link href="assets/lib/datatables/jquery.dataTables.min.css" rel="stylesheet" type="text/css"> <link href="assets/lib/datatables/responsive.bootstrap.min.css" rel="stylesheet" type="text/css"> <link href="assets/lib/toast/jquery.toast.min.css" rel="stylesheet"> <!-- Custom Css --> <link href="assets/css/style.css" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head>
Footer
<!--Common plugins--> <script src="assets/lib/jquery/dist/jquery.min.js"></script> <script src="assets/lib/bootstrap/js/bootstrap.min.js"></script> <script src="assets/lib/pace/pace.min.js"></script> <script src="assets/lib/jasny-bootstrap/js/jasny-bootstrap.min.js"></script> <script src="assets/lib/slimscroll/jquery.slimscroll.min.js"></script> <script src="assets/lib/nano-scroll/jquery.nanoscroller.min.js"></script> <script src="assets/lib/metisMenu/metisMenu.min.js"></script> <script src="assets/js/custom.js"></script> <!--Chart Script--> <script src="assets/lib/chartJs/Chart.min.js"></script> <!--VetorMap Script--> <script src="assets/lib/vectormap/jquery-jvectormap-2.0.2.min.js"></script> <script src="assets/lib/vectormap/jquery-jvectormap-world-mill-en.js"></script> <!-- Datatables --> <script src="assets/lib/datatables/jquery.dataTables.min.js"></script> <script src="assets/lib/datatables/dataTables.responsive.min.js"></script> <script src="assets/lib/toast/jquery.toast.min.js"></script> <script src="assets/js/dashboard.js"></script> </body> </html>
All theme CSS files are located in source/assets/css
folder. For your CSS customization you can use source/assets/css/style.css
. Keep your custom CSS separate it makes more easier when updating the theme in future.
Javascript files are located in source/assets/js/
folder, plugin files are located in source/assets/lib/
folder. For your Javascripts you can use Source/js/custom.js
. Keep your custom Javascript separate it makes more easier when updating the theme in future.
FixedPlus uses Montserrat, Ubuntu and Open Sans fonts. They must be loaded in HTML Head
before other CSS files.
Font code example:
<link href='https://fonts.googleapis.com/css?family=Rubik:300,400,500,700,900' rel='stylesheet' type='text/css'>
Fontawesome and Simple Line Font Icon packs. Font Icons must be loaded in HTML Head
before theme css files.
FixedPlus comes with 8 color palettes for creating colorful widgets and elements.
.bg-primary
.bg-success
.bg-info
.bg-warning
.bg-danger
.bg-teal
.bg-indigo
.bg-default
All available Helper Classes in FixedPlus:
| Prefix | Second Prefix (side) | third Prefix | Suffix (value) | |
|---|---|---|---|---|
| Margin | m | t,r,b,l | n (only for negative values) | xxs, xs, sm, md, lg, xxl |
| Padding | p | v,h (top & bottom, left & right) | xxs, xs, sm, md, lg, xxl |
.no-s
Removes margins & paddings
.no-m
Removes margins
.no-p
Removes paddings
.no-p-h
Removes paddings from left & right
.no-p-v
Removes Paddings from top & bottom
.no-b
Removes borders
.b
Adds border from all sides
.b-t
, .b-r
, .b-b
, .b-l
Adds border from top, right, bottom, left
.b-default
, .b-primary
, .b-success
, .b-info
, .b-warning
, .b-danger
Adds border by contextual colors, see colors doc.
.b-2
, .b-3
, .b-4
Border size
.b-n-t
, .b-n-r
, .b-n-b
, .b-n-l
Removes border from top, right, bottom, left
.no-r
Removes border radius
.r
Adds border radius
.r-t-l
, .r-t-r
, .r-b-l
, .r-b-r
Adds border radius From top-left, top-right, bottom-left, bottom-right sides.
.no-r-t-l
, .no-r-t-r
, .no-r-b-l
, .no-r-b-r
Removes border radius From top-left, top-right, bottom-left, bottom-right sides.
We've used following sources & credits
| Plugin | Official Website |
|---|---|
| Jquery | https://www.jquery.com/ |
| Bootstrap | http://www.getbootstrap.com |
| Flot charts | http://www.flotcharts.org/ |
| ChartJs | http://www.chartjs.org/ |
| FullCalendar | https://www.fullcalendar.io/ |
| Data Tables | https://www.datatables.net/ |
| Sweet Alerts2 | https://limonte.github.io/sweetalert2/ |
| Dropzone | http://www.dropzonejs.com/ |
| Vector Map | https://github.com/bjornd/jvectormap |
| Font-awesome | http://fontawesome.io/ |
| Alertify | http://alertifyjs.com/ |
| Sprkline | https://omnipotent.net/jquery.sparkline/#s-about |
| Ion sliders | http://ionden.com/a/plugins/ion.rangeSlider/en.html |
| C3 | http://c3js.org/ |
| Morris | http://morrisjs.github.io/morris.js/ |
| Card Master | https://jessepollak.github.io/card/ |
Once again, thank you so much for purchasing this theme. As I said at the beginning, I'd be glad to help you if you have any questions relating to this theme. No guarantees, but I'll do my best to assist. If you have a more general question relating to the themes on ThemeForest, you might consider visiting the forums and asking your question in the "Item Discussion" section


I've got blocked on many problems, but the most recent had to have been with the Kata's. When I was doing them, I felt like "How'd they come up with the function or solution" and It was pretty negative when I felt so under-devolped for the Kata's but I am here to learn so I'm doing my best.
I can't think of the exact problem but I was practising some Kata's on different websites and there were many times where I was stumped but there were some where It felt like I could actually do this. When I did actually solve some of them without needing to search something up, I felt more accomplished than If i had to use something to help me, but I know help isn't a bad thing. But when I can do it myself, It makes me feel like i'm actually learning or something, feels good haha.
A lot of the time I googled or had to ask. I tried to talk it out in steps or try something, but problems always seem simple when you can break it down, it's just the knowledge I had didn't really make me feel confident and everything I was trying didn't work half the time because I feel like I was writing english more so than actual code.
I know I prefer to do things myself, because to me, it feels more rewarding that I can do it myself. But that is also because i'm stubborn and I never think it's bad to help, especially when you're (I'm) in the learning phase, but I didn't feel very confident in my own abilities.
I learned more about Objects and Arrays than anything. The slight differences that someone could miss and how to use objects, not just to define something with properties, but the uses you can do with them, which also apply to arrays. The arguements that you put in a function aswell, because I look at what some people put and say "huh? but item was never defined", where in actuality it's just a placeholder for whatever you're going to input.
I feel confident In being able to do all of the problem solving techniques and processes, but if they actually help me is a different case. I feel like I learn better when someone teaches me through it because they can put it in terms (simple terms?) that someone like me will understand. When searching for something, I know for me, when it comes to learning, it's much more difficult when it comes to reading, nothing on the page sticks in my mind, but auditory/visual (mostly visual) help with examples and then I'm like "oh, that's what they does, or how it is used".


Template operations
One of the data structures provided by Arc is the template abstraction. Templates act somewhat like structure definitions. A template can be instantiated into a table that represents the structure as key-value pairs, where the keys can be considered field names in the structure, and the values are the values of the fields.
A template defines a structure by defining the allowed keys, potentially with default values. A template is instantiated into a table by providing key-value pairs; these can override the defaults.
Templates can be used as a convenient mechanism for loading and storing structures in files. The write-table
, save-table
, or tablist
functions can be used to save a table. A template table can be read in with temread
or temload
, and multiple tables can be read in with temloadall
. These template functions have a couple advantages over using the table load functions: if the saved tables are missing fields, the defaults are filled in, and if the saved tables have extra fields, they are dropped. This provides a simple mechanism of upgrading data formats.
The following code defines a circle template with x, y, and radius fields. A couple circles are defined and written to a file. A newcircle template is defined that extends the circle template by adding a color field. The circles are read in using the new template, and pick up the new color field.
arc> (deftem circle x 0 y 0 radius nil)
((x #<procedure>) (y #<procedure>) (radius #<procedure>))
arc> (= c1 (inst 'circle 'radius 10))
#hash((radius . 10) (y . 0) (x . 0))
arc> (= c2 (inst 'circle 'x 100 'y 100 'radius 5))
#hash((radius . 5) (y . 100) (x . 100))
arc> (w/outfile of "circles.arc" (write-table c1 of) (write-table c2 of))
nil
arc> (deftem (newcircle circle) color "blue")
((x #<procedure>) (y #<procedure>) (radius #<procedure>) (color #<procedure>))
arc> (temloadall 'newcircle "circles.arc")
(#hash((radius . 10) (color . "blue") (y . 0) (x . 0)) #hash((radius . 5) (color . "blue") (y . 100) (x . 100)))
While the template names and keys can be anything usable as a table index, including strings or numbers, it is customary to use symbols.
Note that the parameters to the different template operations are unexpectedly different. deftem
and addtem
are macros, so any symbols should not be quoted. However, the other operations are procedures, so symbols need to be quoted. deftem
, addtem
, and inst
take each key and value as separate parameters, but templatize
and the file operations based on it take the keys and values in a list of pairs. inst
allows new keys that weren't present in the template to be used, while templatize
does not.
Template operations
|
deftem template-name(s) key default-value [key default-value] ...
Creates a template. The template-name can be any table key, but typically a symbol. The template name can also be a list of template names, where the first name is the new template, and it inherits key/value pairs from the following template names. If a default-value is nil, then no default value will be used for that key, but the key is permitted in templatize and related functions.
|
>(deftem tem1 a "def1" b "def2")
((a #<procedure: gs2222>) (b #<procedure: gs2222>))
>(deftem (tem2 tem1) b "def3" c "def4")
((a #<procedure: gs2222>) (b #<procedure: gs2222>) (b #<procedure: gs2226>) (c #<procedure: gs2226>))
|
|
addtem template-name [key value ...]
Modifies the specified template by adding (or updating) the keys and values.
|
|
|
inst template-name [key value ...]
Instantiates a template. A new table is created from the key-value pairs. The table contains the default values from the template, unless they are overridden in the key-value arguments.
|
>(inst 'tem1 'b "newval" 'd 42)
#hash((a . "def1") (b . "newval") (d . 42))
|
|
templatize template-name ([(key value) ...])
Instantiates a template. The key-value pairs are given as a list of two-element lists. Any keys not defined in the template are ignored.
|
>(templatize 'tem1 '((b "newval") (d 42)))
#hash((a . "def1") (b . "newval"))
|
|
temread template-name [input-port]
Instantiates a template from input. Reads a list from input-port or stdin and applies templatize.
|
>(w/instring s "((b newval d 42))" (temread 'tem1 s))
#hash((a . "def1") (b . newval))
|
|
temload template-name filename
Instantiates a template from a file. Applies templatize to the given file.
|
>(temload 'tem "foo.txt")
#hash((a . "value1") (b . "newval"))
|
|
temloadall template-name file
Instantiates a template multiple times from a file, which contains multiple lists of key-value lists. Returns a list of tables.
|
>(temloadall 'tem "foo2.txt")
(#hash((a . "value1") (b . "newval"))
#hash((a . "value2") (b . "newval")))
|
|
templates*
Global variable holding all templates.
|
|
Copyright 2008 Ken Shirriff.


public final class ALC10
extends java.lang.Object
ALC introduces the notion of a Device. A Device can be, depending on the implementation, a hardware device, or a daemon/OS service/actual server. This mechanism also permits different drivers (and hardware) to coexist within the same system, as well as allowing several applications to share system resources for audio, including a single hardware output device. The details are left to the implementation, which has to map the available backends to unique device specifiers (represented as strings).
| Modifier and Type | Field and Description |
|---|---|
static int |
ALC_ALL_ATTRIBUTES
Expects a destination of ALC_CURRENT_ATTRIBUTES_SIZE,
and provides the attribute list for the current context of the specified device.
|
static int |
ALC_ATTRIBUTES_SIZE
The size required for the zero-terminated attributes list, for the current context.
|
static int |
ALC_DEFAULT_DEVICE_SPECIFIER
The specifier string for the default device
|
static int |
ALC_DEVICE_SPECIFIER
The specifier string for the device
|
static int |
ALC_EXTENSIONS
The extensions string for diagnostics and printing
|
static int |
ALC_FALSE
Boolean False
|
static int |
ALC_FREQUENCY
Frequency for mixing output buffer, in units of Hz.
|
static int |
ALC_INVALID
Bad value
|
static int |
ALC_INVALID_CONTEXT
The context argument does not name a valid context
|
static int |
ALC_INVALID_DEVICE
The device argument does not name a valid device
|
static int |
ALC_INVALID_ENUM
A function was called at inappropriate time, or in an inappropriate way,
causing an illegal state.
|
static int |
ALC_INVALID_VALUE
Illegal value passed as an argument to an AL call.
|
static int |
ALC_MAJOR_VERSION
Major version query.
|
static int |
ALC_MINOR_VERSION
Minor version query.
|
static int |
ALC_NO_ERROR
Errors: No Error
|
static int |
ALC_OUT_OF_MEMORY
A function could not be completed, because there is not enough
memory available.
|
static int |
ALC_REFRESH
Refresh intervalls, in units of Hz.
|
static int |
ALC_SYNC
Flag, indicating a synchronous context.
|
static int |
ALC_TRUE
Boolean True
|
| Constructor and Description |
|---|
ALC10() |
| Modifier and Type | Method and Description |
|---|---|
static boolean |
alcCloseDevice(ALCdevice device)
The
alcCloseDevice function allows the application (i.e. |
static ALCcontext |
alcCreateContext(ALCdevice device,
java.nio.IntBuffer attrList)
A context is created using
alcCreateContext . |
static void |
alcDestroyContext(ALCcontext context)
The correct way to destroy a context is to first release it using
alcMakeCurrent and
null . |
static ALCdevice |
alcGetContextsDevice(ALCcontext context)
The application can query for, and obtain an handle to, the device of a given context.
|
static ALCcontext |
alcGetCurrentContext()
The application can query for, and obtain an handle to, the current context for the
application.
|
static int |
alcGetEnumValue(ALCdevice device,
java.lang.String enumName)
Enumeration/token values are device independend, but tokens defined for
extensions might not be present for a given device.
|
static int |
alcGetError(ALCdevice device)
ALC uses the same conventions and mechanisms as AL for error handling.
|
static void |
alcGetInteger(ALCdevice device,
int pname,
java.nio.IntBuffer integerdata)
The application can query ALC for information using an integer query function.
|
static java.lang.String |
alcGetString(ALCdevice device,
int pname)
The application can obtain certain strings from ALC.
|
static boolean |
alcIsExtensionPresent(ALCdevice device,
java.lang.String extName)
Verify that a given extension is available for the current context and the device it
is associated with.
|
static int |
alcMakeContextCurrent(ALCcontext context)
To make a Context current with respect to AL Operation (state changes by issueing
commands),
alcMakeContextCurrent is used. |
static ALCdevice |
alcOpenDevice(java.lang.String devicename)
The
alcOpenDevice function allows the application (i.e. |
static void |
alcProcessContext(ALCcontext context)
The current context is the only context accessible to state changes by AL commands
(aside from state changes affecting shared objects).
|
static void |
alcSuspendContext(ALCcontext context)
The application can suspend any context from processing (including the current
one).
|
public static final int ALC_INVALID
public static final int ALC_FALSE
public static final int ALC_TRUE
public static final int ALC_NO_ERROR
public static final int ALC_MAJOR_VERSION
public static final int ALC_MINOR_VERSION
public static final int ALC_ATTRIBUTES_SIZE
public static final int ALC_ALL_ATTRIBUTES
public static final int ALC_DEFAULT_DEVICE_SPECIFIER
public static final int ALC_DEVICE_SPECIFIER
public static final int ALC_EXTENSIONS
public static final int ALC_FREQUENCY
public static final int ALC_REFRESH
public static final int ALC_SYNC
public static final int ALC_INVALID_DEVICE
public static final int ALC_INVALID_CONTEXT
public static final int ALC_INVALID_ENUM
public static final int ALC_INVALID_VALUE
public static final int ALC_OUT_OF_MEMORY
public static java.lang.String alcGetString(ALCdevice device, int pname)
ALC_DEFAULT_DEVICE_SPECIFIER
- The specifer string for the default device
ALC_DEVICE_SPECIFIER
- The specifer string for the device
ALC_EXTENSIONS
- The extensions string for diagnostics and printing.
In addition, printable error message strings are provided for all valid error tokens,
including ALC_NO_ERROR
,ALC_INVALID_DEVICE
, ALC_INVALID_CONTEXT
,
ALC_INVALID_ENUM
, ALC_INVALID_VALUE
.pname
- Property to getpublic static void alcGetInteger(ALCdevice device, int pname, java.nio.IntBuffer integerdata)
null
is a legal deviceHandle. In other cases, specifying a null
device will generate an ALC_INVALID_DEVICE
error. The application has to
specify the size of the destination buffer provided. A null
destination or a zero
size parameter will cause ALC to ignore the query.
ALC_MAJOR_VERSION
- Major version query.
ALC_MINOR_VERSION
- Minor version query.
ALC_ATTRIBUTES_SIZE
- The size required for the zero-terminated attributes list,
for the current context. null
is an invalid device. null
(no current context
for the specified device) is legal.
ALC_ALL_ATTRIBUTES
- Expects a destination of ALC_CURRENT_ATTRIBUTES_SIZE
,
and provides the attribute list for the current context of the specified device.
null
is an invalid device. null
(no current context for the specified device)
will return the default attributes defined by the specified device.pname
- Property to getintegerdata
- ByteBuffer to write integers topublic static ALCdevice alcOpenDevice(java.lang.String devicename)
alcOpenDevice
function allows the application (i.e. the client program) to
connect to a device (i.e. the server).
If the function returns null
, then no sound driver/device has been found. The
argument is a null terminated string that requests a certain device or device
configuration. If null
is specified, the implementation will provide an
implementation specific default.devicename
- name of device to openpublic static boolean alcCloseDevice(ALCdevice device)
alcCloseDevice
function allows the application (i.e. the client program) to
disconnect from a device (i.e. the server).
If deviceHandle is null
or invalid, an ALC_INVALID_DEVICE
error will be
generated. Once closed, a deviceHandle is invalid.device
- address of native device to closepublic static ALCcontext alcCreateContext(ALCdevice device, java.nio.IntBuffer attrList)
alcCreateContext
. The device parameter has to be a valid
device. The attribute list can be null
, or a zero terminated list of integer pairs
composed of valid ALC attribute tokens and requested values.
Context creation will fail if the application requests attributes that, by themselves,
can not be provided. Context creation will fail if the combination of specified
attributes can not be provided. Context creation will fail if a specified attribute, or
the combination of attributes, does not match the default values for unspecified
attributes.device
- address of device to associate context toattrList
- Buffer to read attributes frompublic static int alcMakeContextCurrent(ALCcontext context)
alcMakeContextCurrent
is used. The context parameter can be null
or a valid context pointer. The operation will apply to the device that the context
was created for.
For each OS process (usually this means for each application), only one context can
be current at any given time. All AL commands apply to the current context.
Commands that affect objects shared among contexts (e.g. buffers) have side effects
on other contexts.context
- address of context to make currentpublic static void alcProcessContext(ALCcontext context)
alcProcessContext
.
Repeated calls to alcProcessContext
are legal, and do not affect a context that is
already marked as processing. The default state of a context created by
alcCreateContext is that it is not marked as processing.public static ALCcontext alcGetCurrentContext()
null
is returned.public static ALCdevice alcGetContextsDevice(ALCcontext context)
context
- address of context to get device forpublic static void alcSuspendContext(ALCcontext context)
alcSuspendContext
.
Repeated calls to alcSuspendContext
are legal, and do not affect a context that is
already marked as suspended. The default state of a context created by
alcCreateContext
is that it is marked as suspended.context
- address of context to suspendpublic static void alcDestroyContext(ALCcontext context)
alcMakeCurrent
and
null
. Applications should not attempt to destroy a current context.context
- address of context to Destroypublic static int alcGetError(ALCdevice device)
alcGetError
function can be used to query ALC errors.
Error conditions are specific to the device.
ALC_NO_ERROR - The device handle or specifier does name an accessible driver/server.
ALC_INVALID_DEVICE
- The Context argument does not name a valid context.
ALC_INVALID_CONTEXT
- The Context argument does not name a valid context.
ALC_INVALID_ENUM
- A token used is not valid, or not applicable.
ALC_INVALID_VALUE
- An value (e.g. attribute) is not valid, or not applicable.public static boolean alcIsExtensionPresent(ALCdevice device, java.lang.String extName)
null
name argument returns ALC_FALSE
, as do invalid and unsupported string
tokens.extName
- name of extension to findpublic static int alcGetEnumValue(ALCdevice device, java.lang.String enumName)
null
name parameter will cause an ALC_INVALID_VALUE
error.enumName
- name of enum to findCopyright © 2002-2010 lwjgl.org. All Rights Reserved.