WITNESS LIST
Transportation
May 13, 2013 9:00 AM
FOR:
Burleson, Dennis Chairman (Hidalgo County Regional Mobility Authority), Pharr, TX
London, Barry President (London Fruit, Inc), Pharr, TX
McClung, John Past President (Texas International Produce Association), Mission, TX
Patridge, Keith President (McAllen Economic Development Corp), McAllen, TX
Sandoval, Fred City Manager (City of Pharr), Pharr, TX
Sutherlin, Henry President (Scan Tech Sciences, Inc), Houston, TX
Zambito, Carlos Marketing Director (McAllen Produce Terminal Market), McAllen, TX
Registering, but not testifying:
FOR:
Saenz, Luis (Hidalgo County RMA), Austin, TX
Wilkinson, Warren CEO (Loop Fresh Produce), McAllen, TX
ON:
Archer, Jimmy Director, Motor Carrier (Texas Department of Motor Vehicles), Austin, TX
Barton P.E., John A. Deputy Executive Director (Texas Department of Transportation),
Austin, TX
Nordloh, Major Chris Major (DPS), Austin, TX
Registering, but not testifying:
FOR:
Beck, Richard Consultant (Aransas County Commissioners), Austin, TX
Stiles, Betty Commissioner (Aransas County), Rockport, TX
ON:
Diggs, William Major (TX DPS), Austin, TX
Registering, but not testifying:
ON:
Diggs, William Major (TX DPS), Austin, TX
Land, David Attorney, Director (Texas General Land Office), Austin, TX
Registering, but not testifying:
ON:
Barton, John Dep. Executive Director (Texas Department of Transportation), Austin, TX
ON:
Barber, Willie Chairman (American Council of Blind), Midland, TX
Registering, but not testifying:
FOR:
Bearden, Chase Director of Advocacy (Coalition of Texans with Disabilities), Austin, TX
WITNESS LIST
Transportation
May 13, 2013 9:00 AM
ON:
Jackson, Auturo Sr. Director, Customer Care and Customized Services (Metropolitan
Transit Authority of Harris County), Houston, TX
Registering, but not testifying:
ON:
Archer, Jimmy Director, Motor Carrier (Texas Department of Motor Vehicles), Austin, TX
Registering, but not testifying:
ON:
Elliston, Randy Director - Titles & Registration (Texas Department of Motor Vehicles),
Austin, TX
Registering, but not testifying:
FOR:
Michalik, Jordan (Texas PTA), Austin, TX


Project Name:- |
{{ projects1.projectName }} |
|---|---|
|
Project Description:- |
{{ projects1.projectDescription }} |
|
Skills Required:- |
{{ projects1.skillsSetList }} |
|
Maximum Budget (in $):- |
{{ bidsInfromation.maximumBudget }} |
|
Minimum Budget (in $):- |
{{ bidsInfromation.minimumBudget }} |
|
Project Completion Date:- |
{{ projects1.projectCompletionDate }} |
|
Freelancer Email: |
{{ bid.freelancerEmailId }} |
|---|---|
|
Bided Amounnt: |
{{ bid.bidAmount }} |
|
Proposed Completion Days: |
{{ bid.proposedCompletionDate }} |


Upload
20 Credits
Profile
Juliana Santy
Master's Student / Researcher
Account Profile
Contact Finding Five
Logout
Categories
Categorization
Induction and acquisition
Judgement and classification
Representation and structure
Similarity
Knowledge Representation
Induction and acquisition
Judgement and classification
Representation and structure
Similarity
Language
Induction and acquisition
Judgement and classification
Representation and structure
Similarity
Memory
Induction and acquisition
Judgement and classification
Representation and structure
Similarity
Perception
Induction and acquisition
Judgement and classification
Representation and structure
Similarity
Cognition
Induction and acquisition
Judgement and classification
Representation and structure
Similarity
Top Rated Studies


Esh Enterprise is a diversified and fully integrated conglomerate with strategic interests in e-commerce, Computer Graphic Imagery, Entertainment, Media Networks and Digital Marketing.
Esh Enterprise is segmented into; Esh Arts, Esh Wears, Esh Farms and Esh Tech.
Esh Enterprise aims at making high quality and affordable products (goods and services) that satisfy the basic and secondary needs of the populace (locally and internationally) available.
Name Surname
Graphics Designer
Faith Rabo
Cheif Operation Officer
McDaniells Albert
Cheif Executive Officer
Name Surname
Public Relation Officer
|
Graphics Design |
Digital Marketing |
|
Content Creation |
Animation |
|
Training |
Consultancy |


Private List
No. 7 Lipstick (Red)
Public List
List is empty
Family List
List is empty
Wish List
List is empty


 How long does evolution take? |
|
|
| |
Even though evolution is taking place all around us, for many species the process operates so slowly that it is not observable
except over thousands or hundreds of thousands of years -- much too long to witness in a human lifetime. There are cases in
quickly reproducing life forms like bacteria and fruit flies, however, where evolution can be seen happening in a matter of
weeks for the bacteria and many months for the flies. In these cases the relatively large number of generations in a given
period of time is key, since evolutionary change occurs incrementally from one generation to the next. All else being equal,
the more generations you have, the more quickly evolution happens.
|
|
|
| |
2. Can you observe evolution happening? |
|
|
| |
Because for many species, humans included, evolution happens over the course of many thousands of years, it is rare to observe
the process in a human lifetime. Usually only laboratory scientists studying quickly reproducing life forms,
like single-celled creatures and some invertebrates, have the opportunity to see evolutionary change happen before their
eyes. All of us can and do experience the indirect effects of evolution nearly every day, however. One of the more important
evolutionary concerns facing humans today is the emergence of antibiotic-resistant microbes. A battle against bacteria that
we have been winning with medicine for the last 50 years or so is now an even race, according to some scientists --
because of the rapid rate of bacterial evolution. Similarly, the use of pesticides in agriculture has driven the evolution of
resistant insects that require more or harsher chemicals to be killed. Scientists studying Galapagos finches have seen
evolutionary changes in beak size and shape in just a few years. Major evolutionary transformations take much, much longer.
|
|
|
| |
3.  Radiometric dating, a method that measures the level of radioactive decay in rocks to
determine how old they are has consistently aged moon rocks and meteorites at 4.4 to 4.6 billion years old. Ages of these types
of rocks provide the most accurate estimates of the age of Earth and the rest of the solar system because they have not been
subjected to the same forces that recycle Earth's crust. As new land forms along cracks between the planet's continental plates,
old rocks are destroyed. Thus, the oldest rocks on Earth may not exist anymore. The oldest dated minerals, at 4.0 to 4.2 billion
years old, are tiny zircon crystals found in sedimentary rocks in western Australia.
|
|
|
| |
4. How long has life existed on Earth? |
|
|
| |
The oldest known fossils are approximately 3.5 billion years old, but some scientists have discovered chemical
evidence suggesting that life may have begun even earlier, nearly 4 billion years ago.
|
|
|
| |
5. How long ago did dinosaurs exist? |
|
|
| |
Dinosaurs existed between 230 million years ago and 65 million years ago, but none of the known dinosaur species existed for
this entire time period. Throughout the group's existence, individual dinosaur species were evolving and going extinct. Some
species diverged and gave rise to other species, while others disappeared. A mass extinction event at the end of the
Cretaceous period,
65 million years ago, ended the reign of dinosaurs on Earth. Recently, many scientists have come to
the conclusion that, while dinosaurs may have disappeared, one dinosaur lineage had evolved into birds long before the
extinction event that wiped out the other dinosaurs -- and so, in a sense, dinosaurs are still around today.
|
|
|
| |
6. How long ago did humans become human? |
|
|
| |
The oldest known hominid, or humanlike species, has been dated at 4.4 million years old. Another species, which is yet to
be confirmed as a hominid, has been dated at 6 million years old. Scientists estimate that the hominid lineage diverged
from the ape lineage 5 to 8 million years ago. Homo sapiens, the species to which we belong, has existed for about 100,000 years.
|
|
|
|
|
|
|
|


Yokomo
Drift Car
Yokomo Co. Ltd. is a Japanese company from Adachi, Tokyo that specialize in radio-controlled cars, it was one of the first manufacturers in Japan to build RC cars and it also invented the RTR (Ready To Run) cars, but most notable of all is their long-running "Dog Fighter" series of radio controlled buggies, mainly through its successes in racing.


School/College Name: {{foundSchool.schoolName}}
Co-ordinator Name:
{{coordinatorDetail.coordinatorName}}
Please enter standard wise result below.
Student by Rank Student
Name Marks
Standard: {{std}}
=3">
Enter Other Students
Details of Standard: {{std}}
add
remove_circle_outline


Results of Multigrid for Reaction-Diffusion¶
Imports¶
[1]:
from main import inputParameters, runDemo
import logging
logging.basicConfig(level=logging.INFO , format='[%(asctime)s] - [%(levelname)s] - %(message)s')
Set parameters¶
[2]:
inputParameters()
==================
* DEFAULT VALUES *
==================
LEVELS = 5
SHOW_GRIDS = False
DEGREE = 1
CYCLE = W
MAX_ITER = 100
SMOOTHING_STEPS = 2
SMOOTHER = Jacobi
OMEGA = 0.8
Would you like to change some values? (Y/N): y
Number of MG levels (default: 5) = 10
Plot grids (default: False) =
Degree of FE (default: 1) =
Multigrid cycle (default: W; supported: 'V','W') =
Maximum number of MG iterations (default: 100) =
Number of smoothing steps (default: 2) =
Smoother type (default: Jacobi; supported: 'Jacobi','GaussSeidel') =
Relaxation parameter omega (default: 0.8) =
=================
* CUSTOM VALUES *
=================
LEVELS = 10
SHOW_GRIDS = False
DEGREE = 1
CYCLE = W
MAX_ITER = 100
SMOOTHING_STEPS = 2
SMOOTHER = Jacobi
OMEGA = 0.8
Demo¶
Now that the user has inserted the parameters of the multigrid algorithm, we start by solving the two-grid method, refine the grid, solve the three-grid method, etc.
[3]:
runDemo()
[2020-06-21 21:33:27,249] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:27,250] - [INFO] - + MULTIGRID (LEVELS = 2) +
[2020-06-21 21:33:27,250] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:27,518] - [INFO] - Number of DoFs: 21 (by level: 8,21)
[2020-06-21 21:33:27,563] - [INFO] - Defect: 5.43e-13
[2020-06-21 21:33:27,564] - [INFO] - GMG iterations: 14
[2020-06-21 21:33:27,564] - [INFO] - Multigrid time: 0.044 s
[2020-06-21 21:33:27,565] - [INFO] - Convergence rate: 1.0005
[2020-06-21 21:33:27,567] - [INFO] - Total time: 318 ms
[2020-06-21 21:33:27,567] - [INFO] -
[2020-06-21 21:33:27,568] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:27,568] - [INFO] - + MULTIGRID (LEVELS = 3) +
[2020-06-21 21:33:27,569] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:27,847] - [INFO] - Number of DoFs: 65 (by level: 8,21,65)
[2020-06-21 21:33:27,938] - [INFO] - Defect: 4.54e-13
[2020-06-21 21:33:27,938] - [INFO] - GMG iterations: 15
[2020-06-21 21:33:27,939] - [INFO] - Multigrid time: 0.089 s
[2020-06-21 21:33:27,940] - [INFO] - Convergence rate: 0.9929
[2020-06-21 21:33:27,941] - [INFO] - Total time: 374 ms
[2020-06-21 21:33:27,942] - [INFO] -
[2020-06-21 21:33:27,942] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:27,943] - [INFO] - + MULTIGRID (LEVELS = 4) +
[2020-06-21 21:33:27,943] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:28,226] - [INFO] - Number of DoFs: 225 (by level: 8,21,65,225)
[2020-06-21 21:33:28,405] - [INFO] - Defect: 8.66e-13
[2020-06-21 21:33:28,406] - [INFO] - GMG iterations: 14
[2020-06-21 21:33:28,407] - [INFO] - Multigrid time: 0.173 s
[2020-06-21 21:33:28,407] - [INFO] - Convergence rate: 0.9927
[2020-06-21 21:33:28,410] - [INFO] - Total time: 468 ms
[2020-06-21 21:33:28,411] - [INFO] -
[2020-06-21 21:33:28,412] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:28,412] - [INFO] - + MULTIGRID (LEVELS = 5) +
[2020-06-21 21:33:28,413] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:28,841] - [INFO] - Number of DoFs: 833 (by level: 8,21,65,225,833)
[2020-06-21 21:33:29,227] - [INFO] - Defect: 6.6e-13
[2020-06-21 21:33:29,228] - [INFO] - GMG iterations: 14
[2020-06-21 21:33:29,228] - [INFO] - Multigrid time: 0.371 s
[2020-06-21 21:33:29,228] - [INFO] - Convergence rate: 0.9986
[2020-06-21 21:33:29,233] - [INFO] - Total time: 822 ms
[2020-06-21 21:33:29,234] - [INFO] -
[2020-06-21 21:33:29,235] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:29,235] - [INFO] - + MULTIGRID (LEVELS = 6) +
[2020-06-21 21:33:29,236] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:30,104] - [INFO] - Number of DoFs: 3201 (by level: 8,21,65,225,833,3201)
[2020-06-21 21:33:30,897] - [INFO] - Defect: 6.57e-13
[2020-06-21 21:33:30,897] - [INFO] - GMG iterations: 13
[2020-06-21 21:33:30,898] - [INFO] - Multigrid time: 0.73 s
[2020-06-21 21:33:30,899] - [INFO] - Convergence rate: 1.0079
[2020-06-21 21:33:30,914] - [INFO] - Total time: 1 s 680 ms
[2020-06-21 21:33:30,915] - [INFO] -
[2020-06-21 21:33:30,916] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:30,917] - [INFO] - + MULTIGRID (LEVELS = 7) +
[2020-06-21 21:33:30,917] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:33,536] - [INFO] - Number of DoFs: 12545 (by level: 8,21,65,225,833,3201,12545)
[2020-06-21 21:33:35,531] - [INFO] - Defect: 4.27e-13
[2020-06-21 21:33:35,532] - [INFO] - GMG iterations: 13
[2020-06-21 21:33:35,533] - [INFO] - Multigrid time: 1.786 s
[2020-06-21 21:33:35,535] - [INFO] - Convergence rate: 1.0163
[2020-06-21 21:33:35,625] - [INFO] - Total time: 4 s 710 ms
[2020-06-21 21:33:35,626] - [INFO] -
[2020-06-21 21:33:35,626] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:35,627] - [INFO] - + MULTIGRID (LEVELS = 8) +
[2020-06-21 21:33:35,627] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:45,121] - [INFO] - Number of DoFs: 49665 (by level: 8,21,65,225,833,3201,12545,49665)
[2020-06-21 21:33:49,748] - [INFO] - Defect: 9.59e-13
[2020-06-21 21:33:49,748] - [INFO] - GMG iterations: 12
[2020-06-21 21:33:49,750] - [INFO] - Multigrid time: 3.791 s
[2020-06-21 21:33:49,751] - [INFO] - Convergence rate: 1.0314
[2020-06-21 21:33:50,001] - [INFO] - Total time: 14 s 374 ms
[2020-06-21 21:33:50,002] - [INFO] -
[2020-06-21 21:33:50,003] - [INFO] - +-----------------------------------------+
[2020-06-21 21:33:50,003] - [INFO] - + MULTIGRID (LEVELS = 9) +
[2020-06-21 21:33:50,004] - [INFO] - +-----------------------------------------+
[2020-06-21 21:34:27,930] - [INFO] - Number of DoFs: 197633 (by level: 8,21,65,225,833,3201,12545,49665,197633)
[2020-06-21 21:34:41,596] - [INFO] - Defect: 4.53e-13
[2020-06-21 21:34:41,597] - [INFO] - GMG iterations: 12
[2020-06-21 21:34:41,598] - [INFO] - Multigrid time: 10.005 s
[2020-06-21 21:34:41,598] - [INFO] - Convergence rate: 1.0361
[2020-06-21 21:34:42,537] - [INFO] - Total time: 52 s 535 ms
[2020-06-21 21:34:42,538] - [INFO] -
[2020-06-21 21:34:42,539] - [INFO] - +-----------------------------------------+
[2020-06-21 21:34:42,539] - [INFO] - + MULTIGRID (LEVELS = 10) +
[2020-06-21 21:34:42,540] - [INFO] - +-----------------------------------------+
[2020-06-21 21:37:07,533] - [INFO] - Number of DoFs: 788481 (by level: 8,21,65,225,833,3201,12545,49665,197633,788481)
[2020-06-21 21:37:45,600] - [INFO] - Defect: 8.76e-13
[2020-06-21 21:37:45,601] - [INFO] - GMG iterations: 11
[2020-06-21 21:37:45,601] - [INFO] - Multigrid time: 25.034 s
[2020-06-21 21:37:45,602] - [INFO] - Convergence rate: 1.045
[2020-06-21 21:37:49,246] - [INFO] - Total time: 3 min 6 s 707 ms
[2020-06-21 21:37:49,247] - [INFO] -
Results¶
Refinements |
DoFs |
Iterations |
Computation time |
Convergence rate |
|---|---|---|---|---|
1 |
21 |
14 |
0.044 |
1.0005 |
2 |
65 |
14 |
0.089 |
0.9929 |
3 |
225 |
14 |
0.173 |
0.9927 |
4 |
833 |
14 |
0.371 |
0.9986 |
5 |
3201 |
13 |
0.730 |
1.0079 |
6 |
12545 |
13 |
1.786 |
1.0163 |
7 |
49665 |
12 |
3.791 |
1.0314 |
8 |
197633 |
12 |
10.005 |
1.0361 |
9 |
788481 |
11 |
25.034 |
1.0450 |
We would expect from the theory that the number of multigrid iterations needed should be constant and thus independent of the number of levels. This property is approximately fulfilled in our simulation. Furthermore, the computation time should depend linearly on the number of DoFs. In the table above, we can see that the computation time doubles as a rule of thumb after each refinement and the number of DoFs quadruples. Thus the time of the multigrid solver depends linearly on the number of degrees of freedom. Note that for us the assembly is a big bottleneck, since it hasn’t been optimized yet.
From the theory of the multigrid algorithm it is known that for an \(H^1/H^1_0\)-elliptic boundary value problem with an \(H^2\)-regular boundary and conformig finite elements on uniformly refined triangulations, the multigrid convergence rate in the energy norm \(\rho_l \leq \rho < 1\) is mesh independent. Therefore with each approximation step, we get a more accurate solution, independent of the number of uniform refinements:
Thus it is being ensured that the multigrid algorithm converges in a certain number of steps, which does not depend on the number of DoFs. In our numerical tests, we didn’t have an \(H^2\)-regular boundary, but it still could be observed that the multigrid algorithm terminated in at most 14 iterations. Hence, there was no real dependence on the number of refinements.


"All communications with Goto and his team have been cut off?!".
The Association President Matsumoto Shigeo's complexion became ashen . The Association employee next to him presented a receiver and asked politely
"Would you like to hear the last communication, sir?".
Matsumoto Shigeo snatched the receiver away from the employee's hand and put it on his head, before nodding once
Soon, the recorded sound clip began playing
- "An ant You seem to possess a pretty strong aura . ".
- "You are . the king?".
- "That's right . I'm the king . ".
- "Goto-san!!!".
- "Uwaaahk?! Uwaaahk!!".
- "Keok!!".
- "Euh, euhhh ".
- "You, you!!
Beep
"That's where the communication ends, sir . ".
Matsumoto's face, as he took off the receiver, was as hard as a rock . The creepy noises and the horrible screech the monster made in between the chatter – he couldn't picture any other situation where those sounds would come out of
'An ant monster using a human language? And Goto Ryuji was killed by that thing?!'.
Such an eventuality was not within his calculations . He and his compatriots had definitely planned everything out, and made preparations for every eventuality, so why .
The ends of Matsumoto Shigeo's fingers trembled almost imperceptibly
" Sir?".
Only after he realised that the gazes of his employees were focused on his trembling fingertips did Matsumoto Shigeo carefully hide his hands . He quickly changed the topic
"Where is the monster that No, where is the talking monster, right now?".
He couldn't bring himself to say the words 'the monster that killed Goto Ryuji'
"It's disappeared, sir . ".
"What do you mean, disappeared??".
It was a creature capable of killing Goto Ryuji . So, how could the satellite equipped with the magic energy detection camera keeping a close eye on Jeju Island not pick up on such a powerful monster?.
The employee seemed to have figured out what his boss was about to say, and he pointed at the monitor once more
"That spot of light is the magic energy emitted from the monster at that moment . ".
The magic energy detection camera displayed the emitted magic energy as spots of lights . The bigger the spot of light appearing on the monitor, the more powerful the existence was
Once spots of lights belonging to Goto Ryuji and the Hunters around him disappeared, the larger, brighter light vanished quickly, as well
"Oh, my god ".
Matsumoto Shigeo spat out a shocked gasp . The unknown enemy was in perfect control of its magical energy
'That was why Because it was such a monster, that '.
That was why the research team failed to notice the creature before
It was, without a doubt, a perfect failure . And as a punishment, Japan just lost ten of her elite Hunters . Among them, the best Hunter in the country . For a result of a single oversight, it was very, very painful price to pay . Even worse, the price most likely hadn't been fully paid yet, either
'When that nonsensical monstrosity crosses the ocean and enters the country '.
Even though Matsumoto Shigeo tried to shake them off, the horrifying images continued to fill up his head . It was then
"We found it! The b*stard has reappeared again!".
Matsumoto Shigeo's eyes shot open wider
"Where is the creature?".
"It's inside the ant queen's chamber, sir . ".
" ".
Only the ants returning to the ant tunnel, as well as the Korean Hunters facing off against them, remained in that place . They must be fighting with everything they had, but unfortunately, their opponent this time easily exceeded everyone's imaginations
'In the end, even the Koreans will be finished for good . '.
That's what he believed, but then, Matsumoto Shigeo's brows shot up instantly
'… ???'.
There was another spot of light that suddenly appeared right next to that horrifying monster
"W-what's the meaning of this?!".
Matsumoto Shigeo gasped out in sheer astonishment and quickly looked at his employees . One of the employees, affiliated with the research team, urgently shook his head
"It, it's also our first time seeing this, sir . ".
That spot of light was as big and bright as the monster's . No, maybe it was even bigger than that
What was even more astonishing was the fact that there were hundreds of smaller light spots swirling around that large one
Even the head researcher of Japan's research team, who had been analysing the spy images for many years now, had never seen such a phenomenon before
'Ah !'.
Seeing the mesmerising sight of the sea of lights repeatedly separating into tiny pieces before gathering back together, all those present couldn't help but gasp out in admiration
However, Matsumoto Shigeo didn't have the time to leisurely stew in his emotions right now
"The Korean team! They must be broadcasting the raid even now, aren't they??".
If the Korean team was still strutting around like that, that could also mean that the broadcast was still ongoing . Matsumoto Shigeo was beset with curiosity and wanted urgently to find out just what was going on here
"The Korean team's broadcast!! Bring that up to the main monitor!!".
When he shouted out, the super-large screen in the middle of the Japanese mission control centre was immediately filled with the image of a certain young man having a stare-down with an ant monster
After seeing that man's face, Matsumoto Shigeo nervously swallowed his saliva . The lone strand of sweat trickled down his temple and pooled on the bottom of his chin
'That man That man is the source of that massive light spot??'.
 That thing was at least over 1 . 5 times larger than regular ant monsters . They were only looking at the thing through the monitor, yet the sheer pressure emanating from that thing managed to quicken their heartbeats
'… '.
Matsumoto Shigeo's expression hardened even further
It was then
The ant monster made its move
***.
The ant king's fist powerfully slammed into Jin-Woo's face
SLAM!!.
Jin-Woo's back nearly bent backwards, but he stomped down and withstood the hit
'… . !!'.
The ant king had struck with all of its might behind that punch, so it couldn't help but get taken by surprise
"You can . withstand my power?".
The ant king struck out with a simple plan to kill this puny human in one hit, but instead of sending him flying away, the whole thing simply ended with his head turning slightly away
Too bad, there was no time to remain surprised, because Jin-Woo's own fist flew in afterwards
Swish-!!.
SLAM!!.
The ant king was smacked right in the middle of its face, and it flew away to crash into the wall on the far side of the cavern
Kaboom!.
As if a meteor had collided there, the wall caved in deeply . Although it was only for a short while, the impact force was powerful enough to shake the entire ant tunnel
"What kind of an ant talks this much?".
***.
When the 'live' broadcast got suddenly cut off, and the static screen showing the message of about the station encountering 'technical difficulty' appeared on their TV screens, countless viewers were left devastated and stunned by what they saw
"The Hunters What's happening to the Hunters??".
"What was up with that ant just now?!".
"What the hell! How can you cut the broadcast off right there?!".
The scenes of an ant monster suddenly appearing without warning, and then, it proceeding to systematically dismantle the Hunters one by one .
The viewers celebrating after the death of the ant queen felt like a bucket of cold water was poured down on them by that horrifying scene . Not too long afterwards, the static screen with the 'technical difficulty' message went away and the emcee appeared there, instead
- "Ah everyone, this news just came in . ".
With a sorrowful voice, he relayed the death of Hunter Min Byung-Gu . And he also added that the safety of the Hunters remaining in the ant tunnel couldn't be guaranteed, either
"God d*mn it!!".
"They got the ant queen, so why are they dying now?!".
"What about Japan?".
"Isn't it supposed to be a united team or something? Where are the d*mn Japanese?!".
Some people raged on, some people worried about their safety, while some others grieved
The news of the Hunters risking their lives potentially meeting with a grisly fate spread out like an uncontrollable wildfire . Weirdly enough, the audience rating actually rose up higher than ever before, even though the raid broadcast had been cut off for a while now
- "Ah!!".
The emcee's expression brightened considerably after receiving an urgent message
- "I just heard the news that an unknown Hunter has appeared on the scene right at this moment! We will immediately recommence with the broadcast right away . ".
Those words were more than enough to inject much-needed vitality into the fatigued eyes of the viewers staying put in front of their TV screens
Soon, the live feed was restored, and .
"What the heck?".
"This . !!".
The viewers were greeted by the black soldiers filling up their TV screens, and they all shot up from their seats
They then saw those black soldiers fighting tooth-and-nail against the waves upon waves of ants flooding into the ant queen's chamber . The camera moved around to take in the unfolding events, before locking onto a single young man
He was too far away and it was hard to see what he looked like
- "The armoured soldiers are apparently the creatures summoned by that Hunter on your screen . Also, I just heard that most of the Hunters are alive and safe, as well!".
The viewers watching on with nervous tension all cried out in elation from that news . And then, they began cheering for that unidentified Hunter
"Yes!! Go and smash them all!!".
"You're doing great!! Push them back!!".
"Let's go!!!".
And finally .
When that unidentified Hunter summoned an even greater number of soldiers to completely massacre the ants .
Woooooaahhhh!!!.
People punched the sky with their fists and celebrated wildly
Those who had lost their families and friends to the ants and sought revenge shed tears as the cathartic moment played out in their screens . As if he was waiting for the perfect timing, the emcee's heightened voice came out from the speakers just in the nick of time
- "Ah!! We finally identified the unknown Hunter!".
The eyes and ears of every single viewer out there were now turned towards their screens
Just who was that man?.
Just what was the identity of a man capable of rescuing rank S Hunters from a place crawling with rank S monsters?.
- "He's the tenth rank S Hunter of South Korea, Seong Jin-Woo!! He's a Mage-type Hunter specialising in summoning magic!!".
And so, the viewers grew even more cheerful from the fact that a Hunter possessing such an incredible ability was not a Japanese, but a Korean like them
Countless ants were soon taken care of in no time at all
Just as the Hunters were getting ready to escape from the ant tunnel, yet another wave of ants appeared
"Uh?! Uhhh??".
"Isn't that . ?".
The ant monster that appeared just before the broadcast got cut off the first time was now leisurely walking forward while pushing past the swarm of ants . Since there weren't that many ants with wings to begin with, and the shape of its face was different from everything else, it wasn't that hard to tell that monster apart
The viewers were instantly thrown into confusion
"What the hell? I thought that b*stard was already dead?!".
"Why is that thing appearing again?!".
The winged ant monster stood before Hunter Seong Jin-Woo
Those viewers who understood a bit about the compatibility of different abilities grew deeply anxious when the two stood face to face
"Aigoo! He's going to get killed here!".
"Why would a Mage-type give up on the safety of distance like that??".
"It's not too late, so run away!".
 They thought that it was beyond obvious how things would turn out now
It was already distressing enough to see those two glare at each other in close proximity, but then, the d*mn ant monster suddenly grew larger and larger as well
Every viewer watching their TV screens cried out in shock
And then
Pow!!.
 They thought that the moment the monster's punch found its target, the Hunter's head would explode
However, contrary to their expectations, the Hunter was fine
'Huh??'.

The eyes of the viewers grew wider and wider
And then .
SLAM!!.
The ant monster got shoved deeply into the cave wall
" . ".
" . ".
Most viewers required a little bit of time to process what just transpired
But when the camera zoomed in on the ant king half-buried in the cave wall
Waaaahhhh!!!.
Yet another round of loud cheering exploded out
***.
"Heok!!".
The cameraman's jaw fell to the floor
When Hunter Seong Jin-Woo was struck by the ant's fist, he flinched in surprise . Even Cha Hae-In lost her consciousness from that hit
But then, Hunter Seong Jin-Woo blew away the ant monster, instead . The very same monster, that toyed around with six rank S Hunters as if it was nothing . No wonder he'd gasp out a "Heok!".
'Were the rank S Hunters that weak?'.
No, of course not
The Korean Hunters bravely fought and managed to defeat the rank S boss, the ant queen
So, the mutated ant monster that made an utter fool out of those Hunters was the weird one . And Hunter Seong Jin-Woo, who blew away that weird mutated ant, was an even weirder one
Gulp
The cameraman suppressed his agitation and swallowed his dry saliva
The reactions of other Hunters weren't all that different, either
While everyone was staring at Jin-Woo with excited eyes, only Choi Jong-In began looking around in his vicinity . And he could see mountains of ant corpses . He initially thought that those were the result of the Hunters working together while he was out cold . But now, having witnessed Jin-Woo's power, his thoughts had changed
'Can it . Could it be Mister Seong Jin-Woo alone was responsible for ?'.
After taking a rough count of the dead ants, Choi Jong-In's eyes began trembling non-stop
Kiiieeehhhhk!!.
A beastly screech exploding out without warning caused his head to snap back
The ant king extricated itself out of the wall and displayed its rage . The air within the ant queen's chamber was quivering noticeably
'Ho-oh?'.
Jin-Woo stared at the ant king with a genuine surprise . The damage he dealt was far less than he thought
'Is it because . of the exoskeleton?'.
The black, tough shell covering the entirety of that b*stard – whatever that thing was, it had already exceeded being a normal organic matter
In that case, he'd use brute force to shatter that shell . The thing that could break one's armour wasn't a sword or a spear . No, it was a hammer
Jin-Woo's shoulder and arm muscles expanded, thick veins bulging visibly on his skin . The air grew thicker and heavier as it descended all around him
The ant king stopped screeching and shifted its horrifyingly crumpled expression towards Jin-Woo
"You dare!!".
As the two of them walked closer, the distance between them shortened faster and faster . Soon, Jin-Woo and the ant king stood right before each other again . And then, without a hint of hesitation or mercy, they began exchanging countless attacks, each thumping hit carrying all their might
Slam!!.
Kaboom!!.
BOOM!!.
The Hunters watching from the sideline were all stupefied into silence
The shock wave from the collision of magic energy whenever Jin-Woo and the ant king exchanged blows rocked the ant tunnel itself . It was so severe that these top-ranked Hunters, renowned for their mastery over wielding their magic energy, felt their innards tumble
"Woo-wuoop . ".
"Are you alright?".
"I, I'm fine . ".
The cameraman was only a rank A, but he still tried his best to suppress the contents of his stomach from rising up . He was even experiencing vertigo, too
'Woo-wook '.
Even then – even as his complexion paled greatly, he could still maintain his smile all because .
Slam! Slam!! Slam!!!.
'How can a lone Hunter do that against such a monster ?'.
… . Because, he saw a ray of hope
Kwa-boooooom!!.
Hunter Seong Jin-Woo might be getting wounded from that exchange, but the outer shell of the ant king was definitely being broken as well
< Chapter 120 > Fin


Kaitakawaenga
Advisor on Deaf Children
Educational Psychologist
Group Manager Education System Investment
Early Intervention Teacher
Psychologist/SEA
Senior Education Advisors
Speech and Language Therapist
Physiotherapist
Psychologist / Special Education Advisor


{{ include.event.name }}
{{ include.event.date | jdate: "%Y/%m/%e" }}
{% unless include.event.hide_time %}
{{ include.event.date | date: "%H:%M" }}
{% endunless %}
{{ include.event.date | date: "%A" }}
{{ include.event.description }}
{{ include.event.content }}


Ruby client library for automating DataCentred account management.
Installation
gem install datacentred
or
(in Gemfile or .gemspec)
gem 'datacentred'
then
require 'datacentred'
Usage
This API allows you to automate operations against your DataCentred account.
Operations include:
- Creating and managing users;
- Creating and managing roles for users;
- Managing OpenStack Project creation, quota adjustments, and user assignments;
- Viewing detailed usage/billing information for your account.
Authentication
The API uses two pieces of information to authenticate access.
A unique access key specific to your DataCentred account, and a secret key which is generated once.
To get started:
- Find your API access key and secret key at my.datacentred.io
- Set your credentials by exporting your access key and secret key as environment variables:
export DATACENTRED_ACCESS="my_access"
export DATACENTRED_SECRET="my_secret"
Or setting your keys manually using the following methods:
Datacentred.access_key = 'my_access'
Datacentred.secret_key = 'my_secret'
NOTE: If you use this approach, the gem will ignore any values assigned to the environment variables.
Usage Examples
The User
, Project
, and Role
entities all support CRUD operations via the following methods:
.all
- returns an index of all entities of this type..create params
- creates a new entity whereparams
is a hash of properties..find id
- finds the entity via the unique identifierid
.
returned objects can be edited and deleted:
object.name = "Foo"
- changes thename
property toFoo
.object.save
- saves any object changes so they persist on the server.object.destroy
- removes the object from the server.
Here are some worked examples:
List all available users
Datacentred::User.all
# => [#<Datacentred::Model::User id="2bd21ee25cde40fdb9454954e4fbb4b5", ...>, ...]
Find a user by id
user = Datacentred::User.find "2bd21ee25cde40fdb9454954e4fbb4b5"
# => #<Datacentred::Model::User id="2bd21ee25cde40fdb9454954e4fbb4b5", ...>
Update a project
project = Datacentred::Project.find "6d5277716c4b10d2177814af50b77175"
project.name = "Foo"
project.save
# => #<Datacentred::Model::Project id="6d5277716c4b10d2177814af50b77175", name= "Foo", ...>
Create a role
Acceptable permissions are: 'api.read', 'cloud.read', 'roles.modify', 'roles.read', 'storage.read', 'tickets.modify', 'usage.read'.
role = Datacentred::Role.create name: "foo", permissions: ["usage.read"]
# => #<Datacentred::Model::Role id="654f423e-646a-4742-849d-d8c9ab9b4f39", name="foo", admin=false, permissions=["usage.read"] ...>
Add a user to a role
role = Dataentred::Role.find "654f423e-646a-4742-849d-d8c9ab9b4f39"
user = Datacentred::User.find "2bd21ee25cde40fdb9454954e4fbb4b5"
role.add_user user
# => true
Remove a user from a project
user = Datacentred::User.find "2bd21ee25cde40fdb9454954e4fbb4b5"
project = Datacentred::Project.find "6d5277716c4b10d2177814af50b77175"
project.remove_user user
# => true
Get usage data for a given year and month
Usage data is returned simply by supplying a year and a month. If the year/month are current then the data will be as recent as the time contained within the last_updated_at
property.
@usage = Datacentred::Usage.find 2017, 6
# => #<Datacentred::Model::Usage last_updated_at=2017-07-12 09:46:54 UTC, projects=[{:id=>"37033518a4514f12adeb8346ac3f188c"
@usage.projects.first.name
# => "wyld_stallyns"
@usage.projects.first.usage.instances.first.current_flavor.name
=> "dc1.1x1"
Errors
The gem may raise the following standard errors:
Unauthorized
- Your credentials are incorrect or your account isn't authorized for API access.NotFound
- The entity you referred to can't be found with the ID you supplied.UnprocessableEntity
- There was a validation issue with your request (only applies to create/delete/update operations)
Documentation
Full documentation is also available via https://datacentred.github.io/datacentred-api-ruby/
API Reference Manual
Please check out the DataCentred API Documentation for a comprehensive description of the API itself.


This is the classic "Tanks" game, except instead of a hillside with gravity, it is played on a rotating disc. The disc starts off spinning slowly, and increases in speed with each level.
The left-hand image shows the view from above, from a camera fixed in space. The right-hand image shows the view from above, from a camera fixed to the rotating disc. Due to the Coriolis effect, the bullets appear to follow curved paths when observed from within the rotating disc (the right-hand view).
You score 1 point for hitting an opponent and lose 1 point for hitting yourself. The walls on the disc block the bullets. Good luck.


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 1
For the soup, heat the olive oil in a pan and gently fry the onion, garlic and ginger for 2-3 minutes, or until softened. Add the thyme and sweetcorn and fry for a further 1-2 minutes, then add the stock and bring to a simmer. Cook for 4-5 minutes, or until the sweetcorn is tender. Stir in the coriander and cream and process with a stick blender until smooth.
For the ravioli, place the flour, one of the eggs and olive oil into a food processor and pulse until the mixture comes together to form a dough. Tip out onto a floured work surface and knead to bring together. Roll out into a thin circle.
Mix the crab together with the herbs and lemon juice and place into the centre of the pasta. Beat the remaining egg in a small bowl and use to brush the edges of the dough. Draw up the edges of the dough to form a dumpling around the filling, then steam for 5-6 minutes, or until the pasta is cooked and al dente and the filling piping hot. Serve on top of the bowl of sweetcorn soup.


Now that the mappool and mod brackets have been changed, you have to finalize the mappool by clicking on the button below.


Bubble charts represent 3 dimensional data. Data is passed in to a bubble chart as a series of [x, y, radius, <label or object>]. The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.
By default, all bubbles are scaled according to the size of the plot area. The radius value in the data point will be adjusted to fit the bubbles in the chart. If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.
The below chart show basic customization of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.
|
Below is a basic bubble chart showing usage of the optional label and color properties passed in with the data.
The next chart uses the "bubbleGradients: true" option to specify gradient fills on the bubbles. Radial gradients are not supported in IE* and will be automatically disabled.
*Radial gradients are not supported in IE 7 and IE 8 because they are not supported in the excanvas emulation layer used by jqPlot to render charts in IE 7 and IE 8. jqPlot renders charts using the HTML canvas element which is supported by nearly every browser including IE 9. Excanvas translates the canvas rendering to VML rendering for IE 7 and 8, but unfortunately does not properly handle radial gradients.
The following bubble chart shows the "autoscalePointsFactor" and "autoscaleMultiplier" options which can be used to control bubble scaling. The "autoscalePointsFactor" options controls bubble scaling with the number of points on the plot. A negative value will decrease bubble size and number of bubbles increases. The "autoscaleMultiplier" will makes all bubbles larger or smaller for values greater or less than 1.0.
This chart also demonstrates some of the highlighting options. Bubble highlighting is controlled with the "highlightMouseOver" and "highlightMouseDown" boolean options. Here the "highlightMouseDown: true" option is set which causes the plot to highlight on mousedown (click). This automatically sets the "highlightMouseOver" option to false.
Events are also trigger with plot interaction. Specifically, "jqplotDataHighlight", "jqplotDataUnhighlight", "jqplotDataClick" and "jqplotDataRightClick" events are triggered. Handlers are passed an event object, the series index, the point index, and the bubble data.


div first line
Get "blah" from the div
Set "blah" to "Data"
Set "blah" to 866
Remove "blah" from div
The "blah" value of this div is
?
Picture
Hello


(#) Creating an Animatable during composition without using `remember`
!!! ERROR: Creating an Animatable during composition without using `remember`
This is an error.
Id
: `UnrememberedAnimatable`
Summary
: Creating an Animatable during composition without using `remember`
Severity
: Error
Category
: Correctness
Platform
: Any
Vendor
: Jetpack Compose
Identifier
: androidx.compose.animation.core
Feedback
: https://issuetracker.google.com/issues/new?component=612128
Min
: Lint 7.0
Compiled
: Lint 8.0 and 8.1
Artifact
: [androidx.compose.animation:animation-core](androidx_compose_animation_animation-core.md.html)
Affects
: Kotlin and Java files and test sources
Editing
: This check runs on the fly in the IDE editor
Implementation
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/compose/animation/animation-core-lint/src/main/java/androidx/compose/animation/core/lint/UnrememberedAnimatableDetector.kt)
Tests
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/compose/animation/animation-core-lint/src/test/java/androidx/compose/animation/core/lint/UnrememberedAnimatableDetectorTest.kt)
Copyright Year
: 2021
Animatable instances created during composition need to be `remember`ed,
otherwise they will be recreated during recomposition, and lose their
state. Either hoist the Animatable to an object that is not created
during composition, or wrap the Animatable in a call to `remember`.
(##) Example
Here is an example of lint warnings produced by this check:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text
src/test/{.kt:12:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:13:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:15:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
src/test/{.kt:20:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:21:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:23:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
src/test/{.kt:28:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:29:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:31:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
src/test/{.kt:41:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:42:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:44:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
src/test/{.kt:48:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:49:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:51:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
src/test/{.kt:58:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:59:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:61:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
src/test/{.kt:66:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:67:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:69:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
src/test/{.kt:77:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable = Animatable<Boolean, Any>(false)
----------
src/test/{.kt:78:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable2 = Animatable(0f)
----------
src/test/{.kt:80:Error: Creating an Animatable during composition
without using remember [UnrememberedAnimatable]
val animatable3 = Animatable(Color.Red)
----------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here is the source file referenced above:
`src/test/{.kt`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers
package test
import androidx.compose.animation.*
import androidx.compose.animation.core.*
import androidx.compose.runtime.*
import androidx.compose.ui.graphics.*
@Composable
fun Test() {
// Float function and constructor from androidx.compose.animation.core
val animatable = Animatable


---
title: "SPRING BONSAI SHOW"
date: "2000-01-01 21:04:10 -06:00"
categories:
- spring
subtitle: ""
layout: "events"
event-image: "bonsai-show.jpg"
event-dates: "April 10 & 11"
event-location: "Red Butte Garden"
button-type: "register"
tickets-link: ""
registration-info: "Questions?
Please Call<PHONE_NUMBER>"
instructor-info: "N/A"
member-cost: "Free"
public-cost: "Garden Admission"
event-notes: ""
tickets-button: "hide"
refund-policy: "hide"
published: true
---
Discover Bonsai, the Japanese art of growing miniature trees in containers. Members of The Bonsai Club of Utah will exhibit different bonsai styles and arrangements. Trees and tools will also be available for purchase directly from the experts.
CLICK HERE to learn more about the history of Bonsai.
Visit the Spring Orchid Show, the largest orchid display in Utah, Saturday & Sunday, April 3 & 4.
Garden member benefits include a year of Garden admission and discounts on classes, concert tickets, summer camps, special events, and more!


--- layout: post custom_css: t2-css-design title: "I Need Space!" subtitle: "The Differences between Margin, Border, and Padding" date: 2015-04-18 categories: blog technical background: /imgs/margin-border-padding-diagram.png ---
In this post, we will explore a concept in CSS design. CSS stands for Cascading Style Sheets. This is a tool used by many web designers to turn a single column of plain text into the beautiful websites that you see all over the internet. There are many aspects of CSS one would have to understand in order to stylize a website, but I think it will be best if we take this one step at a time. For now, we will focus on one issue: spacing.
Margins, borders, and paddings can all serve as spacers between objects on a website. Let's back up for a moment and talk about what constitutes an object. An object is really anything on the site: an image, a text box, a heading, a button, a table, a data cell within a table, a section of color, etc. A web designer arranges the objects to create the site you see online. But how do can we determine how much space each object takes up? Obviously, each object has a size, but that's not where the story ends. We can also determine how much space the object needs around it, creating space between objects. This is where our margins, borders, and padding come in.
From the inside out, we go from the object itself out to the padding, then the border, and finally the margin. As state previously, an object has its own dimensions (width x height). The padding is the space between the object and its border. The border, which may be made visible by the web designer, surrounds the object. The margin is the space between the border and other objects on the site. Please see the diagram below for further clarification.
As discussed above, a margin is the space between an object's border and other objects on the site. We define the length of this space using CSS by typing:
margin: [length];
Here, we can type our length using several units of measurements. For now, let's stick with pixels (px). One pixel is a dot on your screen. This is what it would look like if we set objects to have 40-pixel margins (margin: 40px
):
Or we could use margin: 1px;
and get something like this:
We can also choose different margins for the different sides of an object. Each side can be set using the commands margin-top
, margin-right
, margin-bottom
, or margin-left
, respectively. Or, we can indicate all four at once by typing margin
and listing each margin length in the order listed above (starting with the top and moving clockwise around the object). For example, the code margin: 4px 3px 2px 1px;
would produce a top margin of 4 pixels, a right margin of 3 pixels, a bottom margin of 2 pixels, and a left margin of 1 pixel. Below is an example of an object with unequal values for its margins on various sides:
A border is exactly what it sounds like: it borders the object. We can define several attributes of a border such as its weight, style, and color. We can also determine whether or not it will be visible (the style "none" would render the border invisible). Our code for creating a border around an object looks like this:
border: [weight] [style] [color];
For example, here is what you would get if you entered border: 15px solid black;
and border: 2px dashed red;
for two objects, respectively:
Padding, like the margin, represents empty space. However, this space is between the object and its border. We set the padding using:
padding: [length];
Here are some examples of the effect padding can have on an object such as a text box:
Just as with margins, we can apply our borders and padding unequally on different sides:
In case you're curious, here is the CSS code from our mismatched border example:
border-top: 7px dotted blue;
border-right: 12px solid green;
border-bottom: 10px dashed red;
border-left: 3px solid yellow;
And here is the CSS code from our unequal padding example:
padding: 50px 10px 0px 150px;
Well, I hope this has given you some insight into the wonderful world of CSS design. I'm excited to be learning all of this, and I hope you are, too. Please check in on my blog as I continue my journey toward becoming a web developer. In the meantime, happy coding!


21 February 2006
On 18 February, agricultural authorities in India confirmed the country’s first outbreak of highly pathogenic H5N1 avian influenza in poultry. The disease was detected at several commercial farms in the Navapur sub-district in the western state of Maharashtra.
Prior to that date, large numbers of poultry deaths, at more than 50 farms in the area, had been noted, but the cause was initially diagnosed as Newcastle disease. The outbreak is now thought to have begun on 27 January. Agricultural authorities have reported that some backyard farms are also affected.
Mass culling of bird at affected farms continued today.
The Ministry of Health and Family Welfare has despatched rapid response teams to Navapur and neighbouring areas. House-to-house searches for cases of influenza-like illness are being conducted.
The government has equipped a Navapur hospital for the management, in isolation, of possible human cases. WHO was informed today that 12 patients with fever and respiratory illness in Navapur sub-district have been hospitalized for observation as a precautionary measure. An additional 3 patients have been hospitalized, also for observation, in the Vaira sub-district of the adjacent Gujarat state.
Samples from these patients and their close contacts are being tested at the country’s National Institute of Virology. Results are expected later this week.


Each process has its own private address space.
32 Bit Windows (Without altering it)
64 Bit Windows
DLLs
Envionmental Variables
PEB
Process Heaps
Thread Stacks
Mapped Files
Application Data
Executable
PE Space
Command Arguments
The high 2GB (0x80000000 through 0xFFFFFFFF) used by the system is shared through all processes.
Processes don't really mess with it as it could be catastrophic.
Symbols are here for items of interest such as PsActiveProcessList.
Source Code → Compile → Link → Produce PECOFF file.
PECOFF = Portable Executable and Common Object File Format.
Note: Memory addresses change with ASLR (Address Space Layout Randomization) and could appear differently
.Text/.Code = rx portions of program. Assembly code that CPU will run.
.rdata = r only data
.data = rw initialized data
.bss = rw un-initliaized data
.rsrc = r resources
Stack = rw
Heap = rw
PE introduced in Windows NT 3.1 in 1993.
Modified from Unix COFF.
Portable Executable (PE) is the file format for executables and dlls.
All Windows binaries, dll's and device drivers use the PE header to encapsulate the information the OS loader needs to manage the executable code.
M$ has kept backwards compatbility in the 20+ years of PE despite the format changing
Several sections that tell the dynamic linker which shared libraries are needed for the processes.
Characteristics of executable
Pointer to portions in executable
Import/Export Fields
Debugging information
Sizes
Permissions of memory sections
DOS Stub.. Nothing important here.. just remnants of DOS
e_lfanew at offset 0x3C has file offset of PE header, IMAGE_NT_HEADERS. It must be 4 byte aligned
>>> dt("_IMAGE_DOS_HEADER")
'_IMAGE_DOS_HEADER' (64 bytes)
0x0 : e_magic ['unsigned short'] #Magic bytes 4D5A → “MZ”
0x2 : e_cblp ['unsigned short']
0x4 : e_cp ['unsigned short']
0x6 : e_crlc ['unsigned short']
0x8 : e_cparhdr ['unsigned short']
0xa : e_minalloc ['unsigned short']
0xc : e_maxalloc ['unsigned short']
0xe : e_ss ['unsigned short']
0x10 : e_sp ['unsigned short']
0x12 : e_csum ['unsigned short']
0x14 : e_ip ['unsigned short']
0x16 : e_cs ['unsigned short']
0x18 : e_lfarlc ['unsigned short']
0x1a : e_ovno ['unsigned short']
0x1c : e_res ['array', 4, ['unsigned short']]
0x24 : e_oemid ['unsigned short']
0x26 : e_oeminfo ['unsigned short']
0x28 : e_res2 ['array', 10, ['unsigned short']]
0x3c : e_lfanew ['long']
PE Header
Contains
Magic Bytes ("Signature") 5045 → “PE”
>>> dt("_IMAGE_NT_HEADERS")
'_IMAGE_NT_HEADERS' (248 bytes)
0x0 : Signature ['unsigned long']
0x4 : FileHeader ['_IMAGE_FILE_HEADER']
0x18 : OptionalHeader ['_IMAGE_OPTIONAL_HEADER']
Compile time
Number of Sections
Size of Optional Header
Characteristics of IMAGE_FILE
>>> dt("_IMAGE_FILE_HEADER")
'_IMAGE_FILE_HEADER' (20 bytes)
0x0 : Machine ['unsigned short']
0x2 : NumberOfSections ['unsigned short']
0x4 : TimeDateStamp ['UnixTimeStamp', {'is_utc': True}]
0x8 : PointerToSymbolTable ['unsigned long']
0xc : NumberOfSymbols ['unsigned long']
0x10 : SizeOfOptionalHeader ['unsigned short']
0x12 : Characteristics ['unsigned short']
Not really "optional" for DLL and EXE
Magic bytes 0x10b or 0x107
Address of Entry
Initial entry point of program
Base of Code
Relative Virtual Address (RVA) of .code
Image Base
Virtual Address of Image Base
Data Directorys and RVAs to them - 16 IMAGE_DATA_DIRECTORY
Size of Sections
Size of Image When Loaded and on disk
Good for Malware investigations
Stack sizes
File and Section Alignment
>>> dt("_IMAGE_OPTIONAL_HEADER")
'_IMAGE_OPTIONAL_HEADER' (224 bytes)
0x0 : Magic ['unsigned short']
0x2 : MajorLinkerVersion ['unsigned char']
0x3 : MinorLinkerVersion ['unsigned char']
0x4 : SizeOfCode ['unsigned long']
0x8 : SizeOfInitializedData ['unsigned long']
0xc : SizeOfUninitializedData ['unsigned long']
0x10 : AddressOfEntryPoint ['unsigned long']
0x14 : BaseOfCode ['unsigned long']
0x18 : BaseOfData ['unsigned long']
0x1c : ImageBase ['unsigned long']
0x20 : SectionAlignment ['unsigned long']
0x24 : FileAlignment ['unsigned long']
0x28 : MajorOperatingSystemVersion ['unsigned short']
0x2a : MinorOperatingSystemVersion ['unsigned short']
0x2c : MajorImageVersion ['unsigned short']
0x2e : MinorImageVersion ['unsigned short']
0x30 : MajorSubsystemVersion ['unsigned short']
0x32 : MinorSubsystemVersion ['unsigned short']
0x34 : Win32VersionValue ['unsigned long']
0x38 : SizeOfImage ['unsigned long']
0x3c : SizeOfHeaders ['unsigned long']
0x40 : CheckSum ['unsigned long']
0x44 : Subsystem ['unsigned short']
0x46 : DllCharacteristics ['unsigned short']
0x48 : SizeOfStackReserve ['unsigned long']
0x4c : SizeOfStackCommit ['unsigned long']
0x50 : SizeOfHeapReserve ['unsigned long']
0x54 : SizeOfHeapCommit ['unsigned long']
0x58 : LoaderFlags ['unsigned long']
0x5c : NumberOfRvaAndSizes ['unsigned long']
0x60 : DataDirectory ['array', 16, ['_IMAGE_DATA_DIRECTORY']]
Array of Struts that contain a VirtualAddress to a directory.
If the VirtualAddress and Size are 0, it is not used.
**IMAGE_DIRECTORY_ENTRY_EXPORT (0)The directory of exported symbols. mostly used for DLLs.
**IMAGE_DIRECTORY_ENTRY_IMPORT (1) The directory of imported symbols.
**IMAGE_DIRECTORY_ENTRY_RESOURCE (2) Directory of resources.
IMAGE_DIRECTORY_ENTRY_BASERELOC (5) Base relocation table. Necessary for DLLs.
**IMAGE_DIRECTORY_ENTRY_TLS (9) Thread local storage directory - structure unknown; contains variables that are declared "__declspec(thread)", i.e. per-thread global variable
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (11) Bound import directory - see description of import directory.
IMAGE_DIRECTORY_ENTRY_IAT (12) Import Address Table - see description of import directory.
>>> dt("_IMAGE_DATA_DIRECTORY")
'_IMAGE_DATA_DIRECTORY' (8 bytes)
0x0 : VirtualAddress ['unsigned long']
0x4 : Size ['unsigned long']
An address relative to the ImageBase.
ImageBase is an actual virtual addresses to the IMAGE_DOS_HEADER
VirtualAddress = ImageBase + RVA
RVA are not the same as File offsets.
File offsets differ from memory due to file alignment and memory alignment differences
Alignment is specified in the optional header
File sections are on 512 byte boundaries
Memory has page aligned sections (usually)
FileOffset = RVA – VirtualAddress + PointerToRawData (from IMAGE_SECTION_HEADER)
Our memory sections... data, text/code, reloc, etc.
Array of section Headers defined in IMAGE_FILE_HEADER
IMAGE_NT_HEADERS + SizeOfOptionalHeader
Contain
Gets us to the SECTION
>>> dt("_IMAGE_SECTION_HEADER")
'_IMAGE_SECTION_HEADER' (40 bytes)
0x0 : Name ['String', {'length': 8}]
0x8 : Misc ['__unnamed_1f6c']
0xc : VirtualAddress ['unsigned long']
0x10 : SizeOfRawData ['unsigned long']
0x14 : PointerToRawData ['unsigned long']
0x18 : PointerToRelocations ['unsigned long']
0x1c : PointerToLinenumbers ['unsigned long']
0x20 : NumberOfRelocations ['unsigned short']
0x22 : NumberOfLinenumbers ['unsigned short']
0x24 : Characteristics ['unsigned long']
Volatility.py
PEView
PEiD
Dependency Walker
Debuggers
IDA
Pefile.py
Write your own
Old software but still works and is used often
Easily view the contents of a PE binary
Scans binaries and builds a tree of dependent modules.
WinAPI in
//Error checking omitted
#include <Windows.h>
int main(int argc, char* argv[])
{
PIMAGE_DOS_HEADER dos_header;
PIMAGE_NT_HEADERS nt_headers;
PIMAGE_SECTION_HEADER section_header;
LPBYTE peFile;
DWORD peSize;
DWORD bytes_read;
HANDLE hFile = CreateFileA(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
peSize = GetFileSize(hFile, NULL);
peFile = (LPBYTE)malloc(peSize * sizeof(LPBYTE));
ReadFile(hFile, peFile, peSize, &bytes_read, 0);
//Set dos and nt header structures
dos_header = (PIMAGE_DOS_HEADER)(&peFile[0]);
nt_headers = (PIMAGE_NT_HEADERS)(&peFile[dos_header->e_lfanew]);
//Go through each section and print the name of it
int i;
for (i = 0; i < nt_headers->FileHeader.NumberOfSections; i++)
{
int section_offset = dos_header->e_lfanew + sizeof(IMAGE_NT_HEADERS)+(sizeof(IMAGE_SECTION_HEADER)* i);
section_header = (PIMAGE_SECTION_HEADER)(&peFile[section_offset]);
fprintf(stdout, "section: %s\n", section_header);
}
free(peFile);
return 0;
}
C:\bin>peReader.exe c:\windows\System32\calc.exe
section: .text
section: .data
section: .rsrc
section: .reloc
Notice that HeapAlloc was forwarded to RtlAllocHeap
In the PE Export Address Table, you can forward an export to another DLLs import. IF the RVA is inside the exports section, it gets forwarded.
The RVA in turn points to the ASCII sting of the dll and symbol name it gets forwarded to.
LPVOID WINAPI VirtualAllocEx(
_In_ HANDLE hProcess,
_In_opt_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD flAllocationType,
_In_ DWORD flProtect
);
LPVOID WINAPI VirtualAlloc(
_In_opt_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD flAllocationType,
_In_ DWORD flProtect
);
Shows which pages are memory resident given a specific process DTB
Kernel DTB if you use this plugin on the Idle or System process
Displays the virtual address of the page, the corresponding physical offset of the page, and the size of the page
DumpFileOffset correlates the output of memmap with the dump file produced by the memdump plugin
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 -p 352 memmap
Volatility Foundation Volatility Framework 2.4
explorer.exe pid: 352
Virtual Physical Size DumpFileOffset
---------- ---------- ---------- --------------
0x00010000 0x127e9000 0x1000 0x0
0x00020000 0x1cd3f000 0x1000 0x1000
0x00021000 0x0f800000 0x1000 0x2000
0x00030000 0x0fc9c000 0x1000 0x3000
0x00031000 0x0f5dd000 0x1000 0x4000
0x00032000 0x0f31e000 0x1000 0x5000
0x00033000 0x0f05f000 0x1000 0x6000
0x00040000 0x12527000 0x1000 0x7000
0x00041000 0x122e8000 0x1000 0x8000
0x00050000 0x0f9d5000 0x1000 0x9000
0x00060000 0x1f5a9000 0x1000 0xa000
0x00061000 0x1f6aa000 0x1000 0xb000
0x00062000 0x1f7ab000 0x1000 0xc000
0x00063000 0x1faac000 0x1000 0xd000
Similar to memap except it dumps all pages to disk for analysis.
-D OUTDIR
Use tools such as AV, disasm, etc.
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 -p 352 memdump -D dumpedExplorer/
Volatility Foundation Volatility Framework 2.4
************************************************************************
Writing explorer.exe [ 352] to 352.dmp
Layout of memory segments
Used by the Windows Kernel to track contiguous ranges of process memory
DLLs and files mapped
Contains protection levels (rwx)
Pages committed vs reserved
Shared/Private Pages
Useful to scan for detecting code injection!
Self-balanced binary tree using AVL.
Each node is a range in process virtual memory.
Lower memory = Left
Higher memory = Right
More efficient O than linked lists.
Populated when memory is allocated
Combined with page tables VADs make use of lazy evaluation
Creating page tables takes time
VADs are quickly allocated and allow memory reservations.
lazy evaluation is delaying the evaluation of an expression until it is needed.
VAD trees contain allocated memory
Page tables are not created until the process tries to reference the memory
VadRoot is contained in EPROCESS object.
Follow left and right subtrees.
Page directory is needed as address are virtual.
For _EPROCESS Win7SP1
dt("_EPROCESS")
0x278 : VadRoot ['_MM_AVL_TABLE']
VAD Nodes differ based on API function used to allocate them.
Alias to a _MMVAD* structure
>>> dt("_MMADDRESS_NODE")
'_MMADDRESS_NODE' (20 bytes)
-0x4 : Tag ['String', {'length': 4}]
0x0 : u1 ['__unnamed_158e']
0x4 : LeftChild ['pointer', ['_MMADDRESS_NODE']]
0x8 : RightChild ['pointer', ['_MMADDRESS_NODE']]
0xc : StartingVpn ['unsigned long']
0x10 : EndingVpn ['unsigned long']
Volatility uses pool tags to determine which tag to use by going -0xc or -0x4 bytes back from the node to see the PoolTag member of the _POOL_HEADER.
Represents VAD and are used to describe memory.
 MMVAD*.u.Flags
CommitCharge → Number of pages committed in region
If CommitCharge and MemCommit are 0, memory is reserved and not commited.
Protection → Memory access to allow in region
Only initial access is shown in VAD
[Flags()]
public enum MemoryProtection : uint
{
EXECUTE = 0x10,
EXECUTE_READ = 0x20,
EXECUTE_READWRITE = 0x40,
EXECUTE_WRITECOPY = 0x80,
NOACCESS = 0x01,
READONLY = 0x02,
READWRITE = 0x04,
WRITECOPY = 0x08
}
>>> dt("_MMVAD_FLAGS")
'_MMVAD_FLAGS' (4 bytes)
0x0 : CommitCharge ['BitField', {'end_bit': 19, 'start_bit': 0, 'native_type': 'unsigned long'}]
0x0 : MemCommit ['BitField', {'end_bit': 24, 'start_bit': 23, 'native_type': 'unsigned long'}]
0x0 : NoChange ['BitField', {'end_bit': 20, 'start_bit': 19, 'native_type': 'unsigned long'}]
0x0 : PrivateMemory ['BitField', {'end_bit': 32, 'start_bit': 31, 'native_type': 'unsigned long'}]
0x0 : Protection ['BitField', {'end_bit': 29, 'start_bit': 24, 'native_type': 'unsigned long'}]
0x0 : Spare ['BitField', {'end_bit': 31, 'start_bit': 29, 'native_type': 'unsigned long'}]
0x0 : VadType ['BitField', {'end_bit': 23, 'start_bit': 20, 'native_type': 'unsigned long'}]
VadInfo
VadDump
VadTree
VadWalk
Information about a process's VAD nodes
The address of the MMVAD structure in kernel memory
The starting and ending virtual addresses in process memory that the MMVAD structure pertains to
The VAD Tag
The VAD flags, control flags, etc
The name of the memory mapped file (if one exists)
Memory protection
Verbose output...
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 pslist
0x863cc540 ProcessHacker. 1108 352 9 215 1 0 2013-10-15 18:47:10 UTC+0000
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 vadinfo -p 1108
Volatility Foundation Volatility Framework 2.4
************************************************************************
Pid: 1108
VAD node @ 0x85a98f50 Start 0x02230000 End 0x0232ffff Tag VadS
Flags: CommitCharge: 3, PrivateMemory: 1, Protection: 4
Protection: PAGE_READWRITE
Vad Type: VadNone
VAD node @ 0x85e2bf08 Start 0x01220000 End 0x01344fff Tag Vadm
Flags: CommitCharge: 11, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
Vad Type: VadImageMap
ControlArea @8637acd0 Segment a1843008
NumberOfSectionReferences: 1 NumberOfPfnReferences: 198
NumberOfMappedViews: 1 NumberOfUserReferences: 2
Control Flags: Accessed: 1, File: 1, Image: 1
FileObject @85ad4958, Name: \Users\Daniel\Desktop\processhacker-2.31-bin\x86\ProcessHacker.exe
First prototype PTE: a1843038 Last contiguous PTE: fffffffc
Flags2: Inherit: 1, LongVad: 1
VAD node @ 0x863c3530 Start 0x002f0000 End 0x002f1fff Tag Vad
Flags: NoChange: 1, Protection: 1
Protection: PAGE_READONLY
Vad Type: VadNone
ControlArea @85ebde18 Segment 8a83ef30
NumberOfSectionReferences: 1 NumberOfPfnReferences: 0
NumberOfMappedViews: 21 NumberOfUserReferences: 22
Control Flags: Commit: 1
First prototype PTE: 8a83ef60 Last contiguous PTE: 8a83ef68
Flags2: Inherit: 1, SecNoChange: 1
VAD node @ 0x86363fc0 Start 0x75a20000 End 0x75a54fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
Vad Type: VadImageMap
ControlArea @853e9150 Segment 88dfe880
NumberOfSectionReferences: 1 NumberOfPfnReferences: 46
NumberOfMappedViews: 28 NumberOfUserReferences: 29
Control Flags: Accessed: 1, File: 1, Image: 1
FileObject @853e9340, Name: \Windows\System32\ws2_32.dll
First prototype PTE: 88dfe8b0 Last contiguous PTE: fffffffc
Flags2: Inherit: 1
VAD node @ 0x86390228 Start 0x73d10000 End 0x73d2cfff Tag Vad
Flags: CommitCharge: 5, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
Vad Type: VadImageMap
ControlArea @8433fb60 Segment a3c596a8
NumberOfSectionReferences: 0 NumberOfPfnReferences: 24
NumberOfMappedViews: 1 NumberOfUserReferences: 1
Control Flags: File: 1, Image: 1
FileObject @843244c8, Name: \Users\Daniel\Desktop\processhacker-2.31-bin\x86\plugins\DotNetTools.dll
First prototype PTE: a3c596d8 Last contiguous PTE: fffffffc
Flags2: Inherit: 1
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 vadinfo -p 1108 | grep EXECUTE -B 3
Volatility Foundation Volatility Framework 2.4
VAD node @ 0x85e2bf08 Start 0x01220000 End 0x01344fff Tag Vadm
Flags: CommitCharge: 11, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x853c88f8 Start 0x74b00000 End 0x74b08fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x8643ef30 Start 0x633c0000 End 0x633eafff Tag Vad
Flags: CommitCharge: 5, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x85296ee8 Start 0x630a0000 End 0x630bbfff Tag Vad
Flags: CommitCharge: 5, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x8532cd40 Start 0x630e0000 End 0x630f8fff Tag Vad
Flags: CommitCharge: 4, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x86284438 Start 0x630c0000 End 0x630d6fff Tag Vad
Flags: CommitCharge: 4, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x85a3f610 Start 0x63120000 End 0x63136fff Tag Vad
Flags: CommitCharge: 7, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x8639f008 Start 0x63100000 End 0x6311ffff Tag Vad
Flags: CommitCharge: 5, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x863c54e8 Start 0x633a0000 End 0x633b8fff Tag Vad
Flags: CommitCharge: 4, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x862fede0 Start 0x72220000 End 0x72238fff Tag Vad
Flags: CommitCharge: 4, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x84408130 Start 0x720f0000 End 0x72101fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x85f3e0c0 Start 0x71ae0000 End 0x71b2efff Tag Vad
Flags: CommitCharge: 11, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x842bc0d8 Start 0x70df0000 End 0x70df5fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x8610dae8 Start 0x70ba0000 End 0x70ba7fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x853c0600 Start 0x71330000 End 0x71389fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x84d09b20 Start 0x71b30000 End 0x71b87fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x8429a0b8 Start 0x71db0000 End 0x71db5fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x862c5070 Start 0x721e0000 End 0x721f3fff Tag Vad
Flags: CommitCharge: 4, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x86452298 Start 0x72110000 End 0x7211cfff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x842ae340 Start 0x72130000 End 0x72167fff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x8639b928 Start 0x72200000 End 0x7221afff Tag Vad
Flags: CommitCharge: 4, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x84d0d3c0 Start 0x73f80000 End 0x740affff Tag Vad
Flags: CommitCharge: 3, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
--
VAD node @ 0x8432b098 Start 0x73860000 End 0x7386ffff Tag Vad
Flags: CommitCharge: 2, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
VAD node @ 0x85e2bf08 Start 0x01220000 End 0x01344fff Tag Vadm
Flags: CommitCharge: 11, Protection: 7, VadType: 2
Protection: PAGE_EXECUTE_WRITECOPY
Vad Type: VadImageMap
ControlArea @8637acd0 Segment a1843008
NumberOfSectionReferences: 1 NumberOfPfnReferences: 198
NumberOfMappedViews: 1 NumberOfUserReferences: 2
Control Flags: Accessed: 1, File: 1, Image: 1
FileObject @85ad4958, Name: \Users\Daniel\Desktop\processhacker-2.31-bin\x86\ProcessHacker.exe
First prototype PTE: a1843038 Last contiguous PTE: fffffffc
Flags2: Inherit: 1, LongVad: 1
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 -p 1108 volshell
>>> dt("_FILE_OBJECT", 0x85ad4958)
[_FILE_OBJECT _FILE_OBJECT] @ 0x85AD4958
0x0 : Type 5
0x2 : Size 128
0x4 : DeviceObject<PHONE_NUMBER>
0x8 : Vpb<PHONE_NUMBER>
0xc : FsContext<PHONE_NUMBER>
0x10 : FsContext2<PHONE_NUMBER>
0x14 : SectionObjectPointer<PHONE_NUMBER>
0x18 : PrivateCacheMap 0
0x1c : FinalStatus 0
0x20 : RelatedFileObject 0
0x24 : LockOperation 0
0x25 : DeletePending 0
0x26 : ReadAccess 1
0x27 : WriteAccess 0
0x28 : DeleteAccess 0
0x29 : SharedRead 1
0x2a : SharedWrite 0
0x2b : SharedDelete 1
0x2c : Flags 278594
0x30 : FileName \Users\Daniel\Desktop\processhacker-2.31-bin\x86\ProcessHacker.exe
0x38 : CurrentByteOffset<PHONE_NUMBER>
0x40 : Waiters 0
0x44 : Busy 0
0x48 : LastLock 0
0x4c : Lock<PHONE_NUMBER>
0x5c : Event<PHONE_NUMBER>
0x6c : CompletionContext 0
0x70 : IrpListLock 0
0x74 : IrpList<PHONE_NUMBER>
0x7c : FileObjectExtension 0
>>>
Dumps out the vad sections to a file
-o OFFSET, --offset=OFFSET
EPROCESS offset (in hex) in the physical address space
-p PID, --pid=PID Operate on these Process IDs (comma-separated)
-n NAME, --name=NAME Operate on these process names (regex)
-D DUMP_DIR, --dump-dir=DUMP_DIR
Directory in which to dump the VAD files
-b BASE, --base=BASE Dump VAD with BASE address (in hex)
No base = dump all nodes to disk.
Each node gets a .dmp file
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 pslist
0x86499d40 mspaint.exe 3196 352 8 119 1 0 2013-10-15 18:46:16 UTC+0000
[root&windows]#mkdir dumpedVad
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 vaddump -p 3196 -D dumpedVad/
Volatility Foundation Volatility Framework 2.4
Pid Process Start End Result
---------- -------------------- ---------- ---------- ------
3196 mspaint.exe 0x02970000 0x029affff dumpedVad/mspaint.exe.3da99d40.0x02970000-0x029affff.dmp
3196 mspaint.exe 0x02630000 0x02630fff dumpedVad/mspaint.exe.3da99d40.0x02630000-0x02630fff.dmp
3196 mspaint.exe 0x00610000 0x0064ffff dumpedVad/mspaint.exe.3da99d40.0x00610000-0x0064ffff.dmp
3196 mspaint.exe 0x00110000 0x0014ffff dumpedVad/mspaint.exe.3da99d40.0x00110000-0x0014ffff.dmp
3196 mspaint.exe 0x00040000 0x00041fff dumpedVad/mspaint.exe.3da99d40.0x00040000-0x00041fff.dmp
3196 mspaint.exe 0x00020000 0x0002ffff dumpedVad/mspaint.exe.3da99d40.0x00020000-0x0002ffff.dmp
3196 mspaint.exe 0x00010000 0x0001ffff dumpedVad/mspaint.exe.3da99d40.0x00010000-0x0001ffff.dmp
Vadinfo in table form
Less information
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 vadwalk -p 3196
Volatility Foundation Volatility Framework 2.4
************************************************************************
Pid: 3196
Address Parent Left Right Start End Tag
---------- ---------- ---------- ---------- ---------- ---------- ----
0x8649dd60 0x86499fb8 0x8533bf68 0x864b4bf0 0x02970000 0x029affff VadS
0x8533bf68 0x8649dd60 0x862e8350 0x864ae460 0x02630000 0x02630fff Vadm
0x862e8350 0x8533bf68 0x86487c20 0x85e23f78 0x00610000 0x0064ffff VadS
0x86487c20 0x862e8350 0x8642bab0 0x85e2d9b0 0x00110000 0x0014ffff Vadm
0x8642bab0 0x86487c20 0x862e4c18 0x85a186c8 0x00040000 0x00041fff Vad
0x862e4c18 0x8642bab0 0x864927a8 0x864990c8 0x00020000 0x0002ffff VadS
0x864927a8 0x862e4c18 0x00000000 0x00000000 0x00010000 0x0001ffff Vad
0x864990c8 0x862e4c18 0x00000000 0x00000000 0x00030000 0x00033fff Vad
0x85a186c8 0x8642bab0 0x853bbac8 0x85a18428 0x000e0000 0x000e1fff Vad
0x853bbac8 0x85a186c8 0x85aa19d0 0x85a18710 0x00060000 0x000c6fff Vad
Display VAD nodes in a visual tree
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 vadtree -p 3196
Volatility Foundation Volatility Framework 2.4
************************************************************************
Pid: 3196
0x02970000 - 0x029affff
0x02630000 - 0x02630fff
0x00610000 - 0x0064ffff
0x00110000 - 0x0014ffff
0x00040000 - 0x00041fff
0x00020000 - 0x0002ffff
0x00010000 - 0x0001ffff
0x00030000 - 0x00033fff
0x000e0000 - 0x000e1fff
0x00060000 - 0x000c6fff
0x00050000 - 0x00050fff
0x000d0000 - 0x000d6fff
0x000f0000 - 0x000fdfff
0x00100000 - 0x00100fff
0x004f0000 - 0x004fffff
0x00320000 - 0x00420fff
0x00250000 - 0x00317fff
0x00150000 - 0x0024ffff
0x00440000 - 0x004bffff
0x00430000 - 0x00430fff
0x004d0000 - 0x004d1fff
0x004c0000 - 0x004c0fff
0x004e0000 - 0x004e0fff
0x00560000 - 0x0059ffff
0x00520000 - 0x00530fff
0x00500000 - 0x00510fff
0x00540000 - 0x00550fff
0x005c0000 - 0x005c6fff
0x005a0000 - 0x005b0fff
0x005d0000 - 0x0060ffff
0x023d0000 - 0x0240ffff
0x02380000 - 0x0238ffff
0x00e90000 - 0x014a6fff
0x00d30000 - 0x00d60fff
0x00850000 - 0x00c4ffff
0x00650000 - 0x00844fff
0x00c50000 - 0x00d2efff
0x00e70000 - 0x00e7ffff
0x00d70000 - 0x00e6ffff
0x00e80000 - 0x00e82fff
0x020b0000 - 0x0237efff
0x014b0000 - 0x020affff
0x023a0000 - 0x023a1fff
0x02390000 - 0x02390fff
0x023b0000 - 0x023b0fff
0x023c0000 - 0x023c0fff
0x02540000 - 0x0257ffff
0x02470000 - 0x02470fff
0x02440000 - 0x0244ffff
0x02420000 - 0x0243ffff
0x02410000 - 0x02414fff
0x02460000 - 0x02460fff
0x02450000 - 0x02450fff
0x02510000 - 0x02510fff
0x02490000 - 0x024cffff
0x02480000 - 0x02480fff
0x02520000 - 0x02520fff
0x02530000 - 0x02530fff
0x02600000 - 0x02600fff
0x025d0000 - 0x025d0fff
0x02590000 - 0x025cffff
0x02580000 - 0x02580fff
0x025f0000 - 0x025f0fff
0x025e0000 - 0x025e0fff
0x02620000 - 0x02620fff
0x02610000 - 0x02610fff
VAD Tree is useful and is used by many volatility commands
Contains injected code
Command histories with cmdscan
Can find executable images (“MZ”)
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 pslist | grep explore
Volatility Foundation Volatility Framework 2.4
0x8625b420 explorer.exe 352 1848 43 904 1 0 2013-10-15 18:45:59 UTC+0000
[root&windows]#volatility -f Win7.bin --profile=Win7SP0x86 -p 352 volshell
Volatility Foundation Volatility Framework 2.4
Current context: explorer.exe @ 0x8625b420, pid=352, ppid=1848 DTB=0x3ecec3e0
Welcome to volshell! Current memory image is:
file:///root/amf/windows/Win7.bin
To get help, type 'hh()'
>>> process=proc()
>>> process_space = process.get_process_address_space()
>>> for vad in process.VadRoot.traverse():
... data = process_space.read(vad.Start, 1024)
... if data:
... found = data.find("MZ")
... if found != -1:
... print"Found signature in VAD", hex(vad.Start)
...
Found signature in VAD 0x6f670000L
Found signature in VAD 0x990000L
Found signature in VAD 0x1e30000L
Found signature in VAD 0x3520000L
Found signature in VAD 0x3dd0000L
Found signature in VAD 0x3e20000L
Found signature in VAD 0x3ea0000L
Found signature in VAD 0x50d0000L
Found signature in VAD 0x5470000L
Found signature in VAD 0x6aaa0000L
Found signature in VAD 0x633f0000L
Found signature in VAD 0x75c0000L
Found signature in VAD 0x70c0000L
Found signature in VAD 0x7000000L
Found signature in VAD 0x62b90000L
Found signature in VAD 0x8cd0000L
Found signature in VAD 0x63140000L
Found signature in VAD 0x63380000L
Multiply address by size of page to get Vaddr
Finding
| Table of Contents | t |
|---|---|
| Exposé | ESC |
| Full screen slides | e |
| Presenter View | p |
| Source Files | s |
| Slide Numbers | n |
| Toggle screen blanking | b |
| Show/hide slide context | c |
| Notes | 2 |
| Help | h |


List Adoptions
You can find your package in /packages/adoptions
MEAN versions prior to 0.3.2 will be in /node_modules/adoptions


Events
Direct Subclass:
Backbone.Events - Provides the ability to bind and trigger custom named events. (http://backbonejs.org/#Events)
An important consideration of Backbone-ES6 is that Events are no longer an object literal, but a full blown ES6 class. This is the biggest potential breaking change for Backbone-ES6 when compared to the original Backbone.
Previously Events could be mixed in to any object. This is no longer possible with Backbone-ES6 when working from source or the bundled versions. It should be noted that Events is also no longer mixed into Backbone itself, so Backbone is not a Global events instance.
Catalog of Events:
Here's the complete list of built-in Backbone events, with arguments. You're also free to trigger your own events on
Models, Collections and Views as you see fit.
"add" (model, collection, options) — when a model is added to a collection.
"remove" (model, collection, options) — when a model is removed from a collection.
"update" (collection, options) — single event triggered after any number of models have been added or removed from a
collection.
"reset" (collection, options) — when the collection's entire contents have been replaced.
"sort" (collection, options) — when the collection has been re-sorted.
"change" (model, options) — when a model's attributes have changed.
"change:[attribute]" (model, value, options) — when a specific attribute has been updated.
"destroy" (model, collection, options) — when a model is destroyed.
"request" (model_or_collection, xhr, options) — when a model or collection has started a request to the server.
"sync" (model_or_collection, resp, options) — when a model or collection has been successfully synced with the
server.
"error" (model_or_collection, resp, options) — when a model's or collection's request to the server has failed.
"invalid" (model, error, options) — when a model's validation fails on the client.
"route:[name]" (params) — Fired by the router when a specific route is matched.
"route" (route, params) — Fired by the router when any route has been matched.
"route" (router, route, params) — Fired by history when any route has been matched.
"all" — this special event fires for any triggered event, passing the event name as the first argument.
Generally speaking, when calling a function that emits an event (model.set, collection.add, and so on...), if you'd like to prevent the event from being triggered, you may pass {silent: true} as an option. Note that this is rarely, perhaps even never, a good idea. Passing through a specific flag in the options for your event callback to look at, and choose to ignore, will usually work out better.
Example:
This no longer works:
let object = {};
_.extend(object, Backbone.Events);
object.on('expand', function(){ alert('expanded'); });
object.trigger('expand');
One must now use ES6 extends syntax for Backbone.Events when inheriting events functionality:
import Backbone from 'backbone';
class MyClass extends Backbone.Events {}
A nice ES6 pattern for creating a named events instance is the following:
import Backbone from 'backbone';
export default new Backbone.Events();
This module / Events instance can then be imported by full path or if consuming in a modular runtime by creating
a mapped path to it.
Constructor Summary
| Public Constructor | ||
| public |
|
Method Summary
| Public Methods | ||
| public |
bind(): * Delegates to `on`.
|
|
| public |
Tell an object to listen to a particular event on an other object.
|
|
| public |
listenToOnce(obj: object, name: string, callback: function): Events Just like `listenTo`, but causes the bound callback to fire only once before being removed.
|
|
| public |
Remove a previously-bound callback function from an object.
|
|
| public |
Bind a callback function to an object.
|
|
| public |
Just like `on`, but causes the bound callback to fire only once before being removed.
|
|
| public |
stopListening(obj: object, name: string, callback: function): Events Tell an object to stop listening to events.
|
|
| public |
Trigger callbacks for the given event, or space-delimited list of events.
|
|
| public |
unbind(): * Delegates to `off`.
|
Public Constructors
public constructor source
Public Methods
public listenTo(obj: object, name: string, callback: function): Events source
Tell an object to listen to a particular event on an other object. The advantage of using this form, instead of other.on(event, callback, object), is that listenTo allows the object to keep track of the events, and they can be removed all at once later on. The callback will always be called with object as context.
Example:
view.listenTo(model, 'change', view.render);
public listenToOnce(obj: object, name: string, callback: function): Events source
Just like listenTo
, but causes the bound callback to fire only once before being removed.
public off(name: string, callback: function, context: object): Events source
Remove a previously-bound callback function from an object. If no context is specified, all of the versions of the callback with different contexts will be removed. If no callback is specified, all callbacks for the event will be removed. If no event is specified, callbacks for all events will be removed.
Note that calling model.off(), for example, will indeed remove all events on the model — including events that Backbone uses for internal bookkeeping.
Example:
// Removes just the `onChange` callback.
object.off("change", onChange);
// Removes all "change" callbacks.
object.off("change");
// Removes the `onChange` callback for all events.
object.off(null, onChange);
// Removes all callbacks for `context` for all events.
object.off(null, null, context);
// Removes all callbacks on `object`.
object.off();
public on(name: string, callback: function, context: object): * source
Bind a callback function to an object. The callback will be invoked whenever the event is fired. If you have a large number of different events on a page, the convention is to use colons to namespace them: "poll:start", or "change:selection".
To supply a context value for this when the callback is invoked, pass the optional last argument: model.on('change', this.render, this) or model.on({change: this.render}, this).
Return:
| * |
Example:
The event string may also be a space-delimited list of several events...
book.on("change:title change:author", ...);
Callbacks bound to the special "all" event will be triggered when any event occurs, and are passed the name of
the event as the first argument. For example, to proxy all events from one object to another:
proxy.on("all", function(eventName) {
object.trigger(eventName);
});
All Backbone event methods also support an event map syntax, as an alternative to positional arguments:
book.on({
"change:author": authorPane.update,
"change:title change:subtitle": titleView.update,
"destroy": bookView.remove
});
public once(name: string, callback: function, context: object): * source
Just like on
, but causes the bound callback to fire only once before being removed. Handy for saying "the next
time that X happens, do this". When multiple events are passed in using the space separated syntax, the event
will fire once for every event you passed in, not once for a combination of all events
Return:
| * |
public stopListening(obj: object, name: string, callback: function): Events source
Tell an object to stop listening to events. Either call stopListening with no arguments to have the object remove all of its registered callbacks ... or be more precise by telling it to remove just the events it's listening to on a specific object, or a specific event, or just a specific callback.
Example:
view.stopListening();
view.stopListening(model);


Roadmap #
导读： 此计划路线图旨在对Flink社区当前正在进行的项目进行总结摘要，并对这些项目根据工作内容进行分组。 鉴于Flink每个分组中现在都有非常多的工作正在进行，我们希望此计划书有助于用户和贡献者理解每个项目乃至于整个Flink的未来方向。 这个计划书既涵盖刚起步的项目，也包括接近完成的项目，这样可以使大家更好地了解各项目的发展方向以及当前的进展。
关于各个项目更多的细节讨论和其他较小的改动记录在 FLIPs 。
路线图会不断更新。一旦达成共识，新的特性和工作都会添加到路线图中。 这里的共识是指这些特性和工作将来确定会发生，以及这些工作对于用户来说大致是什么样的。
Last Update: 2022-11-14
功能图谱 #
功能图谱旨在为用户提供有关功能成熟度方面的引导，包括哪些功能正在积极推进，哪些功能即将寿终正寝。<EMAIL_ADDRESS>。
功能阶段 #
- MVP: 可以了解一下这个功能，也许在将来对您有所帮助。
- Beta: 您可以从中受益，但是您在使用之前应该仔细评估该功能。
- Ready and Evolving: 生产可用，但是请注意，将来在升级Flink时，可能需要对您的应用和设置进行一些调整。
- Stable: 可以在生产中稳定不受限制地使用。
- Reaching End-of-Life: 仍然可以稳定使用，但请考虑替代方法。对于新的长期项目而言，不建议使用。
- Deprecated: 不推荐使用，您需要开始寻找替代产品。
Unified Analytics: Where Batch and Streaming come Together; SQL and beyond. #
Flink is a streaming data system in its core, that executes “batch as a special case of streaming”. Efficient execution of batch jobs is powerful in its own right; but even more so, batch processing capabilities (efficient processing of bounded streams) open the way for a seamless unification of batch and streaming applications.
Unified streaming/batch up-levels the streaming data paradigm: It gives users consistent semantics across their real-time and lag-time applications. Furthermore, streaming applications often need to be complemented by batch (bounded stream) processing, for example when reprocessing data after bugs or data quality issues, or when bootstrapping new applications. A unified API and system make this much easier.
A unified SQL Platform #
The community has been building Flink to a powerful basis for a unified (batch and streaming) SQL analytics platform, and is continuing to do so.
SQL has very strong cross-batch-streaming semantics, allowing users to use the same queries for ad-hoc analytics and as continuous queries. Flink already contains an efficient unified query engine, and a wide set of integrations. With user feedback, those are continuously improved.
Going Beyond a SQL Stream/Batch Processing Engine
- To extend the capability of a pure stream processor and make Flink ready for future use cases, FLIP-188 has been announced adding built in dynamic table storage.
- The experience of updating Flink SQL based jobs has been rather cumbersome as it could have lead to new job graphs making restoring from savepoints/checkpoints impossible. FLIP-190 that already has been shipped as MVP is targeting this.
Platform Infrastructure
- After FLIP-163 the community is working again on a set of SQL Client usability improvements (FLIP-189) which is aiming at improving the user experience, when using the SQL client.
Support for Common Languages, Formats, Catalogs
- With FLIP-216 there’s now the initiative to introduce pluggable dialects on the example of the Hive connector. Including so many dependencies to make dialects work has lead to an overhead for contributors and users.
Flink has a broad SQL coverage for batch (full TPC-DS support) and a state-of-the-art set of supported operations in streaming. There is continuous effort to add more functions and cover more SQL operations.
Deep Batch / Streaming Unification for the DataStream API #
The DataStream API is Flink’s physical API, for use cases where users need very explicit control over data types, streams, state, and time. This API is evolving to support efficient batch execution on bounded data.
DataStream API executes the same dataflow shape in batch as in streaming, keeping the same operators. That way users keep the same level of control over the dataflow, and our goal is to mix and switch between batch/streaming execution in the future to make it a seamless experience.
Unified Sources and Sinks
-
The first APIs and implementations of sources were specific to either streaming programs in the DataStream API (SourceFunction), or to batch programs in the DataSet API (InputFormat).
In this effort, we are creating sources that work across batch and streaming execution. The aim is to give users a consistent experience across both modes, and to allow them to easily switch between streaming and batch execution for their unbounded and bounded streaming applications. The interface for this New Source API is done and available, and we are working on migrating more source connectors to this new model, see FLIP-27.
-
Similar to the sources, the original sink APIs are also specific to streaming (SinkFunction) and batch (OutputFormat) APIs and execution.
We have introduced a new API for sinks that consistently handles result writing and committing (Transactions) across batch and streaming. The first iteration of the API exists, and we are porting sinks and refining the API in the process. See FLIP-143.
Applications vs. Clusters; “Flink as a Library” #
The goal of these efforts is to make it feel natural to deploy (long running streaming) Flink applications. Instead of starting a cluster and submitting a job to that cluster, these efforts support deploying a streaming job as a self contained application.
For example as a simple Kubernetes deployment; deployed and scaled like a regular application without extra workflows.
- There is currently a Kubernetes Operator being developed by the community. See FLIP-212.
Performance #
Continuous work to keep improving performance and recovery speed.
Faster Checkpoints and Recovery #
The community is continuously working on improving checkpointing and recovery speed. Checkpoints and recovery are stable and have been a reliable workhorse for years. We are still trying to make it faster, more predictable, and to remove some confusions and inflexibility in some areas.
- FLIP-183 is targeting size of checkpoints by debloating the buffers. A first beta is already available.
- With FLIP-151 there is an ongoing effort to implement a heap based state backend.
Apache Flink as part of an ever evolving data ecosystem #
There is almost no use case in which Apache Flink is used on its own. It has established itself as part of many data related reference architectures. In fact you’ll find the squirrel logo covering several aspects.
The community has added a lot of connectors and formats. With the already mentioned FLIP-27 and FLIP-143 a new default for connectors has been established.
- There are efforts to revise the formats API with FLIP-219
- There is ongoing work on new connectors (e.g. Pinot)
- Connectors will be hosted in an external repository going forward. See the ML thread
The Flink community has removed Gelly, it’s old graph-processing library.
Documentation #
There are various dedicated efforts to simplify the maintenance and structure (more intuitive navigation/reading) of the documentation.
Flink Kubernetes Operator #
Flink Kubernetes Operator 项目拥有自己的路线图，您可以在它的说明文档下面看到社区即将开展的工作。
Flink Table Store #
The Flink Table Store subproject has its own roadmap under the documentation.